Skip to content

Commit

Permalink
Merge branch 'main' of https://github.com/shopware/docs
Browse files Browse the repository at this point in the history
  • Loading branch information
sushmangupta committed Jan 17, 2024
2 parents e4b869c + 3ec933a commit d5f740b
Show file tree
Hide file tree
Showing 9 changed files with 225 additions and 11 deletions.
2 changes: 1 addition & 1 deletion concepts/commerce/checkout-concept/payments.md
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ The actual implementation of payment integrations differs between providers. The

### Session and state

The session should not be used in headless payment integrations. Read more about Session usage [here](../../../resources/guidelines/code/session-and-state)
The session should not be used in headless payment integrations. Read more about [session guidelines](../../../resources/guidelines/code/session-and-state).

### Controllers and API

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,7 @@ All you need to do is creating a `config.xml` file inside of a `Resources/config

## Fill your plugin configuration with settings

As we now know how to create your configuration, we can start to fill it with life

* or options to configure, in this case.
As you now know how to create configurations, you can start to fill it with life using various configuration options.

### Cards in your configuration

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,10 @@ A permission can be dependent on another permission, without which this permissi
### Shopware base permissions
The following permissions are already included and used in the B2B Employee Management component. More "base" permissions will be duly added with future B2B Components.

|Group|Permission|Dependencies|
|---|---|---|---|
|employee|employee.read| |
|employee |employee.edit|employee.read|
|employee |employee.create|employee.read, employee.edit|
|employee |employee.delete|employee.read, employee.edit |
|order|order.read.all|
| Group | Permission | Dependencies |
|---------|----------|-----------|
| employee | employee.read | |
| employee | employee.edit | employee.read |
| employee | employee.create | employee.read, employee.edit |
| employee | employee.delete | employee.read, employee.edit |
| order | order.read.all | |
2 changes: 2 additions & 0 deletions products/extensions/b2b-components/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ In the world of digital B2B commerce, where businesses engage with other compani

* **Quote Managements** covers Sales Representative related jobs around negotiating quotes with customers.

* **Order Approval** allows for a more controlled buying process by introducing an approval workflow.

* **Quick Order and Order List** takes care of distinctive B2B buying behaviors.

* **Digital Sales Composables** aims to provide a set of composable frontends to cover more complex Sales Representative jobs.
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
---
nav:
title: Entities and workflow
position: 10

---


# Entities and workflow

## Entities

### Approval Rule

The approval rule entity represents a set of conditions that need to be met for an order to be approved. These conditions might be based on the order's total value, the order's currency or orders placed by employees with a specific role. Each approval rule can be assigned to a reviewer with specific role, which means that only employees that only employees possessing that role are authorized to approve orders meeting the rule's conditions. Additionally, it can be assigned to a particular role, requiring employees with that role to seek approval for orders meeting the rule's criteria. The rule also includes a priority, dictating the sequence in which the rules are evaluated.

### Pending Order

The pending order entity represents an order that has been placed by an employee that requires approval. It contains the order's data, the employee that placed the order and the approval rule that matched the order.

## Workflow

The following diagram shows the workflow of the order approval component:

```mermaid
flowchart TD
A(Employee places an order) -->B{Approval rule applies}
B-->|No| C[Event: Order Placed]
B-->|Yes| D[Event: Order needs approval]
D-->E{Order approved?}
E-->|No| F[Event: Order declined]
E-->|Yes| G[Event: Order Approved & Event: Order placed]
```

## Who can request approval?

* Employees holding the role designated as the "Effective role" in the approval rule corresponding to the order are authorized to request approval.

## Who can view pending orders?

- Employees with the "Can view all pending orders" permission can view all pending orders.
- Employees who requested approval for the order can view their pending orders.
- Business Partners can view all pending orders of their employees.

## Who can approve or decline pending orders?

- Employees with the "Can approve/decline all pending orders" permission can approve or decline all pending orders.
- Employees with the "Can approve/decline pending orders" permission can approve or decline pending orders that assigned to them.
- Business Partners can approve or decline all pending orders of their employees.
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
---
nav:
title: Order approval permissions
position: 20

---

# Order approval permissions

Below you can find a list of all the order approval rules that are available in the order approval component. You can utilize these rules for assigning roles to your employees.

### Approval rule permissions

| Permission | Description |
|-----------------------------|-----------------------------------------------|
| `Can create approval rules` | Allows the employee to create approval rules |
| `Can update approval rules` | Allows the employee to update approval rules |
| `Can delete approval rules` | Allows the employee to delete approval rules |
| `Can read approval rules` | Allows the employee to view approval rules |

### Pending order Permissions

| Permission | Description |
|------------------------------------------|---------------------------------------------------------------------|
| `Can approve/decline all pending orders` | Allows the employee to approve or decline all pending orders |
| `Can approve/decline pending orders` | Allows the employee to approve or decline assigned pending orders |
| `Can view all pending orders` | Allows the employee to view all pending orders |
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
---
nav:
title: Payment Process
position: 30

---

# Order approval's payment process

The payment process of the order approval component is the same as the payment process of the order component. You can select the payment method that you want to use for your orders; however unlike the standard order component, the payment process will be executed only after the order has been approved in case of the online payment method (Visa, PayPal, etc.).

## Customization

### Storefront

The payment process of the order approval component can be customized by extending or overriding this page `@OrderApproval/storefront/pending-order/page/pending-approval/detail.html.twig`

### Payment process

Normally, after reviewer approves the order, the payment process will be executed automatically. However, if you just want to approve the order without executing the payment process, you can subscribe to the `PendingOrderApprovedEvent` event and set the `PendingOrderApprovedEvent::shouldProceedPlaceOrder` to `false`. This event is dispatched in the `Shopware\Commercial\B2B\OrderApproval\Storefront\Controller\ApprovalPendingOrderController::order` method.

```PHP

use Shopware\Commercial\B2B\OrderApproval\Event\PendingOrderApprovedEvent;

class MySubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents(): array
{
return [
PendingOrderApprovedEvent::class => 'onPendingOrderApproved'
];
}

public function onPendingOrderApproved(PendingOrderApprovedEvent $event): void
{
$event->setShouldProceedPlaceOrder(false);
}
}
```

Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
---
nav:
title: How to add a new approval condition
position: 40

---

# How to add a new approval condition

The order approval component provides a set of conditions for defining your approval rules. However, if you need to add a new condition, you can do so via an app or a plugin.

## Plugin

Each condition is represented by a class that extends the abstract class `Shopware\Commercial\B2B\OrderApproval\Domain\ApprovalRule\Rule\OrderApprovalRule`. To add a new condition, you need to create a new class that extends the `OrderApprovalRule` class and implements the `match` and `getConstraints` methods. The `match` method is used to determine if the condition is met, and the `getConstraints` method is used to define the field, value or operator constraints that can be used in the condition.

Example:

```PHP
<?php declare(strict_types=1);

namespace YourPluginNameSpace;

use Shopware\Commercial\B2B\OrderApproval\Domain\ApprovalRule\Rule\OrderApprovalRule;

class CartAmountRule extends OrderApprovalRule
{
final public const RULE_NAME = self::PREFIX . 'cart-amount';

public const AMOUNT = 1000;

protected float $amount;

/**
* @internal
*/
public function __construct(
protected string $operator = self::OPERATOR_GTE,
?float $amount = self::AMOUNT
) {
parent::__construct();
$this->amount = (float) $amount;
}

/**
* @throws UnsupportedOperatorException
*/
public function match(RuleScope $scope): bool
{
if (!$scope instanceof CartRuleScope) {
return false;
}

return RuleComparison::numeric($scope->getCart()->getPrice()->getTotalPrice(), $this->amount, $this->operator);
}

public function getConstraints(): array
{
return [
'amount' => RuleConstraints::float(),
'operator' => RuleConstraints::numericOperators(false),
];
}

public function getConfig(): RuleConfig
{
return (new RuleConfig())
->operatorSet(RuleConfig::OPERATOR_SET_NUMBER)
->numberField('amount');
}
}
```

And then tag your class with the `shopware.approval_rule.definition` tag:

```XML
<service id="YourPluginNameSpace\CartAmountRule" public="true">
<tag name="shopware.approval_rule.definition"/>
</service>
```

## App

We have not yet added support for extending custom `OrderApprovalRules` for the app.
14 changes: 14 additions & 0 deletions products/extensions/b2b-components/order-approval/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
---
nav:
title: Order Approval
position: 20

---

# Order approval component

Order approval component is a part of the B2B Employee Management. It allows you to define rules that determine which orders require approval and which employees can approve them. It also allows you to view all pending orders and approve or decline them.

## Requirements

* You need to have Employee Management component installed and activated (see [Employee Management](../employee-management/README.md)).

0 comments on commit d5f740b

Please sign in to comment.