diff --git a/_archive/release-notes/release-notes-202212.0/security-release-notes-202212.0.md b/_archive/release-notes/release-notes-202212.0/security-release-notes-202212.0.md
index 050e7456f94..e47bd5740c2 100644
--- a/_archive/release-notes/release-notes-202212.0/security-release-notes-202212.0.md
+++ b/_archive/release-notes/release-notes-202212.0/security-release-notes-202212.0.md
@@ -60,7 +60,7 @@ spryker/twig (3.17.0 or earlier)
## Missing validation of the wishlist name on adding an item
-Due to the way the characters are handled, it was possible to abuse the name in a way that the constructed URL linked to another resource of the shop instead of the wishlist.
+Because of the way the characters are handled, it was possible to abuse the name in a way that the constructed URL linked to another resource of the shop instead of the wishlist.
**Changes:**
Wishlist module:
@@ -330,7 +330,7 @@ composer update codeception/codeception
Make sure that for the codeception/codeception module, the current version is equal to or later than 4.1.22.
## Known vulnerabilities in frontend dependencies
-- The datatables.net package is vulnerable to Prototype Pollution due to an incomplete fix.
+- The datatables.net package is vulnerable to Prototype Pollution because of an incomplete fix.
- Known Regular Expression Denial of Service (ReDoS) vulnerabilities in the hosted-git-info package.
- Known vulnerabilities in the lodash package (Command Injection, ReDoS, Prototype Pollution).
- Known vulnerabilities in the ssri package (ReDoS).
diff --git a/_data/sidebars/about_all_sidebar.yml b/_data/sidebars/about_all_sidebar.yml
index a720602855f..4c6ce3c49ab 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: Security release notes 202412.0
+ url: /docs/about/all/releases/security-release-notes-202412.0.html
- title: Release notes 202410.0
url: /docs/about/all/releases/release-notes-202410.0.html
- title: Security release notes 202409.0
diff --git a/_data/sidebars/ca_dev_sidebar.yml b/_data/sidebars/ca_dev_sidebar.yml
index 0045b08fe7f..37feda18228 100644
--- a/_data/sidebars/ca_dev_sidebar.yml
+++ b/_data/sidebars/ca_dev_sidebar.yml
@@ -135,7 +135,7 @@ entries:
nested:
- title: Assets, logs, or pipelines are not visible in AWS Management Console
url: /docs/ca/dev/troubleshooting/troubleshooting-deployment-issues/assets-logs-or-pipelines-are-not-visible-in-aws-management-console.html
- - title: Deployment fails due to a failed docker authentication
+ - title: Deployment fails because of a failed docker authentication
url: /docs/ca/dev/troubleshooting/troubleshooting-deployment-issues/deployment-fails-due-to-a-failed-docker-authentication.html
- title: Jenkins does not restart
url: /docs/ca/dev/troubleshooting/troubleshooting-deployment-issues/jenkins-does-not-restart.html
diff --git a/_data/sidebars/dg_dev_sidebar.yml b/_data/sidebars/dg_dev_sidebar.yml
index 4fb226f82db..fc5adec1cdf 100644
--- a/_data/sidebars/dg_dev_sidebar.yml
+++ b/_data/sidebars/dg_dev_sidebar.yml
@@ -1620,8 +1620,23 @@ entries:
url: /docs/dg/dev/acp/integrate-acp-payment-apps-with-spryker-oms-configuration.html
- title: Retaining ACP apps when running destructive deployments
url: /docs/dg/dev/acp/retaining-acp-apps-when-running-destructive-deployments.html
- - title: APIs and overview diagrams for payment service providers
- url: /docs/dg/dev/acp/apis-and-overview-diagrams-for-payment-service-providers.html
+ - title: APIs and flows for payment service providers
+ url: /docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/apis-and-flows-for-payment-service-providers.html
+ nested:
+ - title: Asynchronous API for payment service providers
+ url: /docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/asynchronous-api-for-payment-service-providers.html
+ - title: Configure and disconnect flows for payment service providers
+ url: /docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/configure-and-disconnect-flows-for-payment-service-providers.html
+ - title: Headless express checkout payment flow for payment service providers
+ url: /docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/headless-express-checkout-payment-flow-for-payment-service-providers.html
+ - title: Headless payment flow for payment service providers
+ url: /docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/headless-payment-flow-for-payment-service-providers.html
+ - title: Hosted payment page flow for payment service providers
+ url: /docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/hosted-payment-page-flow-for-payment-service-providers.html
+ - title: OMS payment flow for payment service providers
+ url: /docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/oms-payment-flow-for-payment-service-providers.html
+ - title: Synchronous API for payment service providers
+ url: /docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/synchronous-api-for-payment-service-providers.html
# - title: Develop an app
# url: /docs/dg/dev/acp/develop-an-app/develop-an-app.html
# nested:
diff --git a/_data/sidebars/pbc_all_sidebar.yml b/_data/sidebars/pbc_all_sidebar.yml
index 161d775e761..359f59aee44 100644
--- a/_data/sidebars/pbc_all_sidebar.yml
+++ b/_data/sidebars/pbc_all_sidebar.yml
@@ -2303,20 +2303,12 @@ entries:
url: /docs/pbc/all/payment-service-provider/base-shop/payments-feature-overview.html
- title: Install and upgrade
nested:
- - title: Install features
- nested:
- - title: Payments
- url: /docs/pbc/all/payment-service-provider/base-shop/install-and-upgrade/install-the-payments-feature.html
-
- - title: Install Glue APIs
- nested:
- - title: Payments
- url: /docs/pbc/all/payment-service-provider/base-shop/install-and-upgrade/install-the-payments-glue-api.html
-
- - title: Upgrade modules
- nested:
- - title: Payment
- url: /docs/pbc/all/payment-service-provider/base-shop/install-and-upgrade/upgrade-the-payment-module.html
+ - title: Install the Payments feature
+ url: /docs/pbc/all/payment-service-provider/base-shop/install-and-upgrade/install-the-payments-feature.html
+ - title: Install the Payments Glue API
+ url: /docs/pbc/all/payment-service-provider/base-shop/install-and-upgrade/install-the-payments-glue-api.html
+ - title: Upgrade the Payment module
+ url: /docs/pbc/all/payment-service-provider/base-shop/install-and-upgrade/upgrade-the-payment-module.html
- title: Import and export data
url: /docs/pbc/all/payment-service-provider/base-shop/import-and-export-data/payment-service-provider-data-import-and-export.html
@@ -2334,12 +2326,20 @@ entries:
- title: View payment methods
url: /docs/pbc/all/payment-service-provider/base-shop/manage-in-the-back-office/view-payment-methods.html
+ - title: Define return URLs for payments
+ url: /docs/pbc/all/payment-service-provider/base-shop/define-return-urls-for-payments.html
+ include_versions:
+ - "202410.0"
- title: Debug payment integrations locally
url: /docs/pbc/all/payment-service-provider/base-shop/debug-payment-integrations-locally.html
- title: Hydrate payment methods for an order
url: /docs/pbc/all/payment-service-provider/base-shop/hydrate-payment-methods-for-an-order.html
- title: Interact with third party payment providers using Glue API
url: /docs/pbc/all/payment-service-provider/base-shop/interact-with-third-party-payment-providers-using-glue-api.html
+ - title: Payment method strategies
+ url: /docs/pbc/all/payment-service-provider/base-shop/payment-method-strategies.html
+ include_versions:
+ - "202410.0"
- title: Retrieve and use payment details from third-party PSPs
url: /docs/pbc/all/payment-service-provider/base-shop/retrieve-and-use-payment-details-from-third-party-psps.html
- title: "Payments feature: Domain model and relationships"
@@ -2426,6 +2426,14 @@ entries:
url: /docs/pbc/all/payment-service-provider/base-shop/third-party-integrations/payone/app-composition-platform-integration/configure-payone.html
- title: Disconnect Payone
url: /docs/pbc/all/payment-service-provider/base-shop/third-party-integrations/payone/app-composition-platform-integration/disconnect-payone.html
+ - title: Payment method flows
+ nested:
+ - title: PayOne Credit Card payment flow
+ url: /docs/pbc/all/payment-service-provider/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/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/base-shop/third-party-integrations/payone/app-composition-platform-integration/payment-method-flows/payone-paypal-payment-flow.html
- title: Manual integration
url: /docs/pbc/all/payment-service-provider/base-shop/third-party-integrations/payone/manual-integration/payone-manual-integration.html
@@ -2596,10 +2604,25 @@ entries:
url: /docs/pbc/all/payment-service-provider/base-shop/third-party-integrations/stripe/install-and-configure-stripe-prerequisites.html
- title: Connect and configure
url: /docs/pbc/all/payment-service-provider/base-shop/third-party-integrations/stripe/connect-and-configure-stripe.html
- - title: Project guidelines
- url: /docs/pbc/all/payment-service-provider/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe.html
- title: Disconnect
url: /docs/pbc/all/payment-service-provider/base-shop/third-party-integrations/stripe/disconnect-stripe.html
+ - title: Project guidelines
+ url: /docs/pbc/all/payment-service-provider/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/project-guidelines-for-stripe.html
+ include_versions:
+ - "202410.0"
+ nested:
+ - title: Embed the Stripe payment page as an iframe
+ url: /docs/pbc/all/payment-service-provider/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/embed-the-stripe-payment-page-as-an-iframe.html
+ - title: Implement Stripe checkout as a hosted payment page
+ url: /docs/pbc/all/payment-service-provider/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/project-prerequisites-for-implementing-Stripe-checkout-as-a-hosted-payment-page.html
+ - title: OMS configuration for Stripe
+ url: /docs/pbc/all/payment-service-provider/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/oms-configuration-for-stripe.html
+ - title: Processing refunds with Stripe
+ url: /docs/pbc/all/payment-service-provider/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/processing-refunds-with-stripe.html
+ - title: Sending additional data to Stripe
+ url: /docs/pbc/all/payment-service-provider/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/sending-additional-data-to-stripe.html
+ - title: Stripe checkout with third-party frontends
+ url: /docs/pbc/all/payment-service-provider/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/stripe-checkout-with-third-party-frontends.html
- title: Unzer
url: /docs/pbc/all/payment-service-provider/base-shop/third-party-integrations/unzer/unzer.html
diff --git a/_drafts/deprecated-devvm/troubleshooting-spryker-in-vagrant-issues/macos-issues/mac-osx-installation-fails-or-project-folder-can-not-be-mounted-due-to-sip.md b/_drafts/deprecated-devvm/troubleshooting-spryker-in-vagrant-issues/macos-issues/mac-osx-installation-fails-or-project-folder-can-not-be-mounted-due-to-sip.md
index 92ac6ab5715..5ee07635002 100644
--- a/_drafts/deprecated-devvm/troubleshooting-spryker-in-vagrant-issues/macos-issues/mac-osx-installation-fails-or-project-folder-can-not-be-mounted-due-to-sip.md
+++ b/_drafts/deprecated-devvm/troubleshooting-spryker-in-vagrant-issues/macos-issues/mac-osx-installation-fails-or-project-folder-can-not-be-mounted-due-to-sip.md
@@ -1,6 +1,6 @@
---
-title: Mac OSX - Installation fails or project folder can not be mounted due to SIP
-description: Learn how to fix the issue when installation fails on MacOS or project folder can not be mounted due to SIP
+title: Mac OSX - Installation fails or project folder can not be mounted because of SIP
+description: Learn how to fix the issue when installation fails on MacOS or project folder can not be mounted because of SIP
last_updated: Jun 16, 2021
template: troubleshooting-guide-template
originalLink: https://documentation.spryker.com/2021080/docs/mac-osx-installation-fails-or-project-folder-can-not-be-mounted-due-to-sip
@@ -21,7 +21,7 @@ related:
## Description
-Sometimes, installation fails or project folder can not be mounted due to SIP on MacOS.
+Sometimes, installation fails or project folder can not be mounted because of SIP on MacOS.
## Cause
diff --git a/_drafts/deprecated-devvm/troubleshooting-spryker-in-vagrant-issues/macos-issues/mac-osx-iterm2-locale-error.md b/_drafts/deprecated-devvm/troubleshooting-spryker-in-vagrant-issues/macos-issues/mac-osx-iterm2-locale-error.md
index 17308ba628b..6905a50891e 100644
--- a/_drafts/deprecated-devvm/troubleshooting-spryker-in-vagrant-issues/macos-issues/mac-osx-iterm2-locale-error.md
+++ b/_drafts/deprecated-devvm/troubleshooting-spryker-in-vagrant-issues/macos-issues/mac-osx-iterm2-locale-error.md
@@ -13,7 +13,7 @@ redirect_from:
- /v6/docs/mac-osx-iterm2-locale-error
- /v6/docs/en/mac-osx-iterm2-locale-error
related:
- - title: Mac OSX - Installation fails or project folder can not be mounted due to SIP
+ - title: Mac OSX - Installation fails or project folder can not be mounted because of SIP
link: docs/scos/dev/troubleshooting/troubleshooting-spryker-in-vagrant-issues/macos-issues/mac-osx-installation-fails-or-project-folder-can-not-be-mounted-due-to-sip.html
- title: Mac OSX - Wrong curl version error
link: docs/scos/dev/troubleshooting/troubleshooting-spryker-in-vagrant-issues/macos-issues/mac-osx-wrong-curl-version-error.html
diff --git a/_drafts/deprecated-devvm/troubleshooting-spryker-in-vagrant-issues/macos-issues/mac-osx-wrong-curl-version-error.md b/_drafts/deprecated-devvm/troubleshooting-spryker-in-vagrant-issues/macos-issues/mac-osx-wrong-curl-version-error.md
index 7846abf857d..3c180d98a2e 100644
--- a/_drafts/deprecated-devvm/troubleshooting-spryker-in-vagrant-issues/macos-issues/mac-osx-wrong-curl-version-error.md
+++ b/_drafts/deprecated-devvm/troubleshooting-spryker-in-vagrant-issues/macos-issues/mac-osx-wrong-curl-version-error.md
@@ -13,7 +13,7 @@ redirect_from:
- /v6/docs/mac-osx-wrong-curl-version-error
- /v6/docs/en/mac-osx-wrong-curl-version-error
related:
- - title: Mac OSX - Installation fails or project folder can not be mounted due to SIP
+ - title: Mac OSX - Installation fails or project folder can not be mounted because of SIP
link: docs/scos/dev/troubleshooting/troubleshooting-spryker-in-vagrant-issues/macos-issues/mac-osx-installation-fails-or-project-folder-can-not-be-mounted-due-to-sip.html
- title: Mac OSX - iterm2 (locale error)
link: docs/scos/dev/troubleshooting/troubleshooting-spryker-in-vagrant-issues/macos-issues/mac-osx-iterm2-locale-error.html
diff --git a/_drafts/deprecated-devvm/troubleshooting-spryker-in-vagrant-issues/troubleshooting-spryker-in-vagrant-installation-issues.md b/_drafts/deprecated-devvm/troubleshooting-spryker-in-vagrant-issues/troubleshooting-spryker-in-vagrant-installation-issues.md
index f41e6ac36d7..3780e48a04a 100644
--- a/_drafts/deprecated-devvm/troubleshooting-spryker-in-vagrant-issues/troubleshooting-spryker-in-vagrant-installation-issues.md
+++ b/_drafts/deprecated-devvm/troubleshooting-spryker-in-vagrant-issues/troubleshooting-spryker-in-vagrant-installation-issues.md
@@ -36,7 +36,7 @@ When you [install Spryker with Vagrant](/docs/dg/dev/set-up-spryker-locally/inst
MacOS issues:
* [Mac OSX: iterm2 (locale error)](/docs/dg/dev/troubleshooting/troubleshooting-spryker-in-vagrant-issues/macos-issues/mac-osx-iterm2-locale-error.html)
- * [Mac OSX: Installation fails or project folder can not be mounted due to SIP](/docs/dg/dev/troubleshooting/troubleshooting-spryker-in-vagrant-issues/macos-issues/mac-osx-installation-fails-or-project-folder-can-not-be-mounted-due-to-sip.html)
+ * [Mac OSX: Installation fails or project folder can not be mounted because of SIP](/docs/dg/dev/troubleshooting/troubleshooting-spryker-in-vagrant-issues/macos-issues/mac-osx-installation-fails-or-project-folder-can-not-be-mounted-due-to-sip.html)
* [Mac OSX: Wrong curl version error](/docs/dg/dev/troubleshooting/troubleshooting-spryker-in-vagrant-issues/macos-issues/mac-osx-wrong-curl-version-error.html)
Windows issues:
diff --git a/_drafts/docs-updates.md b/_drafts/docs-updates.md
index 1a9bc951a1d..6179031074f 100644
--- a/_drafts/docs-updates.md
+++ b/_drafts/docs-updates.md
@@ -66,7 +66,7 @@ In February 2024, we have added and updated the following pages:
- [Merchant Portal Agent Assist feature overview](/docs/pbc/all/user-management/202404.0/marketplace/merchant-portal-agent-assist-feature-overview.html).
- [Finilizing upgrades](/docs/ca/devscu/finilizing-upgrades.html): Learn how you can make sure everything works correctly after upgrading a module.
- [Manage Stripe configurations in the ACP catalog](/docs/pbc/all/payment-service-provider/202311.0/base-shop/third-party-integrations/stripe/connect-and-configure-stripe.html).
-- [Project guidelines for the Stripe app](/docs/pbc/all/payment-service-provider/202311.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe.html).
+- [Project guidelines for the Stripe app](/docs/pbc/all/payment-service-provider/202311.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/project-guidelines-for-stripe.html).
### Updated pages
diff --git a/_drafts/drafts-dev/multistore-infrastructure-options.md b/_drafts/drafts-dev/multistore-infrastructure-options.md
index d47f7a33cb7..d86a65663a1 100644
--- a/_drafts/drafts-dev/multistore-infrastructure-options.md
+++ b/_drafts/drafts-dev/multistore-infrastructure-options.md
@@ -12,7 +12,7 @@ Multi-store setup 1: Database, search engine, and key-value storage are shared b
![multi-store setup 1](https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/dev/tutorials-and-howtos/howtos/how-to-set-up-multiple-stores.md/multi-store-setup-configuration-option-1.png)
-Due to the resources being shared, the infrastructure costs are low. This setup is most suitable for B2C projects with low traffic and a small amount of data like products and prices.
+Because of the resources being shared, the infrastructure costs are low. This setup is most suitable for B2C projects with low traffic and a small amount of data like products and prices.
Multi-store setup 2: Each store has a dedicated search engine and key-value storage while the database is shared.
diff --git a/_drafts/for-commerce-quest/faq.md b/_drafts/for-commerce-quest/faq.md
index 0317ef69938..26ec9bb2f7c 100644
--- a/_drafts/for-commerce-quest/faq.md
+++ b/_drafts/for-commerce-quest/faq.md
@@ -43,7 +43,7 @@ Capabilities are groups of features that are composed of modules, such as a cart
## How expensive is an average Spryker project?
-The price depends on the number of apps and on the type of app you are going to build. As a rule of thumb, it is possible to build and deploy a single slimline app for most standard use cases within a few weeks—for example, a voice app for Alexa or a simple chatbot. The aim is to keep each app simple and relevant and to lock away as much of it in the OS as possible. This means that building a standard, run-of-the-mill webshop with Spryker does not take longer than with other systems. Spryker's real strength, however, is the variety of apps. So, building a B2C case with 4-5 apps (for example, a shop, a web app, a chatbot, voice, and POS) using a standard system would be complex, very expensive, and frustratingly slow undertaking. Unlike standard systems, such a use case is part of Spryker's DNA. Besides, in IoT scenarios, Spryker is actually better than most of the other solutions due to the absence of dedicated technology.
+The price depends on the number of apps and on the type of app you are going to build. As a rule of thumb, it is possible to build and deploy a single slimline app for most standard use cases within a few weeks—for example, a voice app for Alexa or a simple chatbot. The aim is to keep each app simple and relevant and to lock away as much of it in the OS as possible. This means that building a standard, run-of-the-mill webshop with Spryker does not take longer than with other systems. Spryker's real strength, however, is the variety of apps. So, building a B2C case with 4-5 apps (for example, a shop, a web app, a chatbot, voice, and POS) using a standard system would be complex, very expensive, and frustratingly slow undertaking. Unlike standard systems, such a use case is part of Spryker's DNA. Besides, in IoT scenarios, Spryker is actually better than most of the other solutions because of the absence of dedicated technology.
## How might an MVP look like?
diff --git a/_includes/dg/overriding-webpack-js-scss-for-zed-on-project-level.md b/_includes/dg/overriding-webpack-js-scss-for-zed-on-project-level.md
index 070667a4bc9..8cb212ea8b6 100644
--- a/_includes/dg/overriding-webpack-js-scss-for-zed-on-project-level.md
+++ b/_includes/dg/overriding-webpack-js-scss-for-zed-on-project-level.md
@@ -44,7 +44,7 @@ oryxForZed.getConfiguration(myCustomZedSettings)
```
The `oryx-for-zed` building settings must be expanded with a path to ZED modules on the project level (`entry.dirs`).
-Due to `mergeWithStrategy`, the default config with core paths is expanded with a path to the project level.
+Because of `mergeWithStrategy`, the default config with core paths is expanded with a path to the project level.
{% info_block infoBox %}
diff --git a/_includes/pbc/all/install-features/202307.0/install-dynamic-multistore.md b/_includes/pbc/all/install-features/202307.0/install-dynamic-multistore.md
index 60231c68a8f..4f0646e5af3 100644
--- a/_includes/pbc/all/install-features/202307.0/install-dynamic-multistore.md
+++ b/_includes/pbc/all/install-features/202307.0/install-dynamic-multistore.md
@@ -91,7 +91,7 @@ We recommend making de.mysprykershop.com a mirror of eu.mysprykershop.com to pre
2. Enable dynamic store feature
-Due to a change in the ideology with shifting to the region instead of store configuration for deploy, you need to change the deploy file to enable it.
+Because of a change in the ideology with shifting to the region instead of store configuration for deploy, you need to change the deploy file to enable it.
To use the new region configuration, create a new deployment file, such as `deploy.dynamic-store.yml` (or `deploy.dev.dynamic-store.yml` for development environment).
You can check example deploy file for EU region:
@@ -119,7 +119,7 @@ image:
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 due to their dynamic nature
+ # Stores MUST not be defined in the deploy file as it was before because of their dynamic nature
services:
mail:
sender:
diff --git a/_includes/pbc/all/install-features/202307.0/install-the-approval-process-feature.md b/_includes/pbc/all/install-features/202307.0/install-the-approval-process-feature.md
index 8aa896e550c..23d309371d7 100644
--- a/_includes/pbc/all/install-features/202307.0/install-the-approval-process-feature.md
+++ b/_includes/pbc/all/install-features/202307.0/install-the-approval-process-feature.md
@@ -139,9 +139,9 @@ 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, please 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 due to pending approval request.",en_US
+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 due to approver limit.",en_US
+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
diff --git a/_includes/pbc/all/install-features/202307.0/install-the-cms-feature.md b/_includes/pbc/all/install-features/202307.0/install-the-cms-feature.md
index 5b2a2c6d1ab..46524e3a960 100644
--- a/_includes/pbc/all/install-features/202307.0/install-the-cms-feature.md
+++ b/_includes/pbc/all/install-features/202307.0/install-the-cms-feature.md
@@ -779,7 +779,7 @@ cms-page--3,Placeholders Title & Content,1,1,1,/de/datenschutz,/en/privacy,Daten
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 due to 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.
"
+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.
"
```
diff --git a/_includes/pbc/all/install-features/202307.0/install-the-order-management-feature.md b/_includes/pbc/all/install-features/202307.0/install-the-order-management-feature.md
index 45e24eef709..d9a66b6470f 100644
--- a/_includes/pbc/all/install-features/202307.0/install-the-order-management-feature.md
+++ b/_includes/pbc/all/install-features/202307.0/install-the-order-management-feature.md
@@ -631,7 +631,7 @@ By default, in state machine names, the following applies:
```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 due to wrong item state.,en_US
+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
diff --git a/_includes/pbc/all/install-features/202307.0/install-the-persistent-cart-sharing-feature.md b/_includes/pbc/all/install-features/202307.0/install-the-persistent-cart-sharing-feature.md
index b4572a69b99..974f52ce762 100644
--- a/_includes/pbc/all/install-features/202307.0/install-the-persistent-cart-sharing-feature.md
+++ b/_includes/pbc/all/install-features/202307.0/install-the-persistent-cart-sharing-feature.md
@@ -292,6 +292,6 @@ Make sure, that when you're on a cart page, you can see the "Share Cart via Link
{% info_block warningBox "Verification" %}
-Login to Yves as Company User, add some product to the cart and go to the cart page. 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 due to some browser limitations). Copy the Cart Preview link and proceed with it. Make sure, that you are redirected to the Cart Preview page.
+Login to Yves as Company User, add some product to the cart and go to the cart page. 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/202307.0/install-the-product-bundles-cart-feature.md b/_includes/pbc/all/install-features/202307.0/install-the-product-bundles-cart-feature.md
index 434b47757ec..e909ff2abcf 100644
--- a/_includes/pbc/all/install-features/202307.0/install-the-product-bundles-cart-feature.md
+++ b/_includes/pbc/all/install-features/202307.0/install-the-product-bundles-cart-feature.md
@@ -55,7 +55,7 @@ Make sure that the item counter of the cart widget shows the correct number—bu
## 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 due to insufficient memory.
+experience a slow-down in the cart operations handling or even may 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:
diff --git a/_includes/pbc/all/install-features/202307.0/marketplace/install-the-merchant-switcher-feature.md b/_includes/pbc/all/install-features/202307.0/marketplace/install-the-merchant-switcher-feature.md
index 0787f2b817b..d21adcef1df 100644
--- a/_includes/pbc/all/install-features/202307.0/marketplace/install-the-merchant-switcher-feature.md
+++ b/_includes/pbc/all/install-features/202307.0/marketplace/install-the-merchant-switcher-feature.md
@@ -106,7 +106,7 @@ Append glossary according to your configuration:
**data/import/common/common/glossary.csv**
```yaml
-merchant_switcher.message,Switch from %currentMerchant% to %newMerchant%? Due to different availability, not all products may be added to your shopping cart.,en_US
+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
diff --git a/_includes/pbc/all/install-features/202311.0/install-dynamic-multistore.md b/_includes/pbc/all/install-features/202311.0/install-dynamic-multistore.md
index de67be7fe88..4acfb3afdd7 100644
--- a/_includes/pbc/all/install-features/202311.0/install-dynamic-multistore.md
+++ b/_includes/pbc/all/install-features/202311.0/install-dynamic-multistore.md
@@ -88,7 +88,7 @@ We recommend making de.mysprykershop.com a mirror of eu.mysprykershop.com to pre
2. Enable dynamic store feature
-Due to a change in the ideology with shifting to the region instead of store configuration for deploy, you need to change the deploy file to enable it.
+Because of a change in the ideology with shifting to the region instead of store configuration for deploy, you need to change the deploy file to enable it.
To use the new region configuration, create a new deployment file, such as `deploy.dynamic-store.yml` (or `deploy.dev.dynamic-store.yml` for development environment).
You can check example deploy file for EU region:
@@ -116,7 +116,7 @@ image:
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 due to their dynamic nature
+ # Stores MUST not be defined in the deploy file as it was before because of their dynamic nature
services:
mail:
sender:
diff --git a/_includes/pbc/all/install-features/202311.0/install-the-approval-process-feature.md b/_includes/pbc/all/install-features/202311.0/install-the-approval-process-feature.md
index 8aa896e550c..23d309371d7 100644
--- a/_includes/pbc/all/install-features/202311.0/install-the-approval-process-feature.md
+++ b/_includes/pbc/all/install-features/202311.0/install-the-approval-process-feature.md
@@ -139,9 +139,9 @@ 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, please 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 due to pending approval request.",en_US
+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 due to approver limit.",en_US
+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
diff --git a/_includes/pbc/all/install-features/202311.0/install-the-cms-feature.md b/_includes/pbc/all/install-features/202311.0/install-the-cms-feature.md
index 5b2a2c6d1ab..46524e3a960 100644
--- a/_includes/pbc/all/install-features/202311.0/install-the-cms-feature.md
+++ b/_includes/pbc/all/install-features/202311.0/install-the-cms-feature.md
@@ -779,7 +779,7 @@ cms-page--3,Placeholders Title & Content,1,1,1,/de/datenschutz,/en/privacy,Daten
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 due to 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.
"
+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.
"
```
diff --git a/_includes/pbc/all/install-features/202311.0/install-the-order-management-feature.md b/_includes/pbc/all/install-features/202311.0/install-the-order-management-feature.md
index adeb4434371..40d4965e431 100644
--- a/_includes/pbc/all/install-features/202311.0/install-the-order-management-feature.md
+++ b/_includes/pbc/all/install-features/202311.0/install-the-order-management-feature.md
@@ -643,7 +643,7 @@ By default, in state machine names, the following applies:
```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 due to wrong item state.,en_US
+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
diff --git a/_includes/pbc/all/install-features/202311.0/install-the-persistent-cart-sharing-feature.md b/_includes/pbc/all/install-features/202311.0/install-the-persistent-cart-sharing-feature.md
index b4572a69b99..974f52ce762 100644
--- a/_includes/pbc/all/install-features/202311.0/install-the-persistent-cart-sharing-feature.md
+++ b/_includes/pbc/all/install-features/202311.0/install-the-persistent-cart-sharing-feature.md
@@ -292,6 +292,6 @@ Make sure, that when you're on a cart page, you can see the "Share Cart via Link
{% info_block warningBox "Verification" %}
-Login to Yves as Company User, add some product to the cart and go to the cart page. 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 due to some browser limitations). Copy the Cart Preview link and proceed with it. Make sure, that you are redirected to the Cart Preview page.
+Login to Yves as Company User, add some product to the cart and go to the cart page. 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/202311.0/install-the-product-bundles-cart-feature.md b/_includes/pbc/all/install-features/202311.0/install-the-product-bundles-cart-feature.md
index 434b47757ec..e909ff2abcf 100644
--- a/_includes/pbc/all/install-features/202311.0/install-the-product-bundles-cart-feature.md
+++ b/_includes/pbc/all/install-features/202311.0/install-the-product-bundles-cart-feature.md
@@ -55,7 +55,7 @@ Make sure that the item counter of the cart widget shows the correct number—bu
## 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 due to insufficient memory.
+experience a slow-down in the cart operations handling or even may 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:
diff --git a/_includes/pbc/all/install-features/202311.0/marketplace/install-the-merchant-switcher-feature.md b/_includes/pbc/all/install-features/202311.0/marketplace/install-the-merchant-switcher-feature.md
index 0787f2b817b..d21adcef1df 100644
--- a/_includes/pbc/all/install-features/202311.0/marketplace/install-the-merchant-switcher-feature.md
+++ b/_includes/pbc/all/install-features/202311.0/marketplace/install-the-merchant-switcher-feature.md
@@ -106,7 +106,7 @@ Append glossary according to your configuration:
**data/import/common/common/glossary.csv**
```yaml
-merchant_switcher.message,Switch from %currentMerchant% to %newMerchant%? Due to different availability, not all products may be added to your shopping cart.,en_US
+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
diff --git a/_includes/pbc/all/install-features/202404.0/install-dynamic-multistore.md b/_includes/pbc/all/install-features/202404.0/install-dynamic-multistore.md
index 7df0274e324..77bbd0e4193 100644
--- a/_includes/pbc/all/install-features/202404.0/install-dynamic-multistore.md
+++ b/_includes/pbc/all/install-features/202404.0/install-dynamic-multistore.md
@@ -103,7 +103,7 @@ image:
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 due to their dynamic nature
+ # Stores MUST not be defined in the deploy file as it was before because of their dynamic nature
services:
mail:
sender:
diff --git a/_includes/pbc/all/install-features/202404.0/install-the-approval-process-feature.md b/_includes/pbc/all/install-features/202404.0/install-the-approval-process-feature.md
index 8aa896e550c..23d309371d7 100644
--- a/_includes/pbc/all/install-features/202404.0/install-the-approval-process-feature.md
+++ b/_includes/pbc/all/install-features/202404.0/install-the-approval-process-feature.md
@@ -139,9 +139,9 @@ 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, please 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 due to pending approval request.",en_US
+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 due to approver limit.",en_US
+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
diff --git a/_includes/pbc/all/install-features/202404.0/install-the-cms-feature.md b/_includes/pbc/all/install-features/202404.0/install-the-cms-feature.md
index 5b2a2c6d1ab..46524e3a960 100644
--- a/_includes/pbc/all/install-features/202404.0/install-the-cms-feature.md
+++ b/_includes/pbc/all/install-features/202404.0/install-the-cms-feature.md
@@ -779,7 +779,7 @@ cms-page--3,Placeholders Title & Content,1,1,1,/de/datenschutz,/en/privacy,Daten
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 due to 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.
"
+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.
"
```
diff --git a/_includes/pbc/all/install-features/202404.0/install-the-order-management-feature.md b/_includes/pbc/all/install-features/202404.0/install-the-order-management-feature.md
index adeb4434371..40d4965e431 100644
--- a/_includes/pbc/all/install-features/202404.0/install-the-order-management-feature.md
+++ b/_includes/pbc/all/install-features/202404.0/install-the-order-management-feature.md
@@ -643,7 +643,7 @@ By default, in state machine names, the following applies:
```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 due to wrong item state.,en_US
+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
diff --git a/_includes/pbc/all/install-features/202404.0/install-the-persistent-cart-sharing-feature.md b/_includes/pbc/all/install-features/202404.0/install-the-persistent-cart-sharing-feature.md
index b4572a69b99..974f52ce762 100644
--- a/_includes/pbc/all/install-features/202404.0/install-the-persistent-cart-sharing-feature.md
+++ b/_includes/pbc/all/install-features/202404.0/install-the-persistent-cart-sharing-feature.md
@@ -292,6 +292,6 @@ Make sure, that when you're on a cart page, you can see the "Share Cart via Link
{% info_block warningBox "Verification" %}
-Login to Yves as Company User, add some product to the cart and go to the cart page. 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 due to some browser limitations). Copy the Cart Preview link and proceed with it. Make sure, that you are redirected to the Cart Preview page.
+Login to Yves as Company User, add some product to the cart and go to the cart page. 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/202404.0/install-the-product-bundles-cart-feature.md b/_includes/pbc/all/install-features/202404.0/install-the-product-bundles-cart-feature.md
index 434b47757ec..e909ff2abcf 100644
--- a/_includes/pbc/all/install-features/202404.0/install-the-product-bundles-cart-feature.md
+++ b/_includes/pbc/all/install-features/202404.0/install-the-product-bundles-cart-feature.md
@@ -55,7 +55,7 @@ Make sure that the item counter of the cart widget shows the correct number—bu
## 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 due to insufficient memory.
+experience a slow-down in the cart operations handling or even may 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:
diff --git a/_includes/pbc/all/install-features/202404.0/marketplace/install-the-merchant-switcher-feature.md b/_includes/pbc/all/install-features/202404.0/marketplace/install-the-merchant-switcher-feature.md
index 0787f2b817b..d21adcef1df 100644
--- a/_includes/pbc/all/install-features/202404.0/marketplace/install-the-merchant-switcher-feature.md
+++ b/_includes/pbc/all/install-features/202404.0/marketplace/install-the-merchant-switcher-feature.md
@@ -106,7 +106,7 @@ Append glossary according to your configuration:
**data/import/common/common/glossary.csv**
```yaml
-merchant_switcher.message,Switch from %currentMerchant% to %newMerchant%? Due to different availability, not all products may be added to your shopping cart.,en_US
+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
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 c3df36721cd..ddb0ee399e2 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
@@ -90,7 +90,7 @@ image:
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 due to their dynamic nature
+ # Stores MUST not be defined in the deploy file as it was before because of their dynamic nature
services:
mail:
sender:
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 d78a841f6cb..97d4d26d35f 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
@@ -2,9 +2,7 @@
{% 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.
+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 %}
@@ -20,9 +18,9 @@ To start the feature integration, overview and install the necessary features:
| 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) |
-## 1) Install the required modules using Composer
+## 1) Install the required modules using Composer
-Run the following command to install the required modules:
+Install the required modules:
```bash
composer require spryker/payments-rest-api:"1.1.0" --update-with-dependencies
@@ -140,9 +138,10 @@ Make sure that the following changes have occurred:
Activate the following plugin:
-| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE |
-| --- | --- | --- | --- |
-| PaymentMethodsByCheckoutDataResourceRelationshipPlugin | Adds payment-methods resource as relationship in case `RestCheckoutDataTransfer` is provided as payload. | None | Spryker\Glue\PaymentsRestApi\Plugin\GlueApplication |
+| 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**
@@ -173,12 +172,109 @@ class GlueApplicationDependencyProvider extends SprykerGlueApplicationDependency
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 request to `https://glue.mysprykershop.com/checkout-data?include=payment-methods` and make sure that `checkout-data` resource has a relationship to the `payment-methods` resources.
+* 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 %}
@@ -188,7 +284,7 @@ Mappers should be configured on a project level to map the data from the request
| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE |
| --- | --- | --- |--- |
-| PaymentsQuoteMapperPlugin | Adds a mapper that maps Payments information to `QuoteTransfer`. | None | `Spryker\Zed\PaymentsRestApi\Communication\Plugin\CheckoutRestApi` |
+| PaymentsQuoteMapperPlugin | Adds a mapper that maps Payments information to `QuoteTransfer`. | | `Spryker\Zed\PaymentsRestApi\Communication\Plugin\CheckoutRestApi` |
**src/Pyz/Zed/CheckoutRestApi/CheckoutRestApiDependencyProvider.php**
@@ -224,7 +320,7 @@ To verify that `PaymentsQuoteMapperPlugin` is activated, send a POST request to
| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE |
| --- | --- | --- | --- |
-| SelectedPaymentMethodCheckoutDataResponseMapperPlugin | Maps the selected payment method data to the checkout-data resource attributes. | None | Spryker\Glue\PaymentsRestApi\Plugin\CheckoutRestApi |
+| SelectedPaymentMethodCheckoutDataResponseMapperPlugin | Maps the selected payment method data to the checkout-data resource attributes. | | Spryker\Glue\PaymentsRestApi\Plugin\CheckoutRestApi |
**src/Pyz/Glue/CheckoutRestApi/CheckoutRestApiDependencyProvider.php**
diff --git a/_includes/pbc/all/install-features/202410.0/install-the-approval-process-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-approval-process-feature.md
index 8aa896e550c..23d309371d7 100644
--- a/_includes/pbc/all/install-features/202410.0/install-the-approval-process-feature.md
+++ b/_includes/pbc/all/install-features/202410.0/install-the-approval-process-feature.md
@@ -139,9 +139,9 @@ 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, please 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 due to pending approval request.",en_US
+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 due to approver limit.",en_US
+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
diff --git a/_includes/pbc/all/install-features/202410.0/install-the-cms-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-cms-feature.md
index 5b2a2c6d1ab..46524e3a960 100644
--- a/_includes/pbc/all/install-features/202410.0/install-the-cms-feature.md
+++ b/_includes/pbc/all/install-features/202410.0/install-the-cms-feature.md
@@ -779,7 +779,7 @@ cms-page--3,Placeholders Title & Content,1,1,1,/de/datenschutz,/en/privacy,Daten
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 due to 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.
"
+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.
"
```
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 e1b215b51d2..26f5f2d69ae 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
@@ -1032,6 +1032,8 @@ customer.password.error.sequence,"You repeated the same character too many times
customer.password.error.sequence,"Es wurde zu oft das gleiche Zeichen verwendet.",de_DE
customer.password.error.character_set,"Password must contain at least 1 character of each allowed character group: upper case, lower case, digit, and a special character.",en_US
customer.password.error.character_set,"Passwort muss mindestens 1 Zeichen von jeder erlaubten Zeichengruppe enthalten: Großschreibung, Kleinschreibung, Zahl und ein Sonderzeichen.",de_DE
+customer.salutation.n/a,n/a,en_US
+customer.salutation.n/a,n/v,de_DE
```
2. Import data:
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 f5ca50fcf96..a01655da9a1 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
@@ -641,7 +641,7 @@ By default, in state machine names, the following applies:
```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 due to wrong item state.,en_US
+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
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 f0fcc30656a..73bb3f2980e 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
@@ -2,16 +2,17 @@
{% 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.
+The following feature integration guide expects the basic feature to be in place.
-{% endinfo_block %}
+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
-## Install feature core
+{% endinfo_block %}
-### Prerequisites
+## Prerequisites
To start the feature integration, overview and install the necessary features:
@@ -19,25 +20,260 @@ To start the feature integration, overview and install the necessary features:
| --- | --- |
| Spryker Core | {{page.version}} |
-### 1) Install the required modules
+## 1) Install the required modules
Install the required modules using Composer:
```bash
-composer require "spryker-feature/payments:{{page.version}}" "spryker/checkout-rest-api:^3.0.0" --update-with-dependencies
+composer require "spryker-feature/payments:{{page.version}}" "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 |
-| --- | --- |
-| PaymentDataImport | vendor/spryker/payment-data-import |
-| PaymentGui | vendor/spryker/payment-gui |
+| 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 %}
-### 2) Set up database schema and transfer objects
+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
+ 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 %}
-### 5) Additional cleanups:
+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
+
+```
+
+{% 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/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 b4572a69b99..974f52ce762 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
@@ -292,6 +292,6 @@ Make sure, that when you're on a cart page, you can see the "Share Cart via Link
{% info_block warningBox "Verification" %}
-Login to Yves as Company User, add some product to the cart and go to the cart page. 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 due to some browser limitations). Copy the Cart Preview link and proceed with it. Make sure, that you are redirected to the Cart Preview page.
+Login to Yves as Company User, add some product to the cart and go to the cart page. 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/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 13ca8f386e5..8fcc43c9e9d 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
@@ -55,7 +55,7 @@ Make sure that the item counter of the cart widget shows the correct number—bu
## 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 due to insufficient memory.
+experience a slow-down in the cart operations handling or even may 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:
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 0787f2b817b..d21adcef1df 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
@@ -106,7 +106,7 @@ Append glossary according to your configuration:
**data/import/common/common/glossary.csv**
```yaml
-merchant_switcher.message,Switch from %currentMerchant% to %newMerchant%? Due to different availability, not all products may be added to your shopping cart.,en_US
+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
diff --git a/_includes/pbc/all/upgrade-modules/upgrade-the-catalog-module.md b/_includes/pbc/all/upgrade-modules/upgrade-the-catalog-module.md
index d42a0810dc1..56f0afb178b 100644
--- a/_includes/pbc/all/upgrade-modules/upgrade-the-catalog-module.md
+++ b/_includes/pbc/all/upgrade-modules/upgrade-the-catalog-module.md
@@ -168,7 +168,7 @@ class CatalogDependencyProvider extends SprykerCatalogDependencyProvider
## Upgrading from version 3.* to version 4.*
-Due to introducing the Suggestion Search feature, the Catalog bundle now requires Search >=5.2.
+Because of introducing the Suggestion Search feature, the Catalog bundle now requires Search >=5.2.
To upgrade from 3.* to 4.\*:
1. Before upgrading to the new version, make sure that you do not use any deprecated code from the version 3.\*. Check the description of the deprecated code to see what you will need to use instead.
diff --git a/_includes/pbc/all/upgrade-modules/upgrade-the-category-module.md b/_includes/pbc/all/upgrade-modules/upgrade-the-category-module.md
index 91316cf3040..b842bc097b1 100644
--- a/_includes/pbc/all/upgrade-modules/upgrade-the-category-module.md
+++ b/_includes/pbc/all/upgrade-modules/upgrade-the-category-module.md
@@ -219,7 +219,7 @@ _Estimated migration time: 1 hour. The time may vary depending on project-specif
### Update modules
1. Update the `Category` module by adding `"spryker/category": "^4.0.0"` to your `composer.json` and running composer update.
-Due to the changes in the Category module, all related modules have to be updated too.
+Because of the changes in the Category module, all related modules have to be updated too.
2. Run composer require `spryker/event spryker/storage` to install Event and Storage modules.
### Database update and migration
diff --git a/_includes/pbc/all/upgrade-modules/upgrade-the-cms-block-category-connector-module.md b/_includes/pbc/all/upgrade-modules/upgrade-the-cms-block-category-connector-module.md
index 9fde09dc770..96fcfaceae6 100644
--- a/_includes/pbc/all/upgrade-modules/upgrade-the-cms-block-category-connector-module.md
+++ b/_includes/pbc/all/upgrade-modules/upgrade-the-cms-block-category-connector-module.md
@@ -2,7 +2,7 @@
## Upgrading from version 1.* to version 2.*
-Due to introducing the CMS Block positioning and CMS Block templates for Category, the CMS Block Category Connector module now requires Category >=4.0.
+Because of introducing the CMS Block positioning and CMS Block templates for Category, the CMS Block Category Connector module now requires Category >=4.0.
The migration will contain the following steps:
1. New module installation
diff --git a/_includes/pbc/all/upgrade-modules/upgrade-the-price-module.md b/_includes/pbc/all/upgrade-modules/upgrade-the-price-module.md
index fbf4aa5155f..c9c356d817d 100644
--- a/_includes/pbc/all/upgrade-modules/upgrade-the-price-module.md
+++ b/_includes/pbc/all/upgrade-modules/upgrade-the-price-module.md
@@ -4,7 +4,7 @@
From version 5 we have changed price module responsibilities: previously it was responsible for handling product price related functionality. This responsibility has now been moved to the new PriceProduct module which handles product prices, while Price module is responsible for generic spryker core related functionality.
-Due to this change of the Price module responsibility, all related modules have also be updated to work with the `PriceProduct` module.
+Because of this change of the Price module responsibility, all related modules have also be updated to work with the `PriceProduct` module.
1. First you have to install the new `PriceProduct` module.
diff --git a/_templates/module-upgrade-guide-template.md b/_templates/module-upgrade-guide-template.md
index 4ed38215427..6b22b3365d2 100644
--- a/_templates/module-upgrade-guide-template.md
+++ b/_templates/module-upgrade-guide-template.md
@@ -10,6 +10,6 @@ template: module-upgrade-guide-template
*Estimated migration time: {time in hours or minutes}*
## Spryker’s GPSR obligations
diff --git a/docs/about/all/support/using-the-support-portal.md b/docs/about/all/support/using-the-support-portal.md
index e72cba1c0b4..92c41769f0c 100644
--- a/docs/about/all/support/using-the-support-portal.md
+++ b/docs/about/all/support/using-the-support-portal.md
@@ -77,9 +77,9 @@ Emergencies are reserved for problems that have significant business impact now
{% info_block warningBox "Plan your change requests and use the right request form" %}
-Due to verification processes and role-based access control mechanisms, change requests take some time to process. Expect 3-5 days of processing time.
+Because of verification processes and role-based access control mechanisms, change requests take some time to process. Expect 3-5 days of processing time.
-Due to contractual reasons, only customers can request new environments or access to environment monitoring, not partners.
+Because of contractual reasons, only customers can request new environments or access to environment monitoring, not partners.
{% endinfo_block %}
diff --git a/docs/ca/dev/best-practices/jenkins-operational-best-practices.md b/docs/ca/dev/best-practices/jenkins-operational-best-practices.md
index 490e0153aa8..320504e5885 100644
--- a/docs/ca/dev/best-practices/jenkins-operational-best-practices.md
+++ b/docs/ca/dev/best-practices/jenkins-operational-best-practices.md
@@ -48,7 +48,7 @@ Formula to estimate your maximum theoretical RAM demand:
Number of executors x (maximum workers and threads spawned by heaviest job * memory_limit) = Theoretical max RAM Demand
-As you can see from the multiplicative nature of the threads and executors, you can easily reach a surprisingly high theoretical max RAM demand. However, it's unlikely that you will actually consume this amount. You would need to have multiple heaviest jobs running in parallel and consuming up to the `memory_limit simultaneously`. Nevertheless, calculating it is good practice, as keeping your theoretical maximum RAM demand below the memory supply significantly increases stability as it virtually eliminates the risk of Jenkins crashing due to exhausting its memory supply. This is currently the most common root cause of Jenkins service degradation and outages.
+As you can see from the multiplicative nature of the threads and executors, you can easily reach a surprisingly high theoretical max RAM demand. However, it's unlikely that you will actually consume this amount. You would need to have multiple heaviest jobs running in parallel and consuming up to the `memory_limit simultaneously`. Nevertheless, calculating it is good practice, as keeping your theoretical maximum RAM demand below the memory supply significantly increases stability as it virtually eliminates the risk of Jenkins crashing because of exhausting its memory supply. This is currently the most common root cause of Jenkins service degradation and outages.
### To-Dos
@@ -95,7 +95,7 @@ Import jobs, as well as Publish and Sync-related processes, can be taxing on the
### Imports and Publish and Synchronize
-Imports and certain Publish and Sync processes can lead to high computational costs, such as permutation calculations for filters. Therefore, it is crucial to implement [RAM-aware batch processing](/docs/dg/dev/integrate-and-configure/integrate-elastic-computing.html#integrate-ram-aware-batch-processing) and [queue chunk sizes](/docs/dg/dev/guidelines/performance-guidelines/architecture-performance-guidelines.html#chunk-size) that are suitable for the complexity of your data. The former helps prevent loading all import data into RAM, while the latter prevents RabbitMQ pipe timeouts due to lengthy processing times. A chunk or batch size that is too large may result in memory-related exceptions or messages being stuck in queues (with logs indicating RabbitMQ broken pipe exceptions), whereas a chunk or batch size that is too small may lead to subpar import and P&S performance. There is no one-size-fits-all solution, but with profiling, you can find a good balance between stability and performance.
+Imports and certain Publish and Sync processes can lead to high computational costs, such as permutation calculations for filters. Therefore, it is crucial to implement [RAM-aware batch processing](/docs/dg/dev/integrate-and-configure/integrate-elastic-computing.html#integrate-ram-aware-batch-processing) and [queue chunk sizes](/docs/dg/dev/guidelines/performance-guidelines/architecture-performance-guidelines.html#chunk-size) that are suitable for the complexity of your data. The former helps prevent loading all import data into RAM, while the latter prevents RabbitMQ pipe timeouts because of lengthy processing times. A chunk or batch size that is too large may result in memory-related exceptions or messages being stuck in queues (with logs indicating RabbitMQ broken pipe exceptions), whereas a chunk or batch size that is too small may lead to subpar import and P&S performance. There is no one-size-fits-all solution, but with profiling, you can find a good balance between stability and performance.
While fine-tuning your chunk size, check out the following articles:
- [Messages are moved to error queues](https://docs.spryker.com/docs/dg/dev/troubleshooting/troubleshooting-general-technical-issues/troubleshooting-rabbitmq/messages-are-moved-to-error-queues.html)
@@ -107,7 +107,7 @@ A valuable general recommendation is to [split up publishing queues](https://doc
### CPU credits
Standard-sized non-production environments aren't intended to handle long periods of high load. Most infrastructure components in this package size operate with a burst configuration, allowing for increased performance during limited periods. However, if these environments are under heavy load for an extended duration, the components will eventually run out of "burst credits" and throttle until the load decreases and the credits can replenish over time. When an instance is throttled, its CPU performance is capped at 20%. Consequently, the instance may struggle to complete standard tasks, resulting in the following common symptoms:
-- Deployment-related steps in the Deploy_Scheduler pipeline may encounter issues due to insufficient processing capacity.
+- Deployment-related steps in the Deploy_Scheduler pipeline may encounter issues because of insufficient processing capacity.
- Job execution durations in your APM may sharply increase, or you may encounter RabbitMQ broken pipe exceptions.
- The Jenkins UI may become unresponsive or sluggish.
diff --git a/docs/ca/dev/environments-overview.md b/docs/ca/dev/environments-overview.md
index fb0a840288a..2cbb0d134d2 100644
--- a/docs/ca/dev/environments-overview.md
+++ b/docs/ca/dev/environments-overview.md
@@ -12,7 +12,7 @@ This document describes the environment types shipped with Spryker and the best
{% info_block infoBox "" %}
* Contracts may vary, and this document only describes the environments types that may represent your default setup. If you are using a different setup, ask your project manager or product owner for a more detailed explanation.
-* Your non-production environments don't scale automatically. If you want to increase their scaling, let us know by submitting this form: [Upscale Request](https://support.spryker.com/s/hosting-change-requests/environment-upscaling). Due to contractual reasons, only customers can request these changes, not partners.
+* Your non-production environments don't scale automatically. If you want to increase their scaling, let us know by submitting this form: [Upscale Request](https://support.spryker.com/s/hosting-change-requests/environment-upscaling). Because of contractual reasons, only customers can request these changes, not partners.
{% endinfo_block %}
diff --git a/docs/ca/dev/multi-store-setups/multistore-setup-options.md b/docs/ca/dev/multi-store-setups/multistore-setup-options.md
index 410881695ba..317dff6ee93 100644
--- a/docs/ca/dev/multi-store-setups/multistore-setup-options.md
+++ b/docs/ca/dev/multi-store-setups/multistore-setup-options.md
@@ -163,14 +163,14 @@ This setup has the following characteristics:
- Centralized third-party integrations.
This setup is recommended for the following cases:
-- Your shops look completely different—not only from the design perspective but also from business logic and used features/modules due to completely separated code.
+- Your shops look completely different—not only from the design perspective but also from business logic and used features/modules because of completely separated code.
- Shop maintenance and development happen independently. You may have multiple teams working on different shops, having their own development workflow and release cycles.
-- Data management (products, customers, orders, etc.) is separated due to separate databases. Data sharing and synchronization is possible with the help of external systems.
+- Data management (products, customers, orders, etc.) is separated because of separate databases. Data sharing and synchronization is possible with the help of external systems.
In terms of infrastructure, this setup is the most flexible way of scaling and deploying your setups independently since all of the infrastructure parts are separate cloud resources:
- You can host single stores in different AWS regions. For example, you can host the US store in N. Virginia and the DE store—in Frankfurt.
-- Traffic distribution is _independent_ for every store* due to ALB+NLBs (ALB-->NLB-->Nginx-->PHP-FPM).
+- Traffic distribution is _independent_ for every store* because of ALB+NLBs (ALB-->NLB-->Nginx-->PHP-FPM).
{% info_block infoBox "Info" %}
diff --git a/docs/ca/dev/preparation-for-going-live.md b/docs/ca/dev/preparation-for-going-live.md
index 486c66cd2f8..71adb91c296 100644
--- a/docs/ca/dev/preparation-for-going-live.md
+++ b/docs/ca/dev/preparation-for-going-live.md
@@ -159,7 +159,7 @@ Prepare a data migration plan. Include all the data.
Make sure you've addressed all the items from the following checklists:
- Implement the code freeze. We recommend having a code freeze at least two weeks before going live.
-- Double-check the go-live date. If any of the preceding tasks aren't complete, postpone your go-live or discuss with us how to complete them in time. DNS changes are especially sensitive to deadlines. Due to the way the DNS system works, any DNS changes take time to take effect.
+- Double-check the go-live date. If any of the preceding tasks aren't complete, postpone your go-live or discuss with us how to complete them in time. DNS changes are especially sensitive to deadlines. Because of the way the DNS system works, any DNS changes take time to take effect.
- Make sure that the rollback strategy is still valid. Check that you have everything you need to recover from an unforeseen issue with the newest version of the project you are deploying.
- Make sure that DNS is set up. For details on the DNS setup, see [Set up DNS](/docs/ca/dev/set-up-dns.html).
- Make sure that the third-party systems have been switched to the production mode:
diff --git a/docs/ca/dev/set-up-dns.md b/docs/ca/dev/set-up-dns.md
index e92a849f6f5..fa4edd70ce5 100644
--- a/docs/ca/dev/set-up-dns.md
+++ b/docs/ca/dev/set-up-dns.md
@@ -14,7 +14,7 @@ You normally add a CNAME record in your DNS Management for the domains you want
{% info_block infoBox "Info" %}
-This process can take a full week to complete due to DNS propagation and the terraform work that needs to be done. To avoid double work, ensure the endpoint selection is final and tested.
+This process can take a full week to complete because of DNS propagation and the terraform work that needs to be done. To avoid double work, ensure the endpoint selection is final and tested.
{% endinfo_block %}
diff --git a/docs/ca/dev/troubleshooting/troubleshooting-deployment-issues/deployment-fails-due-to-a-failed-docker-authentication.md b/docs/ca/dev/troubleshooting/troubleshooting-deployment-issues/deployment-fails-due-to-a-failed-docker-authentication.md
index b0e8a1d07b8..fa3f4e374fe 100644
--- a/docs/ca/dev/troubleshooting/troubleshooting-deployment-issues/deployment-fails-due-to-a-failed-docker-authentication.md
+++ b/docs/ca/dev/troubleshooting/troubleshooting-deployment-issues/deployment-fails-due-to-a-failed-docker-authentication.md
@@ -1,5 +1,5 @@
---
-title: Deployment fails due to a failed docker authentication
+title: Deployment fails because of a failed docker authentication
description: Resolve Docker authentication errors in Spryker deployments with solutions to fix 'EOF' issues
template: troubleshooting-guide-template
last_updated: Oct 6, 2023
diff --git a/docs/ca/dev/troubleshooting/troubleshooting-deployment-issues/troubleshooting-deployment-issues.md b/docs/ca/dev/troubleshooting/troubleshooting-deployment-issues/troubleshooting-deployment-issues.md
index 21736fbbee8..c5338737ef1 100644
--- a/docs/ca/dev/troubleshooting/troubleshooting-deployment-issues/troubleshooting-deployment-issues.md
+++ b/docs/ca/dev/troubleshooting/troubleshooting-deployment-issues/troubleshooting-deployment-issues.md
@@ -14,5 +14,5 @@ This section contains solutions to common deployment issues.
Browse the deployment troubleshooting:
* [Assets, logs, or pipelines are not visible in AWS Management](/docs/ca/dev/troubleshooting/troubleshooting-deployment-issues/assets-logs-or-pipelines-are-not-visible-in-aws-management-console.html)
-* [Deployment fails due to a failed Docker authentication](/docs/ca/dev/troubleshooting/troubleshooting-deployment-issues/deployment-fails-due-to-a-failed-docker-authentication.html)
+* [Deployment fails because of a failed Docker authentication](/docs/ca/dev/troubleshooting/troubleshooting-deployment-issues/deployment-fails-due-to-a-failed-docker-authentication.html)
* [Jenkins does not restart](/docs/ca/dev/troubleshooting/troubleshooting-deployment-issues/jenkins-does-not-restart.html)
diff --git a/docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/apis-and-flows-for-payment-service-providers.md b/docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/apis-and-flows-for-payment-service-providers.md
new file mode 100644
index 00000000000..04ece96ab9b
--- /dev/null
+++ b/docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/apis-and-flows-for-payment-service-providers.md
@@ -0,0 +1,17 @@
+---
+title: APIs and flows for payment service providers
+description: Overview of PSP APIs
+last_updated: Sep 27, 2024
+template: concept-topic-template
+---
+
+This section provides an overview of Payment Service Provider (PSP) APIs. All PSPs use both synchronous and asynchronous APIs.
+
+For detailed information on PSP APIs, see the following docs:
+
+- [Configure and disconnect flows for payment service providers](/docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/configure-and-disconnect-flows-for-payment-service-providers.html)
+- [Headless express checkout payment flow for payment service providers](/docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/headless-express-checkout-payment-flow-for-payment-service-providers.html)
+- [Headless payment flow for payment service providers](/docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/headless-payment-flow-for-payment-service-providers.html)
+- [Hosted payment page flow for payment service providers](/docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/hosted-payment-page-flow-for-payment-service-providers.html)
+- [OMS payment flow for payment service providers](/docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/oms-payment-flow-for-payment-service-providers.html)
+- [Synchronous API for payment service providers](/docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/synchronous-api-for-payment-service-providers.html)
diff --git a/docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/asynchronous-api-for-payment-service-providers.md b/docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/asynchronous-api-for-payment-service-providers.md
new file mode 100644
index 00000000000..1adff8456f1
--- /dev/null
+++ b/docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/asynchronous-api-for-payment-service-providers.md
@@ -0,0 +1,44 @@
+---
+title: Asynchronous API for payment service providers
+description: Overview of PSP Asynchronous API
+last_updated: Now 08, 2024
+template: concept-topic-template
+related:
+ - title: Configure and disconnect flows for payment service providers
+ link: docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/configure-and-disconnect-flows-for-payment-service-providers.html
+ - title: Headless express checkout payment flow for payment service providers
+ link: docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/headless-express-checkout-payment-flow-for-payment-service-providers.html
+ - title: Headless payment flow for payment service providers
+ link: docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/headless-payment-flow-for-payment-service-providers.html
+ - title: Hosted payment page flow for payment service providers
+ link: docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/hosted-payment-page-flow-for-payment-service-providers.html
+ - title: OMS payment flow for payment service providers
+ link: docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/oms-payment-flow-for-payment-service-providers.html
+ - title: Synchronous API for payment service providers
+ link: docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/synchronous-api-for-payment-service-providers.html
+---
+
+All PSP integrations are based on a asynchronous API. The asynchronous API is used to process payments and refunds. The following asynchronous messages are used:
+
+Sent from the app:
+* `AddPaymentMethod`: A new payment method is added.
+* `UpdatePaymentMethod`: A payment method is updated.
+* `DeletePaymentMethod`: A payment method is deleted.
+* `PaymentAuthorized`: A payment is authorized.
+* `PaymentAuthorizationFailed`: Payment authorization fails.
+* `PaymentCaptured`: Payment is captured.
+* `PaymentCaptureFailed`: Payment capture fails.
+* `PaymentRefunded`: A payment is refunded.
+* `PaymentRefundFailed`: Payment refund fails.
+* `PaymentCanceled`: A payment is canceled.
+* `PaymentCancellationFailed`: Payment cancellation fails.
+* `PaymentCreated`: A payment is created.
+* `PaymentUpdated`: A payment is updated.
+* `ReadyForMerchantAppOnboarding`: App is ready to onboard merchants.
+* `MerchantAppOnboardingStatusChanged`: Merchant app onboarding status changes.
+* `AppConfigUpdated`: App configuration is updated.
+
+Sent from Spryker:
+* `CancelPayment`: Initiates payment cancellation.
+* `CapturePayment`: Initiates payment capture.
+* `RefundPayment`: Initiates payment refund.
diff --git a/docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/configure-and-disconnect-flows-for-payment-service-providers.md b/docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/configure-and-disconnect-flows-for-payment-service-providers.md
new file mode 100644
index 00000000000..57d71c8c9d2
--- /dev/null
+++ b/docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/configure-and-disconnect-flows-for-payment-service-providers.md
@@ -0,0 +1,33 @@
+---
+title: Configure and disconnect flows for payment service providers
+description: Overview of configuration and disconnect flow
+last_updated: Now 08, 2024
+template: concept-topic-template
+related:
+ - title: Asynchronous API for payment service providers
+ link: docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/asynchronous-api-for-payment-service-providers.html
+ - title: Headless express checkout payment flow for payment service providers
+ link: docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/headless-express-checkout-payment-flow-for-payment-service-providers.html
+ - title: Headless payment flow for payment service providers
+ link: docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/headless-payment-flow-for-payment-service-providers.html
+ - title: Hosted payment page flow for payment service providers
+ link: docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/hosted-payment-page-flow-for-payment-service-providers.html
+ - title: OMS payment flow for payment service providers
+ link: docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/oms-payment-flow-for-payment-service-providers.html
+ - title: Synchronous API for payment service providers
+ link: docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/synchronous-api-for-payment-service-providers.html
+---
+
+The following diagram explains the configuration and disconnect flows for a payment app.
+
+![configure-and-disconnect-flow](https://spryker.s3.eu-central-1.amazonaws.com/docs/dg/dev/acp/apis-and-overview-diagrams-for-payment-service-providers.md/configure-and-disconnect-flows.png)
+
+Optional messages:
+* `AddPaymentMethod`
+* `UpdatePaymentMethod`
+* `DeletePaymentMethod`
+* `ReadyForMerchantAppOnboarding`
+
+The Payment Method related messages are used to manage payment methods in Spryker. These messages are sent only when a payment method configuration changes or when the list of available payment methods changes.
+
+The `ReadyForMerchantAppOnboarding` message is used to inform Spryker that the app is ready to onboard merchants; used only for marketplace projects.
diff --git a/docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/headless-express-checkout-payment-flow-for-payment-service-providers.md b/docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/headless-express-checkout-payment-flow-for-payment-service-providers.md
new file mode 100644
index 00000000000..2e60c61618b
--- /dev/null
+++ b/docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/headless-express-checkout-payment-flow-for-payment-service-providers.md
@@ -0,0 +1,112 @@
+---
+title: Headless express checkout payment flow for payment service providers
+description: Overview of the Headless payment flow with express-checkout payment methods
+last_updated: Now 08, 2024
+template: concept-topic-template
+related:
+ - title: Asynchronous API for payment service providers
+ link: docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/asynchronous-api-for-payment-service-providers.html
+ - title: Configure and disconnect flows for payment service providers
+ link: docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/configure-and-disconnect-flows-for-payment-service-providers.html
+ - title: Headless payment flow for payment service providers
+ link: docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/headless-payment-flow-for-payment-service-providers.html
+ - title: Hosted payment page flow for payment service providers
+ link: docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/hosted-payment-page-flow-for-payment-service-providers.html
+ - title: OMS payment flow for payment service providers
+ link: docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/oms-payment-flow-for-payment-service-providers.html
+ - title: Synchronous API for payment service providers
+ link: docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/synchronous-api-for-payment-service-providers.html
+---
+
+The following diagram explains the flow of a headless payment page with an express-checkout payment method based on Glue API.
+
+![headless-express-checkout-flow](https://spryker.s3.eu-central-1.amazonaws.com/docs/dg/dev/acp/apis-and-overview-diagrams-for-payment-service-providers.md/headless-express-checkout-flow.png)
+
+The customer skips most of the default checkout steps, such as the addresses step, and goes directly to the payment step. The payment is created before the order is persisted. The data a customer usually enters during a regualr checkout is retrieved via the `/payment-customer` Glue API call. The returned data can then be used on Spryker's side to update customer data like addresses.
+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 and other information from the PSP:
+
+`https://glue.mysprykershop.com/payment-customers`
+
+
+ Request example
+
+```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"
+ }
+ }
+ }
+}
+```
+
+
+
+
+ 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"
+ }
+}
+```
+
+
diff --git a/docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/headless-payment-flow-for-payment-service-providers.md b/docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/headless-payment-flow-for-payment-service-providers.md
new file mode 100644
index 00000000000..869158a9ec9
--- /dev/null
+++ b/docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/headless-payment-flow-for-payment-service-providers.md
@@ -0,0 +1,27 @@
+---
+title: Headless payment flow for payment service providers
+description: Overview of the Headless payment flow
+last_updated: Now 08, 2024
+template: concept-topic-template
+related:
+ - title: Asynchronous API for payment service providers
+ link: docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/asynchronous-api-for-payment-service-providers.html
+ - title: Configure and disconnect flows for payment service providers
+ link: docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/configure-and-disconnect-flows-for-payment-service-providers.html
+ - title: Headless express checkout payment flow for payment service providers
+ link: docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/headless-express-checkout-payment-flow-for-payment-service-providers.html
+ - title: Headless payment flow for payment service providers
+ link: docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/headless-payment-flow-for-payment-service-providers.html
+ - title: Hosted payment page flow for payment service providers
+ link: docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/hosted-payment-page-flow-for-payment-service-providers.html
+ - title: OMS payment flow for payment service providers
+ link: docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/oms-payment-flow-for-payment-service-providers.html
+ - title: Synchronous API for payment service providers
+ link: docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/synchronous-api-for-payment-service-providers.html
+---
+
+The following diagram explains the flow of a headless payment page based on Glue API.
+
+![headless-payment-flow](https://spryker.s3.eu-central-1.amazonaws.com/docs/dg/dev/acp/apis-and-overview-diagrams-for-payment-service-providers.md/headless-payment-flow.png)
+
+`CancelPreOrderPayment` is an optional element. It's used to cancel a payment that had been created before an order was persisted. This can happen when a customer clicks cancel or when a headless implementation requires a cancellation.
diff --git a/docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/hosted-payment-page-flow-for-payment-service-providers.md b/docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/hosted-payment-page-flow-for-payment-service-providers.md
new file mode 100644
index 00000000000..de1e714bca4
--- /dev/null
+++ b/docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/hosted-payment-page-flow-for-payment-service-providers.md
@@ -0,0 +1,23 @@
+---
+title: Hosted payment page flow for payment service providers
+description: Overview of the Hosted payment page flow
+last_updated: Now 08, 2024
+template: concept-topic-template
+related:
+ - title: Asynchronous API for payment service providers
+ link: docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/asynchronous-api-for-payment-service-providers.html
+ - title: Configure and disconnect flows for payment service providers
+ link: docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/configure-and-disconnect-flows-for-payment-service-providers.html
+ - title: Headless express checkout payment flow for payment service providers
+ link: docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/headless-express-checkout-payment-flow-for-payment-service-providers.html
+ - title: Headless payment flow for payment service providers
+ link: docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/headless-payment-flow-for-payment-service-providers.html
+ - title: OMS payment flow for payment service providers
+ link: docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/oms-payment-flow-for-payment-service-providers.html
+ - title: Synchronous API for payment service providers
+ link: docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/synchronous-api-for-payment-service-providers.html
+---
+
+The following diagram explains the hosted payment page flow.
+
+![hosted-payment-page-flow](https://spryker.s3.eu-central-1.amazonaws.com/docs/dg/dev/acp/apis-and-overview-diagrams-for-payment-service-providers.md/hosted-payment-page-flow.png)
diff --git a/docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/oms-payment-flow-for-payment-service-providers.md b/docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/oms-payment-flow-for-payment-service-providers.md
new file mode 100644
index 00000000000..09efc6eb1c9
--- /dev/null
+++ b/docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/oms-payment-flow-for-payment-service-providers.md
@@ -0,0 +1,28 @@
+---
+title: OMS payment flow for payment service providers
+description: Overview of POMS payment flow
+last_updated: Now 08, 2024
+template: concept-topic-template
+related:
+ - title: Asynchronous API for payment service providers
+ link: docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/asynchronous-api-for-payment-service-providers.html
+ - title: Configure and disconnect flows for payment service providers
+ link: docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/configure-and-disconnect-flows-for-payment-service-providers.html
+ - title: Headless express checkout payment flow for payment service providers
+ link: docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/headless-express-checkout-payment-flow-for-payment-service-providers.html
+ - title: Headless payment flow for payment service providers
+ link: docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/headless-payment-flow-for-payment-service-providers.html
+ - title: Hosted payment page flow for payment service providers
+ link: docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/hosted-payment-page-flow-for-payment-service-providers.html
+ - title: Synchronous API for payment service providers
+ link: docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/synchronous-api-for-payment-service-providers.html
+---
+
+The following diagram shows the flow of an order in the OMS with an app.
+
+![oms-payment-flow](https://spryker.s3.eu-central-1.amazonaws.com/docs/dg/dev/acp/apis-and-overview-diagrams-for-payment-service-providers.md/oms-payment-flow.png)
+
+Optional elements:
+* `/payments/transfers` transfers request: used only in marketplaces.
+* `CancelPayment` message: used only when a payment needs to be canceled.
+* `RefundPayment` message: used only when the refund process is triggered for one or more order items.
diff --git a/docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/synchronous-api-for-payment-service-providers.md b/docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/synchronous-api-for-payment-service-providers.md
new file mode 100644
index 00000000000..c84e8da9c09
--- /dev/null
+++ b/docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/synchronous-api-for-payment-service-providers.md
@@ -0,0 +1,32 @@
+---
+title: Synchronous API for payment service providers
+description: Overview of Synchronous API endpoints
+last_updated: Now 08, 2024
+template: concept-topic-template
+related:
+ - title: Asynchronous API for payment service providers
+ link: docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/asynchronous-api-for-payment-service-providers.html
+ - title: Configure and disconnect flows for payment service providers
+ link: docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/configure-and-disconnect-flows-for-payment-service-providers.html
+ - title: Headless express checkout payment flow for payment service providers
+ link: docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/headless-express-checkout-payment-flow-for-payment-service-providers.html
+ - title: Headless payment flow for payment service providers
+ link: docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/headless-payment-flow-for-payment-service-providers.html
+ - title: Hosted payment page flow for payment service providers
+ link: docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/hosted-payment-page-flow-for-payment-service-providers.html
+ - title: OMS payment flow for payment service providers
+ link: docs/dg/dev/acp/apis-and-flows-for-payment-service-providers/oms-payment-flow-for-payment-service-providers.html
+---
+
+All PSP integrations are based on a synchronous API. A synchronous API is used to process payments and transfers to merchants. The following endpoints are used:
+
+* `/configure`: Used from the ACP app catalog to configure an app.
+* `/disconnect`: Used from the ACP app catalog to disconnect an app.
+* `/initialize-payment`: Used from the Spryker backend after an order was created and before the hosted payment page is shown to the customer. Initializes the payment in the PSP app, and the PSP app returns the URL to the hosted payment page.
+* `/payments`: Glue API endpoint to initialize a payment.
+* `/payment-cancellations`: Glue API endpoint to cancel a previously created payment.
+* `/confirm-pre-order-payment`: Used from the Spryker backend after an order was created using a headless approach where the payment gets created before the order persists. This connects a previously created (preOrder) payment on the app side with the order on the Zed side.
+* `/cancel-pre-order-payment`: Used from the Glue API application in a headless approach when a customer clicks cancel or in case the headless implementation requires a cancellation. This cancels the payment on the PSP side.
+* `/payments/transfers`: Used from the Back Office or OMS with the app being used in a marketplace. This initiates a money transfer from the marketplace to the merchant.
+* `/webhooks`: Used from external applications to send requests to an app.
+* `/webhooks/test`: Used from external applications in test mode to send requests to an app.
diff --git a/docs/dg/dev/acp/apis-and-overview-diagrams-for-payment-service-providers.md b/docs/dg/dev/acp/apis-and-overview-diagrams-for-payment-service-providers.md
deleted file mode 100644
index ae594fbf293..00000000000
--- a/docs/dg/dev/acp/apis-and-overview-diagrams-for-payment-service-providers.md
+++ /dev/null
@@ -1,89 +0,0 @@
----
-title: APIs and overview diagrams for payment service providers
-description: Overview of PSP APIs
-last_updated: Sep 27, 2024
-template: concept-topic-template
-related:
- - title: Stripe
- link: docs/pbc/all/payment-service-provider/page.version/base-shop/third-party-integrations/stripe/stripe.html
----
-
-This document provides an overview of Payment Service Provider (PSP) APIs. All PSPs use both synchronous and asynchronous APIs.
-
-The following diagram explains the configuration and disconnect flows for a payment app.
-
-![configure-and-disconnect-flow](https://spryker.s3.eu-central-1.amazonaws.com/docs/dg/dev/acp/apis-and-overview-diagrams-for-payment-service-providers.md/configure-and-disconnect-flows.png)
-
-The following messages are optional:
-* `AddPaymentMethod`
-* `UpdatePaymentMethod`
-* `DeletePaymentMethod`
-* `ReadyForMerchantAppOnboarding`
-
-The Payment Method related messages are used to manage payment methods in Spryker. These messages are sent only when a payment method configuration changes or when the list of available payment methods changes.
-
-The `ReadyForMerchantAppOnboarding` message is used to inform Spryker that the app is ready to onboard merchants; used only for marketplace projects.
-
-The following diagram shows the flow of an order in the OMS together with an app.
-
-![oms-payment-flow](https://spryker.s3.eu-central-1.amazonaws.com/docs/dg/dev/acp/apis-and-overview-diagrams-for-payment-service-providers.md/oms-payment-flow.png)
-
-Optional elements:
-* `/payments/transfers` transfers request: used only in marketplaces.
-* `CancelPayment` message: used only when a payment needs to be canceled.
-* `RefundPayment` message: used only when the refund process is triggered for one or more order items.
-
-The following diagram explains the hosted payment page flow.
-
-![hosted-payment-page-flow](https://spryker.s3.eu-central-1.amazonaws.com/docs/dg/dev/acp/apis-and-overview-diagrams-for-payment-service-providers.md/hosted-payment-page-flow.png)
-
-The following diagram explains the flow of a headless payment page based on Glue API.
-
-![headless-payment-flow](https://spryker.s3.eu-central-1.amazonaws.com/docs/dg/dev/acp/apis-and-overview-diagrams-for-payment-service-providers.md/headless-payment-flow.png)
-
-`CancelPreOrderPayment` is an optional element. It's used to cancel a payment that had been created before an order was persisted. This can happen when a customer clicks cancel or when the headless implementation requires a cancellation.
-
-For information about endpoints and messages, see the following sections.
-
-## Asynchronous API
-
-All PSP integrations are based on a asynchronous API. The asynchronous API is used to process payments and refunds. The following asynchronous messages are used:
-
-Sent from the app:
-* `AddPaymentMethod`: A new payment method is added.
-* `UpdatePaymentMethod`: A payment method is updated.
-* `DeletePaymentMethod`: A payment method is deleted.
-* `PaymentAuthorized`: A payment is authorized.
-* `PaymentAuthorizationFailed`: Payment authorization fails.
-* `PaymentCaptured`: Payment is captured.
-* `PaymentCaptureFailed`: Payment capture fails.
-* `PaymentRefunded`: A payment is refunded.
-* `PaymentRefundFailed`: Payment refund fails.
-* `PaymentCanceled`: A payment is canceled.
-* `PaymentCancellationFailed`: Payment cancellation fails.
-* `PaymentCreated`: A payment is created.
-* `PaymentUpdated`: A payment is updated.
-* `ReadyForMerchantAppOnboarding`: App is ready to onboard merchants.
-* `MerchantAppOnboardingStatusChanged`: Merchant app onboarding status changes.
-* `AppConfigUpdated`: App configuration is updated.
-
-Sent from Spryker:
-* `CancelPayment`: Initiates payment cancellation.
-* `CapturePayment`: Initiates payment capture.
-* `RefundPayment`: Initiates payment refund.
-
-
-## Synchronous API
-
-All PSP integrations are based on a synchronous API. A synchronous API is used to process payments and refunds. The following endpoints are used:
-
-* `/configure`: Used from the ACP app catalog to configure an app.
-* `/disconnect`: Used from the ACP app catalog to disconnect an app.
-* `/initialize-payment`: Used from the Spryker backend after an order was created and before the hosted payment page is shown to the customer. Initialize the payment in the PSP app, and the PSP app returns the URL to the hosted payment page.
-* `/payments`: Glue API endpoint to initialize a payment.
-* `/payment-cancellations`: Glue API endpoint to cancel a previously created payment.
-* `/confirm-pre-order-payment`: Used from the Spryker backend after an order was created using a headless approach where the payment gets created before the order persists. This connects a previously created (preOrder) payment on the app side with the order on the Zed side.
-* `/cancel-pre-order-payment`: Used from the Glue API application in a headless approach when a customer clicks cancel or in case the headless implementation requires a cancellation. This cancels the payment on the PSP side.
-* `/payments/transfers`: Used from the Back Office or OMS with the app being used in a marketplace. This initiates the transfer of money from the marketplace to the merchant.
-* `/webhooks`: Used from external applications to send requests to an app.
-* `/webhooks/test`: Used from external applications in test mode to send requests to an app.
diff --git a/docs/dg/dev/architecture/architectural-convention.md b/docs/dg/dev/architecture/architectural-convention.md
index f7ac8669040..71aed562c47 100644
--- a/docs/dg/dev/architecture/architectural-convention.md
+++ b/docs/dg/dev/architecture/architectural-convention.md
@@ -333,7 +333,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. Due to 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. 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.
```text
[Organization]
diff --git a/docs/dg/dev/architecture/technology-stack.md b/docs/dg/dev/architecture/technology-stack.md
index a7c6792ba5f..e13b21f80cf 100644
--- a/docs/dg/dev/architecture/technology-stack.md
+++ b/docs/dg/dev/architecture/technology-stack.md
@@ -24,7 +24,7 @@ Spryker uses a set of well-known tools:
* *Redis*. Redis is the most popular key-value database; the name is an abbreviation for Remote Dictionary Server. In Spryker it's used as a client-side data source for localized content. The Redis key-value database avoids the necessity of making queries to the SQL database, which can come with a high cost. The data stored in Redis is kept in sync with the data stored in the SQL database through specialized cronjobs. Redis supports replication, so it's a solution that enables scalability.
* *Elasticsearch*. Elasticsearch is a distributed search engine that offers an easy-to-configure and easy-to-integrate solution for making searches fast. The relevant search data is stored in dedicated storage, so is similar to using Redis storage; it avoids making a costly query to the SQL database. The data stored in Elasticsearch is updated through cronjobs.
-* *Symfony*. Symfony is the leading PHP framework for creating MVC web applications. Spryker implements the model-view-controller design pattern with Symfony. MVC design pattern aims to separate the business logic from the view, making the source code easier to understand and maintain due to this separation.
+* *Symfony*. Symfony is the leading PHP framework for creating MVC web applications. Spryker implements the model-view-controller design pattern with Symfony. MVC design pattern aims to separate the business logic from the view, making the source code easier to understand and maintain because of this separation.
* *Twig*. It is a fast and modern PHP templating engine.
* *Propel2*. It is an ORM library for PHP, offering an object-relational mapping toolkit. It's part of the Symfony framework. Propel's principal function is to provide the mapping between database tables and PHP classes. Propel includes a source code generator for creating PHP classes based on the data model definition given through an XML file. The data model definition is independent of the database used, so Spryker provides a single interface that enables access to different database management systems.
* *Jenkins*. Cronjobs can be easily configured in the jobs configuration file.
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 a94122b8e0f..2c985d27363 100644
--- a/docs/dg/dev/backend-development/cronjobs/optimizing-jenkins-execution.md
+++ b/docs/dg/dev/backend-development/cronjobs/optimizing-jenkins-execution.md
@@ -13,7 +13,7 @@ Our out-of-the-box (OOTB) system requires a specific command (Worker - `queue:wo
By default, our system has a limit of two Jenkins executors for each environment. This limit is 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.
-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 due to a random combination of several workers simultaneously processing heavy messages for multiple stores.
+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.
There are two potential solutions to address this problem: application optimization and better background job orchestration.
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
index a827b0cfd71..4b34ec75648 100644
--- 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
@@ -11,7 +11,7 @@ By default, the system requires the `queue:worker:start` command to be continuou
By default, Spryker has a limit of two Jenkins executors for each environment. This limit is 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 due to a random combination of several workers simultaneously processing heavy messages for multiple stores.
+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.
diff --git a/docs/dg/dev/backend-development/plugins/get-an-overview-of-the-used-plugins.md b/docs/dg/dev/backend-development/plugins/get-an-overview-of-the-used-plugins.md
index 1fc8a9d6c68..4dc35611165 100644
--- a/docs/dg/dev/backend-development/plugins/get-an-overview-of-the-used-plugins.md
+++ b/docs/dg/dev/backend-development/plugins/get-an-overview-of-the-used-plugins.md
@@ -13,7 +13,7 @@ related:
link: docs/dg/dev/backend-development/plugins/plugins.html
---
-To use a new feature projects most likely need to add some plugins to their `*DependencyProvider`. Currently, it is not easy for projects to integrate a new feature due to the difficulties in identifying to which *`DependencyProvider` plugin A* of *module B* can be added to bring *functionality X*.
+To use a new feature projects most likely need to add some plugins to their `*DependencyProvider`. Currently, it is not easy for projects to integrate a new feature because of the difficulties in identifying to which *`DependencyProvider` plugin A* of *module B* can be added to bring *functionality X*.
To see which [Plugin](/docs/dg/dev/backend-development/plugins/plugins.html) can be used in which `DependencyProvider` we added a feature called **Plugin Overview**. This feature gives you several ways of displaying our plugin usages. The feature brings a console command (`vendor/bin/console dev:plugin-usage:dump`) and a [GUI in Zed](https://zed.mysprykershop.com/development/dependency-provider-plugin-usage).
diff --git a/docs/dg/dev/backend-development/zed-ui-tables/create-and-configure-zed-tables.md b/docs/dg/dev/backend-development/zed-ui-tables/create-and-configure-zed-tables.md
index f09ba1fa811..5500c2f1ec6 100644
--- a/docs/dg/dev/backend-development/zed-ui-tables/create-and-configure-zed-tables.md
+++ b/docs/dg/dev/backend-development/zed-ui-tables/create-and-configure-zed-tables.md
@@ -103,7 +103,7 @@ $config->setDefaultSortField(SpySalesOrderTableMap::COL_CREATED_ATб \Spryker\Ze
### Configure search by columns
-The default search option in Back Office data tables searches for anything that contains the specified substrings. This default search makes use of the SQL logical operator ‘LIKE’ in combination with ‘LOWER’ for comparison. It may result in performance issues on larger tables due to indexes not being used.
+The default search option in Back Office data tables searches for anything that contains the specified substrings. This default search makes use of the SQL logical operator ‘LIKE’ in combination with ‘LOWER’ for comparison. It may result in performance issues on larger tables because of indexes not being used.
Search by columns can be used on all Back Office data tables which extend the `AbstractTable` class.
diff --git a/docs/dg/dev/backend-development/zed/business-layer/custom-exceptions.md b/docs/dg/dev/backend-development/zed/business-layer/custom-exceptions.md
index 9660b9c5865..a0e3f4b43aa 100644
--- a/docs/dg/dev/backend-development/zed/business-layer/custom-exceptions.md
+++ b/docs/dg/dev/backend-development/zed/business-layer/custom-exceptions.md
@@ -1,6 +1,6 @@
---
title: Custom exceptions
-description: When you need to throw an exception, you should define your own type of exception.
+description: Define and handle custom exceptions in Spryker's Business Layer to streamline error management and ensure clean code. Create and manage exceptions effectively.
last_updated: Sep 27, 2021
template: howto-guide-template
originalLink: https://documentation.spryker.com/2021080/docs/custom-exceptions
diff --git a/docs/dg/dev/backend-development/zed/business-layer/facade/a-facade-implementation.md b/docs/dg/dev/backend-development/zed/business-layer/facade/a-facade-implementation.md
index 91781bf6c10..6f4322ed25c 100644
--- a/docs/dg/dev/backend-development/zed/business-layer/facade/a-facade-implementation.md
+++ b/docs/dg/dev/backend-development/zed/business-layer/facade/a-facade-implementation.md
@@ -1,6 +1,6 @@
---
title: A facade implementation
-description: This document describes a facade implementation.
+description: Implement a facade in Business Layer to streamline interactions between modules. This guide explains best practices for creating a centralized API for module communication.
last_updated: Jun 16, 2021
template: howto-guide-template
originalLink: https://documentation.spryker.com/2021080/docs/implementing-facade
@@ -13,7 +13,7 @@ related:
- title: Facade use cases
link: docs/dg/dev/backend-development/zed/business-layer/facade/facade-use-cases.html
- title: Design by Contract (DBC) - Facade
- link: docs/scos/dev/back-end-development/zed/business-layer/facade/design-by-contract-dbc-facade.html
+ link: docs/dg/dev/backend-development/zed/business-layer/facade/design-by-contract-dbc-facade.html
---
## AbstractFacade
diff --git a/docs/dg/dev/backend-development/zed/business-layer/facade/design-by-contract-dbc-facade.md b/docs/dg/dev/backend-development/zed/business-layer/facade/design-by-contract-dbc-facade.md
index fbf7296de3f..7e405c576f5 100644
--- a/docs/dg/dev/backend-development/zed/business-layer/facade/design-by-contract-dbc-facade.md
+++ b/docs/dg/dev/backend-development/zed/business-layer/facade/design-by-contract-dbc-facade.md
@@ -11,7 +11,7 @@ related:
- title: Facade
link: docs/dg/dev/backend-development/zed/business-layer/facade/facade.html
- title: A facade implementation
- link: docs/scos/dev/back-end-development/zed/business-layer/facade/a-facade-implementation.html
+ link: docs/dg/dev/backend-development/zed/business-layer/facade/a-facade-implementation.html
- title: Facade use cases
link: docs/dg/dev/backend-development/zed/business-layer/facade/facade-use-cases.html
---
diff --git a/docs/dg/dev/backend-development/zed/business-layer/facade/facade-use-cases.md b/docs/dg/dev/backend-development/zed/business-layer/facade/facade-use-cases.md
index af78364e515..b9201c40831 100644
--- a/docs/dg/dev/backend-development/zed/business-layer/facade/facade-use-cases.md
+++ b/docs/dg/dev/backend-development/zed/business-layer/facade/facade-use-cases.md
@@ -1,6 +1,6 @@
---
title: Facade use cases
-description: This document describes facade use cases.
+description: Explore use cases for facades in the Business Layer. Learn how to centralize logic and streamline module communication for efficient and maintainable backend development.
last_updated: Jun 16, 2021
template: howto-guide-template
originalLink: https://documentation.spryker.com/2021080/docs/using-facade
@@ -12,9 +12,9 @@ related:
- title: Facade
link: docs/dg/dev/backend-development/zed/business-layer/facade/facade.html
- title: A facade implementation
- link: docs/scos/dev/back-end-development/zed/business-layer/facade/a-facade-implementation.html
+ link: docs/dg/dev/backend-development/zed/business-layer/facade/a-facade-implementation.html
- title: Design by Contract (DBC) - Facade
- link: docs/scos/dev/back-end-development/zed/business-layer/facade/design-by-contract-dbc-facade.html
+ link: docs/dg/dev/backend-development/zed/business-layer/facade/design-by-contract-dbc-facade.html
---
This document describes the use cases of a facade.
diff --git a/docs/dg/dev/backend-development/zed/business-layer/facade/facade.md b/docs/dg/dev/backend-development/zed/business-layer/facade/facade.md
index 3bfd306a42e..6a6691b4287 100644
--- a/docs/dg/dev/backend-development/zed/business-layer/facade/facade.md
+++ b/docs/dg/dev/backend-development/zed/business-layer/facade/facade.md
@@ -9,11 +9,11 @@ redirect_from:
- /docs/scos/dev/back-end-development/zed/business-layer/facade/facade.html
related:
- title: A facade implementation
- link: docs/scos/dev/back-end-development/zed/business-layer/facade/a-facade-implementation.html
+ link: docs/dg/dev/backend-development/zed/business-layer/facade/a-facade-implementation.html
- title: Facade use cases
link: docs/dg/dev/backend-development/zed/business-layer/facade/facade-use-cases.html
- title: Design by Contract (DBC) - Facade
- link: docs/scos/dev/back-end-development/zed/business-layer/facade/design-by-contract-dbc-facade.html
+ link: docs/dg/dev/backend-development/zed/business-layer/facade/design-by-contract-dbc-facade.html
---
A *facade* acts as an internal API. The main responsibility of the facade is to hide the internal implementation.
diff --git a/docs/dg/dev/backend-development/zed/communication-layer/communication-layer.md b/docs/dg/dev/backend-development/zed/communication-layer/communication-layer.md
index 8ba07efc48c..7ae3b5cff13 100644
--- a/docs/dg/dev/backend-development/zed/communication-layer/communication-layer.md
+++ b/docs/dg/dev/backend-development/zed/communication-layer/communication-layer.md
@@ -9,7 +9,7 @@ redirect_from:
- /docs/scos/dev/back-end-development/zed/communication-layer/communication-layer.html
related:
- title: Addi indexes to foreign key columns - index generator
- link: docs/scos/dev/back-end-development/zed/communication-layer/adding-indexes-to-foreign-key-columns-index-generator.html
+ link: docs/dg/dev/backend-development/zed/communication-layer/add-indexes-to-foreign-key-columns-index-generator.html
- title: About the Business layer
link: docs/dg/dev/backend-development/zed/business-layer/business-layer.html
- title: About the Persistence layer
diff --git a/docs/dg/dev/backend-development/zed/create-table-views.md b/docs/dg/dev/backend-development/zed/create-table-views.md
index edd89c8049a..d2bd424a2f5 100644
--- a/docs/dg/dev/backend-development/zed/create-table-views.md
+++ b/docs/dg/dev/backend-development/zed/create-table-views.md
@@ -1,6 +1,6 @@
---
title: Create table views
-description: Use the guide to render data, fetched from the database, in the table.
+description: Learn to create and configure table views in Zed. This guide covers steps for defining custom table data and optimizing the user interface for efficient data management.
last_updated: Jun 16, 2021
template: howto-guide-template
originalLink: https://documentation.spryker.com/2021080/docs/t-create-table-view
diff --git a/docs/dg/dev/backend-development/zed/persistence-layer/database-overview.md b/docs/dg/dev/backend-development/zed/persistence-layer/database-overview.md
index 94bd59c778b..929dcf419c7 100644
--- a/docs/dg/dev/backend-development/zed/persistence-layer/database-overview.md
+++ b/docs/dg/dev/backend-development/zed/persistence-layer/database-overview.md
@@ -1,6 +1,6 @@
---
title: Database overview
-description: This document overviews the database in the ORM directory.
+description: Overview of the persistence layer. Learn about schema design, entity management, and efficient data handling in Zed backend development.
last_updated: Jun 16, 2021
template: howto-guide-template
originalLink: https://documentation.spryker.com/2021080/docs/database-overview
@@ -9,17 +9,17 @@ redirect_from:
- /docs/scos/dev/back-end-development/zed/persistence-layer/database-overview.html
related:
- title: Database schema definition
- link: docs/scos/dev/back-end-development/zed/persistence-layer/database-schema-definition.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/database-schema-definition.html
- title: Entity
- link: docs/scos/dev/back-end-development/zed/persistence-layer/entity.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/entity.html
- title: Entity manager
- link: docs/scos/dev/back-end-development/zed/persistence-layer/entity-manager.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/entity-manager.html
- title: About the query container
- link: docs/scos/dev/back-end-development/zed/persistence-layer/query-container/query-container.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/query-container/query-container.html
- title: Query objects - creation and usage
- link: docs/scos/dev/back-end-development/zed/persistence-layer/query-objects-creation-and-usage.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/query-objects-creation-and-usage.html
- title: Repository
- link: docs/scos/dev/back-end-development/zed/persistence-layer/repository.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/repository.html
---
diff --git a/docs/dg/dev/backend-development/zed/persistence-layer/database-schema-definition.md b/docs/dg/dev/backend-development/zed/persistence-layer/database-schema-definition.md
index 2b49ab766c6..77dd6aea550 100644
--- a/docs/dg/dev/backend-development/zed/persistence-layer/database-schema-definition.md
+++ b/docs/dg/dev/backend-development/zed/persistence-layer/database-schema-definition.md
@@ -9,17 +9,17 @@ redirect_from:
- /docs/scos/dev/back-end-development/zed/persistence-layer/database-schema-definition.html
related:
- title: Database overview
- link: docs/scos/dev/back-end-development/zed/persistence-layer/database-overview.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/database-overview.html
- title: Entity
- link: docs/scos/dev/back-end-development/zed/persistence-layer/entity.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/entity.html
- title: Entity manager
- link: docs/scos/dev/back-end-development/zed/persistence-layer/entity-manager.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/entity-manager.html
- title: About the query container
- link: docs/scos/dev/back-end-development/zed/persistence-layer/query-container/query-container.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/query-container/query-container.html
- title: Query objects - creation and usage
- link: docs/scos/dev/back-end-development/zed/persistence-layer/query-objects-creation-and-usage.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/query-objects-creation-and-usage.html
- title: Repository
- link: docs/scos/dev/back-end-development/zed/persistence-layer/repository.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/repository.html
---
With Propel, a [database schema](http://propelorm.org/documentation/reference/schema.html) is defined in an XML file. Each module has its own part of the big schema that is collected and merged.
diff --git a/docs/dg/dev/backend-development/zed/persistence-layer/entity-manager.md b/docs/dg/dev/backend-development/zed/persistence-layer/entity-manager.md
index 731ac1b05fe..ad413267381 100644
--- a/docs/dg/dev/backend-development/zed/persistence-layer/entity-manager.md
+++ b/docs/dg/dev/backend-development/zed/persistence-layer/entity-manager.md
@@ -9,17 +9,17 @@ redirect_from:
- /docs/scos/dev/back-end-development/zed/persistence-layer/entity-manager.html
related:
- title: Database overview
- link: docs/scos/dev/back-end-development/zed/persistence-layer/database-overview.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/database-overview.html
- title: Database schema definition
- link: docs/scos/dev/back-end-development/zed/persistence-layer/database-schema-definition.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/database-schema-definition.html
- title: Entity
- link: docs/scos/dev/back-end-development/zed/persistence-layer/entity.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/entity.html
- title: About the query container
- link: docs/scos/dev/back-end-development/zed/persistence-layer/query-container/query-container.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/query-container/query-container.html
- title: Query objects - creation and usage
- link: docs/scos/dev/back-end-development/zed/persistence-layer/query-objects-creation-and-usage.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/query-objects-creation-and-usage.html
- title: Repository
- link: docs/scos/dev/back-end-development/zed/persistence-layer/repository.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/repository.html
---
From Kernel version 3.2, you can create an entity manager class in your `Persistence` layer. It is responsible for saving, updating, and deleting data. Using the class, you can separate data from persistence details (Propel).
diff --git a/docs/dg/dev/backend-development/zed/persistence-layer/entity.md b/docs/dg/dev/backend-development/zed/persistence-layer/entity.md
index cededf5eb30..3e0f71af2c5 100644
--- a/docs/dg/dev/backend-development/zed/persistence-layer/entity.md
+++ b/docs/dg/dev/backend-development/zed/persistence-layer/entity.md
@@ -9,17 +9,17 @@ redirect_from:
- /docs/scos/dev/back-end-development/zed/persistence-layer/entity.html
related:
- title: Database overview
- link: docs/scos/dev/back-end-development/zed/persistence-layer/database-overview.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/database-overview.html
- title: Database schema definition
- link: docs/scos/dev/back-end-development/zed/persistence-layer/database-schema-definition.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/database-schema-definition.html
- title: Entity manager
- link: docs/scos/dev/back-end-development/zed/persistence-layer/entity-manager.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/entity-manager.html
- title: About the query container
- link: docs/scos/dev/back-end-development/zed/persistence-layer/query-container/query-container.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/query-container/query-container.html
- title: Query objects - creation and usage
- link: docs/scos/dev/back-end-development/zed/persistence-layer/query-objects-creation-and-usage.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/query-objects-creation-and-usage.html
- title: Repository
- link: docs/scos/dev/back-end-development/zed/persistence-layer/repository.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/repository.html
---
In Spryker, an entity represents one entry from a table in the database. Entities are an implementation of the [Active record design pattern](https://en.wikipedia.org/wiki/Active_record_pattern), so their usage is very simple. For more details, see [Propel's Active Record Reference](http://propelorm.org/documentation/reference/active-record.html).
diff --git a/docs/dg/dev/backend-development/zed/persistence-layer/persistence-layer.md b/docs/dg/dev/backend-development/zed/persistence-layer/persistence-layer.md
index 83679735422..d98ee446370 100644
--- a/docs/dg/dev/backend-development/zed/persistence-layer/persistence-layer.md
+++ b/docs/dg/dev/backend-development/zed/persistence-layer/persistence-layer.md
@@ -9,19 +9,19 @@ redirect_from:
- /docs/scos/dev/back-end-development/zed/persistence-layer/persistence-layer.html
related:
- title: Database overview
- link: docs/scos/dev/back-end-development/zed/persistence-layer/database-overview.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/database-overview.html
- title: Database schema definition
- link: docs/scos/dev/back-end-development/zed/persistence-layer/database-schema-definition.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/database-schema-definition.html
- title: Entity
- link: docs/scos/dev/back-end-development/zed/persistence-layer/entity.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/entity.html
- title: Entity manager
- link: docs/scos/dev/back-end-development/zed/persistence-layer/entity-manager.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/entity-manager.html
- title: About the query container
- link: docs/scos/dev/back-end-development/zed/persistence-layer/query-container/query-container.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/query-container/query-container.html
- title: Query objects - creation and usage
- link: docs/scos/dev/back-end-development/zed/persistence-layer/query-objects-creation-and-usage.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/query-objects-creation-and-usage.html
- title: Repository
- link: docs/scos/dev/back-end-development/zed/persistence-layer/repository.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/repository.html
- title: About the Business layer
link: docs/dg/dev/backend-development/zed/business-layer/business-layer.html
- title: About Communication layer
diff --git a/docs/dg/dev/backend-development/zed/persistence-layer/query-container/implement-a-query-container.md b/docs/dg/dev/backend-development/zed/persistence-layer/query-container/implement-a-query-container.md
index fe91a8b9de4..6794c8640d5 100644
--- a/docs/dg/dev/backend-development/zed/persistence-layer/query-container/implement-a-query-container.md
+++ b/docs/dg/dev/backend-development/zed/persistence-layer/query-container/implement-a-query-container.md
@@ -10,9 +10,9 @@ redirect_from:
- /docs/scos/dev/back-end-development/zed/persistence-layer/query-container/implementing-a-query-container.html
related:
- title: About the query container
- link: docs/scos/dev/back-end-development/zed/persistence-layer/query-container/query-container.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/query-container/query-container.html
- title: Using a query container
- link: docs/scos/dev/back-end-development/zed/persistence-layer/query-container/using-a-query-container.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/query-container/using-a-query-container.html
---
{% info_block infoBox "When to use query containers" %}
diff --git a/docs/dg/dev/backend-development/zed/persistence-layer/query-container/query-container.md b/docs/dg/dev/backend-development/zed/persistence-layer/query-container/query-container.md
index 2833d2e7202..b68020dacd4 100644
--- a/docs/dg/dev/backend-development/zed/persistence-layer/query-container/query-container.md
+++ b/docs/dg/dev/backend-development/zed/persistence-layer/query-container/query-container.md
@@ -1,6 +1,6 @@
---
title: About the query container
-description: A query container holds all the database queries of the current module.
+description: Query containers in Persistence Layer. This guide explains their role in managing database queries, ensuring modular and efficient data access for Zed backend development.
last_updated: Jun 16, 2021
template: howto-guide-template
originalLink: https://documentation.spryker.com/2021080/docs/query-container
@@ -9,9 +9,9 @@ redirect_from:
- /docs/scos/dev/back-end-development/zed/persistence-layer/query-container/query-container.html
related:
- title: Implement a query container
- link: docs/scos/dev/back-end-development/zed/persistence-layer/query-container/implementing-a-query-container.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/query-container/implement-a-query-container.html
- title: Using a query container
- link: docs/scos/dev/back-end-development/zed/persistence-layer/query-container/using-a-query-container.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/query-container/using-a-query-container.html
---
{% info_block infoBox "When to use query containers" %}
diff --git a/docs/dg/dev/backend-development/zed/persistence-layer/query-container/using-a-query-container.md b/docs/dg/dev/backend-development/zed/persistence-layer/query-container/using-a-query-container.md
index 161c82c00ea..0cb4db03069 100644
--- a/docs/dg/dev/backend-development/zed/persistence-layer/query-container/using-a-query-container.md
+++ b/docs/dg/dev/backend-development/zed/persistence-layer/query-container/using-a-query-container.md
@@ -9,9 +9,9 @@ redirect_from:
- /docs/scos/dev/back-end-development/zed/persistence-layer/query-container/using-a-query-container.html
related:
- title: About the query container
- link: docs/scos/dev/back-end-development/zed/persistence-layer/query-container/query-container.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/query-container/query-container.html
- title: Implement a query container
- link: docs/scos/dev/back-end-development/zed/persistence-layer/query-container/implementing-a-query-container.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/query-container/implement-a-query-container.html
---
{% info_block infoBox "When to use query containers" %}
diff --git a/docs/dg/dev/backend-development/zed/persistence-layer/query-objects-creation-and-usage.md b/docs/dg/dev/backend-development/zed/persistence-layer/query-objects-creation-and-usage.md
index e3065fdb423..b2541fcebab 100644
--- a/docs/dg/dev/backend-development/zed/persistence-layer/query-objects-creation-and-usage.md
+++ b/docs/dg/dev/backend-development/zed/persistence-layer/query-objects-creation-and-usage.md
@@ -9,17 +9,17 @@ redirect_from:
- /docs/scos/dev/back-end-development/zed/persistence-layer/query-objects-creation-and-usage.html
related:
- title: Database overview
- link: docs/scos/dev/back-end-development/zed/persistence-layer/database-overview.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/database-overview.html
- title: Database schema definition
- link: docs/scos/dev/back-end-development/zed/persistence-layer/database-schema-definition.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/database-schema-definition.html
- title: Entity
- link: docs/scos/dev/back-end-development/zed/persistence-layer/entity.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/entity.html
- title: Entity manager
- link: docs/scos/dev/back-end-development/zed/persistence-layer/entity-manager.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/entity-manager.html
- title: About the query container
- link: docs/scos/dev/back-end-development/zed/persistence-layer/query-container/query-container.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/query-container/query-container.html
- title: Repository
- link: docs/scos/dev/back-end-development/zed/persistence-layer/repository.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/repository.html
---
Query objects provide an object-oriented API for writing database queries which are used in [query containers](/docs/dg/dev/backend-development/zed/persistence-layer/query-container/query-container.html).
diff --git a/docs/dg/dev/backend-development/zed/persistence-layer/repository.md b/docs/dg/dev/backend-development/zed/persistence-layer/repository.md
index dd42da6405a..deaf6634e86 100644
--- a/docs/dg/dev/backend-development/zed/persistence-layer/repository.md
+++ b/docs/dg/dev/backend-development/zed/persistence-layer/repository.md
@@ -9,17 +9,17 @@ redirect_from:
- /docs/scos/dev/back-end-development/zed/persistence-layer/repository.html
related:
- title: Database overview
- link: docs/scos/dev/back-end-development/zed/persistence-layer/database-overview.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/database-overview.html
- title: Database schema definition
- link: docs/scos/dev/back-end-development/zed/persistence-layer/database-schema-definition.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/database-schema-definition.html
- title: Entity
- link: docs/scos/dev/back-end-development/zed/persistence-layer/entity.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/entity.html
- title: Entity manager
- link: docs/scos/dev/back-end-development/zed/persistence-layer/entity-manager.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/entity-manager.html
- title: About the query container
- link: docs/scos/dev/back-end-development/zed/persistence-layer/query-container/query-container.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/query-container/query-container.html
- title: Query objects - creation and usage
- link: docs/scos/dev/back-end-development/zed/persistence-layer/query-objects-creation-and-usage.html
+ link: docs/dg/dev/backend-development/zed/persistence-layer/query-objects-creation-and-usage.html
---
Since Kernel version 3.2 it's possible to use a Repository class in your persistence layer. The repository implements the [repository pattern](https://martinfowler.com/eaaCatalog/repository.html), which means you have a clear separation between business and persistence layers. Propel entities are not allowed outside the persistence layer. We are using transfer objects instead. This separation enables switching to different database systems or ORMs, you could even use NOSQL to store your data.
diff --git a/docs/dg/dev/backend-development/zed/zed.md b/docs/dg/dev/backend-development/zed/zed.md
index 629ff5538b6..5005b23937d 100644
--- a/docs/dg/dev/backend-development/zed/zed.md
+++ b/docs/dg/dev/backend-development/zed/zed.md
@@ -9,7 +9,7 @@ redirect_from:
- /docs/scos/dev/back-end-development/zed/zed.html
related:
- title: Add navigation in the Back Office
- link: docs/scos/dev/back-end-development/zed/add-navigation-in-the-back-office.html
+ link: docs/dg/dev/backend-development/zed/add-navigation-in-the-back-office.html
---
Zed is one of the application layers of the Spryker Commerce OS, providing the Back Office and backend functionality.
diff --git a/docs/dg/dev/best-practices/best-practices.md b/docs/dg/dev/best-practices/best-practices.md
index 59faff59a07..ba17943c940 100644
--- a/docs/dg/dev/best-practices/best-practices.md
+++ b/docs/dg/dev/best-practices/best-practices.md
@@ -1,6 +1,6 @@
---
title: Best practices
-description: Best practices for developers working on Spryker Commerce OS
+description: Discover best practices for Spryker development, including coding standards, modular architecture, testing strategies, and optimization techniques.
template: concept-topic-template
redirect_from:
- /docs/scos/dev/best-practices/
diff --git a/docs/dg/dev/best-practices/non-functional-requirement-templates/monitorable-process-guidelines.md b/docs/dg/dev/best-practices/non-functional-requirement-templates/monitorable-process-guidelines.md
index 97a92418bb5..4a09a38034b 100644
--- a/docs/dg/dev/best-practices/non-functional-requirement-templates/monitorable-process-guidelines.md
+++ b/docs/dg/dev/best-practices/non-functional-requirement-templates/monitorable-process-guidelines.md
@@ -64,7 +64,7 @@ Applies to all application components.
### What not to log?
* Unreasonable logging: Avoid logging without a clear purpose. When deciding to create a log entry, identify at least one use case for the data.
* Performance critical places: Minimize logging in areas where performance is critical. If there's a performance-critical process or a large cycle as a sub-process element, try to strike a balance between performance and traceability.
-* Audit trail: While it's recommended to log the audit trails of significant entity changes, these logs shouldn't be sent to the regular log system due to the sensitive nature of the data typically involved in authentication and authorization.
+* Audit trail: While it's recommended to log the audit trails of significant entity changes, these logs shouldn't be sent to the regular log system because of the sensitive nature of the data typically involved in authentication and authorization.
### Log levels
Appropriately implement the following log levels in application workflows to simplify issue investigations and resolutions. The log levels are based on Syslog [RFC 5424](https://datatracker.ietf.org/doc/html/rfc5424).
diff --git a/docs/dg/dev/best-practices/non-functional-requirement-templates/non-functional-requirement-templates.md b/docs/dg/dev/best-practices/non-functional-requirement-templates/non-functional-requirement-templates.md
index b197070d1f2..9df9173f55f 100644
--- a/docs/dg/dev/best-practices/non-functional-requirement-templates/non-functional-requirement-templates.md
+++ b/docs/dg/dev/best-practices/non-functional-requirement-templates/non-functional-requirement-templates.md
@@ -1,6 +1,6 @@
---
title: Non-functional requirement templates
-description:
+description: Define key system expectations using Spryker's non-functional requirement templates. Focus on performance, scalability, and security to align development goals effectively.
template: concept-topic-template
redirect_from:
---
diff --git a/docs/dg/dev/best-practices/non-functional-requirement-templates/operatable-feature-guidelines.md b/docs/dg/dev/best-practices/non-functional-requirement-templates/operatable-feature-guidelines.md
index e8f80e51df0..9417f330d9f 100644
--- a/docs/dg/dev/best-practices/non-functional-requirement-templates/operatable-feature-guidelines.md
+++ b/docs/dg/dev/best-practices/non-functional-requirement-templates/operatable-feature-guidelines.md
@@ -1,6 +1,6 @@
---
title: Operatable feature guidelines
-description: Guidelines for enabling application operation.
+description: Learn Spryker’s operatable feature guidelines to ensure features are scalable, reliable, and manageable. Optimize performance while maintaining operational efficiency.
last_updated: April 23, 2024
template: concept-topic-template
related:
diff --git a/docs/dg/dev/best-practices/non-functional-requirement-templates/operational-and-deployment-guidelines.md b/docs/dg/dev/best-practices/non-functional-requirement-templates/operational-and-deployment-guidelines.md
index d284447a36c..87c1b80f68b 100644
--- a/docs/dg/dev/best-practices/non-functional-requirement-templates/operational-and-deployment-guidelines.md
+++ b/docs/dg/dev/best-practices/non-functional-requirement-templates/operational-and-deployment-guidelines.md
@@ -43,7 +43,7 @@ Software architecture and design must ensure that there is no negative impact on
## Security guidelines
-Make sure to define and follow your own project's [security best practices](/docs/scos/dev/guidelines/security-guidelines.html).
+Make sure to define and follow your own project's [security best practices](/docs/dg/dev/guidelines/security-guidelines.html).
## Deployability guidelines
diff --git a/docs/dg/dev/best-practices/non-functional-requirement-templates/process-documentation-guidelines.md b/docs/dg/dev/best-practices/non-functional-requirement-templates/process-documentation-guidelines.md
index ea816e3a6dd..79e24709955 100644
--- a/docs/dg/dev/best-practices/non-functional-requirement-templates/process-documentation-guidelines.md
+++ b/docs/dg/dev/best-practices/non-functional-requirement-templates/process-documentation-guidelines.md
@@ -61,7 +61,7 @@ This request is for the deployment of version 1.2.3 of the MyProject application
* Add an additional application server to the load balancer pool.
* Increase the size of the database server's disk.
*Expected behavior:
- * There may be a temporary increase in error log entries due to a known issue with the new version that will be fixed in the next release.
+ * There may be a temporary increase in error log entries because of a known issue with the new version that will be fixed in the next release.
**Impact**:
This deployment will include updates to the application's database connection and API key, as well as changes to the infrastructure. There is a low risk of downtime during the deployment.
diff --git a/docs/dg/dev/code-contribution-guide.md b/docs/dg/dev/code-contribution-guide.md
index 289f6e36360..ef98026e615 100644
--- a/docs/dg/dev/code-contribution-guide.md
+++ b/docs/dg/dev/code-contribution-guide.md
@@ -1,15 +1,12 @@
---
title: Code contribution guide
-description: Contribute to Spryker repositories
+description: Learn how to contribute code to Spryker with this comprehensive guide. Follow best practices for creating, reviewing, and submitting high-quality contributions efficiently.
last_updated: Apr 3, 2024
template: concept-topic-template
originalLink: https://documentation.spryker.com/2021080/docs/code-contribution-guide
originalArticleId: d5ded6f2-5bb9-4288-bc96-3fabf7e32c8f
redirect_from:
- /docs/scos/dev/code-contribution-guide.html
-related:
- - title: Contribute to the documentation
- link: docs/scos/user/intro-to-spryker/contribute-to-the-documentation/contribute-to-the-documentation.html
---
@@ -47,7 +44,7 @@ Spryker uses our proprietary licenses and common open-source licenses. In genera
For example, here is a result of this flow: https://github.com/spryker/product-configurations-rest-api/pull/1.
-If we can't merge a PR due to our release process, we manually introduce the change. Once the change is released, we inform you by closing the PR.
+If we can't merge a PR because of our release process, we manually introduce the change. Once the change is released, we inform you by closing the PR.
## Pull request processing time
@@ -58,4 +55,4 @@ If you create a pull request and feel that the issue is important, [contact supp
\ No newline at end of file
+-->
diff --git a/docs/dg/dev/data-import/202311.0/importing-product-data-with-a-single-file.md b/docs/dg/dev/data-import/202311.0/importing-product-data-with-a-single-file.md
index 654f293a8c8..140d89ca51d 100644
--- a/docs/dg/dev/data-import/202311.0/importing-product-data-with-a-single-file.md
+++ b/docs/dg/dev/data-import/202311.0/importing-product-data-with-a-single-file.md
@@ -40,7 +40,7 @@ The headers in this file are prefixed with the names of the individual product-r
The only exceptions are `abstract_sku` and `concrete_sku` headers that are not prefixed.
-Thus, the CSV file for the main product data import is a combination of data from separate product-related CSV files (except for a [few fields specific for just this file](#specific-fields)). Due to this, when importing corresponding data, the same [dependencies and mandatory fields](#mandatory-fields) as for the separate files, apply to the combined product data import file. For example, if you want to import product image data via the combined product data file (headers *productimage.imageset_name*, *productimage.externalurl_large*, etc.), you should mind the dependencies and mandatory fields as for [product_image.csv](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/products-data-import/import-file-details-product-image.csv.html).
+Thus, the CSV file for the main product data import is a combination of data from separate product-related CSV files (except for a [few fields specific for just this file](#specific-fields)). Because of this, when importing corresponding data, the same [dependencies and mandatory fields](#mandatory-fields) as for the separate files, apply to the combined product data import file. For example, if you want to import product image data via the combined product data file (headers *productimage.imageset_name*, *productimage.externalurl_large*, etc.), you should mind the dependencies and mandatory fields as for [product_image.csv](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/products-data-import/import-file-details-product-image.csv.html).
By default, the import CSV file resides in data/import/common/{STORE}/. As, for example, the [combined_product_DE.csv](https://github.com/spryker-shop/suite/blob/master/data/import/common/DE/combined_product.csv) file in Spryker Master Suite.
diff --git a/docs/dg/dev/data-import/202404.0/importing-product-data-with-a-single-file.md b/docs/dg/dev/data-import/202404.0/importing-product-data-with-a-single-file.md
index 3a4bec6f62c..6cabd475611 100644
--- a/docs/dg/dev/data-import/202404.0/importing-product-data-with-a-single-file.md
+++ b/docs/dg/dev/data-import/202404.0/importing-product-data-with-a-single-file.md
@@ -40,7 +40,7 @@ The headers in this file are prefixed with the names of the individual product-r
The only exceptions are `abstract_sku` and `concrete_sku` headers that are not prefixed.
-Thus, the CSV file for the main product data import is a combination of data from separate product-related CSV files (except for a [few fields specific for just this file](#specific-fields)). Due to this, when importing corresponding data, the same [dependencies and mandatory fields](#mandatory-fields) as for the separate files, apply to the combined product data import file. For example, if you want to import product image data via the combined product data file (headers *productimage.imageset_name*, *productimage.externalurl_large*, etc.), you should mind the dependencies and mandatory fields as for [product_image.csv](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/products-data-import/import-file-details-product-image.csv.html).
+Thus, the CSV file for the main product data import is a combination of data from separate product-related CSV files (except for a [few fields specific for just this file](#specific-fields)). Because of this, when importing corresponding data, the same [dependencies and mandatory fields](#mandatory-fields) as for the separate files, apply to the combined product data import file. For example, if you want to import product image data via the combined product data file (headers *productimage.imageset_name*, *productimage.externalurl_large*, etc.), you should mind the dependencies and mandatory fields as for [product_image.csv](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/products-data-import/import-file-details-product-image.csv.html).
By default, the import CSV file resides in data/import/common/{STORE}/. As, for example, the [combined_product_DE.csv](https://github.com/spryker-shop/suite/blob/master/data/import/common/DE/combined_product.csv) file in Spryker Master Suite.
diff --git a/docs/dg/dev/data-import/202410.0/importing-product-data-with-a-single-file.md b/docs/dg/dev/data-import/202410.0/importing-product-data-with-a-single-file.md
index 3a4bec6f62c..6cabd475611 100644
--- a/docs/dg/dev/data-import/202410.0/importing-product-data-with-a-single-file.md
+++ b/docs/dg/dev/data-import/202410.0/importing-product-data-with-a-single-file.md
@@ -40,7 +40,7 @@ The headers in this file are prefixed with the names of the individual product-r
The only exceptions are `abstract_sku` and `concrete_sku` headers that are not prefixed.
-Thus, the CSV file for the main product data import is a combination of data from separate product-related CSV files (except for a [few fields specific for just this file](#specific-fields)). Due to this, when importing corresponding data, the same [dependencies and mandatory fields](#mandatory-fields) as for the separate files, apply to the combined product data import file. For example, if you want to import product image data via the combined product data file (headers *productimage.imageset_name*, *productimage.externalurl_large*, etc.), you should mind the dependencies and mandatory fields as for [product_image.csv](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/products-data-import/import-file-details-product-image.csv.html).
+Thus, the CSV file for the main product data import is a combination of data from separate product-related CSV files (except for a [few fields specific for just this file](#specific-fields)). Because of this, when importing corresponding data, the same [dependencies and mandatory fields](#mandatory-fields) as for the separate files, apply to the combined product data import file. For example, if you want to import product image data via the combined product data file (headers *productimage.imageset_name*, *productimage.externalurl_large*, etc.), you should mind the dependencies and mandatory fields as for [product_image.csv](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/products-data-import/import-file-details-product-image.csv.html).
By default, the import CSV file resides in data/import/common/{STORE}/. As, for example, the [combined_product_DE.csv](https://github.com/spryker-shop/suite/blob/master/data/import/common/DE/combined_product.csv) file in Spryker Master Suite.
diff --git a/docs/dg/dev/frontend-development/202311.0/oryx/architecture/oryx-server-side-rendering.md b/docs/dg/dev/frontend-development/202311.0/oryx/architecture/oryx-server-side-rendering.md
index 2088320d087..4caa2ea26f5 100644
--- a/docs/dg/dev/frontend-development/202311.0/oryx/architecture/oryx-server-side-rendering.md
+++ b/docs/dg/dev/frontend-development/202311.0/oryx/architecture/oryx-server-side-rendering.md
@@ -11,7 +11,7 @@ redirect_from:
-Server-side rendering (SSR), including Static Site Generation (SSG) as a variant, has grown in popularity due to its ability to boost web application performance, facilitate effective Search Engine Optimization (SEO), social sharing, and improve Core Web Vitals (CWV). By delivering pre-rendered HTML from the server or even a content delivery network (CDN) to the client, SSR and SSG lead to quicker initial page load times, improve user experience (UX), and can significantly improve CWV scores. SSG, in particular, pre-renders HTML at build time, resulting in static HTML, CSS, and JavaScript files that can be served directly from a CDN. It is a useful strategy for sites with content that does not change frequently, and can improve performance, scalability, and security.
+Server-side rendering (SSR), including Static Site Generation (SSG) as a variant, has grown in popularity because of its ability to boost web application performance, facilitate effective Search Engine Optimization (SEO), social sharing, and improve Core Web Vitals (CWV). By delivering pre-rendered HTML from the server or even a content delivery network (CDN) to the client, SSR and SSG lead to quicker initial page load times, improve user experience (UX), and can significantly improve CWV scores. SSG, in particular, pre-renders HTML at build time, resulting in static HTML, CSS, and JavaScript files that can be served directly from a CDN. It is a useful strategy for sites with content that does not change frequently, and can improve performance, scalability, and security.
## Differences between server-side and client-side rendering
diff --git a/docs/dg/dev/frontend-development/202311.0/oryx/building-applications/styling/oryx-icon-system.md b/docs/dg/dev/frontend-development/202311.0/oryx/building-applications/styling/oryx-icon-system.md
index 3394877d59a..d632428bb5e 100644
--- a/docs/dg/dev/frontend-development/202311.0/oryx/building-applications/styling/oryx-icon-system.md
+++ b/docs/dg/dev/frontend-development/202311.0/oryx/building-applications/styling/oryx-icon-system.md
@@ -49,7 +49,7 @@ Oryx supports both font-based icons and SVG icons, letting you choose the most s
### Font-based icons
-Font-based icons are a popular choice due to 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.
+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.
diff --git a/docs/dg/dev/frontend-development/202311.0/oryx/building-components/oryx-managing-component-options.md b/docs/dg/dev/frontend-development/202311.0/oryx/building-components/oryx-managing-component-options.md
index 824e372344d..4c220a0116d 100644
--- a/docs/dg/dev/frontend-development/202311.0/oryx/building-components/oryx-managing-component-options.md
+++ b/docs/dg/dev/frontend-development/202311.0/oryx/building-components/oryx-managing-component-options.md
@@ -123,7 +123,7 @@ protected override render(): TemplateResult {
To use component options asynchronously, it is 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. Due to the component option interface, the usage of the signal is type safe.
+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({
diff --git a/docs/dg/dev/frontend-development/202311.0/yves/multi-theme.md b/docs/dg/dev/frontend-development/202311.0/yves/multi-theme.md
index 71d8bb6d200..ef15d7f0d96 100644
--- a/docs/dg/dev/frontend-development/202311.0/yves/multi-theme.md
+++ b/docs/dg/dev/frontend-development/202311.0/yves/multi-theme.md
@@ -21,7 +21,7 @@ A theme is a combination of twig, CSS and JS files that make your user interface
* **Current Theme**—a single theme defined on a project level. E.g., B2B-theme, B2C-theme.
* **Default Theme**—a theme provided from Spryker by default and used in the Spryker Commerce OS. Used for incremental project updates (start from default and change components one-by-one) and a graceful fallback in case Spryker provides a new functionality which does not have own frontend in a project.
-From now on, besides the default theme, you, as a shop owner, can create and use different themes for different stores. When you select a theme, you decide how your shop is displayed. For example, you may have a New Year theme with the New year attributes that is enabled every year during the New Year holidays. Due to the development of the Spryker Commerce OS, the entities that previously were called stores (DE, EN, AT) - are now renamed into namespaces.
+From now on, besides the default theme, you, as a shop owner, can create and use different themes for different stores. When you select a theme, you decide how your shop is displayed. For example, you may have a New Year theme with the New year attributes that is enabled every year during the New Year holidays. Because of the development of the Spryker Commerce OS, the entities that previously were called stores (DE, EN, AT) - are now renamed into namespaces.
```xml
{
diff --git a/docs/dg/dev/frontend-development/202404.0/oryx/architecture/oryx-server-side-rendering.md b/docs/dg/dev/frontend-development/202404.0/oryx/architecture/oryx-server-side-rendering.md
index d9ab2be3285..8434c74870f 100644
--- a/docs/dg/dev/frontend-development/202404.0/oryx/architecture/oryx-server-side-rendering.md
+++ b/docs/dg/dev/frontend-development/202404.0/oryx/architecture/oryx-server-side-rendering.md
@@ -11,7 +11,7 @@ redirect_from:
-Server-side rendering (SSR), including Static Site Generation (SSG) as a variant, has grown in popularity due to its ability to boost web application performance, facilitate effective Search Engine Optimization (SEO), social sharing, and improve Core Web Vitals (CWV). By delivering pre-rendered HTML from the server or even a content delivery network (CDN) to the client, SSR and SSG lead to quicker initial page load times, improve user experience (UX), and can significantly improve CWV scores. SSG, in particular, pre-renders HTML at build time, resulting in static HTML, CSS, and JavaScript files that can be served directly from a CDN. It is a useful strategy for sites with content that does not change frequently, and can improve performance, scalability, and security.
+Server-side rendering (SSR), including Static Site Generation (SSG) as a variant, has grown in popularity because of its ability to boost web application performance, facilitate effective Search Engine Optimization (SEO), social sharing, and improve Core Web Vitals (CWV). By delivering pre-rendered HTML from the server or even a content delivery network (CDN) to the client, SSR and SSG lead to quicker initial page load times, improve user experience (UX), and can significantly improve CWV scores. SSG, in particular, pre-renders HTML at build time, resulting in static HTML, CSS, and JavaScript files that can be served directly from a CDN. It is a useful strategy for sites with content that does not change frequently, and can improve performance, scalability, and security.
## Differences between server-side and client-side rendering
diff --git a/docs/dg/dev/frontend-development/202404.0/oryx/building-applications/styling/oryx-icon-system.md b/docs/dg/dev/frontend-development/202404.0/oryx/building-applications/styling/oryx-icon-system.md
index 3ef9f3f6bb1..feebd438e81 100644
--- a/docs/dg/dev/frontend-development/202404.0/oryx/building-applications/styling/oryx-icon-system.md
+++ b/docs/dg/dev/frontend-development/202404.0/oryx/building-applications/styling/oryx-icon-system.md
@@ -49,7 +49,7 @@ Oryx supports both font-based icons and SVG icons, letting you choose the most s
### Font-based icons
-Font-based icons are a popular choice due to 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.
+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.
diff --git a/docs/dg/dev/frontend-development/202404.0/oryx/building-components/oryx-managing-component-options.md b/docs/dg/dev/frontend-development/202404.0/oryx/building-components/oryx-managing-component-options.md
index ee8f268157e..d81b74f42de 100644
--- a/docs/dg/dev/frontend-development/202404.0/oryx/building-components/oryx-managing-component-options.md
+++ b/docs/dg/dev/frontend-development/202404.0/oryx/building-components/oryx-managing-component-options.md
@@ -123,7 +123,7 @@ protected override render(): TemplateResult {
To use component options asynchronously, it is 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. Due to the component option interface, the usage of the signal is type safe.
+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({
diff --git a/docs/dg/dev/frontend-development/202404.0/yves/multi-theme.md b/docs/dg/dev/frontend-development/202404.0/yves/multi-theme.md
index 3ae28e3c958..c67c224210d 100644
--- a/docs/dg/dev/frontend-development/202404.0/yves/multi-theme.md
+++ b/docs/dg/dev/frontend-development/202404.0/yves/multi-theme.md
@@ -21,7 +21,7 @@ A theme is a combination of twig, CSS and JS files that make your user interface
* **Current Theme**—a single theme defined on a project level. E.g., B2B-theme, B2C-theme.
* **Default Theme**—a theme provided from Spryker by default and used in the Spryker Commerce OS. Used for incremental project updates (start from default and change components one-by-one) and a graceful fallback in case Spryker provides a new functionality which does not have own frontend in a project.
-From now on, besides the default theme, you, as a shop owner, can create and use different themes for different stores. When you select a theme, you decide how your shop is displayed. For example, you may have a New Year theme with the New year attributes that is enabled every year during the New Year holidays. Due to the development of the Spryker Commerce OS, the entities that previously were called stores (DE, EN, AT) - are now renamed into namespaces.
+From now on, besides the default theme, you, as a shop owner, can create and use different themes for different stores. When you select a theme, you decide how your shop is displayed. For example, you may have a New Year theme with the New year attributes that is enabled every year during the New Year holidays. Because of the development of the Spryker Commerce OS, the entities that previously were called stores (DE, EN, AT) - are now renamed into namespaces.
```xml
{
diff --git a/docs/dg/dev/frontend-development/202410.0/oryx/architecture/oryx-server-side-rendering.md b/docs/dg/dev/frontend-development/202410.0/oryx/architecture/oryx-server-side-rendering.md
index d9ab2be3285..8434c74870f 100644
--- a/docs/dg/dev/frontend-development/202410.0/oryx/architecture/oryx-server-side-rendering.md
+++ b/docs/dg/dev/frontend-development/202410.0/oryx/architecture/oryx-server-side-rendering.md
@@ -11,7 +11,7 @@ redirect_from:
-Server-side rendering (SSR), including Static Site Generation (SSG) as a variant, has grown in popularity due to its ability to boost web application performance, facilitate effective Search Engine Optimization (SEO), social sharing, and improve Core Web Vitals (CWV). By delivering pre-rendered HTML from the server or even a content delivery network (CDN) to the client, SSR and SSG lead to quicker initial page load times, improve user experience (UX), and can significantly improve CWV scores. SSG, in particular, pre-renders HTML at build time, resulting in static HTML, CSS, and JavaScript files that can be served directly from a CDN. It is a useful strategy for sites with content that does not change frequently, and can improve performance, scalability, and security.
+Server-side rendering (SSR), including Static Site Generation (SSG) as a variant, has grown in popularity because of its ability to boost web application performance, facilitate effective Search Engine Optimization (SEO), social sharing, and improve Core Web Vitals (CWV). By delivering pre-rendered HTML from the server or even a content delivery network (CDN) to the client, SSR and SSG lead to quicker initial page load times, improve user experience (UX), and can significantly improve CWV scores. SSG, in particular, pre-renders HTML at build time, resulting in static HTML, CSS, and JavaScript files that can be served directly from a CDN. It is a useful strategy for sites with content that does not change frequently, and can improve performance, scalability, and security.
## Differences between server-side and client-side rendering
diff --git a/docs/dg/dev/frontend-development/202410.0/oryx/building-applications/styling/oryx-icon-system.md b/docs/dg/dev/frontend-development/202410.0/oryx/building-applications/styling/oryx-icon-system.md
index 3ef9f3f6bb1..feebd438e81 100644
--- a/docs/dg/dev/frontend-development/202410.0/oryx/building-applications/styling/oryx-icon-system.md
+++ b/docs/dg/dev/frontend-development/202410.0/oryx/building-applications/styling/oryx-icon-system.md
@@ -49,7 +49,7 @@ Oryx supports both font-based icons and SVG icons, letting you choose the most s
### Font-based icons
-Font-based icons are a popular choice due to 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.
+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.
diff --git a/docs/dg/dev/frontend-development/202410.0/oryx/building-components/oryx-managing-component-options.md b/docs/dg/dev/frontend-development/202410.0/oryx/building-components/oryx-managing-component-options.md
index ee8f268157e..d81b74f42de 100644
--- a/docs/dg/dev/frontend-development/202410.0/oryx/building-components/oryx-managing-component-options.md
+++ b/docs/dg/dev/frontend-development/202410.0/oryx/building-components/oryx-managing-component-options.md
@@ -123,7 +123,7 @@ protected override render(): TemplateResult {
To use component options asynchronously, it is 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. Due to the component option interface, the usage of the signal is type safe.
+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({
diff --git a/docs/dg/dev/frontend-development/202410.0/yves/multi-theme.md b/docs/dg/dev/frontend-development/202410.0/yves/multi-theme.md
index 3ae28e3c958..c67c224210d 100644
--- a/docs/dg/dev/frontend-development/202410.0/yves/multi-theme.md
+++ b/docs/dg/dev/frontend-development/202410.0/yves/multi-theme.md
@@ -21,7 +21,7 @@ A theme is a combination of twig, CSS and JS files that make your user interface
* **Current Theme**—a single theme defined on a project level. E.g., B2B-theme, B2C-theme.
* **Default Theme**—a theme provided from Spryker by default and used in the Spryker Commerce OS. Used for incremental project updates (start from default and change components one-by-one) and a graceful fallback in case Spryker provides a new functionality which does not have own frontend in a project.
-From now on, besides the default theme, you, as a shop owner, can create and use different themes for different stores. When you select a theme, you decide how your shop is displayed. For example, you may have a New Year theme with the New year attributes that is enabled every year during the New Year holidays. Due to the development of the Spryker Commerce OS, the entities that previously were called stores (DE, EN, AT) - are now renamed into namespaces.
+From now on, besides the default theme, you, as a shop owner, can create and use different themes for different stores. When you select a theme, you decide how your shop is displayed. For example, you may have a New Year theme with the New year attributes that is enabled every year during the New Year holidays. Because of the development of the Spryker Commerce OS, the entities that previously were called stores (DE, EN, AT) - are now renamed into namespaces.
```xml
{
diff --git a/docs/dg/dev/guidelines/data-processing-guidelines.md b/docs/dg/dev/guidelines/data-processing-guidelines.md
index 39ca78854bb..d9aa2026136 100644
--- a/docs/dg/dev/guidelines/data-processing-guidelines.md
+++ b/docs/dg/dev/guidelines/data-processing-guidelines.md
@@ -9,11 +9,11 @@ redirect_from:
- /docs/scos/dev/guidelines/data-processing-guidelines.html
related:
- title: Making your Spryker shop secure
- link: docs/scos/dev/guidelines/security-guidelines.html
+ link: docs/dg/dev/guidelines/security-guidelines.html
- title: Module configuration convention
- link: docs/scos/dev/guidelines/module-configuration-convention.html
+ link: docs/dg/dev/guidelines/module-configuration-convention.html
- title: Project development guidelines
- link: docs/scos/dev/guidelines/project-development-guidelines.html
+ link: docs/dg/dev/guidelines/project-development-guidelines.html
- title: Data importer speed optimization
link: docs/dg/dev/data-import/page.version/data-import-optimization-guidelines.html
---
diff --git a/docs/dg/dev/guidelines/keeping-a-project-upgradable/upgradability-guidelines/dead-code-checker.md b/docs/dg/dev/guidelines/keeping-a-project-upgradable/upgradability-guidelines/dead-code-checker.md
index 6760f20d7a5..b80c3ec5896 100644
--- a/docs/dg/dev/guidelines/keeping-a-project-upgradable/upgradability-guidelines/dead-code-checker.md
+++ b/docs/dg/dev/guidelines/keeping-a-project-upgradable/upgradability-guidelines/dead-code-checker.md
@@ -11,7 +11,7 @@ The dead code checker checks for dead code that extends core classes in your pro
## Problem description
-The project has the capability to extend Spryker core classes, but over time, it may become ineffective due to changes in the project or core components.
+The project has the capability to extend Spryker core classes, but over time, it may become ineffective because of changes in the project or core components.
This results in unnecessary additional time investment from developers, as they need to update the dead code.
This check examines potential obsolete classes, with a tendency to overlook important Spryker kernel classes like `Factory`, `Facade`, or `DependencyProvider`.
If desired, you have the option to disable the dead code checker for a particular class using the `@evaluator-skip-dead-code` annotation.
diff --git a/docs/dg/dev/guidelines/module-configuration-convention.md b/docs/dg/dev/guidelines/module-configuration-convention.md
index 2c847f03e2e..dafd6f3bf6c 100644
--- a/docs/dg/dev/guidelines/module-configuration-convention.md
+++ b/docs/dg/dev/guidelines/module-configuration-convention.md
@@ -9,11 +9,11 @@ redirect_from:
- /docs/scos/dev/guidelines/module-configuration-convention.html
related:
- title: Data Processing Guidelines
- link: docs/scos/dev/guidelines/data-processing-guidelines.html
+ link: docs/dg/dev/guidelines/data-processing-guidelines.html
- title: Making your Spryker shop secure
- link: docs/scos/dev/guidelines/security-guidelines.html
+ link: docs/dg/dev/guidelines/security-guidelines.html
- title: Project development guidelines
- link: docs/scos/dev/guidelines/project-development-guidelines.html
+ link: docs/dg/dev/guidelines/project-development-guidelines.html
---
## Definitions
diff --git a/docs/dg/dev/guidelines/performance-guidelines/architecture-performance-guidelines.md b/docs/dg/dev/guidelines/performance-guidelines/architecture-performance-guidelines.md
index d76db13027d..548243218e1 100644
--- a/docs/dg/dev/guidelines/performance-guidelines/architecture-performance-guidelines.md
+++ b/docs/dg/dev/guidelines/performance-guidelines/architecture-performance-guidelines.md
@@ -22,7 +22,7 @@ Below, you will find the most common architecture design mistakes and impediment
### Duplications of slow operations
-Sometimes, due to business requirements, it’s mandatory to have a slow operation during one transaction. This slow part of functionality might be very small and hidden behind an API, but the usage of this API can go out of control.
+Sometimes, because of business requirements, it’s mandatory to have a slow operation during one transaction. This slow part of functionality might be very small and hidden behind an API, but the usage of this API can go out of control.
Let's consider an example illustrating the impact of a bad architecture design with slow operations. Imagine you have a method called `caluculateDiscount()` that generates some discounts for cart items. However, each call of this method takes 100ms, which might be a proper response time for an API. Now think of another business requirement when you need to calculate the discount for 10 separated groups of items in the cart. In this case, you need to call the `caluculateDiscount()` method 10 times, leading to 1000ms (1 second), which already poses a performance problem.
@@ -41,7 +41,7 @@ Make sure you carefully check for memory leaks during the query optimizations, a
### Optimistic vs. pessimistic locking
-Sometimes, developers use explicit locks to prevent race conditions or other issues that impact performance due to the high traffic load. This happens because all requests need to wait for the lock, which turns the parallel request processing into sequential processing and can increase the response time of all the queued requests.
+Sometimes, developers use explicit locks to prevent race conditions or other issues that impact performance because of the high traffic load. This happens because all requests need to wait for the lock, which turns the parallel request processing into sequential processing and can increase the response time of all the queued requests.
Some of the pessimistic locking use cases are:
@@ -106,7 +106,7 @@ Spryker uses Propel ORM as a database abstraction layer which allows to stay DBM
Performance is one of the key attributes when it comes to synchronous combinations. Therefore, as a rule of thumb, any database operations must be high performant and be executed fast. If ORM cannot guarantee the high-speed database operation because of the lack of features or complexity, one should avoid using it.
-For example, to display products in the Spryker shop, we need to import and propagate data into several databases. For some projects, this is a cumbersome operation due to the large volume of data. Therefore, Spryker recommends not to use ORM for these operations, but choose other solutions instead, for example, CTE, PDO, etc.
+For example, to display products in the Spryker shop, we need to import and propagate data into several databases. For some projects, this is a cumbersome operation because of the large volume of data. Therefore, Spryker recommends not to use ORM for these operations, but choose other solutions instead, for example, CTE, PDO, etc.
For data import of large files, it's also important to use bulk processing. Therefore, consider importing data into the database with chunks of 1000+ elements. The same applies to triggering events. Using bulk processing saves a lot of time for communication with the database and queues.
diff --git a/docs/dg/dev/guidelines/project-development-guidelines.md b/docs/dg/dev/guidelines/project-development-guidelines.md
index d3a62721a91..d5fcebaa37e 100644
--- a/docs/dg/dev/guidelines/project-development-guidelines.md
+++ b/docs/dg/dev/guidelines/project-development-guidelines.md
@@ -9,11 +9,11 @@ redirect_from:
- /docs/scos/dev/guidelines/project-development-guidelines.html
related:
- title: Data Processing Guidelines
- link: docs/scos/dev/guidelines/data-processing-guidelines.html
+ link: docs/dg/dev/guidelines/data-processing-guidelines.html
- title: Making your Spryker shop secure
- link: docs/scos/dev/guidelines/security-guidelines.html
+ link: docs/dg/dev/guidelines/security-guidelines.html
- title: Module configuration convention
- link: docs/scos/dev/guidelines/module-configuration-convention.html
+ link: docs/dg/dev/guidelines/module-configuration-convention.html
---
Spryker OS exposes codebase projects, which enables a high level of customization and can satisfy complex business requirements.
diff --git a/docs/dg/dev/guidelines/security-guidelines.md b/docs/dg/dev/guidelines/security-guidelines.md
index 13aa57450dc..1882dc26c30 100644
--- a/docs/dg/dev/guidelines/security-guidelines.md
+++ b/docs/dg/dev/guidelines/security-guidelines.md
@@ -1,5 +1,6 @@
---
title: Security guidelines
+description: Explore operational and deployment guidelines for efficient ecommerce system management. Focus on best practices for deployment, monitoring, and scaling infrastructure.
last_updated: Sep 15, 2023
template: concept-topic-template
originalLink: https://documentation.spryker.com/2021080/docs/making-your-spryker-shop-secure
@@ -9,11 +10,11 @@ redirect_from:
- /docs/scos/dev/guidelines/making-your-spryker-shop-secure.html
related:
- title: Data Processing Guidelines
- link: docs/scos/dev/guidelines/data-processing-guidelines.html
+ link: docs/dg/dev/guidelines/data-processing-guidelines.html
- title: Module configuration convention
- link: docs/scos/dev/guidelines/module-configuration-convention.html
+ link: docs/dg/dev/guidelines/module-configuration-convention.html
- title: Project development guidelines
- link: docs/scos/dev/guidelines/project-development-guidelines.html
+ link: docs/dg/dev/guidelines/project-development-guidelines.html
---
This document describes the data security guidelines you need to follow on the application level. In cloud environments, infrastructure security measures are implemented by default, so they're not described.
diff --git a/docs/dg/dev/guidelines/testing-guidelines/executing-tests/testing-the-publish-and-synchronization-process.md b/docs/dg/dev/guidelines/testing-guidelines/executing-tests/testing-the-publish-and-synchronization-process.md
index d99a664b9cd..1451cc842b1 100644
--- a/docs/dg/dev/guidelines/testing-guidelines/executing-tests/testing-the-publish-and-synchronization-process.md
+++ b/docs/dg/dev/guidelines/testing-guidelines/executing-tests/testing-the-publish-and-synchronization-process.md
@@ -34,7 +34,7 @@ related:
link: docs/scos/dev/guidelines/testing-guidelines/testing-console-commands.html
---
-Publish & Synchronize (P&S) is an asynchronous process of changing data available to customers by pushing the data into storage, for example, Redis, and making it searchable, for example, with Elasticsearch. Due to its asynchronous nature, it is not easy to test the full process while developing.
+Publish & Synchronize (P&S) is an asynchronous process of changing data available to customers by pushing the data into storage, for example, Redis, and making it searchable, for example, with Elasticsearch. Because of its asynchronous nature, it is not easy to test the full process while developing.
In short, in P&S, you create or update an entity in the database. The process is like this:
diff --git a/docs/dg/dev/integrate-and-configure/integrate-multi-queue-publish-structure.md b/docs/dg/dev/integrate-and-configure/integrate-multi-queue-publish-structure.md
index ca4f833c1d0..78cb3b44002 100644
--- a/docs/dg/dev/integrate-and-configure/integrate-multi-queue-publish-structure.md
+++ b/docs/dg/dev/integrate-and-configure/integrate-multi-queue-publish-structure.md
@@ -15,7 +15,7 @@ To improve debugging of failures and slow events in Spryker, we introduced a new
| PROPERTY | SINGLE PUBLISH QUEUE STRUCTURE | MULTIPLE PUBLISH QUEUE STRUCTURE |
| --- | --- | --- |
| Event processing | Infrastructure and application events are processed in the same event queue. | Infrastructure events are spread across multiple publish events. Application events are processed in the event queue. |
-| Monitoring of event consumption speed | Due to mixed listeners, event consumption speed is unpredictable and not linear. | You can monitor the speed of event consumption in each queue separately. |
+| Monitoring of event consumption speed | Because of mixed listeners, event consumption speed is unpredictable and not linear. | You can monitor the speed of event consumption in each queue separately. |
| Per event configuration of chunk size | | ✓ |
| Per event separation of workers | | ✓ |
diff --git a/docs/dg/dev/miscellaneous-guides/tutorial-hello-world.md b/docs/dg/dev/miscellaneous-guides/tutorial-hello-world.md
index 3a2eaf13b51..bc1f3d301a1 100644
--- a/docs/dg/dev/miscellaneous-guides/tutorial-hello-world.md
+++ b/docs/dg/dev/miscellaneous-guides/tutorial-hello-world.md
@@ -9,7 +9,7 @@ redirect_from:
- /docs/scos/dev/tutorials-and-howtos/introduction-tutorials/tutorial-hello-world-spryker-commerce-os.html
related:
- title: Module configuration convention
- link: docs/scos/dev/guidelines/module-configuration-convention.html
+ link: docs/dg/dev/guidelines/module-configuration-convention.html
---
{% info_block infoBox %}
diff --git a/docs/dg/dev/sdks/sdk/development-tools/phpstan.md b/docs/dg/dev/sdks/sdk/development-tools/phpstan.md
index 12a7ae384a9..298e54821e1 100644
--- a/docs/dg/dev/sdks/sdk/development-tools/phpstan.md
+++ b/docs/dg/dev/sdks/sdk/development-tools/phpstan.md
@@ -48,7 +48,7 @@ composer require --dev phpstan/phpstan
## Usage
-1. Run the following command to generate autocompletion and prevent any error messages that might occur due to the incomplete classes:
+1. Run the following command to generate autocompletion and prevent any error messages that might occur because of the incomplete classes:
`vendor/bin/console dev:ide:generate-auto-completion`
2. Run this command to start analyzing:
`php -d memory_limit=2048M vendor/bin/phpstan analyze -c vendor/spryker/spryker/phpstan.neon vendor/// -l 2`
diff --git a/docs/dg/dev/supported-versions-of-php.md b/docs/dg/dev/supported-versions-of-php.md
index 011f76b0151..041221bbf9f 100644
--- a/docs/dg/dev/supported-versions-of-php.md
+++ b/docs/dg/dev/supported-versions-of-php.md
@@ -29,7 +29,7 @@ Before switching PHP versions in production environments, ensure to check this n
{% info_block infoBox "Info" %}
-PHP 8.2+ is a hard requirement from December 2023 due to the modules being PHP 8.2+.
+PHP 8.2+ is a hard requirement from December 2023 because of the modules being PHP 8.2+.
{% endinfo_block %}
diff --git a/docs/dg/dev/troubleshooting/troubleshooting-general-technical-issues/phpstan-memory-issues.md b/docs/dg/dev/troubleshooting/troubleshooting-general-technical-issues/phpstan-memory-issues.md
index ae022e9d5ae..797a848a508 100644
--- a/docs/dg/dev/troubleshooting/troubleshooting-general-technical-issues/phpstan-memory-issues.md
+++ b/docs/dg/dev/troubleshooting/troubleshooting-general-technical-issues/phpstan-memory-issues.md
@@ -10,7 +10,7 @@ redirect_from:
## Cause
-PHPStan needs to parse all files and due to Spryker's magic with resolving classes, e.g., `$this->getFacade()`, PHPStan needs to look up this class on its own when the `@method` annotation is missing.
+PHPStan needs to parse all files and because of Spryker's magic with resolving classes, e.g., `$this->getFacade()`, PHPStan needs to look up this class on its own when the `@method` annotation is missing.
## Solution
diff --git a/docs/dg/dev/upgrade-and-migrate/migrate-to-cloud/migrate-to-cloud-adapt-the-filesystem-based-features.md b/docs/dg/dev/upgrade-and-migrate/migrate-to-cloud/migrate-to-cloud-adapt-the-filesystem-based-features.md
index 4c4a2dcf32f..a759a2e4050 100644
--- a/docs/dg/dev/upgrade-and-migrate/migrate-to-cloud/migrate-to-cloud-adapt-the-filesystem-based-features.md
+++ b/docs/dg/dev/upgrade-and-migrate/migrate-to-cloud/migrate-to-cloud-adapt-the-filesystem-based-features.md
@@ -8,7 +8,7 @@ last_updated: Dec 6, 2023
---
-Due to the specifics of the Spryker architecture, all containers, such as Yves, Gateway, Backoffice, Jenkins, or Glue are isolated from each other and don't share any volume. For more details, refer to [Docker environment infrastructure](/docs/dg/dev/sdks/the-docker-sdk/docker-environment-infrastructure.html).
+Because of the specifics of the Spryker architecture, all containers, such as Yves, Gateway, Backoffice, Jenkins, or Glue are isolated from each other and don't share any volume. For more details, refer to [Docker environment infrastructure](/docs/dg/dev/sdks/the-docker-sdk/docker-environment-infrastructure.html).
For a shared file storage solution, we recommend using S3 buckets. For an illustrative example, see the [Data Import](/docs/ca/dev/configure-data-import-from-an-s3-bucket.html) feature based on an S3 bucket for file storage.
For more details on the suggested file system, see [Flysystem feature](/docs/dg/dev/backend-development/data-manipulation/data-ingestion/structural-preparations/flysystem.html).
diff --git a/docs/dg/dev/upgrade-and-migrate/migrate-to-cloud/migrate-to-cloud-restore-es-and-redis.md b/docs/dg/dev/upgrade-and-migrate/migrate-to-cloud/migrate-to-cloud-restore-es-and-redis.md
index 0ad98f50f4b..272bc928fef 100644
--- a/docs/dg/dev/upgrade-and-migrate/migrate-to-cloud/migrate-to-cloud-restore-es-and-redis.md
+++ b/docs/dg/dev/upgrade-and-migrate/migrate-to-cloud/migrate-to-cloud-restore-es-and-redis.md
@@ -18,7 +18,7 @@ There is a default `vendor/bin/console sync:data` command in Spryker that lets y
Considering this fact, ensure that the `sync:data` command can restore your Elasticsearch and Redis from scratch in a consistent and resilient way. This especially applies to custom `*Storage` and `*Search` modules, as they should have synchronization plugins implemented and enabled.
-Due to the large data size, sometimes the command can't process all the records and fails. In this case, it can be executed per resource as follows:
+Because of the large data size, sometimes the command can't process all the records and fails. In this case, it can be executed per resource as follows:
```bash
console sync:data url
diff --git a/docs/dg/dev/upgrade-and-migrate/upgrade-publish-and-sync.md b/docs/dg/dev/upgrade-and-migrate/upgrade-publish-and-sync.md
index d6b6fce4df0..4d437c4340d 100644
--- a/docs/dg/dev/upgrade-and-migrate/upgrade-publish-and-sync.md
+++ b/docs/dg/dev/upgrade-and-migrate/upgrade-publish-and-sync.md
@@ -47,7 +47,7 @@ $stores['DE']['queuePools']['synchronizationPool'] = [
#### Module layers
-In Previous version the listener plugins has been extended from Abstract plugin classes and now this has changed due to obey the Spryker architecture and moved into business layer and open APIs from Facade classes.
+In Previous version the listener plugins has been extended from Abstract plugin classes and now this has changed because of obey the Spryker architecture and moved into business layer and open APIs from Facade classes.
### Version 1 of the EventBehavior modules
diff --git a/docs/dg/dev/upgrade-and-migrate/upgrade-to-php-83.md b/docs/dg/dev/upgrade-and-migrate/upgrade-to-php-83.md
index bed8d5aa00d..91b6b664bf3 100644
--- a/docs/dg/dev/upgrade-and-migrate/upgrade-to-php-83.md
+++ b/docs/dg/dev/upgrade-and-migrate/upgrade-to-php-83.md
@@ -95,7 +95,7 @@ docker/sdk boot && docker/sdk up --build
## 5. Test the upgrade
-Thoroughly test your application to identify any issues due to the PHP version upgrade:
+Thoroughly test your application to identify any issues because of the PHP version upgrade:
- Automated tests: Run unit, integration, and functional tests.
- Manual testing: Test critical application functionality.
diff --git a/docs/dg/dev/upgrade-and-migrate/upgrade-to-symfony-5.md b/docs/dg/dev/upgrade-and-migrate/upgrade-to-symfony-5.md
index e57ba523af3..4434e3eafae 100644
--- a/docs/dg/dev/upgrade-and-migrate/upgrade-to-symfony-5.md
+++ b/docs/dg/dev/upgrade-and-migrate/upgrade-to-symfony-5.md
@@ -10,7 +10,7 @@ redirect_from:
- /docs/scos/dev/technical-enhancements/symfony-5-integration.html
---
-Spryker supports Symfony 5 that was released in November 2019. We tried to keep BC for all three major versions of Symfony, but due to some changes in version 5, we had to partially drop support for Symfony 3.
+Spryker supports Symfony 5 that was released in November 2019. We tried to keep BC for all three major versions of Symfony, but because of some changes in version 5, we had to partially drop support for Symfony 3.
{% info_block warningBox "Avoid old Symfony versions" %}
@@ -24,7 +24,7 @@ Although Spryker still supports older versions of Symfony, avoid installing them
Most of the changes in Symfony 5 are related to changes in `symfony/http-kernel` and the `symfony/translation` components. In version 4 of the `symfony/http-kernel` component, new event classes were introduced, some were deprecated, and the event classes are final in version 5. Thus, we had to use the new final event classes and refactor some modules that use the old event classes.
-In version 5 of the `symfony/translation` component, some interfaces were extracted into the `symfony/translation-contracts` component. Due to this, we had to refactor some modules that used those interfaces.
+In version 5 of the `symfony/translation` component, some interfaces were extracted into the `symfony/translation-contracts` component. Because of this, we had to refactor some modules that used those interfaces.
## Upgrade Symfony to version 5
diff --git a/docs/dg/dev/zed-api/zed-api-beta.md b/docs/dg/dev/zed-api/zed-api-beta.md
index 58f3e60ab36..e9f69ed5df0 100644
--- a/docs/dg/dev/zed-api/zed-api-beta.md
+++ b/docs/dg/dev/zed-api/zed-api-beta.md
@@ -94,7 +94,7 @@ JSON_PARTIAL_OUTPUT_ON_ERROR | JSON_PRETTY_PRINT
* 405 Method Not Allowed - When an HTTP method is being requested that isn’t allowed for the authenticated user. 410 Gone - Indicates that the resource at this end point is no longer available. Useful as a blanket response for old API versions.
* 415 Unsupported Media Type - If incorrect content type was provided as part of the request.
* 422 Unprocessable Entity - Used for validation errors.
-* 429 Too Many Requests - When a request is rejected due to rate limiting.
+* 429 Too Many Requests - When a request is rejected because of rate limiting.
* 500 Internal Server Error - An internal error of the API. Something is broken.
## Development tools
diff --git a/docs/pbc/all/business-intelligence/202410.0/amazon-quicksight-third-party-integration/amazon-quicksight.md b/docs/pbc/all/business-intelligence/202410.0/amazon-quicksight-third-party-integration/amazon-quicksight.md
index 01c7f67328a..64374c8cf88 100644
--- a/docs/pbc/all/business-intelligence/202410.0/amazon-quicksight-third-party-integration/amazon-quicksight.md
+++ b/docs/pbc/all/business-intelligence/202410.0/amazon-quicksight-third-party-integration/amazon-quicksight.md
@@ -120,7 +120,7 @@ The default dashboard contains the following sheets.
| ----------------------------------- | -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| Total Sales | KPI | Indicates overall business revenue and helps track growth or identify trends. | Track overall revenue trends. If growth slows, evaluate pricing strategies, marketing efforts, or product performance. |
| Total Orders | Table | Reflects customer activity and signals demand and operational performance. | Monitor order volume to measure demand. Sudden changes may indicate issues with pricing, stock availability, or competition. |
- | Total Canceled | KPI | Quantifies the financial loss due to order cancellations, helping assess the monetary impact of cancellations and identify trends or root causes | Analyze canceled order trends to identify common causes like shipping delays or inventory shortages and take corrective action. |
+ | Total Canceled | KPI | Quantifies the financial loss because of order cancellations, helping assess the monetary impact of cancellations and identify trends or root causes | Analyze canceled order trends to identify common causes like shipping delays or inventory shortages and take corrective action. |
| Cancelation Rate | Donut chart | Reveals issues in inventory, delivery, or customer decision-making. | Investigate and reduce factors causing high cancellation rates, such as unclear product descriptions or lack of customer support. |
| Return Rate | Donut chart | Highlights product quality or customer dissatisfaction issues. | Identify patterns in high return rates and address them by improving product quality, descriptions, or customer expectations. |
| "Waiting for Return" Order Items | KPI | Tracks pending returns, aiding better inventory and refund management. | Monitor pending returns to ensure timely processing and better inventory management. |
diff --git a/docs/pbc/all/carrier-management/202311.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/202311.0/base-shop/manage-using-glue-api/glue-api-retrieve-shipments-and-shipment-methods-when-submitting-checkout-data.md
index 2a478facabd..4f2844c40fe 100644
--- a/docs/pbc/all/carrier-management/202311.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/202311.0/base-shop/manage-using-glue-api/glue-api-retrieve-shipments-and-shipment-methods-when-submitting-checkout-data.md
@@ -534,7 +534,7 @@ To retrieve all available shipment methods, submit checkout data with one or mor
| CODE | REASON |
| --- | --- |
-| 400 | Bad request. This error can occur due to the following reasons:
The POST data is incorrect.
Neither **Authorization** nor **X-Anonymous-Customer-Unique-Id** headers were provided in the request.
|
+| 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. |
diff --git a/docs/pbc/all/carrier-management/202311.0/base-shop/manage-using-glue-api/glue-api-retrieve-shipments-when-checking-out-purchases.md b/docs/pbc/all/carrier-management/202311.0/base-shop/manage-using-glue-api/glue-api-retrieve-shipments-when-checking-out-purchases.md
index cf7f6e038df..8a395058c31 100644
--- a/docs/pbc/all/carrier-management/202311.0/base-shop/manage-using-glue-api/glue-api-retrieve-shipments-when-checking-out-purchases.md
+++ b/docs/pbc/all/carrier-management/202311.0/base-shop/manage-using-glue-api/glue-api-retrieve-shipments-when-checking-out-purchases.md
@@ -360,7 +360,7 @@ To retrieve order shipments, include `orders` and `order-shipments`.
| STATUS | REASONS |
| --- | --- |
-| 400 | Bad request. This error can occur due to the following reasons:
The POST data is incorrect;
Neither **Authorization** nor **X-Anonymous-Customer-Unique-Id** headers were provided in the request.
|
+| 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.
|
| 404 | Order not found. |
| 422 | Order payment is not updated. Checkout data is incorrect. |
| 1101 | Checkout data is invalid. |
diff --git a/docs/pbc/all/carrier-management/202404.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/202404.0/base-shop/manage-using-glue-api/glue-api-retrieve-shipments-and-shipment-methods-when-submitting-checkout-data.md
index 2a478facabd..4f2844c40fe 100644
--- a/docs/pbc/all/carrier-management/202404.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/202404.0/base-shop/manage-using-glue-api/glue-api-retrieve-shipments-and-shipment-methods-when-submitting-checkout-data.md
@@ -534,7 +534,7 @@ To retrieve all available shipment methods, submit checkout data with one or mor
| CODE | REASON |
| --- | --- |
-| 400 | Bad request. This error can occur due to the following reasons:
The POST data is incorrect.
Neither **Authorization** nor **X-Anonymous-Customer-Unique-Id** headers were provided in the request.
|
+| 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. |
diff --git a/docs/pbc/all/carrier-management/202404.0/base-shop/manage-using-glue-api/glue-api-retrieve-shipments-when-checking-out-purchases.md b/docs/pbc/all/carrier-management/202404.0/base-shop/manage-using-glue-api/glue-api-retrieve-shipments-when-checking-out-purchases.md
index cf7f6e038df..8a395058c31 100644
--- a/docs/pbc/all/carrier-management/202404.0/base-shop/manage-using-glue-api/glue-api-retrieve-shipments-when-checking-out-purchases.md
+++ b/docs/pbc/all/carrier-management/202404.0/base-shop/manage-using-glue-api/glue-api-retrieve-shipments-when-checking-out-purchases.md
@@ -360,7 +360,7 @@ To retrieve order shipments, include `orders` and `order-shipments`.
| STATUS | REASONS |
| --- | --- |
-| 400 | Bad request. This error can occur due to the following reasons:
The POST data is incorrect;
Neither **Authorization** nor **X-Anonymous-Customer-Unique-Id** headers were provided in the request.
|
+| 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.
|
| 404 | Order not found. |
| 422 | Order payment is not updated. Checkout data is incorrect. |
| 1101 | Checkout data is invalid. |
diff --git a/docs/pbc/all/carrier-management/202410.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/202410.0/base-shop/manage-using-glue-api/glue-api-retrieve-shipments-and-shipment-methods-when-submitting-checkout-data.md
index 9ee112674a7..2c6557c39cf 100644
--- a/docs/pbc/all/carrier-management/202410.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/202410.0/base-shop/manage-using-glue-api/glue-api-retrieve-shipments-and-shipment-methods-when-submitting-checkout-data.md
@@ -534,7 +534,7 @@ To retrieve all available shipment methods, submit checkout data with one or mor
| CODE | REASON |
| --- | --- |
-| 400 | Bad request. This error can occur due to the following reasons:
The POST data is incorrect.
Neither **Authorization** nor **X-Anonymous-Customer-Unique-Id** headers were provided in the request.
|
+| 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. |
diff --git a/docs/pbc/all/carrier-management/202410.0/base-shop/manage-using-glue-api/glue-api-retrieve-shipments-when-checking-out-purchases.md b/docs/pbc/all/carrier-management/202410.0/base-shop/manage-using-glue-api/glue-api-retrieve-shipments-when-checking-out-purchases.md
index ed59d8746d1..33b704b762a 100644
--- a/docs/pbc/all/carrier-management/202410.0/base-shop/manage-using-glue-api/glue-api-retrieve-shipments-when-checking-out-purchases.md
+++ b/docs/pbc/all/carrier-management/202410.0/base-shop/manage-using-glue-api/glue-api-retrieve-shipments-when-checking-out-purchases.md
@@ -360,7 +360,7 @@ To retrieve order shipments, include `orders` and `order-shipments`.
| STATUS | REASONS |
| --- | --- |
-| 400 | Bad request. This error can occur due to the following reasons:
The POST data is incorrect;
Neither **Authorization** nor **X-Anonymous-Customer-Unique-Id** headers were provided in the request.
|
+| 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.
|
| 404 | Order not found. |
| 422 | Order payment is not updated. Checkout data is incorrect. |
| 1101 | Checkout data is invalid. |
diff --git a/docs/pbc/all/cart-and-checkout/202311.0/base-shop/feature-overviews/quick-add-to-cart-feature-overview.md b/docs/pbc/all/cart-and-checkout/202311.0/base-shop/feature-overviews/quick-add-to-cart-feature-overview.md
index 3b820acd7bf..93417e40e48 100644
--- a/docs/pbc/all/cart-and-checkout/202311.0/base-shop/feature-overviews/quick-add-to-cart-feature-overview.md
+++ b/docs/pbc/all/cart-and-checkout/202311.0/base-shop/feature-overviews/quick-add-to-cart-feature-overview.md
@@ -116,7 +116,7 @@ You can upload only one file at a time.
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 due to [quantity restrictions](/docs/pbc/all/cart-and-checkout/{{site.version}}/base-shop/feature-overviews/non-splittable-products-feature-overview.html) setting, the quantity is changed to a valid number.
+In case the quantity is not valid because of [quantity restrictions](/docs/pbc/all/cart-and-checkout/{{site.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.
diff --git a/docs/pbc/all/cart-and-checkout/202311.0/base-shop/manage-using-glue-api/check-out/glue-api-check-out-purchases.md b/docs/pbc/all/cart-and-checkout/202311.0/base-shop/manage-using-glue-api/check-out/glue-api-check-out-purchases.md
index 8147d22b943..d937d4742a6 100644
--- a/docs/pbc/all/cart-and-checkout/202311.0/base-shop/manage-using-glue-api/check-out/glue-api-check-out-purchases.md
+++ b/docs/pbc/all/cart-and-checkout/202311.0/base-shop/manage-using-glue-api/check-out/glue-api-check-out-purchases.md
@@ -1212,7 +1212,7 @@ To retrieve order shipments, include `orders` and `order-shipments`.
| STATUS | REASONS |
| --- | --- |
-| 400 | Bad request. This error can occur due to the following reasons:
The POST data is incorrect;
Neither **Authorization** nor **X-Anonymous-Customer-Unique-Id** headers were provided in the request.
|
+| 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.
|
| 404 | Order not found. |
| 422 | Order payment is not updated. Checkout data is incorrect. |
| 1101 | Checkout data is invalid. |
diff --git a/docs/pbc/all/cart-and-checkout/202311.0/base-shop/manage-using-glue-api/check-out/glue-api-submit-checkout-data.md b/docs/pbc/all/cart-and-checkout/202311.0/base-shop/manage-using-glue-api/check-out/glue-api-submit-checkout-data.md
index 9a8ce0ec108..e2bcb887ab5 100644
--- a/docs/pbc/all/cart-and-checkout/202311.0/base-shop/manage-using-glue-api/check-out/glue-api-submit-checkout-data.md
+++ b/docs/pbc/all/cart-and-checkout/202311.0/base-shop/manage-using-glue-api/check-out/glue-api-submit-checkout-data.md
@@ -1221,7 +1221,7 @@ In case of a successful update, the endpoint responds with information that can
| CODE | REASON |
| --- | --- |
-| 400 | Bad request. This error can occur due to the following reasons:
The POST data is incorrect.
Neither **Authorization** nor **X-Anonymous-Customer-Unique-Id** headers were provided in the request.
|
+| 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. |
diff --git a/docs/pbc/all/cart-and-checkout/202404.0/base-shop/feature-overviews/quick-add-to-cart-feature-overview.md b/docs/pbc/all/cart-and-checkout/202404.0/base-shop/feature-overviews/quick-add-to-cart-feature-overview.md
index 45a7c9b89e8..5d95efeb1d5 100644
--- a/docs/pbc/all/cart-and-checkout/202404.0/base-shop/feature-overviews/quick-add-to-cart-feature-overview.md
+++ b/docs/pbc/all/cart-and-checkout/202404.0/base-shop/feature-overviews/quick-add-to-cart-feature-overview.md
@@ -116,7 +116,7 @@ You can upload only one file at a time.
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 due to [quantity restrictions](/docs/pbc/all/cart-and-checkout/{{site.version}}/base-shop/feature-overviews/non-splittable-products-feature-overview.html) setting, the quantity is changed to a valid number.
+In case the quantity is not valid because of [quantity restrictions](/docs/pbc/all/cart-and-checkout/{{site.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.
diff --git a/docs/pbc/all/cart-and-checkout/202404.0/base-shop/manage-using-glue-api/check-out/glue-api-check-out-purchases.md b/docs/pbc/all/cart-and-checkout/202404.0/base-shop/manage-using-glue-api/check-out/glue-api-check-out-purchases.md
index 8147d22b943..d937d4742a6 100644
--- a/docs/pbc/all/cart-and-checkout/202404.0/base-shop/manage-using-glue-api/check-out/glue-api-check-out-purchases.md
+++ b/docs/pbc/all/cart-and-checkout/202404.0/base-shop/manage-using-glue-api/check-out/glue-api-check-out-purchases.md
@@ -1212,7 +1212,7 @@ To retrieve order shipments, include `orders` and `order-shipments`.
| STATUS | REASONS |
| --- | --- |
-| 400 | Bad request. This error can occur due to the following reasons:
The POST data is incorrect;
Neither **Authorization** nor **X-Anonymous-Customer-Unique-Id** headers were provided in the request.
|
+| 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.
|
| 404 | Order not found. |
| 422 | Order payment is not updated. Checkout data is incorrect. |
| 1101 | Checkout data is invalid. |
diff --git a/docs/pbc/all/cart-and-checkout/202404.0/base-shop/manage-using-glue-api/check-out/glue-api-submit-checkout-data.md b/docs/pbc/all/cart-and-checkout/202404.0/base-shop/manage-using-glue-api/check-out/glue-api-submit-checkout-data.md
index 882f59e6191..fb4dc761fb0 100644
--- a/docs/pbc/all/cart-and-checkout/202404.0/base-shop/manage-using-glue-api/check-out/glue-api-submit-checkout-data.md
+++ b/docs/pbc/all/cart-and-checkout/202404.0/base-shop/manage-using-glue-api/check-out/glue-api-submit-checkout-data.md
@@ -1172,7 +1172,7 @@ In case of a successful update, the endpoint responds with information that can
| CODE | REASON |
| --- | --- |
-| 400 | Bad request. This error can occur due to the following reasons:
The POST data is incorrect.
Neither **Authorization** nor **X-Anonymous-Customer-Unique-Id** headers were provided in the request.
|
+| 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. |
diff --git a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/feature-overviews/quick-add-to-cart-feature-overview.md b/docs/pbc/all/cart-and-checkout/202410.0/base-shop/feature-overviews/quick-add-to-cart-feature-overview.md
index 45a7c9b89e8..5d95efeb1d5 100644
--- a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/feature-overviews/quick-add-to-cart-feature-overview.md
+++ b/docs/pbc/all/cart-and-checkout/202410.0/base-shop/feature-overviews/quick-add-to-cart-feature-overview.md
@@ -116,7 +116,7 @@ You can upload only one file at a time.
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 due to [quantity restrictions](/docs/pbc/all/cart-and-checkout/{{site.version}}/base-shop/feature-overviews/non-splittable-products-feature-overview.html) setting, the quantity is changed to a valid number.
+In case the quantity is not valid because of [quantity restrictions](/docs/pbc/all/cart-and-checkout/{{site.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.
diff --git a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/manage-using-glue-api/check-out/glue-api-check-out-purchases.md b/docs/pbc/all/cart-and-checkout/202410.0/base-shop/manage-using-glue-api/check-out/glue-api-check-out-purchases.md
index b4bc817b6de..58a87c35a0d 100644
--- a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/manage-using-glue-api/check-out/glue-api-check-out-purchases.md
+++ b/docs/pbc/all/cart-and-checkout/202410.0/base-shop/manage-using-glue-api/check-out/glue-api-check-out-purchases.md
@@ -1212,7 +1212,7 @@ To retrieve order shipments, include `orders` and `order-shipments`.
| STATUS | REASONS |
| --- | --- |
-| 400 | Bad request. This error can occur due to the following reasons:
The POST data is incorrect;
Neither **Authorization** nor **X-Anonymous-Customer-Unique-Id** headers were provided in the request.
|
+| 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.
|
| 404 | Order not found. |
| 422 | Order payment is not updated. Checkout data is incorrect. |
| 1101 | Checkout data is invalid. |
diff --git a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/manage-using-glue-api/check-out/glue-api-submit-checkout-data.md b/docs/pbc/all/cart-and-checkout/202410.0/base-shop/manage-using-glue-api/check-out/glue-api-submit-checkout-data.md
index 882f59e6191..fb4dc761fb0 100644
--- a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/manage-using-glue-api/check-out/glue-api-submit-checkout-data.md
+++ b/docs/pbc/all/cart-and-checkout/202410.0/base-shop/manage-using-glue-api/check-out/glue-api-submit-checkout-data.md
@@ -1172,7 +1172,7 @@ In case of a successful update, the endpoint responds with information that can
| CODE | REASON |
| --- | --- |
-| 400 | Bad request. This error can occur due to the following reasons:
The POST data is incorrect.
Neither **Authorization** nor **X-Anonymous-Customer-Unique-Id** headers were provided in the request.
|
+| 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. |
diff --git a/docs/pbc/all/content-management-system/202311.0/base-shop/manage-using-glue-api/glue-api-retrieve-cms-pages.md b/docs/pbc/all/content-management-system/202311.0/base-shop/manage-using-glue-api/glue-api-retrieve-cms-pages.md
index d71a1378a3a..01aa0d0fd4d 100644
--- a/docs/pbc/all/content-management-system/202311.0/base-shop/manage-using-glue-api/glue-api-retrieve-cms-pages.md
+++ b/docs/pbc/all/content-management-system/202311.0/base-shop/manage-using-glue-api/glue-api-retrieve-cms-pages.md
@@ -46,7 +46,7 @@ This endpoint returns activated CMS pages only. Also, if there are more than 12
### Request
-Due to the Storefront layout, by default, the number of the retrieved pages is a multiple of 12. If you have less than 12 active CMS pages, the above request returns all of them. If you have more, you can enable paging and receive results in pages. For this purpose, use the `limit` and `offset` parameters in your request.
+Because of the Storefront layout, by default, the number of the retrieved pages is a multiple of 12. If you have less than 12 active CMS pages, the above request returns all of them. If you have more, you can enable paging and receive results in pages. For this purpose, use the `limit` and `offset` parameters in your request.
Keep in mind that you can not retrieve the number of results, which is not a multiple of 12. Except for the cases when:
diff --git a/docs/pbc/all/content-management-system/202404.0/base-shop/manage-using-glue-api/glue-api-retrieve-cms-pages.md b/docs/pbc/all/content-management-system/202404.0/base-shop/manage-using-glue-api/glue-api-retrieve-cms-pages.md
index f5372a19070..5ae2ea62d66 100644
--- a/docs/pbc/all/content-management-system/202404.0/base-shop/manage-using-glue-api/glue-api-retrieve-cms-pages.md
+++ b/docs/pbc/all/content-management-system/202404.0/base-shop/manage-using-glue-api/glue-api-retrieve-cms-pages.md
@@ -46,7 +46,7 @@ This endpoint returns activated CMS pages only. Also, if there are more than 12
### Request
-Due to the Storefront layout, by default, the number of the retrieved pages is a multiple of 12. If you have less than 12 active CMS pages, the above request returns all of them. If you have more, you can enable paging and receive results in pages. For this purpose, use the `limit` and `offset` parameters in your request.
+Because of the Storefront layout, by default, the number of the retrieved pages is a multiple of 12. If you have less than 12 active CMS pages, the above request returns all of them. If you have more, you can enable paging and receive results in pages. For this purpose, use the `limit` and `offset` parameters in your request.
Keep in mind that you can not retrieve the number of results, which is not a multiple of 12. Except for the cases when:
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/202410.0/base-shop/manage-using-glue-api/glue-api-retrieve-cms-pages.md
index a7121e3c2f0..67eab1891cb 100644
--- 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/202410.0/base-shop/manage-using-glue-api/glue-api-retrieve-cms-pages.md
@@ -46,7 +46,7 @@ This endpoint returns activated CMS pages only. Also, if there are more than 12
### Request
-Due to the Storefront layout, by default, the number of the retrieved pages is a multiple of 12. If you have less than 12 active CMS pages, the above request returns all of them. If you have more, you can enable paging and receive results in pages. For this purpose, use the `limit` and `offset` parameters in your request.
+Because of the Storefront layout, by default, the number of the retrieved pages is a multiple of 12. If you have less than 12 active CMS pages, the above request returns all of them. If you have more, you can enable paging and receive results in pages. For this purpose, use the `limit` and `offset` parameters in your request.
Keep in mind that you can not retrieve the number of results, which is not a multiple of 12. Except for the cases when:
diff --git a/docs/pbc/all/data-exchange/202404.0/sending-requests-with-data-exchange-api.md b/docs/pbc/all/data-exchange/202404.0/sending-requests-with-data-exchange-api.md
index 289e8fcf47d..075d31050ea 100644
--- a/docs/pbc/all/data-exchange/202404.0/sending-requests-with-data-exchange-api.md
+++ b/docs/pbc/all/data-exchange/202404.0/sending-requests-with-data-exchange-api.md
@@ -636,7 +636,7 @@ to the child entities based on the newly created parent entity's ID.
By default, the Data Exchange API uses a transactional approach to save data. If an error occurs during the saving process, the entire transaction is rolled back, and no data is saved. However, in some cases, you may want to save data non-transactionally. In the non-transactional mode, the API wraps each entity and its related records (if present in the request) in a separate transaction.
To enable the non-transactional behavior, you need to set the `X-Is-Transactional` with the value `false` in the request.
-In the following example, the first entity will be saved successfully, while the second entity won't be saved due to the missing `rate` field.
+In the following example, the first entity will be saved successfully, while the second entity won't be saved because of the missing `rate` field.
```bash
@@ -676,7 +676,7 @@ Content-Length: 445
```
-Due to the non-transactional mode, the user will receive a response with the saved entity in the `data` field and an error message in the `error` field.
+Because of the non-transactional mode, the user will receive a response with the saved entity in the `data` field and an error message in the `error` field.
```json
{
diff --git a/docs/pbc/all/data-exchange/202410.0/sending-requests-with-data-exchange-api.md b/docs/pbc/all/data-exchange/202410.0/sending-requests-with-data-exchange-api.md
index 6f7e7ed2d0c..fcda9cd7009 100644
--- a/docs/pbc/all/data-exchange/202410.0/sending-requests-with-data-exchange-api.md
+++ b/docs/pbc/all/data-exchange/202410.0/sending-requests-with-data-exchange-api.md
@@ -636,7 +636,7 @@ to the child entities based on the newly created parent entity's ID.
By default, the Data Exchange API uses a transactional approach to save data. If an error occurs during the saving process, the entire transaction is rolled back, and no data is saved. However, in some cases, you may want to save data non-transactionally. In the non-transactional mode, the API wraps each entity and its related records (if present in the request) in a separate transaction.
To enable the non-transactional behavior, you need to set the `X-Is-Transactional` with the value `false` in the request.
-In the following example, the first entity will be saved successfully, while the second entity won't be saved due to the missing `rate` field.
+In the following example, the first entity will be saved successfully, while the second entity won't be saved because of the missing `rate` field.
```bash
@@ -676,7 +676,7 @@ Content-Length: 445
```
-Due to the non-transactional mode, the user will receive a response with the saved entity in the `data` field and an error message in the `error` field.
+Because of the non-transactional mode, the user will receive a response with the saved entity in the `data` field and an error message in the `error` field.
```json
{
diff --git a/docs/pbc/all/discount-management/202311.0/base-shop/promotions-discounts-feature-overview.md b/docs/pbc/all/discount-management/202311.0/base-shop/promotions-discounts-feature-overview.md
index 969994ca77b..21dc18b15fa 100644
--- a/docs/pbc/all/discount-management/202311.0/base-shop/promotions-discounts-feature-overview.md
+++ b/docs/pbc/all/discount-management/202311.0/base-shop/promotions-discounts-feature-overview.md
@@ -155,7 +155,7 @@ The promotional product discount only applies if the product is added to the car
{% endinfo_block %}
-A Back Office user can either give away promotional products for free or provide a discount for these products by specifying the percentage value, or a fixed amount, to be discounted from their price. When giving a product for free, the percentage value must be 100%. Using a fixed amount discount for a free product is also possible, where the amount is equal to a product's price, but it is not recommended due to the possibility of price fluctuations and differences across multiple products.
+A Back Office user can either give away promotional products for free or provide a discount for these products by specifying the percentage value, or a fixed amount, to be discounted from their price. When giving a product for free, the percentage value must be 100%. Using a fixed amount discount for a free product is also possible, where the amount is equal to a product's price, but it is not recommended because of the possibility of price fluctuations and differences across multiple products.
![Collection - promotional product](https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/user/features/promotions-discounts-feature-overview.md/202200.0/collection-promotional-product.png)
diff --git a/docs/pbc/all/discount-management/202404.0/base-shop/promotions-discounts-feature-overview.md b/docs/pbc/all/discount-management/202404.0/base-shop/promotions-discounts-feature-overview.md
index 969994ca77b..21dc18b15fa 100644
--- a/docs/pbc/all/discount-management/202404.0/base-shop/promotions-discounts-feature-overview.md
+++ b/docs/pbc/all/discount-management/202404.0/base-shop/promotions-discounts-feature-overview.md
@@ -155,7 +155,7 @@ The promotional product discount only applies if the product is added to the car
{% endinfo_block %}
-A Back Office user can either give away promotional products for free or provide a discount for these products by specifying the percentage value, or a fixed amount, to be discounted from their price. When giving a product for free, the percentage value must be 100%. Using a fixed amount discount for a free product is also possible, where the amount is equal to a product's price, but it is not recommended due to the possibility of price fluctuations and differences across multiple products.
+A Back Office user can either give away promotional products for free or provide a discount for these products by specifying the percentage value, or a fixed amount, to be discounted from their price. When giving a product for free, the percentage value must be 100%. Using a fixed amount discount for a free product is also possible, where the amount is equal to a product's price, but it is not recommended because of the possibility of price fluctuations and differences across multiple products.
![Collection - promotional product](https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/user/features/promotions-discounts-feature-overview.md/202200.0/collection-promotional-product.png)
diff --git a/docs/pbc/all/discount-management/202410.0/base-shop/promotions-discounts-feature-overview.md b/docs/pbc/all/discount-management/202410.0/base-shop/promotions-discounts-feature-overview.md
index 969994ca77b..21dc18b15fa 100644
--- a/docs/pbc/all/discount-management/202410.0/base-shop/promotions-discounts-feature-overview.md
+++ b/docs/pbc/all/discount-management/202410.0/base-shop/promotions-discounts-feature-overview.md
@@ -155,7 +155,7 @@ The promotional product discount only applies if the product is added to the car
{% endinfo_block %}
-A Back Office user can either give away promotional products for free or provide a discount for these products by specifying the percentage value, or a fixed amount, to be discounted from their price. When giving a product for free, the percentage value must be 100%. Using a fixed amount discount for a free product is also possible, where the amount is equal to a product's price, but it is not recommended due to the possibility of price fluctuations and differences across multiple products.
+A Back Office user can either give away promotional products for free or provide a discount for these products by specifying the percentage value, or a fixed amount, to be discounted from their price. When giving a product for free, the percentage value must be 100%. Using a fixed amount discount for a free product is also possible, where the amount is equal to a product's price, but it is not recommended because of the possibility of price fluctuations and differences across multiple products.
![Collection - promotional product](https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/user/features/promotions-discounts-feature-overview.md/202200.0/collection-promotional-product.png)
diff --git a/docs/pbc/all/dynamic-multistore/202311.0/base-shop/delete-stores.md b/docs/pbc/all/dynamic-multistore/202311.0/base-shop/delete-stores.md
index 26979843174..58e4633c566 100644
--- a/docs/pbc/all/dynamic-multistore/202311.0/base-shop/delete-stores.md
+++ b/docs/pbc/all/dynamic-multistore/202311.0/base-shop/delete-stores.md
@@ -59,7 +59,7 @@ vendor/bin/console scheduler:suspend
## Clean data and configuration in related database tables
-1. Due to the foreign key relationship with the store entity, delete the data from the following tables:
+1. Because of the foreign key relationship with the store entity, delete the data from the following tables:
- `spy_price_product_store`
- `spy_asset_store`
- `spy_availability_abstract`
diff --git a/docs/pbc/all/dynamic-multistore/202404.0/base-shop/delete-stores.md b/docs/pbc/all/dynamic-multistore/202404.0/base-shop/delete-stores.md
index 26979843174..58e4633c566 100644
--- a/docs/pbc/all/dynamic-multistore/202404.0/base-shop/delete-stores.md
+++ b/docs/pbc/all/dynamic-multistore/202404.0/base-shop/delete-stores.md
@@ -59,7 +59,7 @@ vendor/bin/console scheduler:suspend
## Clean data and configuration in related database tables
-1. Due to the foreign key relationship with the store entity, delete the data from the following tables:
+1. Because of the foreign key relationship with the store entity, delete the data from the following tables:
- `spy_price_product_store`
- `spy_asset_store`
- `spy_availability_abstract`
diff --git a/docs/pbc/all/dynamic-multistore/202410.0/base-shop/delete-stores.md b/docs/pbc/all/dynamic-multistore/202410.0/base-shop/delete-stores.md
index f2e787c13d6..011c2909dad 100644
--- a/docs/pbc/all/dynamic-multistore/202410.0/base-shop/delete-stores.md
+++ b/docs/pbc/all/dynamic-multistore/202410.0/base-shop/delete-stores.md
@@ -53,7 +53,7 @@ vendor/bin/console scheduler:suspend
## Clean data and configuration in related database tables
-1. Due to the foreign key relationship with the store entity, delete the data from the following tables:
+1. Because of the foreign key relationship with the store entity, delete the data from the following tables:
- `spy_price_product_store`
- `spy_asset_store`
- `spy_availability_abstract`
diff --git a/docs/pbc/all/identity-access-management/202311.0/manage-using-glue-api/glue-api-authenticate-as-a-company-user.md b/docs/pbc/all/identity-access-management/202311.0/manage-using-glue-api/glue-api-authenticate-as-a-company-user.md
index cefa7ea76f3..f3fc5b8dda3 100644
--- a/docs/pbc/all/identity-access-management/202311.0/manage-using-glue-api/glue-api-authenticate-as-a-company-user.md
+++ b/docs/pbc/all/identity-access-management/202311.0/manage-using-glue-api/glue-api-authenticate-as-a-company-user.md
@@ -105,7 +105,7 @@ Request sample: authenticate as a company user
| CODE | REASON |
| --- | --- |
-| 001 | Failed to authenticate a user. This can happen due to the following reasons:
Current authenticated customer cannot authenticate as the specified company user.
Specified company user does not exist.
Authentication token provided in the request is incorrect.
|
+| 001 | Failed to authenticate a user. This can happen because of the following reasons:
Current authenticated customer cannot authenticate as the specified company user.
Specified company user does not exist.
Authentication token provided in the request is incorrect.
|
| 002 | Authentication token is missing. |
| 901 | The `idCompanyUser` attribute is not specified, invalid, or empty. |
diff --git a/docs/pbc/all/identity-access-management/202404.0/manage-using-glue-api/glue-api-authenticate-as-a-company-user.md b/docs/pbc/all/identity-access-management/202404.0/manage-using-glue-api/glue-api-authenticate-as-a-company-user.md
index cefa7ea76f3..f3fc5b8dda3 100644
--- a/docs/pbc/all/identity-access-management/202404.0/manage-using-glue-api/glue-api-authenticate-as-a-company-user.md
+++ b/docs/pbc/all/identity-access-management/202404.0/manage-using-glue-api/glue-api-authenticate-as-a-company-user.md
@@ -105,7 +105,7 @@ Request sample: authenticate as a company user
| CODE | REASON |
| --- | --- |
-| 001 | Failed to authenticate a user. This can happen due to the following reasons:
Current authenticated customer cannot authenticate as the specified company user.
Specified company user does not exist.
Authentication token provided in the request is incorrect.
|
+| 001 | Failed to authenticate a user. This can happen because of the following reasons:
Current authenticated customer cannot authenticate as the specified company user.
Specified company user does not exist.
Authentication token provided in the request is incorrect.
|
| 002 | Authentication token is missing. |
| 901 | The `idCompanyUser` attribute is not specified, invalid, or empty. |
diff --git a/docs/pbc/all/identity-access-management/202410.0/manage-using-glue-api/glue-api-authenticate-as-a-company-user.md b/docs/pbc/all/identity-access-management/202410.0/manage-using-glue-api/glue-api-authenticate-as-a-company-user.md
index 14f4e629628..636786ff9d1 100644
--- a/docs/pbc/all/identity-access-management/202410.0/manage-using-glue-api/glue-api-authenticate-as-a-company-user.md
+++ b/docs/pbc/all/identity-access-management/202410.0/manage-using-glue-api/glue-api-authenticate-as-a-company-user.md
@@ -105,7 +105,7 @@ Request sample: authenticate as a company user
| CODE | REASON |
| --- | --- |
-| 001 | Failed to authenticate a user. This can happen due to the following reasons:
Current authenticated customer cannot authenticate as the specified company user.
Specified company user does not exist.
Authentication token provided in the request is incorrect.
|
+| 001 | Failed to authenticate a user. This can happen because of the following reasons:
Current authenticated customer cannot authenticate as the specified company user.
Specified company user does not exist.
Authentication token provided in the request is incorrect.
|
| 002 | Authentication token is missing. |
| 901 | The `idCompanyUser` attribute is not specified, invalid, or empty. |
diff --git a/docs/pbc/all/merchant-management/202311.0/marketplace/merchant-opening-hours-feature-overview.md b/docs/pbc/all/merchant-management/202311.0/marketplace/merchant-opening-hours-feature-overview.md
index c1a1b07d1a5..13a34270a30 100644
--- a/docs/pbc/all/merchant-management/202311.0/marketplace/merchant-opening-hours-feature-overview.md
+++ b/docs/pbc/all/merchant-management/202311.0/marketplace/merchant-opening-hours-feature-overview.md
@@ -21,7 +21,7 @@ A merchant has the following:
* Merchant is opened on a usually closed day—for example, Sunday.
* Merchant has different opening hours in comparison to a normal schedule—for example, December 31st has shorter opening hours.
-* Public holidays—special days when the Merchant is not available due to the public holidays
+* Public holidays—special days when the Merchant is not available because of the public holidays
To display merchant opening hours on the Storefront, you should import the open hours information. For information about how to do that, see [File details: merchant_open_hours_date_schedule.csv](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/import-and-export-data/import-file-details-merchant-open-hours-date-schedule.csv.html) and [File details: merchant_open_hours_week_day_schedule.csv](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/import-and-export-data/import-file-details-merchant-open-hours-week-day-schedule.csv.html).
diff --git a/docs/pbc/all/merchant-management/202404.0/marketplace/merchant-opening-hours-feature-overview.md b/docs/pbc/all/merchant-management/202404.0/marketplace/merchant-opening-hours-feature-overview.md
index c1a1b07d1a5..13a34270a30 100644
--- a/docs/pbc/all/merchant-management/202404.0/marketplace/merchant-opening-hours-feature-overview.md
+++ b/docs/pbc/all/merchant-management/202404.0/marketplace/merchant-opening-hours-feature-overview.md
@@ -21,7 +21,7 @@ A merchant has the following:
* Merchant is opened on a usually closed day—for example, Sunday.
* Merchant has different opening hours in comparison to a normal schedule—for example, December 31st has shorter opening hours.
-* Public holidays—special days when the Merchant is not available due to the public holidays
+* Public holidays—special days when the Merchant is not available because of the public holidays
To display merchant opening hours on the Storefront, you should import the open hours information. For information about how to do that, see [File details: merchant_open_hours_date_schedule.csv](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/import-and-export-data/import-file-details-merchant-open-hours-date-schedule.csv.html) and [File details: merchant_open_hours_week_day_schedule.csv](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/import-and-export-data/import-file-details-merchant-open-hours-week-day-schedule.csv.html).
diff --git a/docs/pbc/all/merchant-management/202410.0/marketplace/merchant-opening-hours-feature-overview.md b/docs/pbc/all/merchant-management/202410.0/marketplace/merchant-opening-hours-feature-overview.md
index c1a1b07d1a5..13a34270a30 100644
--- a/docs/pbc/all/merchant-management/202410.0/marketplace/merchant-opening-hours-feature-overview.md
+++ b/docs/pbc/all/merchant-management/202410.0/marketplace/merchant-opening-hours-feature-overview.md
@@ -21,7 +21,7 @@ A merchant has the following:
* Merchant is opened on a usually closed day—for example, Sunday.
* Merchant has different opening hours in comparison to a normal schedule—for example, December 31st has shorter opening hours.
-* Public holidays—special days when the Merchant is not available due to the public holidays
+* Public holidays—special days when the Merchant is not available because of the public holidays
To display merchant opening hours on the Storefront, you should import the open hours information. For information about how to do that, see [File details: merchant_open_hours_date_schedule.csv](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/import-and-export-data/import-file-details-merchant-open-hours-date-schedule.csv.html) and [File details: merchant_open_hours_week_day_schedule.csv](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/import-and-export-data/import-file-details-merchant-open-hours-week-day-schedule.csv.html).
diff --git a/docs/pbc/all/miscellaneous/202311.0/third-party-integrations/operational-tools-monitoring-legal/vshn.md b/docs/pbc/all/miscellaneous/202311.0/third-party-integrations/operational-tools-monitoring-legal/vshn.md
index 8aadcbc6e00..3896bc99875 100644
--- a/docs/pbc/all/miscellaneous/202311.0/third-party-integrations/operational-tools-monitoring-legal/vshn.md
+++ b/docs/pbc/all/miscellaneous/202311.0/third-party-integrations/operational-tools-monitoring-legal/vshn.md
@@ -22,7 +22,7 @@ Since 2014 we support 300 customers & partners operating over 900 servers in 20
YOUR ADVANTAGES:
* Your partner for DevOps, Docker, Kubernetes, Openshift and 24/7 cloud operations partner & application operation.
* Our automation accelerates development, deployment and operations processes.
-* Shorter time to market due to proven technologies like Git and Docker.
+* Shorter time to market because of proven technologies like Git and Docker.
* APPUiO.ch - the Swiss container platform based on Red Hat OpenShift as Managed Service.
* Our processes are ISO 27001 certified and we operate according to the Swiss banking standards.
* Our team of experts is available to you. 24/7 in case of emergency.
diff --git a/docs/pbc/all/miscellaneous/202404.0/third-party-integrations/operational-tools-monitoring-legal/vshn.md b/docs/pbc/all/miscellaneous/202404.0/third-party-integrations/operational-tools-monitoring-legal/vshn.md
index 8aadcbc6e00..3896bc99875 100644
--- a/docs/pbc/all/miscellaneous/202404.0/third-party-integrations/operational-tools-monitoring-legal/vshn.md
+++ b/docs/pbc/all/miscellaneous/202404.0/third-party-integrations/operational-tools-monitoring-legal/vshn.md
@@ -22,7 +22,7 @@ Since 2014 we support 300 customers & partners operating over 900 servers in 20
YOUR ADVANTAGES:
* Your partner for DevOps, Docker, Kubernetes, Openshift and 24/7 cloud operations partner & application operation.
* Our automation accelerates development, deployment and operations processes.
-* Shorter time to market due to proven technologies like Git and Docker.
+* Shorter time to market because of proven technologies like Git and Docker.
* APPUiO.ch - the Swiss container platform based on Red Hat OpenShift as Managed Service.
* Our processes are ISO 27001 certified and we operate according to the Swiss banking standards.
* Our team of experts is available to you. 24/7 in case of emergency.
diff --git a/docs/pbc/all/miscellaneous/202410.0/third-party-integrations/operational-tools-monitoring-legal/vshn.md b/docs/pbc/all/miscellaneous/202410.0/third-party-integrations/operational-tools-monitoring-legal/vshn.md
index 8aadcbc6e00..3896bc99875 100644
--- a/docs/pbc/all/miscellaneous/202410.0/third-party-integrations/operational-tools-monitoring-legal/vshn.md
+++ b/docs/pbc/all/miscellaneous/202410.0/third-party-integrations/operational-tools-monitoring-legal/vshn.md
@@ -22,7 +22,7 @@ Since 2014 we support 300 customers & partners operating over 900 servers in 20
YOUR ADVANTAGES:
* Your partner for DevOps, Docker, Kubernetes, Openshift and 24/7 cloud operations partner & application operation.
* Our automation accelerates development, deployment and operations processes.
-* Shorter time to market due to proven technologies like Git and Docker.
+* Shorter time to market because of proven technologies like Git and Docker.
* APPUiO.ch - the Swiss container platform based on Red Hat OpenShift as Managed Service.
* Our processes are ISO 27001 certified and we operate according to the Swiss banking standards.
* Our team of experts is available to you. 24/7 in case of emergency.
diff --git a/docs/pbc/all/order-management-system/202311.0/base-shop/datapayload-conversion/state-machine/common-pitfalls-in-oms-design.md b/docs/pbc/all/order-management-system/202311.0/base-shop/datapayload-conversion/state-machine/common-pitfalls-in-oms-design.md
index b7a10f3662f..01d8ceee7ec 100644
--- a/docs/pbc/all/order-management-system/202311.0/base-shop/datapayload-conversion/state-machine/common-pitfalls-in-oms-design.md
+++ b/docs/pbc/all/order-management-system/202311.0/base-shop/datapayload-conversion/state-machine/common-pitfalls-in-oms-design.md
@@ -212,7 +212,7 @@ The unused state may have a missing transition.
**Issue:** During the last transition in the callback from `picking finished` to `ready for recalculation`, a Jenkins job starts the `check-condition` command. Because of the command, the check-condition takes only a part of order items and pushes them forward. The next job executes the remaining order items with a delay, so many commands are triggered twice.
![saving-states-2](https://github.com/xartsiomx/spryker-docs/assets/110463030/1fd1b30f-00dc-49eb-8d35-37583e140f5e)
-**Solution:** This is possible because, during the execution of `\Spryker\Zed\Oms\Business\OrderStateMachine\OrderStateMachine::saveOrderItems`, the system stores data per item. That's because the core logic expects that there may be more than one order in transition. To avoid blocking all of them due to a potential failed order, transition is executed per item. To change that, group order items per order and change the transaction behavior to store all order items per one transaction. Then, a check-condition or any other command can’t take order items partially.
+**Solution:** This is possible because, during the execution of `\Spryker\Zed\Oms\Business\OrderStateMachine\OrderStateMachine::saveOrderItems`, the system stores data per item. That's because the core logic expects that there may be more than one order in transition. To avoid blocking all of them because of a potential failed order, transition is executed per item. To change that, group order items per order and change the transaction behavior to store all order items per one transaction. Then, a check-condition or any other command can’t take order items partially.
## LockedStateMachine
@@ -220,7 +220,7 @@ When multiple processes can push forward an order from one source state, we reco
1. It implements the same interface as a common StateMachine and has locks for all methods except the `check-condition` command.
-2. Lock works based on `spy_state_machine_lock` table. Due to the nature of MySQL, you may face deadlocks, which you need to [handle properly](https://dev.mysql.com/doc/refman/8.4/en/innodb-deadlocks-handling.html). Also, the same operation in MySQL takes more time than memory storage, like Redis. By default, locking works on the order item level, but, in most cases, using locks on the order level is more efficient.
+2. Lock works based on `spy_state_machine_lock` table. Because of the nature of MySQL, you may face deadlocks, which you need to [handle properly](https://dev.mysql.com/doc/refman/8.4/en/innodb-deadlocks-handling.html). Also, the same operation in MySQL takes more time than memory storage, like Redis. By default, locking works on the order item level, but, in most cases, using locks on the order level is more efficient.
## Speed up oms:check-condition: parallel execution and run often than once per minute
diff --git a/docs/pbc/all/order-management-system/202311.0/base-shop/datapayload-conversion/state-machine/order-process-modelling-via-state-machines.md b/docs/pbc/all/order-management-system/202311.0/base-shop/datapayload-conversion/state-machine/order-process-modelling-via-state-machines.md
index 73ef0f6911e..406ebddafc1 100644
--- a/docs/pbc/all/order-management-system/202311.0/base-shop/datapayload-conversion/state-machine/order-process-modelling-via-state-machines.md
+++ b/docs/pbc/all/order-management-system/202311.0/base-shop/datapayload-conversion/state-machine/order-process-modelling-via-state-machines.md
@@ -136,7 +136,7 @@ The events can be fired as follows:
* Automatically: If an event has the `onEnter="true"` attribute associated, then the event is fired automatically when the source state is reached. For example, `` means that the OMS state-authorized is triggered automatically.
* By setting the `manual` attribute to `true`: This adds a button in the **Back Office → View Order [Order ID**] page that allows you to manually trigger the corresponding transition by clicking the button. For example, `` means that the OMS state canceled can only be triggered by clicking the **cancel** button for the order state.
* Via an API call: The `triggerEvent`method allows triggering an event for a given process instance. For example, if a message from the payment provider is received that the capture was successful, the corresponding process instance can be triggered via the API call.
-* By a timeout: Events are triggered after the defined time has passed. For example, `` means that the OMS state closed will be triggered in 1 hour, if not triggered manually from the Back Office earlier. Now let's assume we are trying to define the prepayment process, in which if after 15 days no payment is received, `reminder sent` is fired due to the timeout. How is the reminder then technically sent? This can be implemented through a command attached to the `sendFirstReminder` 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/order item stays in the source state.
+* By a timeout: Events are triggered after the defined time has passed. For example, `` means that the OMS state closed will be triggered in 1 hour, if not triggered manually from the Back Office earlier. Now let's assume we are trying to define the prepayment process, in which if after 15 days no payment is received, `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 `sendFirstReminder` 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/order item stays in the source state.
```xml
diff --git a/docs/pbc/all/order-management-system/202311.0/base-shop/process-incoming-HTTP-requests-from-external-erp-services-for-order-updates.md b/docs/pbc/all/order-management-system/202311.0/base-shop/process-incoming-HTTP-requests-from-external-erp-services-for-order-updates.md
index 4d3e63ff7c0..5b5a52438a4 100644
--- a/docs/pbc/all/order-management-system/202311.0/base-shop/process-incoming-HTTP-requests-from-external-erp-services-for-order-updates.md
+++ b/docs/pbc/all/order-management-system/202311.0/base-shop/process-incoming-HTTP-requests-from-external-erp-services-for-order-updates.md
@@ -21,7 +21,7 @@ Easy to implement, understand, and maintain.
**Cons**
-* Long-running requests can fail due to an HTTP connection timeout.
+* Long-running requests can fail because of an HTTP connection timeout.
* Heavy operations require scaling the hardware for the application, which can lead to extra costs.
* Retry mechanism should be implemented on the caller's side.
@@ -107,7 +107,7 @@ The following comparison table illustrates the various quality attributes of the
| Usability / Understandability / Simplicity | ✅ | ❗ Experience with OMS engine is required | ❗ Experience with Jenkins and CLI is required |
| Fault-tolerance / Correctness / Recoverability | ❌ HTTP connection usually has timeout. ❌ Extra efforts to make an application recoverable are required (may be impossible). ❌ Extra efforts to implement retry mechanism are required (may be impossible). ❗ Lock mechanism is required | ✅ Put transition command into DB transaction to be able to retry (if possible) ✅ Retry transitions can trigger retry logic manually or by timeout | ✅ Retry transitions can trigger retry logic manually or by timeout ✅ Event handler logic should be inside of DB transaction to be able to retry (if possible) ❗ Lock mechanism is required |
| Scaleability | ✅ | ✅Static scaling of OMS check-condition job | ✅ Static scaling of Jenkins job |
-| Upgradability | ✅ | ✅ | ✅ No upgradability issues due to no OOTB functionality usage |
+| Upgradability | ✅ | ✅ | ✅ No upgradability issues because of no OOTB functionality usage |
✅ good or bonus
diff --git a/docs/pbc/all/order-management-system/202311.0/base-shop/reclamations-feature-overview.md b/docs/pbc/all/order-management-system/202311.0/base-shop/reclamations-feature-overview.md
index e2d69e4c32d..d6ecb12e649 100644
--- a/docs/pbc/all/order-management-system/202311.0/base-shop/reclamations-feature-overview.md
+++ b/docs/pbc/all/order-management-system/202311.0/base-shop/reclamations-feature-overview.md
@@ -26,7 +26,7 @@ With the reclamations in place, you can find the problematic issues with orders
{% info_block errorBox %}
-Due to 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.
+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 %}
diff --git a/docs/pbc/all/order-management-system/202311.0/base-shop/state-machine-cookbook/state-machine-cookbook-state-machine-fundamentals.md b/docs/pbc/all/order-management-system/202311.0/base-shop/state-machine-cookbook/state-machine-cookbook-state-machine-fundamentals.md
index 26aae55b17a..a5ecebcbde4 100644
--- a/docs/pbc/all/order-management-system/202311.0/base-shop/state-machine-cookbook/state-machine-cookbook-state-machine-fundamentals.md
+++ b/docs/pbc/all/order-management-system/202311.0/base-shop/state-machine-cookbook/state-machine-cookbook-state-machine-fundamentals.md
@@ -228,7 +228,7 @@ On the default Zed Order Details page, you can trigger an event for a single ite
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 due to 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.
+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
diff --git a/docs/pbc/all/order-management-system/202311.0/marketplace/manage-in-the-back-office/manage-marketplace-orders.md b/docs/pbc/all/order-management-system/202311.0/marketplace/manage-in-the-back-office/manage-marketplace-orders.md
index b78714e05be..40591e0922e 100644
--- a/docs/pbc/all/order-management-system/202311.0/marketplace/manage-in-the-back-office/manage-marketplace-orders.md
+++ b/docs/pbc/all/order-management-system/202311.0/marketplace/manage-in-the-back-office/manage-marketplace-orders.md
@@ -206,7 +206,7 @@ Once a return has been created, it acquires the *Waiting for return* state. You
|---|---|
| execute-return | Select this state if you accept the return. When triggering this state, the return status is changed to *Returned*. |
| refund | Select this state if you have refunded the returned items. When triggering this state, the return status is changed to *Refunded*. |
-| cancel-return | You can trigger this state after the *Waiting for return* state. Select this state if either customer changed their mind and doesn’t want to make the return anymore, or you cancel the return due to the return policy, or for other reasons. When triggering this state, the return status is changed to *Canceled*. |
+| cancel-return | You can trigger this state after the *Waiting for return* state. Select this state if either customer changed their mind and doesn’t want to make the return anymore, or you cancel the return because of the return policy, or for other reasons. When triggering this state, the return status is changed to *Canceled*. |
| ship-return | You can trigger this state after the *Cancel* return state. Select this state if you shipped the canceled return back to the customer. The return status is changed to *Shipped to customer*. |
| delivery-return | You can trigger this state after the *Shipped to customer*. Select this state if the return has been delivered to the customer. The return status is changed to *Delivered*. |
| close | You can trigger this state after the *Delivered* state. Select this state to close the return. The return status is changed to *Closed*. |
diff --git a/docs/pbc/all/order-management-system/202311.0/marketplace/marketplace-order-management-feature-overview/marketplace-order-management-feature-overview.md b/docs/pbc/all/order-management-system/202311.0/marketplace/marketplace-order-management-feature-overview/marketplace-order-management-feature-overview.md
index 2b0c868eace..86635857755 100644
--- a/docs/pbc/all/order-management-system/202311.0/marketplace/marketplace-order-management-feature-overview/marketplace-order-management-feature-overview.md
+++ b/docs/pbc/all/order-management-system/202311.0/marketplace/marketplace-order-management-feature-overview/marketplace-order-management-feature-overview.md
@@ -73,7 +73,7 @@ Rounding rules for a regular SCOS sales order also apply to the Marketplace orde
{% info_block warningBox "Warning" %}
-In some cases, due to 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/202311.0/marketplace/marketplace-order-management-feature-overview/marketplace-order-overview.md b/docs/pbc/all/order-management-system/202311.0/marketplace/marketplace-order-management-feature-overview/marketplace-order-overview.md
index 2c6305ff7af..d02fb87e1c5 100644
--- a/docs/pbc/all/order-management-system/202311.0/marketplace/marketplace-order-management-feature-overview/marketplace-order-overview.md
+++ b/docs/pbc/all/order-management-system/202311.0/marketplace/marketplace-order-management-feature-overview/marketplace-order-overview.md
@@ -73,7 +73,7 @@ Rounding rules for a regular SCOS sales order also apply to the Marketplace orde
{% info_block warningBox "Warning" %}
-In some cases, due to 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/202404.0/base-shop/datapayload-conversion/state-machine/order-process-modelling-via-state-machines.md b/docs/pbc/all/order-management-system/202404.0/base-shop/datapayload-conversion/state-machine/order-process-modelling-via-state-machines.md
index 73ef0f6911e..406ebddafc1 100644
--- a/docs/pbc/all/order-management-system/202404.0/base-shop/datapayload-conversion/state-machine/order-process-modelling-via-state-machines.md
+++ b/docs/pbc/all/order-management-system/202404.0/base-shop/datapayload-conversion/state-machine/order-process-modelling-via-state-machines.md
@@ -136,7 +136,7 @@ The events can be fired as follows:
* Automatically: If an event has the `onEnter="true"` attribute associated, then the event is fired automatically when the source state is reached. For example, `` means that the OMS state-authorized is triggered automatically.
* By setting the `manual` attribute to `true`: This adds a button in the **Back Office → View Order [Order ID**] page that allows you to manually trigger the corresponding transition by clicking the button. For example, `` means that the OMS state canceled can only be triggered by clicking the **cancel** button for the order state.
* Via an API call: The `triggerEvent`method allows triggering an event for a given process instance. For example, if a message from the payment provider is received that the capture was successful, the corresponding process instance can be triggered via the API call.
-* By a timeout: Events are triggered after the defined time has passed. For example, `` means that the OMS state closed will be triggered in 1 hour, if not triggered manually from the Back Office earlier. Now let's assume we are trying to define the prepayment process, in which if after 15 days no payment is received, `reminder sent` is fired due to the timeout. How is the reminder then technically sent? This can be implemented through a command attached to the `sendFirstReminder` 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/order item stays in the source state.
+* By a timeout: Events are triggered after the defined time has passed. For example, `` means that the OMS state closed will be triggered in 1 hour, if not triggered manually from the Back Office earlier. Now let's assume we are trying to define the prepayment process, in which if after 15 days no payment is received, `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 `sendFirstReminder` 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/order item stays in the source state.
```xml
diff --git a/docs/pbc/all/order-management-system/202404.0/base-shop/process-incoming-HTTP-requests-from-external-erp-services-for-order-updates.md b/docs/pbc/all/order-management-system/202404.0/base-shop/process-incoming-HTTP-requests-from-external-erp-services-for-order-updates.md
index 4d3e63ff7c0..5b5a52438a4 100644
--- a/docs/pbc/all/order-management-system/202404.0/base-shop/process-incoming-HTTP-requests-from-external-erp-services-for-order-updates.md
+++ b/docs/pbc/all/order-management-system/202404.0/base-shop/process-incoming-HTTP-requests-from-external-erp-services-for-order-updates.md
@@ -21,7 +21,7 @@ Easy to implement, understand, and maintain.
**Cons**
-* Long-running requests can fail due to an HTTP connection timeout.
+* Long-running requests can fail because of an HTTP connection timeout.
* Heavy operations require scaling the hardware for the application, which can lead to extra costs.
* Retry mechanism should be implemented on the caller's side.
@@ -107,7 +107,7 @@ The following comparison table illustrates the various quality attributes of the
| Usability / Understandability / Simplicity | ✅ | ❗ Experience with OMS engine is required | ❗ Experience with Jenkins and CLI is required |
| Fault-tolerance / Correctness / Recoverability | ❌ HTTP connection usually has timeout. ❌ Extra efforts to make an application recoverable are required (may be impossible). ❌ Extra efforts to implement retry mechanism are required (may be impossible). ❗ Lock mechanism is required | ✅ Put transition command into DB transaction to be able to retry (if possible) ✅ Retry transitions can trigger retry logic manually or by timeout | ✅ Retry transitions can trigger retry logic manually or by timeout ✅ Event handler logic should be inside of DB transaction to be able to retry (if possible) ❗ Lock mechanism is required |
| Scaleability | ✅ | ✅Static scaling of OMS check-condition job | ✅ Static scaling of Jenkins job |
-| Upgradability | ✅ | ✅ | ✅ No upgradability issues due to no OOTB functionality usage |
+| Upgradability | ✅ | ✅ | ✅ No upgradability issues because of no OOTB functionality usage |
✅ good or bonus
diff --git a/docs/pbc/all/order-management-system/202404.0/base-shop/reclamations-feature-overview.md b/docs/pbc/all/order-management-system/202404.0/base-shop/reclamations-feature-overview.md
index e2d69e4c32d..d6ecb12e649 100644
--- a/docs/pbc/all/order-management-system/202404.0/base-shop/reclamations-feature-overview.md
+++ b/docs/pbc/all/order-management-system/202404.0/base-shop/reclamations-feature-overview.md
@@ -26,7 +26,7 @@ With the reclamations in place, you can find the problematic issues with orders
{% info_block errorBox %}
-Due to 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.
+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 %}
diff --git a/docs/pbc/all/order-management-system/202404.0/base-shop/state-machine-cookbook/state-machine-cookbook-state-machine-fundamentals.md b/docs/pbc/all/order-management-system/202404.0/base-shop/state-machine-cookbook/state-machine-cookbook-state-machine-fundamentals.md
index c01b972900b..6933942e902 100644
--- a/docs/pbc/all/order-management-system/202404.0/base-shop/state-machine-cookbook/state-machine-cookbook-state-machine-fundamentals.md
+++ b/docs/pbc/all/order-management-system/202404.0/base-shop/state-machine-cookbook/state-machine-cookbook-state-machine-fundamentals.md
@@ -228,7 +228,7 @@ On the default Zed Order Details page, you can trigger an event for a single ite
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 due to 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.
+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
diff --git a/docs/pbc/all/order-management-system/202404.0/marketplace/manage-in-the-back-office/manage-marketplace-orders.md b/docs/pbc/all/order-management-system/202404.0/marketplace/manage-in-the-back-office/manage-marketplace-orders.md
index 945735dab5e..ff560eef0e8 100644
--- a/docs/pbc/all/order-management-system/202404.0/marketplace/manage-in-the-back-office/manage-marketplace-orders.md
+++ b/docs/pbc/all/order-management-system/202404.0/marketplace/manage-in-the-back-office/manage-marketplace-orders.md
@@ -210,7 +210,7 @@ Once a return has been created, it acquires the *Waiting for return* state. You
|---|---|
| execute-return | Select this state if you accept the return. When triggering this state, the return status is changed to *Returned*. |
| refund | Select this state if you have refunded the returned items. When triggering this state, the return status is changed to *Refunded*. |
-| cancel-return | You can trigger this state after the *Waiting for return* state. Select this state if either customer changed their mind and doesn’t want to make the return anymore, or you cancel the return due to the return policy, or for other reasons. When triggering this state, the return status is changed to *Canceled*. |
+| cancel-return | You can trigger this state after the *Waiting for return* state. Select this state if either customer changed their mind and doesn’t want to make the return anymore, or you cancel the return because of the return policy, or for other reasons. When triggering this state, the return status is changed to *Canceled*. |
| ship-return | You can trigger this state after the *Cancel* return state. Select this state if you shipped the canceled return back to the customer. The return status is changed to *Shipped to customer*. |
| delivery-return | You can trigger this state after the *Shipped to customer*. Select this state if the return has been delivered to the customer. The return status is changed to *Delivered*. |
| close | You can trigger this state after the *Delivered* state. Select this state to close the return. The return status is changed to *Closed*. |
diff --git a/docs/pbc/all/order-management-system/202404.0/marketplace/marketplace-order-management-feature-overview/marketplace-order-management-feature-overview.md b/docs/pbc/all/order-management-system/202404.0/marketplace/marketplace-order-management-feature-overview/marketplace-order-management-feature-overview.md
index 2b0c868eace..86635857755 100644
--- a/docs/pbc/all/order-management-system/202404.0/marketplace/marketplace-order-management-feature-overview/marketplace-order-management-feature-overview.md
+++ b/docs/pbc/all/order-management-system/202404.0/marketplace/marketplace-order-management-feature-overview/marketplace-order-management-feature-overview.md
@@ -73,7 +73,7 @@ Rounding rules for a regular SCOS sales order also apply to the Marketplace orde
{% info_block warningBox "Warning" %}
-In some cases, due to 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/202404.0/marketplace/marketplace-order-management-feature-overview/marketplace-order-overview.md b/docs/pbc/all/order-management-system/202404.0/marketplace/marketplace-order-management-feature-overview/marketplace-order-overview.md
index 2c6305ff7af..d02fb87e1c5 100644
--- a/docs/pbc/all/order-management-system/202404.0/marketplace/marketplace-order-management-feature-overview/marketplace-order-overview.md
+++ b/docs/pbc/all/order-management-system/202404.0/marketplace/marketplace-order-management-feature-overview/marketplace-order-overview.md
@@ -73,7 +73,7 @@ Rounding rules for a regular SCOS sales order also apply to the Marketplace orde
{% info_block warningBox "Warning" %}
-In some cases, due to 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/202410.0/base-shop/datapayload-conversion/state-machine/order-process-modelling-via-state-machines.md b/docs/pbc/all/order-management-system/202410.0/base-shop/datapayload-conversion/state-machine/order-process-modelling-via-state-machines.md
index 73ef0f6911e..406ebddafc1 100644
--- a/docs/pbc/all/order-management-system/202410.0/base-shop/datapayload-conversion/state-machine/order-process-modelling-via-state-machines.md
+++ b/docs/pbc/all/order-management-system/202410.0/base-shop/datapayload-conversion/state-machine/order-process-modelling-via-state-machines.md
@@ -136,7 +136,7 @@ The events can be fired as follows:
* Automatically: If an event has the `onEnter="true"` attribute associated, then the event is fired automatically when the source state is reached. For example, `` means that the OMS state-authorized is triggered automatically.
* By setting the `manual` attribute to `true`: This adds a button in the **Back Office → View Order [Order ID**] page that allows you to manually trigger the corresponding transition by clicking the button. For example, `` means that the OMS state canceled can only be triggered by clicking the **cancel** button for the order state.
* Via an API call: The `triggerEvent`method allows triggering an event for a given process instance. For example, if a message from the payment provider is received that the capture was successful, the corresponding process instance can be triggered via the API call.
-* By a timeout: Events are triggered after the defined time has passed. For example, `` means that the OMS state closed will be triggered in 1 hour, if not triggered manually from the Back Office earlier. Now let's assume we are trying to define the prepayment process, in which if after 15 days no payment is received, `reminder sent` is fired due to the timeout. How is the reminder then technically sent? This can be implemented through a command attached to the `sendFirstReminder` 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/order item stays in the source state.
+* By a timeout: Events are triggered after the defined time has passed. For example, `` means that the OMS state closed will be triggered in 1 hour, if not triggered manually from the Back Office earlier. Now let's assume we are trying to define the prepayment process, in which if after 15 days no payment is received, `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 `sendFirstReminder` 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/order item stays in the source state.
```xml
diff --git a/docs/pbc/all/order-management-system/202410.0/base-shop/process-incoming-HTTP-requests-from-external-erp-services-for-order-updates.md b/docs/pbc/all/order-management-system/202410.0/base-shop/process-incoming-HTTP-requests-from-external-erp-services-for-order-updates.md
index 4d3e63ff7c0..5b5a52438a4 100644
--- a/docs/pbc/all/order-management-system/202410.0/base-shop/process-incoming-HTTP-requests-from-external-erp-services-for-order-updates.md
+++ b/docs/pbc/all/order-management-system/202410.0/base-shop/process-incoming-HTTP-requests-from-external-erp-services-for-order-updates.md
@@ -21,7 +21,7 @@ Easy to implement, understand, and maintain.
**Cons**
-* Long-running requests can fail due to an HTTP connection timeout.
+* Long-running requests can fail because of an HTTP connection timeout.
* Heavy operations require scaling the hardware for the application, which can lead to extra costs.
* Retry mechanism should be implemented on the caller's side.
@@ -107,7 +107,7 @@ The following comparison table illustrates the various quality attributes of the
| Usability / Understandability / Simplicity | ✅ | ❗ Experience with OMS engine is required | ❗ Experience with Jenkins and CLI is required |
| Fault-tolerance / Correctness / Recoverability | ❌ HTTP connection usually has timeout. ❌ Extra efforts to make an application recoverable are required (may be impossible). ❌ Extra efforts to implement retry mechanism are required (may be impossible). ❗ Lock mechanism is required | ✅ Put transition command into DB transaction to be able to retry (if possible) ✅ Retry transitions can trigger retry logic manually or by timeout | ✅ Retry transitions can trigger retry logic manually or by timeout ✅ Event handler logic should be inside of DB transaction to be able to retry (if possible) ❗ Lock mechanism is required |
| Scaleability | ✅ | ✅Static scaling of OMS check-condition job | ✅ Static scaling of Jenkins job |
-| Upgradability | ✅ | ✅ | ✅ No upgradability issues due to no OOTB functionality usage |
+| Upgradability | ✅ | ✅ | ✅ No upgradability issues because of no OOTB functionality usage |
✅ good or bonus
diff --git a/docs/pbc/all/order-management-system/202410.0/base-shop/reclamations-feature-overview.md b/docs/pbc/all/order-management-system/202410.0/base-shop/reclamations-feature-overview.md
index e2d69e4c32d..d6ecb12e649 100644
--- a/docs/pbc/all/order-management-system/202410.0/base-shop/reclamations-feature-overview.md
+++ b/docs/pbc/all/order-management-system/202410.0/base-shop/reclamations-feature-overview.md
@@ -26,7 +26,7 @@ With the reclamations in place, you can find the problematic issues with orders
{% info_block errorBox %}
-Due to 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.
+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 %}
diff --git a/docs/pbc/all/order-management-system/202410.0/base-shop/state-machine-cookbook/state-machine-cookbook-state-machine-fundamentals.md b/docs/pbc/all/order-management-system/202410.0/base-shop/state-machine-cookbook/state-machine-cookbook-state-machine-fundamentals.md
index edb644e3982..5a154a37d72 100644
--- a/docs/pbc/all/order-management-system/202410.0/base-shop/state-machine-cookbook/state-machine-cookbook-state-machine-fundamentals.md
+++ b/docs/pbc/all/order-management-system/202410.0/base-shop/state-machine-cookbook/state-machine-cookbook-state-machine-fundamentals.md
@@ -228,7 +228,7 @@ On the default Zed Order Details page, you can trigger an event for a single ite
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 due to 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.
+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
diff --git a/docs/pbc/all/order-management-system/202410.0/marketplace/manage-in-the-back-office/manage-marketplace-orders.md b/docs/pbc/all/order-management-system/202410.0/marketplace/manage-in-the-back-office/manage-marketplace-orders.md
index 945735dab5e..ff560eef0e8 100644
--- a/docs/pbc/all/order-management-system/202410.0/marketplace/manage-in-the-back-office/manage-marketplace-orders.md
+++ b/docs/pbc/all/order-management-system/202410.0/marketplace/manage-in-the-back-office/manage-marketplace-orders.md
@@ -210,7 +210,7 @@ Once a return has been created, it acquires the *Waiting for return* state. You
|---|---|
| execute-return | Select this state if you accept the return. When triggering this state, the return status is changed to *Returned*. |
| refund | Select this state if you have refunded the returned items. When triggering this state, the return status is changed to *Refunded*. |
-| cancel-return | You can trigger this state after the *Waiting for return* state. Select this state if either customer changed their mind and doesn’t want to make the return anymore, or you cancel the return due to the return policy, or for other reasons. When triggering this state, the return status is changed to *Canceled*. |
+| cancel-return | You can trigger this state after the *Waiting for return* state. Select this state if either customer changed their mind and doesn’t want to make the return anymore, or you cancel the return because of the return policy, or for other reasons. When triggering this state, the return status is changed to *Canceled*. |
| ship-return | You can trigger this state after the *Cancel* return state. Select this state if you shipped the canceled return back to the customer. The return status is changed to *Shipped to customer*. |
| delivery-return | You can trigger this state after the *Shipped to customer*. Select this state if the return has been delivered to the customer. The return status is changed to *Delivered*. |
| close | You can trigger this state after the *Delivered* state. Select this state to close the return. The return status is changed to *Closed*. |
diff --git a/docs/pbc/all/order-management-system/202410.0/marketplace/marketplace-order-management-feature-overview/marketplace-order-management-feature-overview.md b/docs/pbc/all/order-management-system/202410.0/marketplace/marketplace-order-management-feature-overview/marketplace-order-management-feature-overview.md
index d4c0e1d84b8..1d718726786 100644
--- a/docs/pbc/all/order-management-system/202410.0/marketplace/marketplace-order-management-feature-overview/marketplace-order-management-feature-overview.md
+++ b/docs/pbc/all/order-management-system/202410.0/marketplace/marketplace-order-management-feature-overview/marketplace-order-management-feature-overview.md
@@ -73,7 +73,7 @@ Rounding rules for a regular SCOS sales order also apply to the Marketplace orde
{% info_block warningBox "Warning" %}
-In some cases, due to 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/202410.0/marketplace/marketplace-order-management-feature-overview/marketplace-order-overview.md b/docs/pbc/all/order-management-system/202410.0/marketplace/marketplace-order-management-feature-overview/marketplace-order-overview.md
index 5c13975a4a2..dc08f8a704f 100644
--- a/docs/pbc/all/order-management-system/202410.0/marketplace/marketplace-order-management-feature-overview/marketplace-order-overview.md
+++ b/docs/pbc/all/order-management-system/202410.0/marketplace/marketplace-order-management-feature-overview/marketplace-order-overview.md
@@ -73,7 +73,7 @@ Rounding rules for a regular SCOS sales order also apply to the Marketplace orde
{% info_block warningBox "Warning" %}
-In some cases, due to 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/payment-service-provider/202311.0/base-shop/third-party-integrations/payone/manual-integration/integrate-payone.md b/docs/pbc/all/payment-service-provider/202311.0/base-shop/third-party-integrations/payone/manual-integration/integrate-payone.md
index e95d7bfe388..f5baf0c17bf 100644
--- a/docs/pbc/all/payment-service-provider/202311.0/base-shop/third-party-integrations/payone/manual-integration/integrate-payone.md
+++ b/docs/pbc/all/payment-service-provider/202311.0/base-shop/third-party-integrations/payone/manual-integration/integrate-payone.md
@@ -49,7 +49,7 @@ path.join(context, paths.eco.modules)
```
Run `npm run yves` after applying these changes.
-Due to the pending update to Suite, you also have to apply Checkout template `.../src/Pyz/Yves/CheckoutPage/Theme/default/views/payment/payment.twig` update:
+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 %}
diff --git a/docs/pbc/all/payment-service-provider/202311.0/base-shop/third-party-integrations/ratenkauf-by-easycredit/ratenkauf-by-easycredit.md b/docs/pbc/all/payment-service-provider/202311.0/base-shop/third-party-integrations/ratenkauf-by-easycredit/ratenkauf-by-easycredit.md
index f3cd0102c1c..89a3c26ae89 100644
--- a/docs/pbc/all/payment-service-provider/202311.0/base-shop/third-party-integrations/ratenkauf-by-easycredit/ratenkauf-by-easycredit.md
+++ b/docs/pbc/all/payment-service-provider/202311.0/base-shop/third-party-integrations/ratenkauf-by-easycredit/ratenkauf-by-easycredit.md
@@ -24,7 +24,7 @@ Germany’s easiest installment purchase solution ratenkauf by easyCredit is the
TeamBank, with its easyCredit product family, is the liquidity management specialist in the Volksbanken Raiffeisenbanken cooperative financial network. Its ‘ratenkauf by easyCredit’ product is the first installment purchase solution that combines a simple and uniformly designed installment purchase function both for e-commerce and for a physical point of sale. Customers can make their ratenkauf by easyCredit installment purchase in just three steps. No paperwork, immediate approval, and complete flexibility throughout. Simple. Fair.
YOUR ADVANTAGES:
-* Revenue booster: more revenue due to higher purchase amounts.
+* Revenue booster: more revenue because of higher purchase amounts.
* Profitable: fewer purchase cancellations thanks to the immediate credit check and approval.
* Safe: no payment defaults as TeamBank assumes the credit risk.
* Fair: excellent easyCredit processes offer transparency and flexibility for customers.
diff --git a/docs/pbc/all/payment-service-provider/202404.0/base-shop/define-return-urls-for-payments.md b/docs/pbc/all/payment-service-provider/202404.0/base-shop/define-return-urls-for-payments.md
new file mode 100644
index 00000000000..a071cfcdd66
--- /dev/null
+++ b/docs/pbc/all/payment-service-provider/202404.0/base-shop/define-return-urls-for-payments.md
@@ -0,0 +1,16 @@
+---
+title: Define return URLs for payments
+description: Learn how to change the default return URLs to be used by third-party payment service providers
+last_updated: Nov. 27, 2024
+template: howto-guide-template
+---
+
+Payment methods are configured to redirect the customer to a specific return URL after the payment process is completed, failed, or cancelled. This document provides information on how to change the default return URLs for payments.
+
+Some third-party integrations only use a return URL while others can also use a failure and/or cancel URLs. The `ForeignPayment` class is used to send the expected return URLs to the payment app, which are then used when needed.
+
+To change the default return URLs, you can use the following methods:
+
+- `\Spryker\Zed\Payment\PaymentConfig::getSuccessRoute()`
+- `\Spryker\Zed\Payment\PaymentConfig::getCancelRoute()`
+- `\Spryker\Zed\Payment\PaymentConfig::getCheckoutSummaryPageRoute()`
diff --git a/docs/pbc/all/payment-service-provider/202404.0/base-shop/third-party-integrations/payone/manual-integration/integrate-payone.md b/docs/pbc/all/payment-service-provider/202404.0/base-shop/third-party-integrations/payone/manual-integration/integrate-payone.md
index e95d7bfe388..f5baf0c17bf 100644
--- a/docs/pbc/all/payment-service-provider/202404.0/base-shop/third-party-integrations/payone/manual-integration/integrate-payone.md
+++ b/docs/pbc/all/payment-service-provider/202404.0/base-shop/third-party-integrations/payone/manual-integration/integrate-payone.md
@@ -49,7 +49,7 @@ path.join(context, paths.eco.modules)
```
Run `npm run yves` after applying these changes.
-Due to the pending update to Suite, you also have to apply Checkout template `.../src/Pyz/Yves/CheckoutPage/Theme/default/views/payment/payment.twig` update:
+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 %}
diff --git a/docs/pbc/all/payment-service-provider/202404.0/base-shop/third-party-integrations/ratenkauf-by-easycredit/ratenkauf-by-easycredit.md b/docs/pbc/all/payment-service-provider/202404.0/base-shop/third-party-integrations/ratenkauf-by-easycredit/ratenkauf-by-easycredit.md
index f3cd0102c1c..89a3c26ae89 100644
--- a/docs/pbc/all/payment-service-provider/202404.0/base-shop/third-party-integrations/ratenkauf-by-easycredit/ratenkauf-by-easycredit.md
+++ b/docs/pbc/all/payment-service-provider/202404.0/base-shop/third-party-integrations/ratenkauf-by-easycredit/ratenkauf-by-easycredit.md
@@ -24,7 +24,7 @@ Germany’s easiest installment purchase solution ratenkauf by easyCredit is the
TeamBank, with its easyCredit product family, is the liquidity management specialist in the Volksbanken Raiffeisenbanken cooperative financial network. Its ‘ratenkauf by easyCredit’ product is the first installment purchase solution that combines a simple and uniformly designed installment purchase function both for e-commerce and for a physical point of sale. Customers can make their ratenkauf by easyCredit installment purchase in just three steps. No paperwork, immediate approval, and complete flexibility throughout. Simple. Fair.
YOUR ADVANTAGES:
-* Revenue booster: more revenue due to higher purchase amounts.
+* Revenue booster: more revenue because of higher purchase amounts.
* Profitable: fewer purchase cancellations thanks to the immediate credit check and approval.
* Safe: no payment defaults as TeamBank assumes the credit risk.
* Fair: excellent easyCredit processes offer transparency and flexibility for customers.
diff --git a/docs/pbc/all/payment-service-provider/202404.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe.md b/docs/pbc/all/payment-service-provider/202404.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe.md
deleted file mode 100644
index 77e739fbdb8..00000000000
--- a/docs/pbc/all/payment-service-provider/202404.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe.md
+++ /dev/null
@@ -1,614 +0,0 @@
----
-title: Project guidelines for Stripe
-description: Learn how to implement Stripe using ACP
-last_updated: Jul 22, 2024
-template: howto-guide-template
-related:
- - title: Stripe
- link: docs/pbc/all/payment-service-provider/page.version/base-shop/third-party-integrations/stripe/stripe.html
-redirect_from:
- - /docs/pbc/all/payment-service-provider/202311.0/third-party-integrations/stripe/install-stripe.html
- - /docs/pbc/all/payment-service-provider/202311.0/base-shop/third-party-integrations/stripe/install-stripe.html
- - /docs/pbc/all/payment-service-provider/202311.0/base-shop/third-party-integrations/stripe/integrate-stripe.html
-
----
-
-This document provides guidelines for projects using Stripe through the Stripe app.
-
-## OMS configuration
-
-The complete default payment OMS configuration is available at `vendor/spryker/sales-payment/config/Zed/Oms/ForeignPaymentStateMachine01.xml`.
-
-The payment flow of the default OMS involves authorizing the initial payment. The amount is temporarily blocked when the payment method permits. Then, the OMS sends requests to capture, that is, transfer of the previously blocked amount from the customer's account to the store account.
-
-The `Payment/Capture` command initiates the capture action. By default, this command is initiated when a Back Office user clicks **Ship** on the **Order Overview** page.
-
-Optionally, you can change and configure your own payment OMS based on `ForeignPaymentStateMachine01.xml` from the core package and change this behavior according to your business flow. For more information about OMS configuration, see [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).
-
-To configure your payment OMS based on `ForeignPaymentStateMachine01.xml`, copy `ForeignPaymentStateMachine01.xml` with the `Subprocess` folder to the project root `config/Zed/oms`. Then, change the file's name and the value of `
- State machine example
-
-```xml
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- payment capture pending
- capture payment
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-```
-
-
-
-By default, the timeout for the payment authorization action is set to seven days. If the order is in the `payment authorization pending` state, after a day the order state is changed to `payment authorization failed`. Another day later, the order is transitioned to the `payment authorization canceled` state.
-
-To decrease or increase timeouts or change the states, update `config/Zed/oms/Subprocess/PaymentAuthorization01.xml`.
-
-For more information on the integration of ACP payment methods with OMS configuration, see [Integrate ACP payment apps with Spryker OMS configuration](/docs/dg/dev/acp/integrate-acp-payment-apps-with-spryker-oms-configuration.html).
-
-
-## Implementing Stripe for checkout in a headless application
-
-Use this approach for headless applications with third-party frontends.
-
-### Install modules
-
-Install or upgrade the modules to the specified or later versions:
-- `spryker/kernel-app:1.2.0`
-- `spryker/payment:5.24.0`
-- `spryker/payments-rest-api:1.3.0`
-
-### Pre-order payment flow
-
-When Stripe is integrated into a headless application, orders are processed using a pre-order payment flow:
-
-1. The customer either selects Stripe as the payment method or [Stripe Elements](https://docs.stripe.com/payments/elements) is loaded by default.
-2. The `InitializePreOrderPayment` Glue API endpoint (`glue.mysprykershop.com/payments`) is called with the following parameters:
- * Payment provider name: Stripe
- * Payment method name: Stripe
- * Payment amount
- * Quote data
-3. Back Office sends the quote data and the payment amount to Stripe app through an API.
-4. The payment with the given data is persisted in the Stripe app.
-5. Stripe app requests `ClientSecret` and `PublishableKey` keys from Stripe through an API.
-6. Stripe returns a JSON response with the following parameters:
- * TransactionId
- * ClientSecret
- * PublishableKey
- * Only for marketplaces: AccountId
-7. Stripe Elements is rendered on the order summary page. See [Rendering the Stripe Elements on the summary page](#rendering-the-stripe-elements-on-the-summary-page) for rendering Stripe Elements.
-8. The customer selects a payment method in Stripe Elements and submits the data.
-9. The customer is redirected to the configured `return_url`, which makes an API request to persist the order in the Back Office: `glue.mysprykershop.com/checkout`.
-10. The customer is redirected to the application's success page.
-11. Stripe app confirms the pre-order payment using the plugin: `\Spryker\Zed\Payment\Communication\Plugin\Checkout\PaymentConfirmPreOrderPaymentCheckoutPostSavePlugin`.
- The `order_reference` is passed to the Stripe app to be connected with `transaction_id`.
-12. Stripe app processes the payment and sends a `PaymentUpdated` message to Spryker.
-13. Depending on payment status, one of the following messages is returned through an asynchronous API:
- * Payment is successful: `PaymentAuthorized` message.
- * Payment is failed: `PaymentAuthorizationFailed` message.
-14. Further on, the order is processed through the OMS.
-
-All payment related messages mentioned above are handled by `\Spryker\Zed\Payment\Communication\Plugin\MessageBroker\PaymentOperationsMessageHandlerPlugin`, which is registered in `MessageBrokerDependencyProvider`.
-
-
-### Example of the headless checkout with Stripe
-
-The Payment selection in this example will be used on the Summary page. The following examples show how to implement the Stripe Payment App in a headless application.
-
-Before the customer is redirected to the summary page, all required data is collected: customer data, addresses, and selected shipment method. When the customer goes to the summary page, to get the data required for rendering the Stripe Elements, the application needs to call the `InitializePreOrderPayment` Glue API endpoint.
-
-#### Pre-order payment initialization
-
-```JS
-
-async initializePreOrderPayment() {
- const requestData = {
- data: {
- type: 'payments',
- attributes: {
- quote: QUOTE_DATA,
- payment: {
- amount: GRAND_TOTAL, // You will get it through the `/checkout-data?include=carts` endpoint
- paymentMethodName: 'stripe', // taken from /checkout-data?include=payment-methods
- paymentProviderName: 'stripe', // taken from /checkout-data?include=payment-methods
- },
- preOrderPaymentData: {
- "transactionId": this.transactionId, // This is empty in the first request but has to be used in further requests
- },
- },
- },
- };
-
- const responseData = await this.fetchHandler(`GLUE_APPLICATION_URL/payments`, {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json',
- Authorization: `Bearer ACCESS_TOKEN`,
- },
- body: JSON.stringify(requestData),
- });
-
- const paymentProviderData =
- responseData.data.attributes.preOrderPaymentData;
-
- this.transactionId = paymentProviderData.transactionId;
- this.accountId = paymentProviderData.accountId; // only be used on the Direct business model. When using a Marketplace business model this will not be present.
-
- await this.setupStripe();
- }
-
-```
-
-To identify the customer when initiating a request using Glue API, use the `Authorization` header for a logged-in customer and `X-Anonymous-Customer-Unique-Id` for a guest user.
-
-After a `PaymentIntent` is created using the Stripe API, a payment is created in the Stripe app. The response looks as follows:
-
-```JSON
-{
- "data": {
- "type": "payments",
- "attributes": {
- "isSuccessful": true,
- "error": null,
- "preOrderPaymentData": {
- "transactionId": "pi_3Q3............",
- "clientSecret": "pi_3Q3............_secret_R3WC2........",
- "publishableKey": "pk_test_51OzEfB..............."
- }
- }
- }
-}
-```
-
-#### Rendering the Stripe Elements on the summary page
-
-The `preOrderPaymentData` from the previous example is used to render Stripe Elements on the summary page:
-
-```JAVASCRIPT
-async setupStripe() {
- const paymentElementOptions = {
- layout: 'accordion', // Change this to your needs
- };
-
- let stripeAccountDetails = {};
-
- if (this.accountId) { // Only in Direct business model not in the Marketplace business model
- stripeAccountDetails = { stripeAccount: this.accountId }
- }
-
- const stripe = Stripe(this.publishableKey, stripeAccountDetails);
-
- const elements = stripe.elements({
- clientSecret: this.clientSecret,
- });
-
- const paymentElement = elements.create('payment', paymentElementOptions);
- paymentElement.mount('#payment-element'); // Change this to the id of the HTML element you want to render the Stripe Elements to
-
- SUBMIT_BUTTON.addEventListener('click', async () => {
- const { error } = await stripe.confirmPayment({
- elements,
- confirmParams: {
- return_url: `APPLICATION_URL/return-url?id=${idCart}`, // You need to pass the id of the cart to this request
- },
- });
- if (error) {
- // Add your error handling to this block.
- }
- });
- }
-```
-
-This sets up Stripe Elements on the summary page of your application. The customer can now select the Payment Method in Stripe Elements and submit the data. Then, the customer is redirected to the configured `return_url`, which makes another Glue API request to persist the order in the Back Office. After this, the customer should see the success page.
-
-When the customer submits the order, the payment data is sent to Stripe. Stripe may redirect them to another page, for example — PayPal, or redirect the customer to the specified `return_url`. The `return_url` must make another Glue API request to persist the order in the Back Office.
-
-#### Persisting orders in the Back Office through the return URL
-
-Because an order can be persisted in the Back Office only after a successful payment, the application needs to handle the `return_url` and make a request to the Glue API to persist the order.
-
-
- Request example
-
-```JAVASCRIPT
-app.get('/return-url', async (req, res) => {
- const paymentIntentId = req.query.payment_intent;
- const clientSecret = req.query.payment_intent_client_secret;
- const idCart = req.query.id;
-
- if (paymentIntentId) {
- try {
- const data = await fetchHandler(`GLUE_APPLICATION_URL/checkout`, {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json',
- Authorization: `Bearer ACCESS_TOKEN`
- },
- body: JSON.stringify({
- data: {
- type: 'checkout',
- attributes: {
- customer: CUSTOMER_DATA,
- idCart: idCart,
- billingAddress: BILLING_ADDRESS,
- shippingAddress: SHIPPING_ADDRESS,
- payments: [
- {
- paymentMethodName: 'Stripe',
- paymentProviderName: 'Stripe',
- },
- ],
- shipment: SHIPMENT_DATA,
- preOrderPaymentData: {
- transactionId: paymentIntentId,
- clientSecret: clientSecret,
- },
- },
- },
- }),
- });
-
- if (data) {
- res.send('
');
- }
-});
-```
-
-
-
-After this, the customer should be redirected to the success page or in case of a failure to an error page.
-
-
-{% info_block infoBox %}
-- When the customer reloads the summary page, which renders `PaymentElements`, an extra unnecessary API request is sent to initiate `preOrder Payment`. Stripe can handle these without issues. However, you can also prevent unnecessary API calls from being sent on the application side by, for example, checking if relevant data has changed.
-- When the customer leaves the summary page, the payment is created in Stripe app and Stripe. However, in the Back Office, there is a stale payment without an order.
-- To enable the customer to abort the payment process, you can implement the cancellation of payments through Glue API.
-
-{% endinfo_block %}
-
-
-
-#### Cancelling payments through Glue API
-
-The following request cancels a PaymentIntent on the Stripe side and shows a `canceled` PaymentIntent in the Stripe Dashboard. You can implement this in your application to enable the customer to cancel the payment process.
-
-
- Cancel a payment through Glue API
-
-```JAVASCRIPT
-async cancelPreOrderPayment() {
- const requestData = {
- data: {
- type: 'payment-cancellations',
- attributes: {
- payment: {
- paymentMethodName: 'stripe',
- paymentProviderName: 'stripe',
- },
- preOrderPaymentData: {
- transactionId: this.transactionId,
- },
- },
- },
- };
-
- const url = `GLUE_APPLICATION_URL/payment-cancellations`;
-
- const response = await fetch(url, {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json',
- Authorization: `Bearer ACCESS_TOKEN`,
- },
- body: JSON.stringify(requestData),
- });
-
- if (!response.ok) {
- throw new Error('Network response was not ok');
- }
-
- const responseData = await response.json();
-
- if (responseData.data.attributes.isSuccessful === true) {
- // Add your logic here when the payment cancellation was successful
- } else {
- // Add your logic here when the payment cancellation has failed
- }
- }
-```
-
-
-
-
-### Implementing Stripe checkout as a hosted payment page
-
-If you have rewritten `@CheckoutPage/views/payment/payment.twig` on the project level, do the following:
-
-1. Make sure that a 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. If you want to change the default payment provider or method names, do the following:
- 1. Make sure the names are translated in your payment step template:
-
-```twig
-{% raw %}
-{% for name, choices in data.form.paymentSelection.vars.choices %}
- ...
-
{{ name | trans }}
-{% endfor %}
-{% endraw %}
-```
-
- 2. Add translations to your glossary data import file:
-
-```csv
-...
-Stripe,Pay Online with Stripe,en_US
-```
- 3. Run the data import command for the glossary:
-
-```bash
-console data:import glossary
-```
-
-## Processing refunds
-
-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.
-
-During this period, Stripe attempts to process the request, which results in success or failure:
-* Success: the items transition to the `payment refund succeeded` state, although the payment isn't refunded at this step.
-* Failure: the items transition to the `payment refund failed` state.
-
-These states are used to track the refund status and inform the Back Office user. In a few days after an order is refunded in the Back Office, Stripe finalizes the refund, causing the item states to change accordingly. Previously successful refunds may be declined and the other way around.
-
-If a refund fails, the Back Office user can go to the Stripe Dashboard to identify the cause of the failure. After resolving the issue, the item can be refunded again.
-
-In the default OMS configuration, seven days are allocated to Stripe to complete successful payment refunds. This is reflected in the Back Office by transitioning items to the `payment refunded` state.
-
-## Retrieving and using payment details from Stripe
-
-For instructions on using payment details, like the payment reference, from Stripe, see [Retrieve and use payment details from third-party PSPs](https://docs.spryker.com/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/retrieve-and-use-payment-details-from-third-party-psps.html)
-
-## Embed the Stripe payment page using iframe
-
-By default, the Stripe App payment flow assumes that the payment page is on another domain. When users place an order, they're redirected to the Stripe payment page. To improve the user experience, you can embed the Stripe payment page directly into your website as follows:
-
-
-1. Create or update `src/Pyz/Zed/Payment/PaymentConfig.php` with the following configuration:
-```php
-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
- }
-}
-```
-
-In this setup, the redirect URL will be added as a `url` query parameter to the URL you've specified in the `getStoreFrontPaymentPage()` method; the value of the parameter is base64-encoded.
-
-
-2. Depending on your frontend setup, create a page to render the Stripe payment page in one of the following ways:
-
-* Use the following minimal page regardless of the frontend technology used.
-* If your Storefront is based on a third-party frontend, follow the documentation of your framework to create a page to render the Stripe payment page using query parameters from the redirect URL provided in the Glue API `POST /checkout` response.
-* If your Storefront is based on Yves, follow [Create an Yves page for rendering the Stripe payment page](#create-an-yves-page-for-rendering-the-stripe-payment-page).
-
-```php
-
-
-
-
- Order payment page
-
-
-
-
-
-```
-
-
-### Create an Yves page for rendering the Stripe payment page
-
-
-1. Create a controller to render the payment page:
-
-**src/Pyz/Yves/PaymentPage/Controller/PaymentController.php**
-```php
-
-namespace Pyz\Yves\PaymentPage\Controller;
-
-use Spryker\Yves\Kernel\Controller\AbstractController;
-use Spryker\Yves\Kernel\View\View;
-use Symfony\Component\HttpFoundation\Request;
-
-class PaymentController extends AbstractController
-{
- /**
- * @return \Spryker\Yves\Kernel\View\View
- */
- public function indexAction(Request $request): View
- {
- return $this->view(
- [
- 'iframeUrl' => base64_decode($request->query->getString('url', '')),
- ],
- [],
- '@PaymentPage/views/payment.twig',
- );
- }
-}
-
-```
-
-2. Create a template for the page:
-
-**src/Pyz/Yves/PaymentPage/Theme/default/views/payment.twig**
-```twig
-{% raw %}
-{% extends template('page-layout-checkout', 'CheckoutPage') %}
-
-{% define data = {
- iframeUrl: _view.iframeUrl,
- title: 'Order Payment' | trans,
-} %}
-
-{% block content %}
-
-{% endblock %}
-{% endraw %}
-```
-
-3. Create a route for the controller:
-
-**src/Pyz/Yves/PaymentPage/Plugin/Router/EmbeddedPaymentPageRouteProviderPlugin.php**
-```php
-namespace Pyz\Yves\PaymentPage\Plugin\Router;
-
-use Spryker\Yves\Router\Plugin\RouteProvider\AbstractRouteProviderPlugin;
-use Spryker\Yves\Router\Route\RouteCollection;
-
-class EmbeddedPaymentPageRouteProviderPlugin extends AbstractRouteProviderPlugin
-{
- /**
- * @param \Symfony\Component\Routing\RouteCollection $routeCollection
- *
- * @return \Symfony\Component\Routing\RouteCollection
- */
- public function addRoutes(RouteCollection $routeCollection): RouteCollection
- {
- $route = $this->buildRoute('/payment', 'PaymentPage', 'Payment', 'indexAction');
- $routeCollection->add('payment-page', $route);
-
- return $routeCollection;
- }
-}
-```
-
-4. In `src/Pyz/Yves/Router/RouterDependencyProvider.php`, add a router plugin to `RouterDependencyProvider::getRouteProvider()`.
-
-
-## Sending additional data to Stripe
-
-Stripe accepts metadata passed using API calls. To send additional data to Stripe, the `QuoteTransfer::PAYMENT::ADDITIONAL_PAYMENT_DATA` field is used; the field is a key-value array. When sending requests using Glue API, pass the `additionalPaymentData` field in the `POST /checkout` request.
-
-```text
-POST https://api.your-site.com/checkout
-Content-Type: application/json
-Accept-Language: en-US
-Authorization: Bearer {{access_token}}
-
-{
- "data": {
- "type": "checkout",
- "attributes": {
- "customer": {
- ...
- },
- "idCart": "{{idCart}}",
- "billingAddress": {
- ...
- },
- "shippingAddress": {
- ...
- },
- "payments": [
- {
- "paymentMethodName": "Stripe",
- "paymentProviderName": "Stripe",
- "additionalPaymentData": {
- "custom-field-1": "my custom value 1",
- "custom-field-2": "my custom value 2"
- }
- }
- ],
- "shipment": {
- "idShipmentMethod": {{idMethod}}
- }
- }
- }
-}
-```
-
-The metadata sent using the field must meet the following criteria:
-
-| ATTRIBUTE | MAXIMUM VALUE |
-| - | - |
-| Key length | 40 characters |
-| Value length | 500 characters |
-| Key-value pairs | 50 pairs |
-
-When you pass metadata to Stripe, it's stored in the payment object and can be retrieved later. For example, this way you can pass an external ID to Stripe.
-
-When a `PaymentIntent` is created on the Stripe side, you can see your passed `additionalPaymentData` in the Stripe Dashboard.
diff --git a/docs/pbc/all/payment-service-provider/202404.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/202404.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/embed-the-stripe-payment-page-as-an-iframe.md
new file mode 100644
index 00000000000..bd1aaf34ac3
--- /dev/null
+++ b/docs/pbc/all/payment-service-provider/202404.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/embed-the-stripe-payment-page-as-an-iframe.md
@@ -0,0 +1,131 @@
+---
+title: Embed the Stripe payment page as an iframe
+description: Learn how to implement Stripe using ACP
+last_updated: Nov 8, 2024
+template: howto-guide-template
+related:
+ - title: Stripe
+ link: docs/pbc/all/payment-service-provider/page.version/base-shop/third-party-integrations/stripe/stripe.html
+
+---
+
+By default, the Stripe App payment flow assumes that the payment page is on another domain. When users place an order, they're redirected to the Stripe payment page. To improve the user experience, you can embed the Stripe payment page directly into your website as follows:
+
+
+1. Create or update `src/Pyz/Zed/Payment/PaymentConfig.php` with the following configuration:
+
+```php
+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
+ }
+}
+```
+
+In this setup, the redirect URL is added as a `url` query parameter to the URL you've specified in the `getStoreFrontPaymentPage()` method; the value of the parameter is base64-encoded.
+Example: `/payment?url=base64-encoded-URL-for-iframe-src`.
+
+
+2. Depending on your frontend setup, create a page to render the Stripe payment page in one of the following ways:
+
+* Use the following minimal page, which can be set up with any frontend technology.
+* With a third-party frontend, follow the documentation of your framework to create a page to render the Stripe payment page using query parameters from the redirect URL provided in the Glue API `POST /checkout` response.
+* With Yves, follow [Create an Yves page for rendering the Stripe payment page](#create-an-yves-page-for-rendering-the-stripe-payment-page).
+
+```php
+
+
+
+
+ Order payment page
+
+
+
+
+
+```
+
+
+## Create an Yves page for rendering the Stripe payment page
+
+
+1. Create a controller to render the payment page:
+
+**src/Pyz/Yves/PaymentPage/Controller/PaymentController.php**
+```php
+
+namespace Pyz\Yves\PaymentPage\Controller;
+
+use Spryker\Yves\Kernel\Controller\AbstractController;
+use Spryker\Yves\Kernel\View\View;
+use Symfony\Component\HttpFoundation\Request;
+
+class PaymentController extends AbstractController
+{
+ /**
+ * @return \Spryker\Yves\Kernel\View\View
+ */
+ public function indexAction(Request $request): View
+ {
+ return $this->view(
+ [
+ 'iframeUrl' => base64_decode($request->query->getString('url', '')),
+ ],
+ [],
+ '@PaymentPage/views/payment.twig',
+ );
+ }
+}
+
+```
+
+2. Create a template for the page:
+
+**src/Pyz/Yves/PaymentPage/Theme/default/views/payment.twig**
+```twig
+{% raw %}
+{% extends template('page-layout-checkout', 'CheckoutPage') %}
+
+{% define data = {
+ iframeUrl: _view.iframeUrl,
+ title: 'Order Payment' | trans,
+} %}
+
+{% block content %}
+
+{% endblock %}
+{% endraw %}
+```
+
+3. Create a route for the controller:
+
+**src/Pyz/Yves/PaymentPage/Plugin/Router/EmbeddedPaymentPageRouteProviderPlugin.php**
+```php
+namespace Pyz\Yves\PaymentPage\Plugin\Router;
+
+use Spryker\Yves\Router\Plugin\RouteProvider\AbstractRouteProviderPlugin;
+use Spryker\Yves\Router\Route\RouteCollection;
+
+class EmbeddedPaymentPageRouteProviderPlugin extends AbstractRouteProviderPlugin
+{
+ /**
+ * @param \Symfony\Component\Routing\RouteCollection $routeCollection
+ *
+ * @return \Symfony\Component\Routing\RouteCollection
+ */
+ public function addRoutes(RouteCollection $routeCollection): RouteCollection
+ {
+ $route = $this->buildRoute('/payment', 'PaymentPage', 'Payment', 'indexAction');
+ $routeCollection->add('payment-page', $route);
+
+ return $routeCollection;
+ }
+}
+```
+
+4. In `src/Pyz/Yves/Router/RouterDependencyProvider.php`, add a router plugin to `RouterDependencyProvider::getRouteProvider()`.
diff --git a/docs/pbc/all/payment-service-provider/202404.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/implement-stripe-checkout-as-a-hosted-payment-page.md b/docs/pbc/all/payment-service-provider/202404.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/implement-stripe-checkout-as-a-hosted-payment-page.md
new file mode 100644
index 00000000000..ddccb4be8a5
--- /dev/null
+++ b/docs/pbc/all/payment-service-provider/202404.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/implement-stripe-checkout-as-a-hosted-payment-page.md
@@ -0,0 +1,51 @@
+---
+title: Implement Stripe checkout as a hosted payment page
+description: Learn how to implement Stripe using ACP
+last_updated: Nov 8, 2024
+template: howto-guide-template
+related:
+ - title: Stripe
+ link: docs/pbc/all/payment-service-provider/page.version/base-shop/third-party-integrations/stripe/stripe.html
+---
+
+Implementing Stripe checkout as a hosted payment page is usually needed if `@CheckoutPage/views/payment/payment.twig` is overwritten on the project level. To implement Stripe checkout as a hosted payment page, follow the steps:
+
+1. Make sure that a 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. If you want to change the default payment provider or method names, do the following:
+ 1. Make sure the names are translated in your payment step template:
+
+ ```twig
+ {% raw %}
+ {% for name, choices in data.form.paymentSelection.vars.choices %}
+ ...
+
{{ name | trans }}
+ {% endfor %}
+ {% endraw %}
+ ```
+
+ 2. Add translations to your glossary data import file:
+
+ ```
+ Stripe,Pay Online with Stripe,en_US
+ ```
+
+ 3. Run the data import command for the glossary:
+
+ ```bash
+ console data:import glossary
+ ```
diff --git a/docs/pbc/all/payment-service-provider/202404.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/oms-configuration-for-stripe.md b/docs/pbc/all/payment-service-provider/202404.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/oms-configuration-for-stripe.md
new file mode 100644
index 00000000000..b1b53b29867
--- /dev/null
+++ b/docs/pbc/all/payment-service-provider/202404.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/oms-configuration-for-stripe.md
@@ -0,0 +1,84 @@
+---
+title: OMS configuration for Stripe
+description: Learn how to implement Stripe using ACP
+last_updated: Nov 8, 2024
+template: howto-guide-template
+related:
+ - title: Stripe
+ link: docs/pbc/all/payment-service-provider/page.version/base-shop/third-party-integrations/stripe/stripe.html
+---
+
+
+The complete default payment OMS configuration is available at `vendor/spryker/sales-payment/config/Zed/Oms/ForeignPaymentStateMachine01.xml`.
+
+The payment flow of the default OMS involves authorizing the initial payment. The amount is temporarily blocked when the payment method permits. Then, the OMS sends requests to capture, that is, transfer of the previously blocked amount from the customer's account to the store account.
+
+The `Payment/Capture` command initiates the capture action. By default, this command is initiated when a Back Office user clicks **Ship** on the **Order Overview** page.
+
+Optionally, you can change and configure your own payment OMS based on `ForeignPaymentStateMachine01.xml` from the core package and change this behavior according to your business flow. For more information about OMS configuration, see [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).
+
+To configure your payment OMS based on `ForeignPaymentStateMachine01.xml`, copy `ForeignPaymentStateMachine01.xml` with the `Subprocess` folder to the project root `config/Zed/oms`. Then, change the file's name and the value of `
+ State machine example
+
+```xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ payment capture pending
+ capture payment
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+
+
+By default, the timeout for the payment authorization action is set to seven days. If the order is in the `payment authorization pending` state, after a day the order state is changed to `payment authorization failed`. Another day later, the order is transitioned to the `payment authorization canceled` state.
+
+To decrease or increase timeouts or change the states, update `config/Zed/oms/Subprocess/PaymentAuthorization01.xml`.
+
+For more information on the integration of ACP payment methods with OMS configuration, see [Integrate ACP payment apps with Spryker OMS configuration](/docs/dg/dev/acp/integrate-acp-payment-apps-with-spryker-oms-configuration.html).
diff --git a/docs/pbc/all/payment-service-provider/202404.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/processing-refunds-with-stripe.md b/docs/pbc/all/payment-service-provider/202404.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/processing-refunds-with-stripe.md
new file mode 100644
index 00000000000..c413e9b6d7e
--- /dev/null
+++ b/docs/pbc/all/payment-service-provider/202404.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/processing-refunds-with-stripe.md
@@ -0,0 +1,21 @@
+---
+title: Processing refunds with Stripe
+description: Learn how to implement Stripe using ACP
+last_updated: Nov 8, 2024
+template: howto-guide-template
+related:
+ - title: Stripe
+ link: docs/pbc/all/payment-service-provider/page.version/base-shop/third-party-integrations/stripe/stripe.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.
+
+During this period, Stripe attempts to process the request, which results in success or failure:
+* Success: the items transition to the `payment refund succeeded` state, although the payment isn't refunded at this step.
+* Failure: the items transition to the `payment refund failed` state.
+
+These states are used to track the refund status and inform the Back Office user. In a few days after an order is refunded in the Back Office, Stripe finalizes the refund, causing the item states to change accordingly. Previously successful refunds may be declined and the other way around.
+
+If a refund fails, the Back Office user can go to the Stripe Dashboard to identify the cause of the failure. After resolving the issue, the item can be refunded again.
+
+In the default OMS configuration, seven days are allocated to Stripe to complete successful payment refunds. This is reflected in the Back Office by transitioning items to the `payment refunded` state.
diff --git a/docs/pbc/all/payment-service-provider/202404.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/project-guidelines-for-stripe.md b/docs/pbc/all/payment-service-provider/202404.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/project-guidelines-for-stripe.md
new file mode 100644
index 00000000000..b523eec3427
--- /dev/null
+++ b/docs/pbc/all/payment-service-provider/202404.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/project-guidelines-for-stripe.md
@@ -0,0 +1,33 @@
+---
+title: Project guidelines for Stripe
+description: Learn how to implement Stripe using ACP
+last_updated: Nov 8, 2024
+template: howto-guide-template
+related:
+ - title: Stripe
+ link: docs/pbc/all/payment-service-provider/page.version/base-shop/third-party-integrations/stripe/stripe.html
+redirect_from:
+ - /docs/pbc/all/payment-service-provider/202311.0/third-party-integrations/stripe/install-stripe.html
+ - /docs/pbc/all/payment-service-provider/202311.0/base-shop/third-party-integrations/stripe/install-stripe.html
+ - /docs/pbc/all/payment-service-provider/202311.0/base-shop/third-party-integrations/stripe/integrate-stripe.html
+
+---
+
+This document provides comprehensive guidelines for integrating and utilizing Stripe in your projects through the Stripe App.
+
+Whether you are looking to implement Stripe for checkout in a headless application, as a hosted payment page, or using an iframe, this guide has you covered.
+
+Additionally, you will find detailed instructions on sending additional data to Stripe, retrieving and using payment details, and configuring the Order Management System (OMS).
+
+Each section is designed to help you maximize the potential of Stripe in your projects. Explore the links below to dive into the detailed guides and enhance your Stripe implementation with best practices and advanced techniques.
+
+
+* [OMS configuration](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/oms.html)
+* [Implementing Stripe for checkout in a headless application](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/headless.html)
+* [Implementing Stripe checkout as a hosted payment page](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/hosted-payment-page.html)
+* [Implementing Stripe payment page using an iframe](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/iframe.html)
+* [Refund handling with Stripe](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/refund.html)
+* [Retrieving and using payment details from Stripe](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/payment-details.html)
+* [Sending additional data to Stripe](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/send-additional-data-to-stripe.html)
+* [Retrieve and use payment details from third-party PSPs](https://docs.spryker.com/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/retrieve-and-use-payment-details-from-third-party-psps.html)
+* [Change OOTB provided return URL's](https://docs.spryker.com/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/change-default-return-urls.html)
\ No newline at end of file
diff --git a/docs/pbc/all/payment-service-provider/202404.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/sending-additional-data-to-stripe.md b/docs/pbc/all/payment-service-provider/202404.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/sending-additional-data-to-stripe.md
new file mode 100644
index 00000000000..ffb612ad5fb
--- /dev/null
+++ b/docs/pbc/all/payment-service-provider/202404.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/sending-additional-data-to-stripe.md
@@ -0,0 +1,62 @@
+---
+title: Sending additional data to Stripe
+description: Learn how to implement Stripe using ACP
+last_updated: Nov 8, 2024
+template: howto-guide-template
+related:
+ - title: Stripe
+ link: docs/pbc/all/payment-service-provider/page.version/base-shop/third-party-integrations/stripe/stripe.html
+
+---
+
+Stripe accepts metadata passed using API calls. To send additional data to Stripe, the `QuoteTransfer::PAYMENT::ADDITIONAL_PAYMENT_DATA` field is used; the field is a key-value array. When sending requests using Glue API, pass the `additionalPaymentData` field in the `POST /checkout` request.
+
+```text
+POST https://api.your-site.com/checkout
+Content-Type: application/json
+Accept-Language: en-US
+Authorization: Bearer {{access_token}}
+
+{
+ "data": {
+ "type": "checkout",
+ "attributes": {
+ "customer": {
+ ...
+ },
+ "idCart": "{{idCart}}",
+ "billingAddress": {
+ ...
+ },
+ "shippingAddress": {
+ ...
+ },
+ "payments": [
+ {
+ "paymentMethodName": "Stripe",
+ "paymentProviderName": "Stripe",
+ "additionalPaymentData": {
+ "custom-field-1": "my custom value 1",
+ "custom-field-2": "my custom value 2"
+ }
+ }
+ ],
+ "shipment": {
+ "idShipmentMethod": {{idMethod}}
+ }
+ }
+ }
+}
+```
+
+The metadata sent using the field must meet the following criteria:
+
+| ATTRIBUTE | MAXIMUM VALUE |
+| - | - |
+| Key length | 40 characters |
+| Value length | 500 characters |
+| Key-value pairs | 50 pairs |
+
+When you pass metadata to Stripe, it's stored in the payment object and can be retrieved later. For example, this way you can pass an external ID to Stripe.
+
+When a `PaymentIntent` is created on the Stripe side, you can see your passed `additionalPaymentData` in the Stripe Dashboard.
diff --git a/docs/pbc/all/payment-service-provider/202404.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/202404.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/stripe-checkout-with-third-party-frontends.md
new file mode 100644
index 00000000000..624dcadb20f
--- /dev/null
+++ b/docs/pbc/all/payment-service-provider/202404.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/stripe-checkout-with-third-party-frontends.md
@@ -0,0 +1,288 @@
+---
+title: Stripe checkout with third-party frontends
+description: Learn how to implement Stripe using ACP
+last_updated: Nov 8, 2024
+template: howto-guide-template
+related:
+ - title: Stripe
+ link: docs/pbc/all/payment-service-provider/page.version/base-shop/third-party-integrations/stripe/stripe.html
+---
+
+This document describes the approaches to implementing Stripe checkout with third-party frontends.
+
+## Install modules
+
+Install or upgrade the modules to the specified or later versions:
+- `spryker/kernel-app:1.2.0`
+- `spryker/payment:5.24.0`
+- `spryker/payments-rest-api:1.3.0`
+
+## Pre-order payment flow
+
+When Stripe is integrated into a headless application, orders are processed using a pre-order payment flow:
+
+1. The customer either selects Stripe as the payment method or [Stripe Elements](https://docs.stripe.com/payments/elements) is loaded by default.
+2. The `InitializePreOrderPayment` Glue API endpoint (`glue.mysprykershop.com/payments`) is called with the following parameters:
+ * Payment provider name: Stripe
+ * Payment method name: Stripe
+ * Payment amount
+ * Quote data
+3. Back Office sends the quote data and the payment amount to Stripe app through an API.
+4. The payment with the given data is persisted in the Stripe app.
+5. Stripe app requests `ClientSecret` and `PublishableKey` keys from Stripe through an API.
+6. Stripe returns a JSON response with the following parameters:
+ * TransactionId
+ * ClientSecret
+ * PublishableKey
+ * Only for marketplaces: AccountId
+7. Stripe Elements is rendered on the order summary page. See [Rendering the Stripe Elements on the summary page](#rendering-the-stripe-elements-on-the-summary-page) for rendering Stripe Elements.
+8. The customer selects a payment method in Stripe Elements and submits the data.
+9. The customer is redirected to the configured `return_url`, which makes an API request to persist the order in the Back Office: `glue.mysprykershop.com/checkout`.
+10. The customer is redirected to the application's success page.
+11. Stripe app confirms the pre-order payment using the plugin: `\Spryker\Zed\Payment\Communication\Plugin\Checkout\PaymentConfirmPreOrderPaymentCheckoutPostSavePlugin`.
+ The `order_reference` is passed to the Stripe app to be connected with `transaction_id`.
+12. Stripe app processes the payment and sends a `PaymentUpdated` message to Spryker.
+13. Depending on payment status, one of the following messages is returned through an asynchronous API:
+ * Payment is successful: `PaymentAuthorized` message.
+ * Payment is failed: `PaymentAuthorizationFailed` message.
+14. Further on, the order is processed through the OMS.
+
+All payment related messages mentioned above are handled by `\Spryker\Zed\Payment\Communication\Plugin\MessageBroker\PaymentOperationsMessageHandlerPlugin`, which is registered in `MessageBrokerDependencyProvider`.
+
+
+## Example of the headless checkout with Stripe
+
+The Payment selection in this example will be used on the Summary page. The following examples show how to implement the Stripe Payment App in a headless application.
+
+Before the customer is redirected to the summary page, all required data is collected: customer data, addresses, and selected shipment method. When the customer goes to the summary page, to get the data required for rendering the Stripe Elements, the application needs to call the `InitializePreOrderPayment` Glue API endpoint.
+
+### Pre-order payment initialization
+
+```JS
+
+async initializePreOrderPayment() {
+ const requestData = {
+ data: {
+ type: 'payments',
+ attributes: {
+ quote: QUOTE_DATA,
+ payment: {
+ amount: GRAND_TOTAL, // You will get it through the `/checkout-data?include=carts` endpoint
+ paymentMethodName: 'stripe', // taken from /checkout-data?include=payment-methods
+ paymentProviderName: 'stripe', // taken from /checkout-data?include=payment-methods
+ },
+ preOrderPaymentData: {
+ "transactionId": this.transactionId, // This is empty in the first request but has to be used in further requests
+ },
+ },
+ },
+ };
+
+ const responseData = await this.fetchHandler(`GLUE_APPLICATION_URL/payments`, {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ Authorization: `Bearer ACCESS_TOKEN`,
+ },
+ body: JSON.stringify(requestData),
+ });
+
+ const paymentProviderData =
+ responseData.data.attributes.preOrderPaymentData;
+
+ this.transactionId = paymentProviderData.transactionId;
+ this.accountId = paymentProviderData.accountId; // only be used on the Direct business model. When using a Marketplace business model this will not be present.
+
+ await this.setupStripe();
+ }
+
+```
+
+To identify the customer when initiating a request using Glue API, use the `Authorization` header for a logged-in customer and `X-Anonymous-Customer-Unique-Id` for a guest user.
+
+After a `PaymentIntent` is created using the Stripe API, a payment is created in the Stripe app. The response looks as follows:
+
+```JSON
+{
+ "data": {
+ "type": "payments",
+ "attributes": {
+ "isSuccessful": true,
+ "error": null,
+ "preOrderPaymentData": {
+ "transactionId": "pi_3Q3............",
+ "clientSecret": "pi_3Q3............_secret_R3WC2........",
+ "publishableKey": "pk_test_51OzEfB..............."
+ }
+ }
+ }
+}
+```
+
+### Rendering the Stripe Elements on the summary page
+
+The `preOrderPaymentData` from the previous example is used to render Stripe Elements on the summary page:
+
+```JAVASCRIPT
+async setupStripe() {
+ const paymentElementOptions = {
+ layout: 'accordion', // Change this to your needs
+ };
+
+ let stripeAccountDetails = {};
+
+ if (this.accountId) { // Only in Direct business model not in the Marketplace business model
+ stripeAccountDetails = { stripeAccount: this.accountId }
+ }
+
+ const stripe = Stripe(this.publishableKey, stripeAccountDetails);
+
+ const elements = stripe.elements({
+ clientSecret: this.clientSecret,
+ });
+
+ const paymentElement = elements.create('payment', paymentElementOptions);
+ paymentElement.mount('#payment-element'); // Change this to the id of the HTML element you want to render the Stripe Elements to
+
+ SUBMIT_BUTTON.addEventListener('click', async () => {
+ const { error } = await stripe.confirmPayment({
+ elements,
+ confirmParams: {
+ return_url: `APPLICATION_URL/return-url?id=${idCart}`, // You need to pass the id of the cart to this request
+ },
+ });
+ if (error) {
+ // Add your error handling to this block.
+ }
+ });
+ }
+```
+
+This sets up Stripe Elements on the summary page of your application. The customer can now select the Payment Method in Stripe Elements and submit the data. Then, the customer is redirected to the configured `return_url`, which makes another Glue API request to persist the order in the Back Office. After this, the customer should see the success page.
+
+When the customer submits the order, the payment data is sent to Stripe. Stripe may redirect them to another page, for example — PayPal, or redirect the customer to the specified `return_url`. The `return_url` must make another Glue API request to persist the order in the Back Office.
+
+### Persisting orders in the Back Office through the return URL
+
+Because an order can be persisted in the Back Office only after a successful payment, the application needs to handle the `return_url` and make a request to the Glue API to persist the order.
+
+
+ Request example
+
+```JAVASCRIPT
+app.get('/return-url', async (req, res) => {
+ const paymentIntentId = req.query.payment_intent;
+ const clientSecret = req.query.payment_intent_client_secret;
+ const idCart = req.query.id;
+
+ if (paymentIntentId) {
+ try {
+ const data = await fetchHandler(`GLUE_APPLICATION_URL/checkout`, {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ Authorization: `Bearer ACCESS_TOKEN`
+ },
+ body: JSON.stringify({
+ data: {
+ type: 'checkout',
+ attributes: {
+ customer: CUSTOMER_DATA,
+ idCart: idCart,
+ billingAddress: BILLING_ADDRESS,
+ shippingAddress: SHIPPING_ADDRESS,
+ payments: [
+ {
+ paymentMethodName: 'Stripe',
+ paymentProviderName: 'Stripe',
+ },
+ ],
+ shipment: SHIPMENT_DATA,
+ preOrderPaymentData: {
+ transactionId: paymentIntentId,
+ clientSecret: clientSecret,
+ },
+ },
+ },
+ }),
+ });
+
+ if (data) {
+ res.send('
');
+ }
+});
+```
+
+
+
+After this, the customer should be redirected to the success page or in case of a failure to an error page.
+
+
+{% info_block infoBox %}
+- When the customer reloads the summary page, which renders `PaymentElements`, an extra unnecessary API request is sent to initiate `preOrder Payment`. Stripe can handle these without issues. However, you can also prevent unnecessary API calls from being sent on the application side by, for example, checking if relevant data has changed.
+- When the customer leaves the summary page, the payment is created in Stripe app and Stripe. However, in the Back Office, there is a stale payment without an order.
+- To enable the customer to abort the payment process, you can implement the cancellation of payments through Glue API.
+
+{% endinfo_block %}
+
+
+
+### Cancelling payments through Glue API
+
+The following request cancels a PaymentIntent on the Stripe side and shows a `canceled` PaymentIntent in the Stripe Dashboard. You can implement this in your application to enable the customer to cancel the payment process.
+
+
+ Cancel a payment through Glue API
+
+```JAVASCRIPT
+async cancelPreOrderPayment() {
+ const requestData = {
+ data: {
+ type: 'payment-cancellations',
+ attributes: {
+ payment: {
+ paymentMethodName: 'stripe',
+ paymentProviderName: 'stripe',
+ },
+ preOrderPaymentData: {
+ transactionId: this.transactionId,
+ },
+ },
+ },
+ };
+
+ const url = `GLUE_APPLICATION_URL/payment-cancellations`;
+
+ const response = await fetch(url, {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ Authorization: `Bearer ACCESS_TOKEN`,
+ },
+ body: JSON.stringify(requestData),
+ });
+
+ if (!response.ok) {
+ throw new Error('Network response was not ok');
+ }
+
+ const responseData = await response.json();
+
+ if (responseData.data.attributes.isSuccessful === true) {
+ // Add your logic here when the payment cancellation was successful
+ } else {
+ // Add your logic here when the payment cancellation has failed
+ }
+ }
+```
+
+
diff --git a/docs/pbc/all/payment-service-provider/202404.0/marketplace/stripe-third-party-integration/stripe-oms-configuration-in-marketplaces.md b/docs/pbc/all/payment-service-provider/202404.0/marketplace/stripe-third-party-integration/stripe-oms-configuration-in-marketplaces.md
index 8427cb81e9e..326558e803f 100644
--- a/docs/pbc/all/payment-service-provider/202404.0/marketplace/stripe-third-party-integration/stripe-oms-configuration-in-marketplaces.md
+++ b/docs/pbc/all/payment-service-provider/202404.0/marketplace/stripe-third-party-integration/stripe-oms-configuration-in-marketplaces.md
@@ -13,7 +13,7 @@ The complete default payment OMS configuration is available in `vendor/spryker/s
The payment flow of the default OMS involves authorizing the initial payment, which means that the amount is emporarily blocked when the payment method permits. Then, the OMS sends requests to capture, that is, transfer of the previously blocked amount from the customer's account to the store account.
-For more information about the ForeignPayment OMS configuration, see [Project guidelines for Stripe](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe.html)
+For more information about the ForeignPayment OMS configuration, see [Project guidelines for Stripe](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/project-guidelines-for-stripe.html)
In addition to the base shop implementation, the Stripe App in Marketplaces requires the following OMS configuration:
diff --git a/docs/pbc/all/payment-service-provider/202410.0/base-shop/define-return-urls-for-payments.md b/docs/pbc/all/payment-service-provider/202410.0/base-shop/define-return-urls-for-payments.md
new file mode 100644
index 00000000000..a071cfcdd66
--- /dev/null
+++ b/docs/pbc/all/payment-service-provider/202410.0/base-shop/define-return-urls-for-payments.md
@@ -0,0 +1,16 @@
+---
+title: Define return URLs for payments
+description: Learn how to change the default return URLs to be used by third-party payment service providers
+last_updated: Nov. 27, 2024
+template: howto-guide-template
+---
+
+Payment methods are configured to redirect the customer to a specific return URL after the payment process is completed, failed, or cancelled. This document provides information on how to change the default return URLs for payments.
+
+Some third-party integrations only use a return URL while others can also use a failure and/or cancel URLs. The `ForeignPayment` class is used to send the expected return URLs to the payment app, which are then used when needed.
+
+To change the default return URLs, you can use the following methods:
+
+- `\Spryker\Zed\Payment\PaymentConfig::getSuccessRoute()`
+- `\Spryker\Zed\Payment\PaymentConfig::getCancelRoute()`
+- `\Spryker\Zed\Payment\PaymentConfig::getCheckoutSummaryPageRoute()`
diff --git a/docs/pbc/all/payment-service-provider/202410.0/base-shop/payment-method-strategies.md b/docs/pbc/all/payment-service-provider/202410.0/base-shop/payment-method-strategies.md
new file mode 100644
index 00000000000..ee1fd40e2be
--- /dev/null
+++ b/docs/pbc/all/payment-service-provider/202410.0/base-shop/payment-method-strategies.md
@@ -0,0 +1,107 @@
+---
+title: Payment method strategies
+description: This doc describes the different payment method strategies available in Spryker Commerce OS.
+last_updated: Nov 5, 2024
+template: howto-guide-template
+---
+
+Spryker and Payment Service Provider (PSP) apps support various payment methods. On the app side, payment methods are configured to use different strategies. A payment method strategy defines where and how payment method or PSP elements, usually the payment form, are displayed in the shop.
+
+The following strategies are available:
+
+- hosted-payment-page: After an order is submitted, to complete the payment, the customer is redirected to a hosted payment page of the PSP.
+- express-checkout: One or more express checkout buttons are displayed, for example–on the Cart or PDP page.
+
+
+
+The strategy is defined in the `PaymentMethodTransfer` object. The object is used to transfer the payment method data between the shop and the PSP.
+
+When an app is configured in the ACP app Catalog, the `PaymentMethod` data and the configuration is sent to Spryker using an async API and is persisted in the database. The configuration is a JSON string, which is mapped to the `PaymentMethodTransfer` object.
+
+`PaymentMethodTransfer` contains a `PaymentMethodappConfigurationTransfer` object. The `PaymentMethodappConfigurationTransfer` object contains the `CheckoutStrategyTransfer` object. `CheckoutStrategyTransfer` contains the strategy name. The strategy name is used to determine where and how the payment method or PSP elements are displayed in the shop.
+
+The `hosted-payment-page` strategy is used by default.
+
+## Express checkout
+
+When the `express-checkout` strategy is used for a payment method, the buttons for this payment method are displayed in the shop, for example– on the Cart or Product Details pages. The buttons are created by `PaymentMethodViewExpander`. `PaymentMethodViewExpander` is a part of the Payment module and is responsible for expanding the payment method data with view data. `PaymentMethodViewExpander` is used by `PaymentMethodViewPlugin`. `PaymentMethodViewPlugin` is a part of the Checkout module and is responsible for rendering the payment method data in the shop.
+
+`CheckoutConfigurationTransfer` contains the information to display the buttons. An example configuration looks as follows:
+
+```json
+{
+ "base_url": "https://app-xyz.spryker.com",
+ "endpoints": [
+ ...
+ ],
+ "checkout_configuration": {
+ "strategy": "express-checkout",
+ "scripts": [
+ {
+ "url": "https://sandbox.paypal.com/sdk/js?client-id=AUn5n-...&merchant-id=3QK...&intent=authorize&commit=true&vault=false&disable-funding=card,sepa,bancontact&enable-funding=paylater",
+ "query_params": {
+ "currency": "currencyName",
+ "locale": "localeName"
+ }
+ }
+ ],
+ "payment_service_provider_data": {
+ "clientId": "AUn5n-...",
+ "merchantId": "3QK...",
+ "isLive": false
+ }
+ }
+}
+```
+
+The main elements of this JSON configuration are the strategy and the scripts.
+
+The `strategy` is set to `express-checkout` to define that the payment method should be displayed as a button in the shop.
+
+The `scripts` array contains the URLs to the scripts that are needed to display the button. The URL is used to load the script in the shop. `query_params` are used to add key-value pairs to the URL with actual values. The actual values are taken from `\Sprykershop\Yves\PaymentappWidget\Reader\PaymentMethodScriptReaderInterface`, which is used in the Storefront to expand the script. The `key` is the name that has to be used as query param key in the URL and the value defines which value should be used. The `currency` and `locale` are the most common values that are used in the scripts.
+
+The `payment_service_provider_data` contains the data that can be used by projects to configure the payment method. Those value may different per payment method.
+
+### Query parameters for scripts
+
+The app knows only which query parameters (keys) are needed. The shop knows which values are needed and where to get them from.
+
+For example the script URL can be `https://example.com/js?currency=EUR`. The app knows that the `currency` is needed but can't know which one is used in the shop. The shop knows that the used `currency` is `EUR`.
+
+The app defines a script as follows:
+
+```json
+{
+ "scripts": [
+ {
+ "url": "https://example.com/js",
+ "query_params": {
+ "currency": "currencyName"
+ }
+ }
+ ]
+}
+```
+
+The shop loads this information and parses the `currencyName` to `EUR` and the final URL is `https://example.com/js?currency=EUR`.
+
+Spryker supports the following query parameters:
+- `currencyName`
+- `localeName`
+
+
+## Hosted payment page flow
+
+The default checkout consists of different steps such as the address or shipment steps. After a customer submits an order, and it's successfully placed in the Back Office, the customer is redirected to a hosted payment page to complete the payment.
+
+
+## Express checkout payment flow
+
+The express checkout payment flow belongs to so-called preorder payments. Preorder payments are payments that are done before an order is placed. The express checkout payment flow consists of the steps:
+1. Authorize payment: after a customer clicks on the button.
+2. Capture payment: after the order is placed.
+
+
+In this flow, a button to pay with a payment method is displayed on, for example–Product Details or Cart page. When the customer clicks on the button, the payment is initialized and a modal window is opened where the customer completes the payment. After that, the customer is redirected to the summary page where they can submit the order. The order is placed in the Back Office and captured.
+
+Also, express checkout payment methods provide customer data, such as addresses, that can be used to prefill the checkout form.
diff --git a/docs/pbc/all/payment-service-provider/202410.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/202410.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/payment-method-flows/payone-credit-card-payment-flow.md
new file mode 100644
index 00000000000..aa58776b782
--- /dev/null
+++ b/docs/pbc/all/payment-service-provider/202410.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/payment-method-flows/payone-credit-card-payment-flow.md
@@ -0,0 +1,31 @@
+---
+title: PayOne Credit Card payment flow
+description: Payone offers your customers to pay with Credit Card.
+template: howto-guide-template
+last_updated: Now 8, 2024
+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
+---
+
+When customers pay with a credit card, the flow is as follows:
+
+1. Customer provides their credit card payment credentials and pays the required amount for the placed order.
+2. The customer's credit card data is validated.
+3. Customer receives a payment message indidcating if the payment or authorization was successful.
+
+When paying with a credit card, customers can do the following:
+
+- Repeat payment as often as they want if a payment or preauthorization failed, or cancel and close the payment page.
+- Cancel an entire order before shipment and receive the money back, that is, void the existing preauthorization without being charged a fee.
+- Cancel an order after it's ready for shipment and receive the money back, that is, trigger a refund.
+- Return part or all items of an order after it was shipped and recieve a refund for the returned items of full order respectively.
+
+When customers pay with a credit card, a shop owner can do the following:
+
+
+- Charge customers once the order is ready to be shipped, that is, capture the funds.
+- Cancel the entire customer order, that is, void the existing preauthorization. In this case, the customer is not charged anything.
+- Cancel one or more items of a customer's order before shipment. The customer is not charged for the canceled items.
diff --git a/docs/pbc/all/payment-service-provider/202410.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/202410.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/payment-method-flows/payone-paypal-express-payment-flow-in-headless-applications.md
new file mode 100644
index 00000000000..581f1a9d16d
--- /dev/null
+++ b/docs/pbc/all/payment-service-provider/202410.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/payment-method-flows/payone-paypal-express-payment-flow-in-headless-applications.md
@@ -0,0 +1,178 @@
+---
+title: PayOne PayPal Express payment flow in headless applications
+description: Payone offers your customers to pay with PayPal Express.
+template: howto-guide-template
+last_updated: Now 8, 2024
+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
+---
+
+## PayPal Express for checkout in a headless application
+
+Use this approach for headless applications with third-party frontends.
+
+### Install modules
+
+Install or upgrade the modules to the specified or later versions:
+- `spryker/kernel-app:1.2.0`
+- `spryker/payment:5.27.0`
+- `spryker/payments-rest-api:1.4.0`
+
+### Preorder payment flow
+
+When PayOne PayPal Express is integrated into a headless application, orders are processed using a preorder payment flow:
+
+1. Customer selects PayPal Express as the payment method at the Product Details or Cart page.
+2. The `InitializePreOrderPayment` Glue API endpoint (`glue.mysprykershop.com/payments`) is called with the following parameters:
+ * Payment provider name: Payone
+ * Payment method name: PayPal Express
+ * Payment amount
+ * Quote data
+3. Back Office sends the quote data and the payment amount to the PayOne app through an API.
+4. The payment with the given data is persisted in the PayOne app.
+5. PayOne app makes a request through an API to PayOne to preauthorize the payment.
+6. PayOne returns a JSON response with the following parameters:
+ * transactionId
+ * orderId
+ * workorderid
+ * token
+ * currency
+ * clientId
+ * merchantId
+7. When the customer clicks **Complete Purchase**, the modal closes and the customer data is requested.
+8. The customer is redirected to the summary page. On this page, the customer can see their address data that was received from PayPal. If they change the data, an API request is made to persist the order in the Back Office: `glue.mysprykershop.com/checkout`.
+9. The customer is redirected to the application's success page.
+10. PayOne app confirms the preorder payment using the plugin: `\Spryker\Zed\Payment\Communication\Plugin\Checkout\PaymentConfirmPreOrderPaymentCheckoutPostSavePlugin`.
+ The `order_reference` is passed to the PayOne app to be connected with `transaction_id`.
+11. PayOne app processes the payment and sends a `PaymentUpdated` message to Spryker.
+12. Depending on payment status, one of the following messages is returned through an asynchronous API:
+ * Payment is successful: `PaymentAuthorized` message.
+ * Payment is failed: `PaymentAuthorizationFailed` message.
+13. Further on, the order is processed through the OMS.
+
+All payment-related messages in the preorder flow are handled by `\Spryker\Zed\Payment\Communication\Plugin\MessageBroker\PaymentOperationsMessageHandlerPlugin`, which is registered in `MessageBrokerDependencyProvider::getMessageHandlerPlugins()`.
+
+
+### Example of the headless checkout with PayOne
+
+The payment methods returned by the `/checkout-data?include=payment-methods` endpoint are used to render the express checkout buttons, for example–on the Product Details page or Cart page. The customer can select one of the provided payment methods and proceed to the payment page.
+
+When the customer clicks the **Pay with PayPal Express** button, the `InitializePreOrderPayment` Glue API endpoint is called to initialize the payment.
+
+
+For more details on payment methods in a headless chechout, see [Payment Method Strategies](/docs/pbc/all/payment-service-provider/202410.0/base-shop/payment-method-strategies.html).
+
+
+#### Preorder payment initialization
+
+This script example makes a Glue API request to the `/payments` API endpoint to initialize a preorder payment. The `transactionId` is empty in the first request but needs to be used in further requests. The quote data and the payment method data also needs to be passed. The response will cantain `preOrderPaymentData`, which will be used in further requests.
+
+```JS
+
+async initializePreOrderPayment() {
+ const requestData = {
+ data: {
+ type: 'payments',
+ attributes: {
+ quote: QUOTE_DATA,
+ payment: {
+ amount: GRAND_TOTAL, // You will get it through the `/checkout-data?include=carts` endpoint
+ paymentMethodName: 'PayPal Express', // taken from /checkout-data?include=payment-methods
+ paymentProviderName: 'PayOne', // taken from /checkout-data?include=payment-methods
+ },
+ preOrderPaymentData: {
+ "transactionId": this.transactionId, // This is empty in the first request but has to be used in further requests
+ },
+ },
+ },
+ };
+
+ const responseData = await this.fetchHandler(`GLUE_APPLICATION_URL/payments`, {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ Authorization: `Bearer ACCESS_TOKEN`, // taken from /access-tokens
+ },
+ body: JSON.stringify(requestData),
+ });
+
+ // This gets passed back from the App server and is different for each PSP
+ this.preOrderPaymentData = responseData.data.attributes.preOrderPaymentData;
+
+ return this.preOrderPaymentData; // This has to be forwarded in any upcoming request
+ }
+
+```
+
+To identify the customer when initiating a request using Glue API, use the `Authorization` header for a logged-in customer and `X-Anonymous-Customer-Unique-Id` for a guest user.
+
+After making a request to the PayOne API, the payment is created in the PayOne app. The response looks as follows:
+
+```JSON
+{
+ "data": {
+ "type": "payments",
+ "attributes": {
+ "isSuccessful": true,
+ "error": null,
+ "preOrderPaymentData": {
+ "transactionId": "...",
+ "orderId": "...",
+ "workorderid": "...",
+ "token": "...",
+ "currency": "USD",
+ "merchantId": "..."
+ }
+ }
+ }
+}
+```
+
+After the customer clicks **Complete Purchase** in the PayPal Express modal, they're redirected to the summary page.
+
+#### Getting the customer data
+
+Because the express checkout skips some steps, such as address or shipment, another request needs to be made to get the customer data.
+
+```JS
+async getCustomerData() {
+ const url = `${this.GLUE_BASE_URL}/payment-customer`;
+
+ const requestData = {
+ data: {
+ type: 'payment-customer',
+ attributes: {
+ "payment": {
+ paymentMethodName: 'paypal-express',
+ paymentProviderName: 'payone',
+ },
+ "customerPaymentServiceProviderData": this.preOrderPaymentData
+ },
+ },
+ };
+
+ const response = await fetch(url, {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ Authorization: `Bearer ${this.accessToken}`,
+ },
+ body: JSON.stringify(requestData),
+ });
+
+ const responseData = await response.json();
+
+ console.log(responseData);
+
+ return responseData.data.attributes.customer;
+}
+```
+
+This data must be used to fill the quote with the missing customer data.
+
+When the customer submits the order, the payment data is sent to PayOne.
+
+After this, the customer is redirected to the success or error page depending on the result.
diff --git a/docs/pbc/all/payment-service-provider/202410.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/202410.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/payment-method-flows/payone-paypal-payment-flow.md
new file mode 100644
index 00000000000..21266024662
--- /dev/null
+++ b/docs/pbc/all/payment-service-provider/202410.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/payment-method-flows/payone-paypal-payment-flow.md
@@ -0,0 +1,30 @@
+---
+title: Payone PayPal payment flow
+description: Payone offers your customers to pay with PayPal.
+template: howto-guide-template
+last_updated: Nov 8, 2024
+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
+---
+
+When customers pay with PayPal, the flow is as follows:
+
+1. Customer is redirected to the PayPal website.
+2. Customer logs in.
+3. On the PayPal website, the customer either cancels or validates the transaction.
+4. Customer is redirected to the checkout page where a message about order being placed or canceled is displayed.
+
+When paying with PayPal, customers can do the following:
+
+- Cancel the entire order before shipment and receive the money back; this voids the preauthorization without charging a fee.
+- Cancel the order after it's ready for shipment and receive the money back; this issues a refund.
+- Return part or all of the items from an order; this refunds the money for the returned items or for the full order respectively.
+
+When customers pay with PayPal, a shop owner can do the following:
+
+- Charge a customer once their order is ready to be shipped, that is, capture the funds.
+- Cancel an entire order, that is, void the existing preauthorization. This doesn't charge the customer.
+- Cancel one or more items from an order before shipment. The curtomer is charged only for the items that are going to be shipped.
diff --git a/docs/pbc/all/payment-service-provider/202410.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/payone-acp-app.md b/docs/pbc/all/payment-service-provider/202410.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/payone-acp-app.md
index 4c387ba214d..8fbe80d2a83 100644
--- a/docs/pbc/all/payment-service-provider/202410.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/payone-acp-app.md
+++ b/docs/pbc/all/payment-service-provider/202410.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/payone-acp-app.md
@@ -2,7 +2,7 @@
title: Payone ACP app
description: With Payone, your customers can pay with common payment methods, such as credit card, PayPal, Prepayment and Klarna.
template: howto-guide-template
-last_updated: Aug 30, 2024
+last_updated: Now 8, 2024
redirect_from:
- /docs/aop/user/apps/payone.html
- /docs/acp/user/apps/payone.html
@@ -22,7 +22,8 @@ You can have multiple accounts with Payone. For example, you can have different
The Payone App supports the B2B and B2C business models and the following payment methods:
* Credit Card
-* Paypal Standard
+* PayPal Standard
+* PayPal Express
* Klarna:
* Invoice: pay later
* Installments: slice it
@@ -45,52 +46,17 @@ The payment modes like Preauthorization and Capture must be set via the Spryker
{% endinfo_block %}
-## Credit card payment flow
+## Payment method flows
-When customers pay with a credit card (with optional support of 3DS), the flow is as follows:
+* [Credit Card](/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)
+* [PayPal](/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](/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)
-1. Customer provides their credit card payment credentials and pays the required amount for the placed order.
-2. The customer's credit card data is validated.
-3. Customer receives a payment message, whether the payment or authorization was successful.
-
-When paying with a credit card, customers can do the following:
-
-- Repeat payments as often as they want if the payment (preauthorization) has failed, or cancel and close the payment page.
-- Cancel the entire order before shipment and receive the money back, that is, void the existing preauthorization without being charged a fee.
-- Cancel the order after it is ready for shipment and receive the money back, that is, trigger a refund.
-- Return the order or its items after it has been successfully shipped and is refunded for the returned items or the entire order.
-
-When customers pay with a credit card, a shop owner can do the following:
-
-
-- Charge customers once the order is ready to be shipped, that is, capture the funds.
-- Cancel the entire customer order, that is, void the existing preauthorization. In this case, the customer is not charged anything.
-- Cancel one or more items of a customer's order before shipment. The customer is not charged for the canceled items.
-
-## PayPal payment flow
-
-When customers pay with PayPal, the flow is as follows:
-
-1. Customer is redirected to the PayPal website, where they have to log in.
-2. On the PayPal website, the customer either cancels or validates the transaction.
-3. Customer is taken to the checkout page with the message of either a successfully placed or canceled order.
-
-When paying with PayPal, customers can:
-
-- Cancel the entire order before shipment and receive the money back, that is, void the existing preauthorization, without being charged a fee.
-- Cancel the order after it is ready for shipment and receive the money back, that is, trigger a refund.
-- Return the order or its items after it has been successfully shipped and is refunded for the returned items or the entire order.
-
-When customers pay with PayPal, a shop owner can do the following:
-
-- Charge customers once the order is ready to be shipped, that is, capture the funds.
-- Cancel the entire customer order, that is, void the existing preauthorization. In this case, the customer is not charged anything.
-- Cancel one or more items of a customer's order before shipment. The customer is not charged for the canceled items.
## Current limitations
-- Payments can be properly canceled only from the the Back Office and not from the Payone PMI.
-- Payments can't be partially canceled. One payment intent is created per order and it can either be authorized or fully cancelled.
+- Payments can be properly canceled only from the Back Office and not from the Payone PMI.
+- Payments can't be partially canceled. One payment intent is created per order, and it can either be authorized or fully cancelled.
- When an item is canceled on the order details page, all order items are canceled.
## Next steps
diff --git a/docs/pbc/all/payment-service-provider/202410.0/base-shop/third-party-integrations/payone/manual-integration/integrate-payone.md b/docs/pbc/all/payment-service-provider/202410.0/base-shop/third-party-integrations/payone/manual-integration/integrate-payone.md
index e95d7bfe388..f5baf0c17bf 100644
--- a/docs/pbc/all/payment-service-provider/202410.0/base-shop/third-party-integrations/payone/manual-integration/integrate-payone.md
+++ b/docs/pbc/all/payment-service-provider/202410.0/base-shop/third-party-integrations/payone/manual-integration/integrate-payone.md
@@ -49,7 +49,7 @@ path.join(context, paths.eco.modules)
```
Run `npm run yves` after applying these changes.
-Due to the pending update to Suite, you also have to apply Checkout template `.../src/Pyz/Yves/CheckoutPage/Theme/default/views/payment/payment.twig` update:
+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 %}
diff --git a/docs/pbc/all/payment-service-provider/202410.0/base-shop/third-party-integrations/ratenkauf-by-easycredit/ratenkauf-by-easycredit.md b/docs/pbc/all/payment-service-provider/202410.0/base-shop/third-party-integrations/ratenkauf-by-easycredit/ratenkauf-by-easycredit.md
index f3cd0102c1c..89a3c26ae89 100644
--- a/docs/pbc/all/payment-service-provider/202410.0/base-shop/third-party-integrations/ratenkauf-by-easycredit/ratenkauf-by-easycredit.md
+++ b/docs/pbc/all/payment-service-provider/202410.0/base-shop/third-party-integrations/ratenkauf-by-easycredit/ratenkauf-by-easycredit.md
@@ -24,7 +24,7 @@ Germany’s easiest installment purchase solution ratenkauf by easyCredit is the
TeamBank, with its easyCredit product family, is the liquidity management specialist in the Volksbanken Raiffeisenbanken cooperative financial network. Its ‘ratenkauf by easyCredit’ product is the first installment purchase solution that combines a simple and uniformly designed installment purchase function both for e-commerce and for a physical point of sale. Customers can make their ratenkauf by easyCredit installment purchase in just three steps. No paperwork, immediate approval, and complete flexibility throughout. Simple. Fair.
YOUR ADVANTAGES:
-* Revenue booster: more revenue due to higher purchase amounts.
+* Revenue booster: more revenue because of higher purchase amounts.
* Profitable: fewer purchase cancellations thanks to the immediate credit check and approval.
* Safe: no payment defaults as TeamBank assumes the credit risk.
* Fair: excellent easyCredit processes offer transparency and flexibility for customers.
diff --git a/docs/pbc/all/payment-service-provider/202410.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe.md b/docs/pbc/all/payment-service-provider/202410.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe.md
deleted file mode 100644
index d8b8cceb39e..00000000000
--- a/docs/pbc/all/payment-service-provider/202410.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe.md
+++ /dev/null
@@ -1,614 +0,0 @@
----
-title: Project guidelines for Stripe
-description: Learn the guidelines that are needed for your Spryker projects when it comes to using Stripe throught the Spryker Stripe App Integration.
-last_updated: Jul 22, 2024
-template: howto-guide-template
-related:
- - title: Stripe
- link: docs/pbc/all/payment-service-provider/page.version/base-shop/third-party-integrations/stripe/stripe.html
-redirect_from:
- - /docs/pbc/all/payment-service-provider/202311.0/third-party-integrations/stripe/install-stripe.html
- - /docs/pbc/all/payment-service-provider/202311.0/base-shop/third-party-integrations/stripe/install-stripe.html
- - /docs/pbc/all/payment-service-provider/202311.0/base-shop/third-party-integrations/stripe/integrate-stripe.html
-
----
-
-This document provides guidelines for projects using Stripe through the Stripe app.
-
-## OMS configuration
-
-The complete default payment OMS configuration is available at `vendor/spryker/sales-payment/config/Zed/Oms/ForeignPaymentStateMachine01.xml`.
-
-The payment flow of the default OMS involves authorizing the initial payment. The amount is temporarily blocked when the payment method permits. Then, the OMS sends requests to capture, that is, transfer of the previously blocked amount from the customer's account to the store account.
-
-The `Payment/Capture` command initiates the capture action. By default, this command is initiated when a Back Office user clicks **Ship** on the **Order Overview** page.
-
-Optionally, you can change and configure your own payment OMS based on `ForeignPaymentStateMachine01.xml` from the core package and change this behavior according to your business flow. For more information about OMS configuration, see [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).
-
-To configure your payment OMS based on `ForeignPaymentStateMachine01.xml`, copy `ForeignPaymentStateMachine01.xml` with the `Subprocess` folder to the project root `config/Zed/oms`. Then, change the file's name and the value of `
- State machine example
-
-```xml
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- payment capture pending
- capture payment
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-```
-
-
-
-By default, the timeout for the payment authorization action is set to seven days. If the order is in the `payment authorization pending` state, after a day the order state is changed to `payment authorization failed`. Another day later, the order is transitioned to the `payment authorization canceled` state.
-
-To decrease or increase timeouts or change the states, update `config/Zed/oms/Subprocess/PaymentAuthorization01.xml`.
-
-For more information on the integration of ACP payment methods with OMS configuration, see [Integrate ACP payment apps with Spryker OMS configuration](/docs/dg/dev/acp/integrate-acp-payment-apps-with-spryker-oms-configuration.html).
-
-
-## Implementing Stripe for checkout in a headless application
-
-Use this approach for headless applications with third-party frontends.
-
-### Install modules
-
-Install or upgrade the modules to the specified or later versions:
-- `spryker/kernel-app:1.2.0`
-- `spryker/payment:5.24.0`
-- `spryker/payments-rest-api:1.3.0`
-
-### Pre-order payment flow
-
-When Stripe is integrated into a headless application, orders are processed using a pre-order payment flow:
-
-1. The customer either selects Stripe as the payment method or [Stripe Elements](https://docs.stripe.com/payments/elements) is loaded by default.
-2. The `InitializePreOrderPayment` Glue API endpoint (`glue.mysprykershop.com/payments`) is called with the following parameters:
- * Payment provider name: Stripe
- * Payment method name: Stripe
- * Payment amount
- * Quote data
-3. Back Office sends the quote data and the payment amount to Stripe app through an API.
-4. The payment with the given data is persisted in the Stripe app.
-5. Stripe app requests `ClientSecret` and `PublishableKey` keys from Stripe through an API.
-6. Stripe returns a JSON response with the following parameters:
- * TransactionId
- * ClientSecret
- * PublishableKey
- * Only for marketplaces: AccountId
-7. Stripe Elements is rendered on the order summary page. See [Rendering the Stripe Elements on the summary page](#rendering-the-stripe-elements-on-the-summary-page) for rendering Stripe Elements.
-8. The customer selects a payment method in Stripe Elements and submits the data.
-9. The customer is redirected to the configured `return_url`, which makes an API request to persist the order in the Back Office: `glue.mysprykershop.com/checkout`.
-10. The customer is redirected to the application's success page.
-11. Stripe app confirms the pre-order payment using the plugin: `\Spryker\Zed\Payment\Communication\Plugin\Checkout\PaymentConfirmPreOrderPaymentCheckoutPostSavePlugin`.
- The `order_reference` is passed to the Stripe app to be connected with `transaction_id`.
-12. Stripe app processes the payment and sends a `PaymentUpdated` message to Spryker.
-13. Depending on payment status, one of the following messages is returned through an asynchronous API:
- * Payment is successful: `PaymentAuthorized` message.
- * Payment is failed: `PaymentAuthorizationFailed` message.
-14. Further on, the order is processed through the OMS.
-
-All payment related messages mentioned above are handled by `\Spryker\Zed\Payment\Communication\Plugin\MessageBroker\PaymentOperationsMessageHandlerPlugin`, which is registered in `MessageBrokerDependencyProvider`.
-
-
-### Example of the headless checkout with Stripe
-
-The Payment selection in this example will be used on the Summary page. The following examples show how to implement the Stripe Payment App in a headless application.
-
-Before the customer is redirected to the summary page, all required data is collected: customer data, addresses, and selected shipment method. When the customer goes to the summary page, to get the data required for rendering the Stripe Elements, the application needs to call the `InitializePreOrderPayment` Glue API endpoint.
-
-#### Pre-order payment initialization
-
-```JS
-
-async initializePreOrderPayment() {
- const requestData = {
- data: {
- type: 'payments',
- attributes: {
- quote: QUOTE_DATA,
- payment: {
- amount: GRAND_TOTAL, // You will get it through the `/checkout-data?include=carts` endpoint
- paymentMethodName: 'stripe', // taken from /checkout-data?include=payment-methods
- paymentProviderName: 'stripe', // taken from /checkout-data?include=payment-methods
- },
- preOrderPaymentData: {
- "transactionId": this.transactionId, // This is empty in the first request but has to be used in further requests
- },
- },
- },
- };
-
- const responseData = await this.fetchHandler(`GLUE_APPLICATION_URL/payments`, {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json',
- Authorization: `Bearer ACCESS_TOKEN`,
- },
- body: JSON.stringify(requestData),
- });
-
- const paymentProviderData =
- responseData.data.attributes.preOrderPaymentData;
-
- this.transactionId = paymentProviderData.transactionId;
- this.accountId = paymentProviderData.accountId; // only be used on the Direct business model. When using a Marketplace business model this will not be present.
-
- await this.setupStripe();
- }
-
-```
-
-To identify the customer when initiating a request using Glue API, use the `Authorization` header for a logged-in customer and `X-Anonymous-Customer-Unique-Id` for a guest user.
-
-After a `PaymentIntent` is created using the Stripe API, a payment is created in the Stripe app. The response looks as follows:
-
-```JSON
-{
- "data": {
- "type": "payments",
- "attributes": {
- "isSuccessful": true,
- "error": null,
- "preOrderPaymentData": {
- "transactionId": "pi_3Q3............",
- "clientSecret": "pi_3Q3............_secret_R3WC2........",
- "publishableKey": "pk_test_51OzEfB..............."
- }
- }
- }
-}
-```
-
-#### Rendering the Stripe Elements on the summary page
-
-The `preOrderPaymentData` from the previous example is used to render Stripe Elements on the summary page:
-
-```JAVASCRIPT
-async setupStripe() {
- const paymentElementOptions = {
- layout: 'accordion', // Change this to your needs
- };
-
- let stripeAccountDetails = {};
-
- if (this.accountId) { // Only in Direct business model not in the Marketplace business model
- stripeAccountDetails = { stripeAccount: this.accountId }
- }
-
- const stripe = Stripe(this.publishableKey, stripeAccountDetails);
-
- const elements = stripe.elements({
- clientSecret: this.clientSecret,
- });
-
- const paymentElement = elements.create('payment', paymentElementOptions);
- paymentElement.mount('#payment-element'); // Change this to the id of the HTML element you want to render the Stripe Elements to
-
- SUBMIT_BUTTON.addEventListener('click', async () => {
- const { error } = await stripe.confirmPayment({
- elements,
- confirmParams: {
- return_url: `APPLICATION_URL/return-url?id=${idCart}`, // You need to pass the id of the cart to this request
- },
- });
- if (error) {
- // Add your error handling to this block.
- }
- });
- }
-```
-
-This sets up Stripe Elements on the summary page of your application. The customer can now select the Payment Method in Stripe Elements and submit the data. Then, the customer is redirected to the configured `return_url`, which makes another Glue API request to persist the order in the Back Office. After this, the customer should see the success page.
-
-When the customer submits the order, the payment data is sent to Stripe. Stripe may redirect them to another page, for example — PayPal, or redirect the customer to the specified `return_url`. The `return_url` must make another Glue API request to persist the order in the Back Office.
-
-#### Persisting orders in the Back Office through the return URL
-
-Because an order can be persisted in the Back Office only after a successful payment, the application needs to handle the `return_url` and make a request to the Glue API to persist the order.
-
-
- Request example
-
-```JAVASCRIPT
-app.get('/return-url', async (req, res) => {
- const paymentIntentId = req.query.payment_intent;
- const clientSecret = req.query.payment_intent_client_secret;
- const idCart = req.query.id;
-
- if (paymentIntentId) {
- try {
- const data = await fetchHandler(`GLUE_APPLICATION_URL/checkout`, {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json',
- Authorization: `Bearer ACCESS_TOKEN`
- },
- body: JSON.stringify({
- data: {
- type: 'checkout',
- attributes: {
- customer: CUSTOMER_DATA,
- idCart: idCart,
- billingAddress: BILLING_ADDRESS,
- shippingAddress: SHIPPING_ADDRESS,
- payments: [
- {
- paymentMethodName: 'Stripe',
- paymentProviderName: 'Stripe',
- },
- ],
- shipment: SHIPMENT_DATA,
- preOrderPaymentData: {
- transactionId: paymentIntentId,
- clientSecret: clientSecret,
- },
- },
- },
- }),
- });
-
- if (data) {
- res.send('
');
- }
-});
-```
-
-
-
-After this, the customer should be redirected to the success page or in case of a failure to an error page.
-
-
-{% info_block infoBox %}
-- When the customer reloads the summary page, which renders `PaymentElements`, an extra unnecessary API request is sent to initiate `preOrder Payment`. Stripe can handle these without issues. However, you can also prevent unnecessary API calls from being sent on the application side by, for example, checking if relevant data has changed.
-- When the customer leaves the summary page, the payment is created in Stripe app and Stripe. However, in the Back Office, there is a stale payment without an order.
-- To enable the customer to abort the payment process, you can implement the cancellation of payments through Glue API.
-
-{% endinfo_block %}
-
-
-
-#### Cancelling payments through Glue API
-
-The following request cancels a PaymentIntent on the Stripe side and shows a `canceled` PaymentIntent in the Stripe Dashboard. You can implement this in your application to enable the customer to cancel the payment process.
-
-
- Cancel a payment through Glue API
-
-```JAVASCRIPT
-async cancelPreOrderPayment() {
- const requestData = {
- data: {
- type: 'payment-cancellations',
- attributes: {
- payment: {
- paymentMethodName: 'stripe',
- paymentProviderName: 'stripe',
- },
- preOrderPaymentData: {
- transactionId: this.transactionId,
- },
- },
- },
- };
-
- const url = `GLUE_APPLICATION_URL/payment-cancellations`;
-
- const response = await fetch(url, {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json',
- Authorization: `Bearer ACCESS_TOKEN`,
- },
- body: JSON.stringify(requestData),
- });
-
- if (!response.ok) {
- throw new Error('Network response was not ok');
- }
-
- const responseData = await response.json();
-
- if (responseData.data.attributes.isSuccessful === true) {
- // Add your logic here when the payment cancellation was successful
- } else {
- // Add your logic here when the payment cancellation has failed
- }
- }
-```
-
-
-
-
-### Implementing Stripe checkout as a hosted payment page
-
-If you have rewritten `@CheckoutPage/views/payment/payment.twig` on the project level, do the following:
-
-1. Make sure that a 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. If you want to change the default payment provider or method names, do the following:
- 1. Make sure the names are translated in your payment step template:
-
-```twig
-{% raw %}
-{% for name, choices in data.form.paymentSelection.vars.choices %}
- ...
-
{{ name | trans }}
-{% endfor %}
-{% endraw %}
-```
-
- 2. Add translations to your glossary data import file:
-
-```csv
-...
-Stripe,Pay Online with Stripe,en_US
-```
- 3. Run the data import command for the glossary:
-
-```bash
-console data:import glossary
-```
-
-## Processing refunds
-
-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.
-
-During this period, Stripe attempts to process the request, which results in success or failure:
-* Success: the items transition to the `payment refund succeeded` state, although the payment isn't refunded at this step.
-* Failure: the items transition to the `payment refund failed` state.
-
-These states are used to track the refund status and inform the Back Office user. In a few days after an order is refunded in the Back Office, Stripe finalizes the refund, causing the item states to change accordingly. Previously successful refunds may be declined and the other way around.
-
-If a refund fails, the Back Office user can go to the Stripe Dashboard to identify the cause of the failure. After resolving the issue, the item can be refunded again.
-
-In the default OMS configuration, seven days are allocated to Stripe to complete successful payment refunds. This is reflected in the Back Office by transitioning items to the `payment refunded` state.
-
-## Retrieving and using payment details from Stripe
-
-For instructions on using payment details, like the payment reference, from Stripe, see [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)
-
-## Embed the Stripe payment page using iframe
-
-By default, the Stripe App payment flow assumes that the payment page is on another domain. When users place an order, they're redirected to the Stripe payment page. To improve the user experience, you can embed the Stripe payment page directly into your website as follows:
-
-
-1. Create or update `src/Pyz/Zed/Payment/PaymentConfig.php` with the following configuration:
-```php
-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
- }
-}
-```
-
-In this setup, the redirect URL will be added as a `url` query parameter to the URL you've specified in the `getStoreFrontPaymentPage()` method; the value of the parameter is base64-encoded.
-
-
-2. Depending on your frontend setup, create a page to render the Stripe payment page in one of the following ways:
-
-* Use the following minimal page regardless of the frontend technology used.
-* If your Storefront is based on a third-party frontend, follow the documentation of your framework to create a page to render the Stripe payment page using query parameters from the redirect URL provided in the Glue API `POST /checkout` response.
-* If your Storefront is based on Yves, follow [Create an Yves page for rendering the Stripe payment page](#create-an-yves-page-for-rendering-the-stripe-payment-page).
-
-```php
-
-
-
-
- Order payment page
-
-
-
-
-
-```
-
-
-### Create an Yves page for rendering the Stripe payment page
-
-
-1. Create a controller to render the payment page:
-
-**src/Pyz/Yves/PaymentPage/Controller/PaymentController.php**
-```php
-
-namespace Pyz\Yves\PaymentPage\Controller;
-
-use Spryker\Yves\Kernel\Controller\AbstractController;
-use Spryker\Yves\Kernel\View\View;
-use Symfony\Component\HttpFoundation\Request;
-
-class PaymentController extends AbstractController
-{
- /**
- * @return \Spryker\Yves\Kernel\View\View
- */
- public function indexAction(Request $request): View
- {
- return $this->view(
- [
- 'iframeUrl' => base64_decode($request->query->getString('url', '')),
- ],
- [],
- '@PaymentPage/views/payment.twig',
- );
- }
-}
-
-```
-
-2. Create a template for the page:
-
-**src/Pyz/Yves/PaymentPage/Theme/default/views/payment.twig**
-```twig
-{% raw %}
-{% extends template('page-layout-checkout', 'CheckoutPage') %}
-
-{% define data = {
- iframeUrl: _view.iframeUrl,
- title: 'Order Payment' | trans,
-} %}
-
-{% block content %}
-
-{% endblock %}
-{% endraw %}
-```
-
-3. Create a route for the controller:
-
-**src/Pyz/Yves/PaymentPage/Plugin/Router/EmbeddedPaymentPageRouteProviderPlugin.php**
-```php
-namespace Pyz\Yves\PaymentPage\Plugin\Router;
-
-use Spryker\Yves\Router\Plugin\RouteProvider\AbstractRouteProviderPlugin;
-use Spryker\Yves\Router\Route\RouteCollection;
-
-class EmbeddedPaymentPageRouteProviderPlugin extends AbstractRouteProviderPlugin
-{
- /**
- * @param \Symfony\Component\Routing\RouteCollection $routeCollection
- *
- * @return \Symfony\Component\Routing\RouteCollection
- */
- public function addRoutes(RouteCollection $routeCollection): RouteCollection
- {
- $route = $this->buildRoute('/payment', 'PaymentPage', 'Payment', 'indexAction');
- $routeCollection->add('payment-page', $route);
-
- return $routeCollection;
- }
-}
-```
-
-4. In `src/Pyz/Yves/Router/RouterDependencyProvider.php`, add a router plugin to `RouterDependencyProvider::getRouteProvider()`.
-
-
-## Sending additional data to Stripe
-
-Stripe accepts metadata passed using API calls. To send additional data to Stripe, the `QuoteTransfer::PAYMENT::ADDITIONAL_PAYMENT_DATA` field is used; the field is a key-value array. When sending requests using Glue API, pass the `additionalPaymentData` field in the `POST /checkout` request.
-
-```text
-POST https://api.your-site.com/checkout
-Content-Type: application/json
-Accept-Language: en-US
-Authorization: Bearer {{access_token}}
-
-{
- "data": {
- "type": "checkout",
- "attributes": {
- "customer": {
- ...
- },
- "idCart": "{{idCart}}",
- "billingAddress": {
- ...
- },
- "shippingAddress": {
- ...
- },
- "payments": [
- {
- "paymentMethodName": "Stripe",
- "paymentProviderName": "Stripe",
- "additionalPaymentData": {
- "custom-field-1": "my custom value 1",
- "custom-field-2": "my custom value 2"
- }
- }
- ],
- "shipment": {
- "idShipmentMethod": {{idMethod}}
- }
- }
- }
-}
-```
-
-The metadata sent using the field must meet the following criteria:
-
-| ATTRIBUTE | MAXIMUM VALUE |
-| - | - |
-| Key length | 40 characters |
-| Value length | 500 characters |
-| Key-value pairs | 50 pairs |
-
-When you pass metadata to Stripe, it's stored in the payment object and can be retrieved later. For example, this way you can pass an external ID to Stripe.
-
-When a `PaymentIntent` is created on the Stripe side, you can see your passed `additionalPaymentData` in the Stripe Dashboard.
diff --git a/docs/pbc/all/payment-service-provider/202410.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/202410.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/embed-the-stripe-payment-page-as-an-iframe.md
new file mode 100644
index 00000000000..0a4e54b8325
--- /dev/null
+++ b/docs/pbc/all/payment-service-provider/202410.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/embed-the-stripe-payment-page-as-an-iframe.md
@@ -0,0 +1,140 @@
+---
+title: Embed the Stripe payment page as an iframe
+description: Learn how to implement Stripe using ACP
+last_updated: Nov 8, 2024
+template: howto-guide-template
+related:
+ - title: Stripe
+ link: docs/pbc/all/payment-service-provider/page.version/base-shop/third-party-integrations/stripe/stripe.html
+ - title: Implement Stripe checkout as a hosted payment page
+ link: docs/pbc/all/payment-service-provider/page.version/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/project-prerequisites-for-implementing-Stripe-checkout-as-a-hosted-payment-page.html
+ - title: OMS configuration for Stripe
+ link: docs/pbc/all/payment-service-provider/page.version/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/oms-configuration-for-stripe.html
+ - title: Processing refunds with Stripe
+ link: docs/pbc/all/payment-service-provider/page.version/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/processing-refunds-with-stripe.html
+ - 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
+---
+
+By default, the Stripe App payment flow assumes that the payment page is on another domain. When users place an order, they're redirected to the Stripe payment page. To improve the user experience, you can embed the Stripe payment page directly into your website as follows:
+
+
+1. Create or update `src/Pyz/Zed/Payment/PaymentConfig.php` with the following configuration:
+
+```php
+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
+ }
+}
+```
+
+In this setup, the redirect URL is added as a `url` query parameter to the URL you've specified in the `getStoreFrontPaymentPage()` method; the value of the parameter is base64-encoded.
+Example: `/payment?url=base64-encoded-URL-for-iframe-src`.
+
+
+2. Depending on your frontend setup, create a page to render the Stripe payment page in one of the following ways:
+
+* Use the following minimal page, which can be set up with any frontend technology.
+* With a third-party frontend, follow the documentation of your framework to create a page to render the Stripe payment page using query parameters from the redirect URL provided in the Glue API `POST /checkout` response.
+* With Yves, follow [Create an Yves page for rendering the Stripe payment page](#create-an-yves-page-for-rendering-the-stripe-payment-page).
+
+```php
+
+
+
+
+ Order payment page
+
+
+
+
+
+```
+
+
+## Create an Yves page for rendering the Stripe payment page
+
+
+1. Create a controller to render the payment page:
+
+**src/Pyz/Yves/PaymentPage/Controller/PaymentController.php**
+```php
+
+namespace Pyz\Yves\PaymentPage\Controller;
+
+use Spryker\Yves\Kernel\Controller\AbstractController;
+use Spryker\Yves\Kernel\View\View;
+use Symfony\Component\HttpFoundation\Request;
+
+class PaymentController extends AbstractController
+{
+ /**
+ * @return \Spryker\Yves\Kernel\View\View
+ */
+ public function indexAction(Request $request): View
+ {
+ return $this->view(
+ [
+ 'iframeUrl' => base64_decode($request->query->getString('url', '')),
+ ],
+ [],
+ '@PaymentPage/views/payment.twig',
+ );
+ }
+}
+
+```
+
+2. Create a template for the page:
+
+**src/Pyz/Yves/PaymentPage/Theme/default/views/payment.twig**
+```twig
+{% raw %}
+{% extends template('page-layout-checkout', 'CheckoutPage') %}
+
+{% define data = {
+ iframeUrl: _view.iframeUrl,
+ title: 'Order Payment' | trans,
+} %}
+
+{% block content %}
+
+{% endblock %}
+{% endraw %}
+```
+
+3. Create a route for the controller:
+
+**src/Pyz/Yves/PaymentPage/Plugin/Router/EmbeddedPaymentPageRouteProviderPlugin.php**
+```php
+namespace Pyz\Yves\PaymentPage\Plugin\Router;
+
+use Spryker\Yves\Router\Plugin\RouteProvider\AbstractRouteProviderPlugin;
+use Spryker\Yves\Router\Route\RouteCollection;
+
+class EmbeddedPaymentPageRouteProviderPlugin extends AbstractRouteProviderPlugin
+{
+ /**
+ * @param \Symfony\Component\Routing\RouteCollection $routeCollection
+ *
+ * @return \Symfony\Component\Routing\RouteCollection
+ */
+ public function addRoutes(RouteCollection $routeCollection): RouteCollection
+ {
+ $route = $this->buildRoute('/payment', 'PaymentPage', 'Payment', 'indexAction');
+ $routeCollection->add('payment-page', $route);
+
+ return $routeCollection;
+ }
+}
+```
+
+4. In `src/Pyz/Yves/Router/RouterDependencyProvider.php`, add a router plugin to `RouterDependencyProvider::getRouteProvider()`.
diff --git a/docs/pbc/all/payment-service-provider/202410.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/oms-configuration-for-stripe.md b/docs/pbc/all/payment-service-provider/202410.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/oms-configuration-for-stripe.md
new file mode 100644
index 00000000000..33ab4981b5c
--- /dev/null
+++ b/docs/pbc/all/payment-service-provider/202410.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/oms-configuration-for-stripe.md
@@ -0,0 +1,94 @@
+---
+title: OMS configuration for Stripe
+description: Learn how to implement Stripe using ACP
+last_updated: Nov 8, 2024
+template: howto-guide-template
+related:
+ - title: Stripe
+ link: docs/pbc/all/payment-service-provider/page.version/base-shop/third-party-integrations/stripe/stripe.html
+ - title: Embed the Stripe payment page as an iframe
+ link: docs/pbc/all/payment-service-provider/page.version/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/embed-the-stripe-payment-page-as-an-iframe.html
+ - title: Implement Stripe checkout as a hosted payment page
+ link: docs/pbc/all/payment-service-provider/page.version/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/project-prerequisites-for-implementing-Stripe-checkout-as-a-hosted-payment-page.html
+ - title: Processing refunds with Stripe
+ link: docs/pbc/all/payment-service-provider/page.version/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/processing-refunds-with-stripe.html
+ - 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
+---
+
+
+The complete default payment OMS configuration is available at `vendor/spryker/sales-payment/config/Zed/Oms/ForeignPaymentStateMachine01.xml`.
+
+The payment flow of the default OMS involves authorizing the initial payment. The amount is temporarily blocked when the payment method permits. Then, the OMS sends requests to capture, that is, transfer of the previously blocked amount from the customer's account to the store account.
+
+The `Payment/Capture` command initiates the capture action. By default, this command is initiated when a Back Office user clicks **Ship** on the **Order Overview** page.
+
+Optionally, you can change and configure your own payment OMS based on `ForeignPaymentStateMachine01.xml` from the core package and change this behavior according to your business flow. For more information about OMS configuration, see [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).
+
+To configure your payment OMS based on `ForeignPaymentStateMachine01.xml`, copy `ForeignPaymentStateMachine01.xml` with the `Subprocess` folder to the project root `config/Zed/oms`. Then, change the file's name and the value of `
+ State machine example
+
+```xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ payment capture pending
+ capture payment
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+
+
+By default, the timeout for the payment authorization action is set to seven days. If the order is in the `payment authorization pending` state, after a day the order state is changed to `payment authorization failed`. Another day later, the order is transitioned to the `payment authorization canceled` state.
+
+To decrease or increase timeouts or change the states, update `config/Zed/oms/Subprocess/PaymentAuthorization01.xml`.
+
+For more information on the integration of ACP payment methods with OMS configuration, see [Integrate ACP payment apps with Spryker OMS configuration](/docs/dg/dev/acp/integrate-acp-payment-apps-with-spryker-oms-configuration.html).
diff --git a/docs/pbc/all/payment-service-provider/202410.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/processing-refunds-with-stripe.md b/docs/pbc/all/payment-service-provider/202410.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/processing-refunds-with-stripe.md
new file mode 100644
index 00000000000..47090a22cce
--- /dev/null
+++ b/docs/pbc/all/payment-service-provider/202410.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/processing-refunds-with-stripe.md
@@ -0,0 +1,31 @@
+---
+title: Processing refunds with Stripe
+description: Learn how to implement Stripe using ACP
+last_updated: Nov 8, 2024
+template: howto-guide-template
+related:
+ - title: Stripe
+ link: docs/pbc/all/payment-service-provider/page.version/base-shop/third-party-integrations/stripe/stripe.html
+ - title: Embed the Stripe payment page as an iframe
+ link: docs/pbc/all/payment-service-provider/page.version/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/embed-the-stripe-payment-page-as-an-iframe.html
+ - title: Implement Stripe checkout as a hosted payment page
+ link: docs/pbc/all/payment-service-provider/page.version/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/project-prerequisites-for-implementing-Stripe-checkout-as-a-hosted-payment-page.html
+ - title: OMS configuration for Stripe
+ link: docs/pbc/all/payment-service-provider/page.version/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/oms-configuration-for-stripe.html
+ - 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
+---
+
+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.
+
+During this period, Stripe attempts to process the request, which results in success or failure:
+* Success: the items transition to the `payment refund succeeded` state, although the payment isn't refunded at this step.
+* Failure: the items transition to the `payment refund failed` state.
+
+These states are used to track the refund status and inform the Back Office user. In a few days after an order is refunded in the Back Office, Stripe finalizes the refund, causing the item states to change accordingly. Previously successful refunds may be declined and the other way around.
+
+If a refund fails, the Back Office user can go to the Stripe Dashboard to identify the cause of the failure. After resolving the issue, the item can be refunded again.
+
+In the default OMS configuration, seven days are allocated to Stripe to complete successful payment refunds. This is reflected in the Back Office by transitioning items to the `payment refunded` state.
diff --git a/docs/pbc/all/payment-service-provider/202410.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/project-guidelines-for-stripe.md b/docs/pbc/all/payment-service-provider/202410.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/project-guidelines-for-stripe.md
new file mode 100644
index 00000000000..18cd01fee4f
--- /dev/null
+++ b/docs/pbc/all/payment-service-provider/202410.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/project-guidelines-for-stripe.md
@@ -0,0 +1,25 @@
+---
+title: Project guidelines for Stripe
+description: Learn how to implement Stripe using ACP
+last_updated: Nov 8, 2024
+template: howto-guide-template
+related:
+ - title: Stripe
+ link: docs/pbc/all/payment-service-provider/page.version/base-shop/third-party-integrations/stripe/stripe.html
+---
+
+This document provides comprehensive guidelines for integrating and utilizing Stripe in your projects through the Stripe App.
+
+Whether you are looking to implement Stripe for checkout in a headless application, as a hosted payment page, or using an iframe, this guide has you covered.
+
+Additionally, you will find detailed instructions on sending additional data to Stripe, retrieving and using payment details, and configuring the Order Management System (OMS).
+
+Each section is designed to help you maximize the potential of Stripe in your projects. Explore the links below to dive into the detailed guides and enhance your Stripe implementation with best practices and advanced techniques.
+
+
+- [Embed the Stripe payment page as an iframe](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/embed-the-stripe-payment-page-as-an-iframe.html)
+- [Implement Stripe checkout as a hosted payment page](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/project-prerequisites-for-implementing-Stripe-checkout-as-a-hosted-payment-page.html)
+- [OMS configuration for Stripe](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/oms-configuration-for-stripe.html)
+- [Processing refunds with Stripe](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/processing-refunds-with-stripe.html)
+- [Sending additional data to Stripe](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/sending-additional-data-to-stripe.html)
+- [Stripe checkout with third-party frontends](/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/202410.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/202410.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/project-prerequisites-for-implementing-Stripe-checkout-as-a-hosted-payment-page.md
new file mode 100644
index 00000000000..f92c5cd8872
--- /dev/null
+++ b/docs/pbc/all/payment-service-provider/202410.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/project-prerequisites-for-implementing-Stripe-checkout-as-a-hosted-payment-page.md
@@ -0,0 +1,61 @@
+---
+title: Project prerequisites for implementing Stripe checkout as a hosted payment page
+description: Learn how to implement Stripe using ACP
+last_updated: Nov 8, 2024
+template: howto-guide-template
+related:
+ - title: Stripe
+ link: docs/pbc/all/payment-service-provider/page.version/base-shop/third-party-integrations/stripe/stripe.html
+ - title: Embed the Stripe payment page as an iframe
+ link: docs/pbc/all/payment-service-provider/page.version/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/embed-the-stripe-payment-page-as-an-iframe.html
+ - title: OMS configuration for Stripe
+ link: docs/pbc/all/payment-service-provider/page.version/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/oms-configuration-for-stripe.html
+ - title: Processing refunds with Stripe
+ link: docs/pbc/all/payment-service-provider/page.version/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/processing-refunds-with-stripe.html
+ - 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
+---
+
+If your shop is live or `@CheckoutPage/views/payment/payment.twig` is overwritten on the project level, follow the steps to prepare your project to implement Stripe checkout as a hosted payment page:
+
+1. Make sure that a 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. If you want to change the default payment provider or method names, do the following:
+ 1. Make sure the names are translated in your payment step template:
+
+ ```twig
+ {% raw %}
+ {% for name, choices in data.form.paymentSelection.vars.choices %}
+ ...
+
{{ name | trans }}
+ {% endfor %}
+ {% endraw %}
+ ```
+
+ 2. Add translations to your glossary data import file:
+
+ ```
+ Stripe,Pay Online with Stripe,en_US
+ ```
+
+ 3. Run the data import command for the glossary:
+
+ ```bash
+ console data:import glossary
+ ```
diff --git a/docs/pbc/all/payment-service-provider/202410.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/sending-additional-data-to-stripe.md b/docs/pbc/all/payment-service-provider/202410.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/sending-additional-data-to-stripe.md
new file mode 100644
index 00000000000..1a2c1f9b4de
--- /dev/null
+++ b/docs/pbc/all/payment-service-provider/202410.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/sending-additional-data-to-stripe.md
@@ -0,0 +1,71 @@
+---
+title: Sending additional data to Stripe
+description: Learn how to implement Stripe using ACP
+last_updated: Nov 8, 2024
+template: howto-guide-template
+related:
+ - title: Stripe
+ link: docs/pbc/all/payment-service-provider/page.version/base-shop/third-party-integrations/stripe/stripe.html
+ - title: Embed the Stripe payment page as an iframe
+ link: docs/pbc/all/payment-service-provider/page.version/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/embed-the-stripe-payment-page-as-an-iframe.html
+ - title: Implement Stripe checkout as a hosted payment page
+ link: docs/pbc/all/payment-service-provider/page.version/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/project-prerequisites-for-implementing-Stripe-checkout-as-a-hosted-payment-page.html
+ - title: OMS configuration for Stripe
+ link: docs/pbc/all/payment-service-provider/page.version/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/oms-configuration-for-stripe.html
+ - title: Processing refunds with Stripe
+ link: docs/pbc/all/payment-service-provider/page.version/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/processing-refunds-with-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
+---
+
+Stripe accepts metadata passed using API calls. To send additional data to Stripe, the `QuoteTransfer::PAYMENT::ADDITIONAL_PAYMENT_DATA` field is used; the field is a key-value array. When sending requests using Glue API, pass the `additionalPaymentData` field in the `POST /checkout` request.
+
+```text
+POST https://api.your-site.com/checkout
+Content-Type: application/json
+Accept-Language: en-US
+Authorization: Bearer {{access_token}}
+
+{
+ "data": {
+ "type": "checkout",
+ "attributes": {
+ "customer": {
+ ...
+ },
+ "idCart": "{{idCart}}",
+ "billingAddress": {
+ ...
+ },
+ "shippingAddress": {
+ ...
+ },
+ "payments": [
+ {
+ "paymentMethodName": "Stripe",
+ "paymentProviderName": "Stripe",
+ "additionalPaymentData": {
+ "custom-field-1": "my custom value 1",
+ "custom-field-2": "my custom value 2"
+ }
+ }
+ ],
+ "shipment": {
+ "idShipmentMethod": {{idMethod}}
+ }
+ }
+ }
+}
+```
+
+The metadata sent using the field must meet the following criteria:
+
+| ATTRIBUTE | MAXIMUM VALUE |
+| - | - |
+| Key length | 40 characters |
+| Value length | 500 characters |
+| Key-value pairs | 50 pairs |
+
+When you pass metadata to Stripe, it's stored in the payment object and can be retrieved later. For example, this way you can pass an external ID to Stripe.
+
+When a `PaymentIntent` is created on the Stripe side, you can see your passed `additionalPaymentData` in the Stripe Dashboard.
diff --git a/docs/pbc/all/payment-service-provider/202410.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/202410.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/stripe-checkout-with-third-party-frontends.md
new file mode 100644
index 00000000000..33641a321c6
--- /dev/null
+++ b/docs/pbc/all/payment-service-provider/202410.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/stripe-checkout-with-third-party-frontends.md
@@ -0,0 +1,298 @@
+---
+title: Stripe checkout with third-party frontends
+description: Learn how to implement Stripe using ACP
+last_updated: Nov 8, 2024
+template: howto-guide-template
+related:
+ - title: Stripe
+ link: docs/pbc/all/payment-service-provider/page.version/base-shop/third-party-integrations/stripe/stripe.html
+ - title: Embed the Stripe payment page as an iframe
+ link: docs/pbc/all/payment-service-provider/page.version/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/embed-the-stripe-payment-page-as-an-iframe.html
+ - title: Implement Stripe checkout as a hosted payment page
+ link: docs/pbc/all/payment-service-provider/page.version/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/project-prerequisites-for-implementing-Stripe-checkout-as-a-hosted-payment-page.html
+ - title: OMS configuration for Stripe
+ link: docs/pbc/all/payment-service-provider/page.version/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/oms-configuration-for-stripe.html
+ - title: Processing refunds with Stripe
+ link: docs/pbc/all/payment-service-provider/page.version/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/processing-refunds-with-stripe.html
+ - 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
+---
+
+This document describes the approaches to implementing Stripe checkout with third-party frontends.
+
+## Install modules
+
+Install or upgrade the modules to the specified or later versions:
+- `spryker/kernel-app:1.2.0`
+- `spryker/payment:5.24.0`
+- `spryker/payments-rest-api:1.3.0`
+
+## Pre-order payment flow
+
+When Stripe is integrated into a headless application, orders are processed using a pre-order payment flow:
+
+1. The customer either selects Stripe as the payment method or [Stripe Elements](https://docs.stripe.com/payments/elements) is loaded by default.
+2. The `InitializePreOrderPayment` Glue API endpoint (`glue.mysprykershop.com/payments`) is called with the following parameters:
+ * Payment provider name: Stripe
+ * Payment method name: Stripe
+ * Payment amount
+ * Quote data
+3. Back Office sends the quote data and the payment amount to Stripe app through an API.
+4. The payment with the given data is persisted in the Stripe app.
+5. Stripe app requests `ClientSecret` and `PublishableKey` keys from Stripe through an API.
+6. Stripe returns a JSON response with the following parameters:
+ * TransactionId
+ * ClientSecret
+ * PublishableKey
+ * Only for marketplaces: AccountId
+7. Stripe Elements is rendered on the order summary page. See [Rendering the Stripe Elements on the summary page](#rendering-the-stripe-elements-on-the-summary-page) for rendering Stripe Elements.
+8. The customer selects a payment method in Stripe Elements and submits the data.
+9. The customer is redirected to the configured `return_url`, which makes an API request to persist the order in the Back Office: `glue.mysprykershop.com/checkout`.
+10. The customer is redirected to the application's success page.
+11. Stripe app confirms the pre-order payment using the plugin: `\Spryker\Zed\Payment\Communication\Plugin\Checkout\PaymentConfirmPreOrderPaymentCheckoutPostSavePlugin`.
+ The `order_reference` is passed to the Stripe app to be connected with `transaction_id`.
+12. Stripe app processes the payment and sends a `PaymentUpdated` message to Spryker.
+13. Depending on payment status, one of the following messages is returned through an asynchronous API:
+ * Payment is successful: `PaymentAuthorized` message.
+ * Payment is failed: `PaymentAuthorizationFailed` message.
+14. Further on, the order is processed through the OMS.
+
+All payment related messages mentioned above are handled by `\Spryker\Zed\Payment\Communication\Plugin\MessageBroker\PaymentOperationsMessageHandlerPlugin`, which is registered in `MessageBrokerDependencyProvider`.
+
+
+## Example of the headless checkout with Stripe
+
+The Payment selection in this example will be used on the Summary page. The following examples show how to implement the Stripe Payment App in a headless application.
+
+Before the customer is redirected to the summary page, all required data is collected: customer data, addresses, and selected shipment method. When the customer goes to the summary page, to get the data required for rendering the Stripe Elements, the application needs to call the `InitializePreOrderPayment` Glue API endpoint.
+
+### Pre-order payment initialization
+
+```JS
+
+async initializePreOrderPayment() {
+ const requestData = {
+ data: {
+ type: 'payments',
+ attributes: {
+ quote: QUOTE_DATA,
+ payment: {
+ amount: GRAND_TOTAL, // You will get it through the `/checkout-data?include=carts` endpoint
+ paymentMethodName: 'stripe', // taken from /checkout-data?include=payment-methods
+ paymentProviderName: 'stripe', // taken from /checkout-data?include=payment-methods
+ },
+ preOrderPaymentData: {
+ "transactionId": this.transactionId, // This is empty in the first request but has to be used in further requests
+ },
+ },
+ },
+ };
+
+ const responseData = await this.fetchHandler(`GLUE_APPLICATION_URL/payments`, {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ Authorization: `Bearer ACCESS_TOKEN`,
+ },
+ body: JSON.stringify(requestData),
+ });
+
+ const paymentProviderData =
+ responseData.data.attributes.preOrderPaymentData;
+
+ this.transactionId = paymentProviderData.transactionId;
+ this.accountId = paymentProviderData.accountId; // only be used on the Direct business model. When using a Marketplace business model this will not be present.
+
+ await this.setupStripe();
+ }
+
+```
+
+To identify the customer when initiating a request using Glue API, use the `Authorization` header for a logged-in customer and `X-Anonymous-Customer-Unique-Id` for a guest user.
+
+After a `PaymentIntent` is created using the Stripe API, a payment is created in the Stripe app. The response looks as follows:
+
+```JSON
+{
+ "data": {
+ "type": "payments",
+ "attributes": {
+ "isSuccessful": true,
+ "error": null,
+ "preOrderPaymentData": {
+ "transactionId": "pi_3Q3............",
+ "clientSecret": "pi_3Q3............_secret_R3WC2........",
+ "publishableKey": "pk_test_51OzEfB..............."
+ }
+ }
+ }
+}
+```
+
+### Rendering the Stripe Elements on the summary page
+
+The `preOrderPaymentData` from the previous example is used to render Stripe Elements on the summary page:
+
+```JAVASCRIPT
+async setupStripe() {
+ const paymentElementOptions = {
+ layout: 'accordion', // Change this to your needs
+ };
+
+ let stripeAccountDetails = {};
+
+ if (this.accountId) { // Only in Direct business model not in the Marketplace business model
+ stripeAccountDetails = { stripeAccount: this.accountId }
+ }
+
+ const stripe = Stripe(this.publishableKey, stripeAccountDetails);
+
+ const elements = stripe.elements({
+ clientSecret: this.clientSecret,
+ });
+
+ const paymentElement = elements.create('payment', paymentElementOptions);
+ paymentElement.mount('#payment-element'); // Change this to the id of the HTML element you want to render the Stripe Elements to
+
+ SUBMIT_BUTTON.addEventListener('click', async () => {
+ const { error } = await stripe.confirmPayment({
+ elements,
+ confirmParams: {
+ return_url: `APPLICATION_URL/return-url?id=${idCart}`, // You need to pass the id of the cart to this request
+ },
+ });
+ if (error) {
+ // Add your error handling to this block.
+ }
+ });
+ }
+```
+
+This sets up Stripe Elements on the summary page of your application. The customer can now select the Payment Method in Stripe Elements and submit the data. Then, the customer is redirected to the configured `return_url`, which makes another Glue API request to persist the order in the Back Office. After this, the customer should see the success page.
+
+When the customer submits the order, the payment data is sent to Stripe. Stripe may redirect them to another page, for example — PayPal, or redirect the customer to the specified `return_url`. The `return_url` must make another Glue API request to persist the order in the Back Office.
+
+### Persisting orders in the Back Office through the return URL
+
+Because an order can be persisted in the Back Office only after a successful payment, the application needs to handle the `return_url` and make a request to the Glue API to persist the order.
+
+
+ Request example
+
+```JAVASCRIPT
+app.get('/return-url', async (req, res) => {
+ const paymentIntentId = req.query.payment_intent;
+ const clientSecret = req.query.payment_intent_client_secret;
+ const idCart = req.query.id;
+
+ if (paymentIntentId) {
+ try {
+ const data = await fetchHandler(`GLUE_APPLICATION_URL/checkout`, {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ Authorization: `Bearer ACCESS_TOKEN`
+ },
+ body: JSON.stringify({
+ data: {
+ type: 'checkout',
+ attributes: {
+ customer: CUSTOMER_DATA,
+ idCart: idCart,
+ billingAddress: BILLING_ADDRESS,
+ shippingAddress: SHIPPING_ADDRESS,
+ payments: [
+ {
+ paymentMethodName: 'Stripe',
+ paymentProviderName: 'Stripe',
+ },
+ ],
+ shipment: SHIPMENT_DATA,
+ preOrderPaymentData: {
+ transactionId: paymentIntentId,
+ clientSecret: clientSecret,
+ },
+ },
+ },
+ }),
+ });
+
+ if (data) {
+ res.send('
');
+ }
+});
+```
+
+
+
+After this, the customer should be redirected to the success page or in case of a failure to an error page.
+
+
+{% info_block infoBox %}
+- When the customer reloads the summary page, which renders `PaymentElements`, an extra unnecessary API request is sent to initiate `preOrder Payment`. Stripe can handle these without issues. However, you can also prevent unnecessary API calls from being sent on the application side by, for example, checking if relevant data has changed.
+- When the customer leaves the summary page, the payment is created in Stripe app and Stripe. However, in the Back Office, there is a stale payment without an order.
+- To enable the customer to abort the payment process, you can implement the cancellation of payments through Glue API.
+
+{% endinfo_block %}
+
+
+
+### Cancelling payments through Glue API
+
+The following request cancels a PaymentIntent on the Stripe side and shows a `canceled` PaymentIntent in the Stripe Dashboard. You can implement this in your application to enable the customer to cancel the payment process.
+
+
+ Cancel a payment through Glue API
+
+```JAVASCRIPT
+async cancelPreOrderPayment() {
+ const requestData = {
+ data: {
+ type: 'payment-cancellations',
+ attributes: {
+ payment: {
+ paymentMethodName: 'stripe',
+ paymentProviderName: 'stripe',
+ },
+ preOrderPaymentData: {
+ transactionId: this.transactionId,
+ },
+ },
+ },
+ };
+
+ const url = `GLUE_APPLICATION_URL/payment-cancellations`;
+
+ const response = await fetch(url, {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ Authorization: `Bearer ACCESS_TOKEN`,
+ },
+ body: JSON.stringify(requestData),
+ });
+
+ if (!response.ok) {
+ throw new Error('Network response was not ok');
+ }
+
+ const responseData = await response.json();
+
+ if (responseData.data.attributes.isSuccessful === true) {
+ // Add your logic here when the payment cancellation was successful
+ } else {
+ // Add your logic here when the payment cancellation has failed
+ }
+ }
+```
+
+
diff --git a/docs/pbc/all/payment-service-provider/202410.0/marketplace/stripe-third-party-integration/stripe-oms-configuration-in-marketplaces.md b/docs/pbc/all/payment-service-provider/202410.0/marketplace/stripe-third-party-integration/stripe-oms-configuration-in-marketplaces.md
index 2f71b5d1ff2..a48814a3cec 100644
--- a/docs/pbc/all/payment-service-provider/202410.0/marketplace/stripe-third-party-integration/stripe-oms-configuration-in-marketplaces.md
+++ b/docs/pbc/all/payment-service-provider/202410.0/marketplace/stripe-third-party-integration/stripe-oms-configuration-in-marketplaces.md
@@ -13,7 +13,7 @@ The complete default payment OMS configuration is available in `vendor/spryker/s
The payment flow of the default OMS involves authorizing the initial payment, which means that the amount is emporarily blocked when the payment method permits. Then, the OMS sends requests to capture, that is, transfer of the previously blocked amount from the customer's account to the store account.
-For more information about the ForeignPayment OMS configuration, see [Project guidelines for Stripe](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe.html)
+For more information about the ForeignPayment OMS configuration, see [Project guidelines for Stripe](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/project-guidelines-for-stripe.html)
In addition to the base shop implementation, the Stripe App in Marketplaces requires the following OMS configuration:
diff --git a/docs/pbc/all/pbc.md b/docs/pbc/all/pbc.md
index 20527b48a07..263d5149a32 100644
--- a/docs/pbc/all/pbc.md
+++ b/docs/pbc/all/pbc.md
@@ -36,7 +36,7 @@ This section is in beta because not all the PBCs are covered. Marketplace functi
| [Identity Access Management (IAM)](/docs/pbc/all/identity-access-management/{{site.version}}/identity-access-management.html) | Enables the creation of new accounts for end customers and B2B customers. It also allows users to define password settings and utilize multi-login blockers for security purposes. Moreover, a third-party access management function is integrated. | Allows for quick and easy authorization and authentication of customers |
| [Merchant Management](/docs/pbc/all/merchant-management/{{site.version}}/merchant-management.html) | For efficient Merchant Management, two parts are important. One, the overview and management on the Operator side, like approvals, edits, etc. And two, the self-service management of the Merchants, where they can take care of their daily business, like order or product management. | Gives you an overview of all your Merchants' activities. |
| Miscellaneous | This category holds the documents that are not related to any PBC. | |
-| [Offer Management](/docs/pbc/all/offer-management/{{site.version}}/offer-management.html) | Lets your Merchants create Offers on existing products in your Marketplace. By doing so, duplicates in the product catalog can be avoided and the management of Merchants, Products, and Offers becomes much more convenient. | Saves time due to a good overview of Merchant’s Offers. |
+| [Offer Management](/docs/pbc/all/offer-management/{{site.version}}/offer-management.html) | Lets your Merchants create Offers on existing products in your Marketplace. By doing so, duplicates in the product catalog can be avoided and the management of Merchants, Products, and Offers becomes much more convenient. | Saves time because of a good overview of Merchant’s Offers. |
| [Order Management System (OMS)](/docs/pbc/all/order-management-system/{{site.version}}/order-management-system.html) | Helps you keep track of your order processing from your B2B, B2C, or Marketplace, and ensure quick fulfillment. You can manage incoming orders in the Back Office, view and edit orders, track their progress, or contact customers who make open orders directly. With the compact Order Management features, you can keep your order processing running smoothly. | Lets you pProcess orders smoothly to fulfill them quickly. |
| [Payment Service Provider (PSP)](/docs/pbc/all/payment-service-provider/{{site.version}}/payment-service-provider.html) | Provides integration of payment methods. You can integrate multiple payment gateways, define their availability, and customize how they appear on your site. | Lets you provide an excellent shopping experience and integrate your customers’ preferred payment methods. |
| [Price Management](/docs/pbc/all/price-management/{{site.version}}/price-management.html) | The Spryker Cloud Commerce OS supports multiple currencies and automatically detects the payment currency based on a customer’s preference. You can manage gross and net prices per product and per country. You can also offer volume discounts to encourage customers to purchase products in larger quantities. | Saves you time by letting you implement your pricing strategy in one place and catering it to your business needs. |
diff --git a/docs/pbc/all/price-management/202311.0/base-shop/tutorials-and-howtos/handle-twenty-five-million-prices-in-spryker-commerce-os.md b/docs/pbc/all/price-management/202311.0/base-shop/tutorials-and-howtos/handle-twenty-five-million-prices-in-spryker-commerce-os.md
index aea47f377c3..4302756a2dd 100644
--- a/docs/pbc/all/price-management/202311.0/base-shop/tutorials-and-howtos/handle-twenty-five-million-prices-in-spryker-commerce-os.md
+++ b/docs/pbc/all/price-management/202311.0/base-shop/tutorials-and-howtos/handle-twenty-five-million-prices-in-spryker-commerce-os.md
@@ -181,11 +181,11 @@ 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. Due to ES limitations, you can't build proper queries to run sorting by prices. Only facet filtering is possible.
+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. Due to a large number of prices, the publish process became slow. This causes the following issues.
+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
diff --git a/docs/pbc/all/price-management/202404.0/base-shop/tutorials-and-howtos/handle-twenty-five-million-prices-in-spryker-commerce-os.md b/docs/pbc/all/price-management/202404.0/base-shop/tutorials-and-howtos/handle-twenty-five-million-prices-in-spryker-commerce-os.md
index aea47f377c3..4302756a2dd 100644
--- a/docs/pbc/all/price-management/202404.0/base-shop/tutorials-and-howtos/handle-twenty-five-million-prices-in-spryker-commerce-os.md
+++ b/docs/pbc/all/price-management/202404.0/base-shop/tutorials-and-howtos/handle-twenty-five-million-prices-in-spryker-commerce-os.md
@@ -181,11 +181,11 @@ 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. Due to ES limitations, you can't build proper queries to run sorting by prices. Only facet filtering is possible.
+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. Due to a large number of prices, the publish process became slow. This causes the following issues.
+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
diff --git a/docs/pbc/all/price-management/202410.0/base-shop/tutorials-and-howtos/handle-twenty-five-million-prices-in-spryker-commerce-os.md b/docs/pbc/all/price-management/202410.0/base-shop/tutorials-and-howtos/handle-twenty-five-million-prices-in-spryker-commerce-os.md
index aea47f377c3..4302756a2dd 100644
--- a/docs/pbc/all/price-management/202410.0/base-shop/tutorials-and-howtos/handle-twenty-five-million-prices-in-spryker-commerce-os.md
+++ b/docs/pbc/all/price-management/202410.0/base-shop/tutorials-and-howtos/handle-twenty-five-million-prices-in-spryker-commerce-os.md
@@ -181,11 +181,11 @@ 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. Due to ES limitations, you can't build proper queries to run sorting by prices. Only facet filtering is possible.
+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. Due to a large number of prices, the publish process became slow. This causes the following issues.
+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
diff --git a/docs/pbc/all/product-information-management/202311.0/base-shop/feature-overviews/packaging-units-feature-overview.md b/docs/pbc/all/product-information-management/202311.0/base-shop/feature-overviews/packaging-units-feature-overview.md
index ace31d8c8ef..9a47bdb28f2 100644
--- a/docs/pbc/all/product-information-management/202311.0/base-shop/feature-overviews/packaging-units-feature-overview.md
+++ b/docs/pbc/all/product-information-management/202311.0/base-shop/feature-overviews/packaging-units-feature-overview.md
@@ -95,7 +95,7 @@ For example, a packaging unit "bag" can be set to have "item" as a base unit and
{% 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 (due to amount restriction settings), a higher or lower amount must be selected.
+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" %}
diff --git a/docs/pbc/all/product-information-management/202311.0/base-shop/import-and-export-data/import-product-data-with-a-single-file.md b/docs/pbc/all/product-information-management/202311.0/base-shop/import-and-export-data/import-product-data-with-a-single-file.md
index 170356e41e4..61112537e3e 100644
--- a/docs/pbc/all/product-information-management/202311.0/base-shop/import-and-export-data/import-product-data-with-a-single-file.md
+++ b/docs/pbc/all/product-information-management/202311.0/base-shop/import-and-export-data/import-product-data-with-a-single-file.md
@@ -41,7 +41,7 @@ The headers in this file are prefixed with the names of the individual product-r
The only exceptions are `abstract_sku` and `concrete_sku` headers that are not prefixed.
-Thus, the CSV file for the main product data import is a combination of data from separate product-related CSV files (except for a [few fields specific for just this file](#specific-fields)). Due to this, when importing corresponding data, the same [dependencies and mandatory fields](#mandatory-fields) as for the separate files, apply to the combined product data import file. For example, if you want to import product image data via the combined product data file (headers *productimage.imageset_name*, *productimage.externalurl_large*, etc.), you should mind the dependencies and mandatory fields as for [product_image.csv](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/products-data-import/import-file-details-product-image.csv.html).
+Thus, the CSV file for the main product data import is a combination of data from separate product-related CSV files (except for a [few fields specific for just this file](#specific-fields)). Because of this, when importing corresponding data, the same [dependencies and mandatory fields](#mandatory-fields) as for the separate files, apply to the combined product data import file. For example, if you want to import product image data via the combined product data file (headers *productimage.imageset_name*, *productimage.externalurl_large*, etc.), you should mind the dependencies and mandatory fields as for [product_image.csv](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/products-data-import/import-file-details-product-image.csv.html).
By default, the import CSV file resides in data/import/common/{STORE}/. As, for example, the [combined_product_DE.csv](https://github.com/spryker-shop/suite/blob/master/data/import/common/DE/combined_product.csv) file in Spryker Master Suite.
diff --git a/docs/pbc/all/product-information-management/202311.0/base-shop/install-and-upgrade/decimal-stock-migration-concept.md b/docs/pbc/all/product-information-management/202311.0/base-shop/install-and-upgrade/decimal-stock-migration-concept.md
index 8fff361d80a..358a14fa4f2 100644
--- a/docs/pbc/all/product-information-management/202311.0/base-shop/install-and-upgrade/decimal-stock-migration-concept.md
+++ b/docs/pbc/all/product-information-management/202311.0/base-shop/install-and-upgrade/decimal-stock-migration-concept.md
@@ -59,7 +59,7 @@ console transfer:generate
{% info_block errorBox %}
-Care should be taken on the project level code to handle the availability and stock values as decimal objects. Due to the PHP floating-point precision issues, all decimal numbers in Spryker are wrapped in `decimal-object` that handles the calculations performed on them to allow exact precision. For more information about the`decimal-object` library, see [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).
+Care should be taken on the project level code to handle the availability and stock values as decimal objects. Because of the PHP floating-point precision issues, all decimal numbers in Spryker are wrapped in `decimal-object` that handles the calculations performed on them to allow exact precision. For more information about the`decimal-object` library, see [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).
{% endinfo_block %}
diff --git a/docs/pbc/all/product-information-management/202311.0/base-shop/install-and-upgrade/float-stock-for-products-migration-concept.md b/docs/pbc/all/product-information-management/202311.0/base-shop/install-and-upgrade/float-stock-for-products-migration-concept.md
index e2ae67644a3..5f25359e549 100644
--- a/docs/pbc/all/product-information-management/202311.0/base-shop/install-and-upgrade/float-stock-for-products-migration-concept.md
+++ b/docs/pbc/all/product-information-management/202311.0/base-shop/install-and-upgrade/float-stock-for-products-migration-concept.md
@@ -38,7 +38,7 @@ related:
We have changed the type of stock and quantity fields from int to float. With this change, we allow to manage fractions of items in the system.
-As stock and quantity are very basic concepts of any commerce system, changing their type is a horizontal barrier for the modules. This means that, if a module is upgraded to a version that uses float stock, all the other modules in the project which are involved in the float stock barrier must be upgraded to avoid accidental type incompatibilities. For example, if ModuleX uses float stock and ModuleY uses int stock and there is no hard dependency between them, it’s technically possible to upgrade only one of them, however, during runtime, both modules may happen to process the same request data and, as a result, the response will either be calculated incorrectly or a fatal error will be thrown due to a data type mismatch.
+As stock and quantity are very basic concepts of any commerce system, changing their type is a horizontal barrier for the modules. This means that, if a module is upgraded to a version that uses float stock, all the other modules in the project which are involved in the float stock barrier must be upgraded to avoid accidental type incompatibilities. For example, if ModuleX uses float stock and ModuleY uses int stock and there is no hard dependency between them, it’s technically possible to upgrade only one of them, however, during runtime, both modules may happen to process the same request data and, as a result, the response will either be calculated incorrectly or a fatal error will be thrown because of a data type mismatch.
In case of upgrading one of the modules involved into the float stock concept, we strongly recommend upgrading all the modules in your project from the list below. Mostly, the migrations have very low or even zero effort, because they only break type of a transfer object or an internal function’s signature. Some modules changed database field types to DOUBLE which is automatically upgradable by running the necessary console commands.
diff --git a/docs/pbc/all/product-information-management/202311.0/base-shop/manage-using-glue-api/glue-api-retrieve-alternative-products.md b/docs/pbc/all/product-information-management/202311.0/base-shop/manage-using-glue-api/glue-api-retrieve-alternative-products.md
index fa22275ef8e..d1bf9212447 100644
--- a/docs/pbc/all/product-information-management/202311.0/base-shop/manage-using-glue-api/glue-api-retrieve-alternative-products.md
+++ b/docs/pbc/all/product-information-management/202311.0/base-shop/manage-using-glue-api/glue-api-retrieve-alternative-products.md
@@ -25,7 +25,7 @@ The Product Alternatives API provides access to alternative products via REST AP
In your development, the endpoints help to:
-* Provide alternatives for a product that runs out or unavailable, for example, due to local restrictions.
+* 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.
diff --git a/docs/pbc/all/product-information-management/202404.0/base-shop/feature-overviews/packaging-units-feature-overview.md b/docs/pbc/all/product-information-management/202404.0/base-shop/feature-overviews/packaging-units-feature-overview.md
index 5864d22a844..95f0ee39b15 100644
--- a/docs/pbc/all/product-information-management/202404.0/base-shop/feature-overviews/packaging-units-feature-overview.md
+++ b/docs/pbc/all/product-information-management/202404.0/base-shop/feature-overviews/packaging-units-feature-overview.md
@@ -95,7 +95,7 @@ For example, a packaging unit "bag" can be set to have "item" as a base unit and
{% 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 (due to amount restriction settings), a higher or lower amount must be selected.
+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" %}
diff --git a/docs/pbc/all/product-information-management/202404.0/base-shop/import-and-export-data/import-product-data-with-a-single-file.md b/docs/pbc/all/product-information-management/202404.0/base-shop/import-and-export-data/import-product-data-with-a-single-file.md
index 170356e41e4..61112537e3e 100644
--- a/docs/pbc/all/product-information-management/202404.0/base-shop/import-and-export-data/import-product-data-with-a-single-file.md
+++ b/docs/pbc/all/product-information-management/202404.0/base-shop/import-and-export-data/import-product-data-with-a-single-file.md
@@ -41,7 +41,7 @@ The headers in this file are prefixed with the names of the individual product-r
The only exceptions are `abstract_sku` and `concrete_sku` headers that are not prefixed.
-Thus, the CSV file for the main product data import is a combination of data from separate product-related CSV files (except for a [few fields specific for just this file](#specific-fields)). Due to this, when importing corresponding data, the same [dependencies and mandatory fields](#mandatory-fields) as for the separate files, apply to the combined product data import file. For example, if you want to import product image data via the combined product data file (headers *productimage.imageset_name*, *productimage.externalurl_large*, etc.), you should mind the dependencies and mandatory fields as for [product_image.csv](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/products-data-import/import-file-details-product-image.csv.html).
+Thus, the CSV file for the main product data import is a combination of data from separate product-related CSV files (except for a [few fields specific for just this file](#specific-fields)). Because of this, when importing corresponding data, the same [dependencies and mandatory fields](#mandatory-fields) as for the separate files, apply to the combined product data import file. For example, if you want to import product image data via the combined product data file (headers *productimage.imageset_name*, *productimage.externalurl_large*, etc.), you should mind the dependencies and mandatory fields as for [product_image.csv](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/products-data-import/import-file-details-product-image.csv.html).
By default, the import CSV file resides in data/import/common/{STORE}/. As, for example, the [combined_product_DE.csv](https://github.com/spryker-shop/suite/blob/master/data/import/common/DE/combined_product.csv) file in Spryker Master Suite.
diff --git a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/decimal-stock-migration-concept.md b/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/decimal-stock-migration-concept.md
index 8fff361d80a..358a14fa4f2 100644
--- a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/decimal-stock-migration-concept.md
+++ b/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/decimal-stock-migration-concept.md
@@ -59,7 +59,7 @@ console transfer:generate
{% info_block errorBox %}
-Care should be taken on the project level code to handle the availability and stock values as decimal objects. Due to the PHP floating-point precision issues, all decimal numbers in Spryker are wrapped in `decimal-object` that handles the calculations performed on them to allow exact precision. For more information about the`decimal-object` library, see [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).
+Care should be taken on the project level code to handle the availability and stock values as decimal objects. Because of the PHP floating-point precision issues, all decimal numbers in Spryker are wrapped in `decimal-object` that handles the calculations performed on them to allow exact precision. For more information about the`decimal-object` library, see [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).
{% endinfo_block %}
diff --git a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/float-stock-for-products-migration-concept.md b/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/float-stock-for-products-migration-concept.md
index e2ae67644a3..5f25359e549 100644
--- a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/float-stock-for-products-migration-concept.md
+++ b/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/float-stock-for-products-migration-concept.md
@@ -38,7 +38,7 @@ related:
We have changed the type of stock and quantity fields from int to float. With this change, we allow to manage fractions of items in the system.
-As stock and quantity are very basic concepts of any commerce system, changing their type is a horizontal barrier for the modules. This means that, if a module is upgraded to a version that uses float stock, all the other modules in the project which are involved in the float stock barrier must be upgraded to avoid accidental type incompatibilities. For example, if ModuleX uses float stock and ModuleY uses int stock and there is no hard dependency between them, it’s technically possible to upgrade only one of them, however, during runtime, both modules may happen to process the same request data and, as a result, the response will either be calculated incorrectly or a fatal error will be thrown due to a data type mismatch.
+As stock and quantity are very basic concepts of any commerce system, changing their type is a horizontal barrier for the modules. This means that, if a module is upgraded to a version that uses float stock, all the other modules in the project which are involved in the float stock barrier must be upgraded to avoid accidental type incompatibilities. For example, if ModuleX uses float stock and ModuleY uses int stock and there is no hard dependency between them, it’s technically possible to upgrade only one of them, however, during runtime, both modules may happen to process the same request data and, as a result, the response will either be calculated incorrectly or a fatal error will be thrown because of a data type mismatch.
In case of upgrading one of the modules involved into the float stock concept, we strongly recommend upgrading all the modules in your project from the list below. Mostly, the migrations have very low or even zero effort, because they only break type of a transfer object or an internal function’s signature. Some modules changed database field types to DOUBLE which is automatically upgradable by running the necessary console commands.
diff --git a/docs/pbc/all/product-information-management/202404.0/base-shop/manage-using-glue-api/glue-api-retrieve-alternative-products.md b/docs/pbc/all/product-information-management/202404.0/base-shop/manage-using-glue-api/glue-api-retrieve-alternative-products.md
index 1e5b90749d0..a1bee25218f 100644
--- a/docs/pbc/all/product-information-management/202404.0/base-shop/manage-using-glue-api/glue-api-retrieve-alternative-products.md
+++ b/docs/pbc/all/product-information-management/202404.0/base-shop/manage-using-glue-api/glue-api-retrieve-alternative-products.md
@@ -25,7 +25,7 @@ The Product Alternatives API provides access to alternative products via REST AP
In your development, the endpoints help to:
-* Provide alternatives for a product that runs out or unavailable, for example, due to local restrictions.
+* 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.
diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/feature-overviews/packaging-units-feature-overview.md b/docs/pbc/all/product-information-management/202410.0/base-shop/feature-overviews/packaging-units-feature-overview.md
index 5864d22a844..95f0ee39b15 100644
--- a/docs/pbc/all/product-information-management/202410.0/base-shop/feature-overviews/packaging-units-feature-overview.md
+++ b/docs/pbc/all/product-information-management/202410.0/base-shop/feature-overviews/packaging-units-feature-overview.md
@@ -95,7 +95,7 @@ For example, a packaging unit "bag" can be set to have "item" as a base unit and
{% 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 (due to amount restriction settings), a higher or lower amount must be selected.
+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" %}
diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/import-and-export-data/import-product-data-with-a-single-file.md b/docs/pbc/all/product-information-management/202410.0/base-shop/import-and-export-data/import-product-data-with-a-single-file.md
index c561c7a62b4..b1e0968ded4 100644
--- a/docs/pbc/all/product-information-management/202410.0/base-shop/import-and-export-data/import-product-data-with-a-single-file.md
+++ b/docs/pbc/all/product-information-management/202410.0/base-shop/import-and-export-data/import-product-data-with-a-single-file.md
@@ -41,7 +41,7 @@ The headers in this file are prefixed with the names of the individual product-r
The only exceptions are `abstract_sku` and `concrete_sku` headers that are not prefixed.
-Thus, the CSV file for the main product data import is a combination of data from separate product-related CSV files (except for a [few fields specific for just this file](#specific-fields)). Due to this, when importing corresponding data, the same [dependencies and mandatory fields](#mandatory-fields) as for the separate files, apply to the combined product data import file. For example, if you want to import product image data via the combined product data file (headers *productimage.imageset_name*, *productimage.externalurl_large*, etc.), you should mind the dependencies and mandatory fields as for [product_image.csv](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/products-data-import/import-file-details-product-image.csv.html).
+Thus, the CSV file for the main product data import is a combination of data from separate product-related CSV files (except for a [few fields specific for just this file](#specific-fields)). Because of this, when importing corresponding data, the same [dependencies and mandatory fields](#mandatory-fields) as for the separate files, apply to the combined product data import file. For example, if you want to import product image data via the combined product data file (headers *productimage.imageset_name*, *productimage.externalurl_large*, etc.), you should mind the dependencies and mandatory fields as for [product_image.csv](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/products-data-import/import-file-details-product-image.csv.html).
By default, the import CSV file resides in data/import/common/{STORE}/. As, for example, the [combined_product_DE.csv](https://github.com/spryker-shop/suite/blob/master/data/import/common/DE/combined_product.csv) file in Spryker Master Suite.
diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/decimal-stock-migration-concept.md b/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/decimal-stock-migration-concept.md
index 8fff361d80a..358a14fa4f2 100644
--- a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/decimal-stock-migration-concept.md
+++ b/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/decimal-stock-migration-concept.md
@@ -59,7 +59,7 @@ console transfer:generate
{% info_block errorBox %}
-Care should be taken on the project level code to handle the availability and stock values as decimal objects. Due to the PHP floating-point precision issues, all decimal numbers in Spryker are wrapped in `decimal-object` that handles the calculations performed on them to allow exact precision. For more information about the`decimal-object` library, see [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).
+Care should be taken on the project level code to handle the availability and stock values as decimal objects. Because of the PHP floating-point precision issues, all decimal numbers in Spryker are wrapped in `decimal-object` that handles the calculations performed on them to allow exact precision. For more information about the`decimal-object` library, see [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).
{% endinfo_block %}
diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/float-stock-for-products-migration-concept.md b/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/float-stock-for-products-migration-concept.md
index 08902216c40..62640dcb9ff 100644
--- a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/float-stock-for-products-migration-concept.md
+++ b/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/float-stock-for-products-migration-concept.md
@@ -39,7 +39,7 @@ related:
We have changed the type of stock and quantity fields from int to float. With this change, we allow to manage fractions of items in the system.
-As stock and quantity are very basic concepts of any commerce system, changing their type is a horizontal barrier for the modules. This means that, if a module is upgraded to a version that uses float stock, all the other modules in the project which are involved in the float stock barrier must be upgraded to avoid accidental type incompatibilities. For example, if ModuleX uses float stock and ModuleY uses int stock and there is no hard dependency between them, it’s technically possible to upgrade only one of them, however, during runtime, both modules may happen to process the same request data and, as a result, the response will either be calculated incorrectly or a fatal error will be thrown due to a data type mismatch.
+As stock and quantity are very basic concepts of any commerce system, changing their type is a horizontal barrier for the modules. This means that, if a module is upgraded to a version that uses float stock, all the other modules in the project which are involved in the float stock barrier must be upgraded to avoid accidental type incompatibilities. For example, if ModuleX uses float stock and ModuleY uses int stock and there is no hard dependency between them, it’s technically possible to upgrade only one of them, however, during runtime, both modules may happen to process the same request data and, as a result, the response will either be calculated incorrectly or a fatal error will be thrown because of a data type mismatch.
In case of upgrading one of the modules involved into the float stock concept, we strongly recommend upgrading all the modules in your project from the list below. Mostly, the migrations have very low or even zero effort, because they only break type of a transfer object or an internal function’s signature. Some modules changed database field types to DOUBLE which is automatically upgradable by running the necessary console commands.
diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/manage-using-glue-api/glue-api-retrieve-alternative-products.md b/docs/pbc/all/product-information-management/202410.0/base-shop/manage-using-glue-api/glue-api-retrieve-alternative-products.md
index e9ca7d63d20..c9b08f32c5c 100644
--- a/docs/pbc/all/product-information-management/202410.0/base-shop/manage-using-glue-api/glue-api-retrieve-alternative-products.md
+++ b/docs/pbc/all/product-information-management/202410.0/base-shop/manage-using-glue-api/glue-api-retrieve-alternative-products.md
@@ -25,7 +25,7 @@ The Product Alternatives API provides access to alternative products via REST AP
In your development, the endpoints help to:
-* Provide alternatives for a product that runs out or unavailable, for example, due to local restrictions.
+* 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.
diff --git a/docs/pbc/all/search/202311.0/base-shop/best-practices/data-driven-ranking.md b/docs/pbc/all/search/202311.0/base-shop/best-practices/data-driven-ranking.md
index ebcff22a510..058df890e61 100644
--- a/docs/pbc/all/search/202311.0/base-shop/best-practices/data-driven-ranking.md
+++ b/docs/pbc/all/search/202311.0/base-shop/best-practices/data-driven-ranking.md
@@ -49,7 +49,7 @@ related:
When a query returns hundreds or thousands of results, the most relevant to the user products must be at the top of the search result page. Getting this right leads to a higher conversion probability and increases customer happiness. Implementing proper data-driven ranking, however, is usually very tricky because there might be large numbers of heuristics, which define what a good search result for a certain query is.
-A common solution is to manually assign ranks to products (sometimes even within categories). However, this approach is not practical for large catalogs and might result in a bad search experience—for example, when products that are out of stock are listed at the top due to their manually assigned rank.
+A common solution is to manually assign ranks to products (sometimes even within categories). However, this approach is not practical for large catalogs and might result in a bad search experience—for example, when products that are out of stock are listed at the top because of their manually assigned rank.
### Sorting by formulas based on scores
@@ -142,7 +142,7 @@ Very different kinds of scoring functions are conceivable, and the advantages of
To combine scores in such expressions, we normalize them between 0 and 1 and try to make sure that they are more or less equally distributed across all documents. If, for example, the ranking formula is *0.3 * score_1 + 0.7 * score_2* and the scores are in the same range, then you could say that score_1 has a 30% influence on the outcome of the sorting and score_2 an influence of 70%. The equal distribution is important because if, for example, most documents have a very high score_2, then having a high score_2 becomes much more important for appearing at the top of the ranking than having a high score_1 (an effect that can be consciously used).
-So to find good normalization functions, look at the distribution of some measures across all products. This is the distribution of the number of sold items per product at Contortion (numbers are only up to the end of 2014 due to data sensitivity):
+So to find good normalization functions, look at the distribution of some measures across all products. This is the distribution of the number of sold items per product at Contortion (numbers are only up to the end of 2014 because of data sensitivity):
![Computation of score top_seller](https://spryker.s3.eu-central-1.amazonaws.com/docs/Developer+Guide/Search+Engine/Data-Driven+Ranking/score-top-seller-computation.png)
@@ -158,7 +158,7 @@ The last example is the expected delivery time in hours:
Here our stakeholders made a conscious decision to define 48 hours as the neutral case (a score of 0.5) and everything after 60 hours as "bad": *0.5 - atan((x - 48) / 12) / π*.
-Finally, a word on data processing: We compute these scores as part of the ETL / data integration processes of the data warehouse. Given the table `search_tmp.product_search_score_kpi`, which contains a list of performance measures per product, computing normalized scores can be as easy as this (most computations are left out due to their sensitive nature):
+Finally, a word on data processing: We compute these scores as part of the ETL / data integration processes of the data warehouse. Given the table `search_tmp.product_search_score_kpi`, which contains a list of performance measures per product, computing normalized scores can be as easy as this (most computations are left out because of their sensitive nature):
```sql
CREATE TABLE search_next.product_search_score AS
diff --git a/docs/pbc/all/search/202311.0/base-shop/third-party-integrations/algolia/algolia.md b/docs/pbc/all/search/202311.0/base-shop/third-party-integrations/algolia/algolia.md
index a82708fefc4..6992fb03faf 100644
--- a/docs/pbc/all/search/202311.0/base-shop/third-party-integrations/algolia/algolia.md
+++ b/docs/pbc/all/search/202311.0/base-shop/third-party-integrations/algolia/algolia.md
@@ -10,7 +10,7 @@ redirect_from:
![algolia-hero](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/search/third-party-integrations/algolia/algolia-hero.png)
-Spryker is shipped with [Elasticsearch](https://www.elastic.co/elasticsearch/) as the default search engine. However, you can replace it with [Algolia](https://www.algolia.com/). The Algolia search engine stands out due to its performance. With the Algolia app, your users can conduct advanced searches of active concrete products in your store.
+Spryker is shipped with [Elasticsearch](https://www.elastic.co/elasticsearch/) as the default search engine. However, you can replace it with [Algolia](https://www.algolia.com/). The Algolia search engine stands out because of its performance. With the Algolia app, your users can conduct advanced searches of active concrete products in your store.