Files
medusa-store/www/apps/resources/app/commerce-modules/promotion/application-method/page.mdx
2025-10-01 17:41:18 +03:00

150 lines
4.2 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { Table } from "docs-ui"
export const metadata = {
title: `Application Method`,
}
# {metadata.title}
In this guide, you'll learn what an application method is in the Promotion Module.
## What is an Application Method?
The [ApplicationMethod data model](/references/promotion/models/ApplicationMethod) defines how a promotion is applied. It has the following properties that determine its behavior:
<Table>
<Table.Header>
<Table.Row>
<Table.HeaderCell>
Property
</Table.HeaderCell>
<Table.HeaderCell>
Purpose
</Table.HeaderCell>
<Table.HeaderCell>
Possible Values
</Table.HeaderCell>
</Table.Row>
</Table.Header>
<Table.Body>
<Table.Row>
<Table.Cell>
`type`
</Table.Cell>
<Table.Cell>
Does the promotion discount a fixed amount or a percentage?
</Table.Cell>
<Table.Cell>
`fixed`, `percentage`
</Table.Cell>
</Table.Row>
<Table.Row>
<Table.Cell>
`target_type`
</Table.Cell>
<Table.Cell>
Is the promotion applied to a cart item, shipping method, or the entire order?
</Table.Cell>
<Table.Cell>
`items`, `shipping_methods`, `order`
</Table.Cell>
</Table.Row>
<Table.Row>
<Table.Cell>
`allocation`
</Table.Cell>
<Table.Cell>
Is the discounted amount applied to each item or split between the applicable items?
</Table.Cell>
<Table.Cell>
`each`, `across`
</Table.Cell>
</Table.Row>
</Table.Body>
</Table>
## Target Promotion Rules
When the promotion is applied to a cart item or a shipping method (in other words, when `target_type` is `items` or `shipping_methods`), you can restrict which items/shipping methods the promotion is applied to.
The `ApplicationMethod` data model has a collection of [PromotionRule](/references/promotion/models/PromotionRule) records to restrict which items or shipping methods the promotion applies to. The `target_rules` property in the `ApplicationMethod` represents this relation.
![A diagram showcasing the target_rules relation between the ApplicationMethod and PromotionRule data models](https://res.cloudinary.com/dza7lstvk/image/upload/v1709898273/Medusa%20Resources/application-method-target-rules_hqaymz.jpg)
In this example, the promotion is only applied to product variants in the cart that have the SKU `SHIRT`.
---
## Buy Promotion Rules
When the promotions type is `buyget`, you must specify the “buy X” condition. For example, a cart must have two shirts before the promotion can be applied.
The application method has a collection of `PromotionRule` items to define the “buy X” rule. The `buy_rules` property in the `ApplicationMethod` represents this relation.
![A diagram showcasing the buy_rules relation between the ApplicationMethod and PromotionRule data models](https://res.cloudinary.com/dza7lstvk/image/upload/v1709898453/Medusa%20Resources/application-method-buy-rules_djjuhw.jpg)
In this example, the cart must have two product variants with the SKU `SHIRT` for the promotion to be applied.
---
## Maximum Quantity Restriction
When the `allocation` property in the `ApplicationMethod` is set to `each`, you can set the `max_quantity` property of `ApplicationMethod` to limit how many item quantities the promotion is applied to.
For example, if the `max_quantity` property is set to `1` and the customer has a line item with quantity two in the cart, the promotion is only applied to one of them.
```json title="Example Cart"
{
"cart": {
"items": [
{
"id": "item_1",
"quantity": 2 // The promotion is applied to 1 of this item
}
]
}
}
```
This condition is applied on the quantity of every applicable item in the cart. For example, if set to `1` and the customer has two applicable items in the cart, the promotion is applied to one of each of them.
```json title="Example Cart"
{
"cart": {
"items": [
{
"id": "item_1",
"quantity": 2 // The promotion is applied to 1 of this item
},
{
"id": "item_2",
"quantity": 3 // The promotion is applied to 1 of this item
}
]
}
}
```