There is no real support for individual customer prices in the the commercetools platform at this moment. You could try to add a lot of "channel prices" for your products, but you will hit some topics like a missing fallback in the search facets for the scopedPrice (no fallback to the normal price, if a channel price is missing), performance losses because of huge product data sets and maybe you hit rock bottom with the maximum document size of the database itself.
So you need a substitute. This bundle will provide you with a substitute based on custom objects like
{
"id": "UUID",
"version": 1,
"container": "YOUR-CONTAINER-NAME",
"key": "KEY-1-2",
"value": {
"price": {
"value": {
"centAmount": 5000,
"currencyCode": "EUR"
},
"tiers": [
{
"minimumQuantity": 10,
"value": {
"centAmount": 4000,
"currencyCode": "EUR"
}
},
{
"minimumQuantity": 20,
"value": {
"centAmount": 3000,
"currencyCode": "EUR"
}
},
{
"minimumQuantity": 30,
"value": {
"centAmount": 2000,
"currencyCode": "EUR"
}
}
]
},
"customer": "1",
"article": "2",
"currency": "EUR"
},
"createdAt": "2017-08-04T06:51:44.642Z",
"lastModifiedAt": "2017-08-14T00:04:08.763Z"
}
You can configure the field names for the container, price value, article and customer value!
You can inject/use the service best_it_ct_customer_prices.model.customer_price_collection to fetch your price with BestIt\CtCustomerPricesBundle\Model\CustomerPriceCollection::getByArticle(string $articleId). $articleId needs to match the data out of your custom object.
The lazy loaded service best_it_ct_customer_prices.model.customer_price_collection is "created" with a factory, which takes the authed User out of the [Security Token Storage](http://symfony .com/blog/new-in-symfony-2-6-security-component-improvements).
Open a command console, enter your project directory and execute the following command to download the latest stable version of this bundle:
$ composer require bestit/commercetools-customer-prices-bundle
This command requires you to have Composer installed globally, as explained in the installation chapter of the Composer documentation.
Then, enable the bundle by adding it to the list of registered bundles
in the app/AppKernel.php
file of your project:
<?php
// app/AppKernel.php
// ...
class AppKernel extends Kernel
{
public function registerBundles()
{
$bundles = array(
// ...
new BestIt\CtCustomerPricesBundle\BestItCtCustomerPricesBundle(),
);
// ...
}
// ...
}
You can define a custom query for searching your custom objects. The following default query will be used
if you not set this field: container="{container}-{currencyValue}-{customerValue}"
You can use placeholders for your query:
Placeholder | Description | Example |
---|---|---|
{container} | Your custom object container name | customer-price |
{articleField} | Your custom object field name for article number | sku |
{customerField} | Your custom object field name for customer number | customerNumber |
{currencyField} | Your custom object field name for currency | currency |
{pricesField} | Your custom object field name for prices | prices |
{customerValue} | Your current customer number | MA4785 |
{currencyValue} | Your current currency | EUR |
# Default configuration for extension with alias: "best_it_ct_customer_prices"
best_it_ct_customer_prices:
# Please provide the service id for your cache adapter.
cache_service_id: cache.app
# Please provide the service id for your commercetools client.
client_service_id: ~ # Required
# Please provide the search query. You can use placeholder in your query
query: 'container="customer-prices-{currencyValue}-{customerValue}"'
# Please provide the name of the custom object container where the prices are saved.
container: customer-prices
fields:
# Please provide the name of the custom object value field which saves the article id / number.
article: article
# Please provide the name of the custom object value field which saves the customer id / number.
customer: customer
# Please provide the name of the custom object value field which saves the currency.
currency: currency
# Please provide the name of the custom object value field which saves the price object.
prices: prices
Please implement the BestIt\CtCustomerPricesBundle\Model\CustomerInterface on your user object. The used id needs to match the customer data out of your custom object.
- More Docs