diff --git a/CHANGELOG.md b/CHANGELOG.md
index f3b2f03f89..a73d6d3d8d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,10 @@
+## 2.0.9 (2023-09-29)
+
+
+#### Fixes
+
+* **core** Fix discount calculation error edge-case ([7549aad](https://github.com/vendure-ecommerce/vendure/commit/7549aad)), closes [#2385](https://github.com/vendure-ecommerce/vendure/issues/2385)
+
## 2.0.8 (2023-09-27)
diff --git a/CHANGELOG_NEXT.md b/CHANGELOG_NEXT.md
index 1a901cf699..ac37fa8271 100644
--- a/CHANGELOG_NEXT.md
+++ b/CHANGELOG_NEXT.md
@@ -1,3 +1,85 @@
+## 2.1.0-next.7 (2023-09-29)
+
+
+#### Features
+
+* **admin-ui** Add data table filter presets functionality ([a656ef2](https://github.com/vendure-ecommerce/vendure/commit/a656ef2))
+* **admin-ui** Add filter preset support to Collection list ([cbfb402](https://github.com/vendure-ecommerce/vendure/commit/cbfb402))
+* **admin-ui** Add image carousel to asset preview dialog (#2370) ([cd7b2bf](https://github.com/vendure-ecommerce/vendure/commit/cd7b2bf)), closes [#2370](https://github.com/vendure-ecommerce/vendure/issues/2370) [#2129](https://github.com/vendure-ecommerce/vendure/issues/2129)
+* **admin-ui** Add initial React support for UI extensions ([1075dd7](https://github.com/vendure-ecommerce/vendure/commit/1075dd7))
+* **admin-ui** Add more native React UI components ([04e03f8](https://github.com/vendure-ecommerce/vendure/commit/04e03f8))
+* **admin-ui** Add Persian/Farsi i18n messages (#2418) ([1193863](https://github.com/vendure-ecommerce/vendure/commit/1193863)), closes [#2418](https://github.com/vendure-ecommerce/vendure/issues/2418)
+* **admin-ui** Add useRouteParams react hook ([b63fb7f](https://github.com/vendure-ecommerce/vendure/commit/b63fb7f))
+* **admin-ui** Admin UI rtl with Arabic translation improvements (#2322) ([44ea12b](https://github.com/vendure-ecommerce/vendure/commit/44ea12b)), closes [#2322](https://github.com/vendure-ecommerce/vendure/issues/2322)
+* **admin-ui** Allow custom components in data table columns ([d3474dd](https://github.com/vendure-ecommerce/vendure/commit/d3474dd)), closes [#2347](https://github.com/vendure-ecommerce/vendure/issues/2347) [#2353](https://github.com/vendure-ecommerce/vendure/issues/2353)
+* **admin-ui** Allow custom React components in data table columns ([5cde775](https://github.com/vendure-ecommerce/vendure/commit/5cde775)), closes [#2347](https://github.com/vendure-ecommerce/vendure/issues/2347) [#2353](https://github.com/vendure-ecommerce/vendure/issues/2353)
+* **admin-ui** Display original quantity after order has been modified ([a36c6e0](https://github.com/vendure-ecommerce/vendure/commit/a36c6e0))
+* **admin-ui** Expose providers to nav menu routerLink function ([1bae40e](https://github.com/vendure-ecommerce/vendure/commit/1bae40e))
+* **admin-ui** Implement custom components in Collection data table ([4ab7c1e](https://github.com/vendure-ecommerce/vendure/commit/4ab7c1e))
+* **admin-ui** Implement drag-and-drop reorder of filter presets ([8e06705](https://github.com/vendure-ecommerce/vendure/commit/8e06705))
+* **admin-ui** Implement filter preset renaming ([8b52e6f](https://github.com/vendure-ecommerce/vendure/commit/8b52e6f))
+* **admin-ui** Implement job queue filtering by status ([baeb036](https://github.com/vendure-ecommerce/vendure/commit/baeb036))
+* **admin-ui** Implement react Card component ([c588a1f](https://github.com/vendure-ecommerce/vendure/commit/c588a1f))
+* **admin-ui** Implement relative date filtering ([d07a5f3](https://github.com/vendure-ecommerce/vendure/commit/d07a5f3))
+* **admin-ui** Implement simplified API for UI route extensions ([b9ca367](https://github.com/vendure-ecommerce/vendure/commit/b9ca367))
+* **admin-ui** Implement values pagination for Facet detail view ([4cf1826](https://github.com/vendure-ecommerce/vendure/commit/4cf1826)), closes [#1257](https://github.com/vendure-ecommerce/vendure/issues/1257)
+* **admin-ui** Improve dev mode extension point display ([4678930](https://github.com/vendure-ecommerce/vendure/commit/4678930))
+* **admin-ui** Improve naming & layout of catalog & stock locations ([8452300](https://github.com/vendure-ecommerce/vendure/commit/8452300))
+* **admin-ui** Improved control over ActionBar buttons ([065a2b4](https://github.com/vendure-ecommerce/vendure/commit/065a2b4))
+* **admin-ui** Initial support for React UI extensions ([83d5756](https://github.com/vendure-ecommerce/vendure/commit/83d5756))
+* **admin-ui** Style improvements to table and form input borders ([5287287](https://github.com/vendure-ecommerce/vendure/commit/5287287))
+* **admin-ui** Support for React-based custom detail components ([55d9ffc](https://github.com/vendure-ecommerce/vendure/commit/55d9ffc))
+* **admin-ui** Update to Angular v16.2 ([608d5d3](https://github.com/vendure-ecommerce/vendure/commit/608d5d3))
+* **cli** Implement plugin scaffold command ([a6df4c1](https://github.com/vendure-ecommerce/vendure/commit/a6df4c1))
+* **cli** Include custom CRUD permissions with plugin scaffold ([0c62b6f](https://github.com/vendure-ecommerce/vendure/commit/0c62b6f))
+* **core** Add `Facet.valueList` resolver for paginated values ([09c7175](https://github.com/vendure-ecommerce/vendure/commit/09c7175)), closes [#1257](https://github.com/vendure-ecommerce/vendure/issues/1257)
+* **core** Add maximum coupon usage (#2331) ([bdd2720](https://github.com/vendure-ecommerce/vendure/commit/bdd2720)), closes [#2331](https://github.com/vendure-ecommerce/vendure/issues/2331) [#2330](https://github.com/vendure-ecommerce/vendure/issues/2330)
+* **core** Pass variant to ProductVariantPriceCalculationStrategy ([fee995c](https://github.com/vendure-ecommerce/vendure/commit/fee995c)), closes [#2398](https://github.com/vendure-ecommerce/vendure/issues/2398)
+* **core** Support bi-directional relations in customFields (#2365) ([0313ce5](https://github.com/vendure-ecommerce/vendure/commit/0313ce5)), closes [#2365](https://github.com/vendure-ecommerce/vendure/issues/2365)
+* **core** Update NestJS to v10, Apollo Server v4 ([b675fda](https://github.com/vendure-ecommerce/vendure/commit/b675fda))
+* **create** Allow selection of package manager ([6561bb7](https://github.com/vendure-ecommerce/vendure/commit/6561bb7))
+* **create** Better defaults for project scaffold ([fa683e7](https://github.com/vendure-ecommerce/vendure/commit/fa683e7))
+* **email-plugin** Expose template vars to template loader (#2243) ([78ea016](https://github.com/vendure-ecommerce/vendure/commit/78ea016)), closes [#2243](https://github.com/vendure-ecommerce/vendure/issues/2243) [#2242](https://github.com/vendure-ecommerce/vendure/issues/2242)
+* **job-queue-plugin** Implement default cleanup of old BullMQ jobs ([6c1d7bb](https://github.com/vendure-ecommerce/vendure/commit/6c1d7bb)), closes [#1425](https://github.com/vendure-ecommerce/vendure/issues/1425)
+* **payments-plugin** Allow custom params to be passed to Stripe API ([1b29097](https://github.com/vendure-ecommerce/vendure/commit/1b29097)), closes [#2412](https://github.com/vendure-ecommerce/vendure/issues/2412)
+* **ui-devkit** Add experimental wrapper for shared ui providers ([daf6f8c](https://github.com/vendure-ecommerce/vendure/commit/daf6f8c))
+
+#### Fixes
+
+* **admin-ui** Add custom field support to Customer list ([97ba022](https://github.com/vendure-ecommerce/vendure/commit/97ba022))
+* **admin-ui** Correct handling of ID filters in data tables ([0e05496](https://github.com/vendure-ecommerce/vendure/commit/0e05496))
+* **admin-ui** Correctly display job retries ([d3107fd](https://github.com/vendure-ecommerce/vendure/commit/d3107fd)), closes [#1467](https://github.com/vendure-ecommerce/vendure/issues/1467)
+* **admin-ui** Data table filters react to page navigation ([39832bd](https://github.com/vendure-ecommerce/vendure/commit/39832bd))
+* **admin-ui** Fix channel switcher icon style ([7f30361](https://github.com/vendure-ecommerce/vendure/commit/7f30361))
+* **admin-ui** Fix component for new Angular extension route API ([6fe1bd0](https://github.com/vendure-ecommerce/vendure/commit/6fe1bd0))
+* **admin-ui** Fix error when data table filters not defined ([2425a33](https://github.com/vendure-ecommerce/vendure/commit/2425a33))
+* **admin-ui** Fix styling of custom field tabs ([57f47df](https://github.com/vendure-ecommerce/vendure/commit/57f47df))
+* **admin-ui** Give all data table columns immutable ids ([73a78db](https://github.com/vendure-ecommerce/vendure/commit/73a78db))
+* **admin-ui** Improve RTL styles ([056d205](https://github.com/vendure-ecommerce/vendure/commit/056d205))
+* **admin-ui** Limit FacetValues in Facet list component ([b445955](https://github.com/vendure-ecommerce/vendure/commit/b445955)), closes [#1257](https://github.com/vendure-ecommerce/vendure/issues/1257)
+* **admin-ui** Use correct defaults for nullable custom fields (#2360) ([88430e5](https://github.com/vendure-ecommerce/vendure/commit/88430e5)), closes [#2360](https://github.com/vendure-ecommerce/vendure/issues/2360)
+* **core** Downgrade ForbiddenError from Error to Warn log level ([c186392](https://github.com/vendure-ecommerce/vendure/commit/c186392)), closes [#2383](https://github.com/vendure-ecommerce/vendure/issues/2383)
+* **core** Export EntityId and Money decorators ([4664dee](https://github.com/vendure-ecommerce/vendure/commit/4664dee))
+* **core** Fix channel association on promotion update (#2376) ([e1ff2c7](https://github.com/vendure-ecommerce/vendure/commit/e1ff2c7)), closes [#2376](https://github.com/vendure-ecommerce/vendure/issues/2376)
+* **core** Fix circular dependency issue in SQLiteSearchStrategy ([f2e2e32](https://github.com/vendure-ecommerce/vendure/commit/f2e2e32))
+* **core** Fix resolution of facet valueList for postgres ([1d8fe47](https://github.com/vendure-ecommerce/vendure/commit/1d8fe47))
+* **job-queue-plugin** Correct behaviour of job list query with BullMQ ([c148a92](https://github.com/vendure-ecommerce/vendure/commit/c148a92)), closes [#2120](https://github.com/vendure-ecommerce/vendure/issues/2120) [#1327](https://github.com/vendure-ecommerce/vendure/issues/1327)
+* **job-queue-plugin** Correct retry setting for BullMQ jobs ([972ba0e](https://github.com/vendure-ecommerce/vendure/commit/972ba0e)), closes [#1467](https://github.com/vendure-ecommerce/vendure/issues/1467)
+* **ui-devkit** Fix scaffold logic for custom providers ([2f2ddb5](https://github.com/vendure-ecommerce/vendure/commit/2f2ddb5))
+
+
+### BREAKING CHANGE
+
+* In the Admin UI, the "stock locations" list and detail views
+have been moved from the "catalog" module to the "settings" module. Also, the
+menu item & breadcrumb for "inventory" has been renamed to "products".
+
+This is an end-user breaking change rather than a code breaking change. Any UI
+extensions that link to a `/catalog/inventory/...` route will still work as there
+is a redirect in place to `/catalog/products/...`.
+* The update of Apollo Server to v4 includes some breaking changes if you have
+defined any custom ApolloServerPlugins. See the Apollo migration guide for full details:
+https://www.apollographql.com/docs/apollo-server/migration/
## 2.1.0-next.6 (2023-09-27)
diff --git a/lerna.json b/lerna.json
index a82668d39c..97b16bd138 100644
--- a/lerna.json
+++ b/lerna.json
@@ -1,6 +1,6 @@
{
"packages": ["packages/*"],
- "version": "2.1.0-next.6",
+ "version": "2.1.0-next.7",
"npmClient": "yarn",
"command": {
"version": {
diff --git a/packages/admin-ui-plugin/package.json b/packages/admin-ui-plugin/package.json
index 780d048811..ee846d6a07 100644
--- a/packages/admin-ui-plugin/package.json
+++ b/packages/admin-ui-plugin/package.json
@@ -1,6 +1,6 @@
{
"name": "@vendure/admin-ui-plugin",
- "version": "2.1.0-next.6",
+ "version": "2.1.0-next.7",
"main": "lib/index.js",
"types": "lib/index.d.ts",
"files": [
@@ -21,8 +21,8 @@
"devDependencies": {
"@types/express": "^4.17.8",
"@types/fs-extra": "^9.0.1",
- "@vendure/common": "2.1.0-next.6",
- "@vendure/core": "2.1.0-next.6",
+ "@vendure/common": "2.1.0-next.7",
+ "@vendure/core": "2.1.0-next.7",
"express": "^4.17.1",
"rimraf": "^3.0.2",
"typescript": "4.9.5"
diff --git a/packages/admin-ui-plugin/src/constants.ts b/packages/admin-ui-plugin/src/constants.ts
index 39529cb51b..2a94f1af2b 100644
--- a/packages/admin-ui-plugin/src/constants.ts
+++ b/packages/admin-ui-plugin/src/constants.ts
@@ -22,4 +22,5 @@ export const defaultAvailableLanguages = [
LanguageCode.ru,
LanguageCode.uk,
LanguageCode.it,
+ LanguageCode.fa,
];
diff --git a/packages/admin-ui/package-lock.json b/packages/admin-ui/package-lock.json
index eddd2fda45..d266fd7e6e 100644
--- a/packages/admin-ui/package-lock.json
+++ b/packages/admin-ui/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "@vendure/admin-ui",
- "version": "2.1.0-next.6",
+ "version": "2.1.0-next.7",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
diff --git a/packages/admin-ui/package.json b/packages/admin-ui/package.json
index 23bb2e1fb9..53ad1b49e5 100644
--- a/packages/admin-ui/package.json
+++ b/packages/admin-ui/package.json
@@ -1,6 +1,6 @@
{
"name": "@vendure/admin-ui",
- "version": "2.1.0-next.6",
+ "version": "2.1.0-next.7",
"license": "MIT",
"scripts": {
"ng": "ng",
@@ -49,7 +49,7 @@
"@ng-select/ng-select": "^11.1.1",
"@ngx-translate/core": "^15.0.0",
"@ngx-translate/http-loader": "^8.0.0",
- "@vendure/common": "2.1.0-next.6",
+ "@vendure/common": "2.1.0-next.7",
"@webcomponents/custom-elements": "^1.6.0",
"apollo-angular": "^5.0.0",
"apollo-upload-client": "^17.0.0",
diff --git a/packages/admin-ui/src/lib/core/src/common/version.ts b/packages/admin-ui/src/lib/core/src/common/version.ts
index caf1470077..199f963893 100644
--- a/packages/admin-ui/src/lib/core/src/common/version.ts
+++ b/packages/admin-ui/src/lib/core/src/common/version.ts
@@ -1,2 +1,2 @@
// Auto-generated by the set-version.js script.
-export const ADMIN_UI_VERSION = '2.1.0-next.6';
+export const ADMIN_UI_VERSION = '2.1.0-next.7';
diff --git a/packages/admin-ui/src/lib/static/i18n-messages/fa.json b/packages/admin-ui/src/lib/static/i18n-messages/fa.json
new file mode 100644
index 0000000000..0575da80e0
--- /dev/null
+++ b/packages/admin-ui/src/lib/static/i18n-messages/fa.json
@@ -0,0 +1,774 @@
+{
+ "admin": {
+ "create-new-administrator": "ایجاد مدیر جدید"
+ },
+ "asset": {
+ "add-asset": "افزودن دارایی",
+ "add-asset-with-count": "اضافه کردن {count} دارایی",
+ "assets-selected-count": "{ count } دارایی انتخاب شده است.",
+ "dimensions": "ابعاد",
+ "focal-point": "نقطه کانونی",
+ "notify-create-assets-success": "{count} دارایی جدید ایجاد شد.",
+ "original-asset-size": "اندازه منبع",
+ "preview": "پیش نمایش",
+ "remove-asset": "حذف دارایی",
+ "select-asset": "دارایی را انتخاب کنید",
+ "select-assets": "دارایی ها را انتخاب کنید",
+ "set-as-featured-asset": "تنظیم به عنوان دارایی برجسته",
+ "set-focal-point": "نقطه کانونی را تنظیم کنید",
+ "source-file": "فایل منبع",
+ "unset-focal-point": "نقطه کانونی را حذف کنید",
+ "update-focal-point": "نقطه کانونی را بروزرسانی کنید",
+ "update-focal-point-error": "نقطه کانونی بهروزرسانی نشد",
+ "update-focal-point-success": "نقطه کانونی به روز شد",
+ "upload-assets": "بارگذاری دارایی ها",
+ "uploading": "درحال آپلود ..."
+ },
+ "breadcrumb": {
+ "administrators": "مدیران",
+ "assets": "دارایی ها",
+ "channels": "کانال ها",
+ "collections": "مجموعه ها",
+ "countries": "کشورها",
+ "customer-groups": "گروه های مشتری",
+ "customers": "مشتریان",
+ "dashboard": "داشبورد",
+ "facets": "ویژگی ها",
+ "global-settings": "تنظیمات جهانی",
+ "inventory": "انبار",
+ "job-queue": "صف کارها",
+ "manage-variants": "مدیریت انواع",
+ "modifying": "درحال تغییر",
+ "orders": "سفارشات",
+ "payment-methods": "روش های پرداخت",
+ "product-options": "گزینه های محصول",
+ "profile": "پروفایل",
+ "promotions": "تبلیغات",
+ "roles": "نقش ها",
+ "seller-orders": "سفارشات فروشنده",
+ "sellers": "فروشندگان",
+ "shipping-methods": "روش های حمل و نقل",
+ "stock-locations": "مکان های انبارداری",
+ "system-status": "وضعیت سیستم",
+ "tax-categories": "دسته های مالیاتی",
+ "tax-rates": "نرخ های مالیاتی",
+ "zones": "مناطق"
+ },
+ "catalog": {
+ "add-facet-value": "اضافه کردن مقدار برای ویژگی",
+ "add-facets": "اضافه کردن ویژگی ها",
+ "add-option": "اضافه کردن قابلیت",
+ "add-price-in-another-currency": "اضافه کردن قیمت با یک واحد پولی دیگر",
+ "add-stock-location": "اضافه کردن انبار",
+ "add-stock-to-location": "انتخاب انبار",
+ "asset": "دارایی",
+ "asset-preview-links": "لینک های پیش نمایش دارایی",
+ "assets": "دارایی ها",
+ "assign-product-to-channel-success": "{count} محصول به { channel } تخصیص داده شد",
+ "assign-products-to-channel": "تخصیص محصولات به کانال",
+ "assign-to-channel": "تخصیص به کانال",
+ "assign-to-named-channel": "تخصیص به { channelCode }",
+ "assign-variant-to-channel-success": "{count} نوع محصول به { channel } تخصیص داده شد",
+ "assign-variants-to-channel": "تخصیص نوع محصول به کانال",
+ "auto-update-option-variant-name": "با استفاده از این گزینه نام نوع محصول را به صورت خودکار به روز کنید",
+ "auto-update-product-variant-name": "بهروزرسانی خودکار نامهای نوع محصول",
+ "cannot-create-variants-without-options": "تعریف نوع محصول تا زمانی که یک گروه از قابلیت با حداقل دو انتخاب تعریف نشده باشد امکان پذیر نیست",
+ "channel-price-preview": "پیش نمایش قیمت کانال",
+ "collection": "مجموعه",
+ "collection-contents": "محتویات مجموعه",
+ "collections": "مجموعه ها",
+ "confirm-bulk-delete-products": "آیا {count} محصول حذف شود؟",
+ "confirm-cancel": "لغو؟",
+ "confirm-delete-assets": "آیا {count} دارایی حذف شود؟",
+ "confirm-delete-facet-value": "آیا مقدار ویژگی حذف شود؟",
+ "confirm-delete-product": "آیا محصول حذف شود؟",
+ "confirm-delete-product-option": "آیا قابلیت محصول \"{name}\" حذف شود ؟",
+ "confirm-delete-product-option-group": "آیا گروه بندی قابلیت محصول \"{name}\" حذف شود ؟",
+ "confirm-delete-product-option-group-body": "این گروه بندی قابلیت ها در {count} نوع محصول استفاده شده است. آیا از حذف آن اطمینان دارید ؟",
+ "confirm-delete-product-variant": "آیا نوع محصول \"{name}\" حذف شود ؟",
+ "confirm-deletion-of-unused-variants-body": "انواع محصولات زیر به دلیل اضافه شدن قابلیت های جدید منسوخ شده اند. آنها در طول ایجاد انواع محصول جدید حذف خواهند شد.",
+ "confirm-deletion-of-unused-variants-title": "آبا انواع محصولات منسوخ شده حذف شوند ؟",
+ "create-draft-order": "ایجاد پیش نویس سفارش",
+ "create-new-collection": "ایحاد مجموعه جدید",
+ "create-new-facet": "ایحاد ویژگی جدید",
+ "create-new-product": "ایجاد محصول جدید",
+ "create-new-stock-location": "ایجاد انبار جدید",
+ "create-product-option-group": "ایجاد گروه بندی قابلیت های محصول جدید",
+ "create-product-variant": "ایجاد نوع محصول جدید",
+ "default-currency": "حذف واحد پولی",
+ "do-not-inherit-filters": "فیلترها به ارث برده نشود",
+ "drop-files-to-upload": "فایل ها را رها کنید تا آپلود شوند",
+ "edit-facet-values": "ویرایش مقادیر ویژگی ها",
+ "edit-options": "ویرایش قابلیت ها",
+ "facet": "ویژگی",
+ "facet-value-not-available": "مقدار ویژگی \"{ id }\" در دسترس نیست.",
+ "facet-values": "مقادیر ویژگی ها",
+ "facets": "ویژگی ها",
+ "filter-by-name": "فیلتر براساس نام",
+ "filter-by-sku": "فیلتر براساس شناسه انحصاری محصول",
+ "filter-inheritance": "فیلتر براساس وراثت",
+ "filters": "فیلترها",
+ "inherit-filters-from-parent": "به ارث بردن فیلترها از والد",
+ "live-preview-contents": "پیش نمایش زنده محتواها",
+ "manage-variants": "مدیریت انواع",
+ "move-collection-to": "انتقال به { name }",
+ "move-collections": "انتقال مجموعه ها",
+ "move-collections-success": "تعداد {count} مجموعه منتقل شد",
+ "move-down": "انتقال به پایین",
+ "move-to": "انتقال به",
+ "move-up": "انتقال به بالا",
+ "name": "نام",
+ "no-channel-selected": "کانالی انتخاب نشده است",
+ "no-featured-asset": "دارایی برگزیده یافت نشد",
+ "no-selection": "بدون انتخاب",
+ "no-stock-locations-available-on-current-channel": "هیچ انباری در کانال فعلی تعریف نشده است. قبل از افزودن محصولات، حداقل یک انبار تعریف کنید.",
+ "notify-bulk-delete-products-success": "تعداد {count} محصول با موفقیت حذف شد.",
+ "notify-remove-facets-from-channel-success": "تعداد {count} ویژگی از { channelCode } با موفقیت حذف شد.",
+ "notify-remove-product-from-channel-error": "محصول از کانال حذف نشد.",
+ "notify-remove-product-from-channel-success": "محصول با موفقیت از کانال حذف شد.",
+ "notify-remove-variant-from-channel-error": "نوع محصول از کانال حذف نشد.",
+ "notify-remove-variant-from-channel-success": "نوع محصول با موفقیت از کانال حذف شد.",
+ "number-of-variants": "# نوع محصول",
+ "option": "قابلیت",
+ "option-name": "عنوان قابلیت",
+ "option-values": "مقادیر قابلیت",
+ "out-of-stock-threshold": "آستانه بدون موجودی - out-of-stock",
+ "out-of-stock-threshold-tooltip": "آستانه موجودی انبار را تعیین کنید. این آستانه مشخص می کند چه زمانی نوع محصول موردنظر ناموجود شده است. استفاده از یک مقدار منفی، پشتیبانی از سفارش پشتیبان را فعال می کند.",
+ "page-description-options-editor": "نام و کد قابلیت های این محصول را ویرایش کنید. برای افزودن یا حذف قابلیت ها، از دکمه \"مدیریت انواع\" در زیر لیست انواع محصول استفاده کنید.",
+ "price": "قیمت",
+ "price-and-tax": "قیمت و مالیات",
+ "price-conversion-factor": "ضریب تبدیل قیمت",
+ "price-in-channel": "قیمت در { channel }",
+ "price-includes-tax-at": "شامل { rate }% مالیات",
+ "price-with-tax-in-default-zone": "قیمت کل با احتساب { rate }% مالیات: { price }",
+ "private": "خصوصی",
+ "product": "محصول",
+ "product-name": "نام محصول",
+ "product-options": "قابلیت های محصول",
+ "product-variant-exists": "یک نوع محصول با این قابلیت ها از قبل وجود دارد.",
+ "product-variants": "انواع محصولات",
+ "products": "محصولات",
+ "public": "عمومی",
+ "quick-jump-placeholder": "پرش سریع به نوع محصول",
+ "rebuild-search-index": "بازسازی ایندکس های جستجو",
+ "reindex-error": "هنگام بازسازی ایندکس های جستجو خطایی رخ داد.",
+ "reindex-successful": "تعداد {count} نوع محصول با موفقیت در {time}ms ایندکس شد.",
+ "reindexing": "درحال بازسازی ایندکس های جستجو",
+ "remove-from-channel": "حذف از کانال",
+ "remove-option": "حذف قابلیت",
+ "remove-product-from-channel": "حذف محصول از کانال",
+ "remove-product-variant-from-channel": "حذف نوع محصول از کانال",
+ "reorder-collection": "مرتب سازی مجدد مجموعه",
+ "root-collection": "مجموعه ریشه",
+ "run-pending-search-index-updates": "ایندکس های جستجو: اجرای {count} بروزرسانی در انتظار اقدام",
+ "running-search-index-updates": "درحال اجرای {count} بروزرسانی برای ایندکس های جستجو",
+ "search-asset-name-or-tag": "جستجو بر اساس نام یا برچسب دارایی",
+ "search-for-term": "جستجو براساس عبارت دلخواه",
+ "search-product-name-or-code": "جستجو براساس نام یا کد محصول",
+ "select-product": "انتخاب محصول",
+ "select-product-variant": "انتخاب نوع محصول",
+ "sku": "شناسه انحصاری محصول",
+ "slug": "اسلاگ",
+ "slug-pattern-error": "اسلاگ نامعتبر است",
+ "stock-allocated": "انبار اختصاص داده شده است",
+ "stock-levels": "سطح انبار",
+ "stock-location": "انبار",
+ "stock-locations": "انبارها",
+ "stock-on-hand": "انبار",
+ "tax-category": "دسته بندی مالیاتی",
+ "taxes": "مالیات ها",
+ "track-inventory": "فروش براساس موجودی انبار",
+ "track-inventory-false": "فروش بدون محدودیت - خاموش بودن انبارداری",
+ "track-inventory-inherit": "از تنظیمات جهانی ارث بری کند",
+ "track-inventory-tooltip": "هنگامی که فروش براساس موجودی انبار باشد، سطح موجودی انواع محصول به طور خودکار هنگام فروش تنظیم می شود",
+ "track-inventory-true": "فروش با محدودیت - روشن بودن انبارداری",
+ "update-product-option": "بروزرسانی قابلتی محصول",
+ "use-global-value": "استفاده از مقدار جهانی",
+ "values": "مقادیر",
+ "variant": "نوع محصول",
+ "variant-count": "{count} نوع محصول",
+ "view-contents": "مشاهده محتواها",
+ "visibility": "وضعیت نمایش"
+ },
+ "common": {
+ "ID": "شناسه",
+ "actions": "اقدامات",
+ "add-filter": "افزودن فیلتر",
+ "add-item-to-list": "افزودن آیتم به لیست",
+ "add-note": "افزودن یادداشت",
+ "apply": "اعمال",
+ "assign-to-channel": "تخصیص به کانال",
+ "available-currencies": "واحد های پولی موجود",
+ "available-languages": "زبان های موجود",
+ "boolean-and": "و",
+ "boolean-false": "0",
+ "boolean-or": "یا",
+ "boolean-true": "1",
+ "breadcrumb": "راهنمای مسیر جاری",
+ "browser-default": "پیش فرض مرورگر",
+ "cancel": "لغو",
+ "cancel-navigation": "لغو ناوبری",
+ "change-selection": "لغو انتخاب",
+ "channel": "کانال",
+ "channels": "کانال ها",
+ "clear-selection": "پاک کردن انتخاب ها",
+ "code": "کد",
+ "collapse-entries": "بستن رکوردها",
+ "confirm": "تایید",
+ "confirm-bulk-assign-to-channel": "آیتم ها به کانال اختصاص داده شود ؟",
+ "confirm-bulk-delete": "آیتم های انتخابی حذف شود ؟",
+ "confirm-bulk-remove-from-channel": "آیتم ها از کانال فعلی حذف شود ؟",
+ "confirm-delete-note": "یادداشت حذف شود ؟",
+ "confirm-navigation": "تایید تغییر صفحه",
+ "contents": "محتواها",
+ "create": "ایجاد",
+ "created-at": "ایجاد شده در تاریخ",
+ "custom-fields": "فیلد های سفارشی",
+ "default-channel": "کانال پیشفرض",
+ "default-language": "زبان پیشفرض",
+ "default-tax-category": "دسته بندی مالیاتی پیشفرض",
+ "delete": "حذف",
+ "description": "توضیحات",
+ "details": "جزئیات",
+ "disabled": "غیرفعال است",
+ "discard-changes": "لغو تغییرات",
+ "edit": "ویرایش",
+ "edit-field": "ویرایش فیلد",
+ "edit-note": "ویرایش یادداشت",
+ "enabled": "فعال است",
+ "end-date": "تاریخ پایان",
+ "expand-entries": "مشاهده گزینه ها",
+ "extension-running-in-separate-window": "اکستنشن درحال اجرا در یک پنجره جداگانه می باشد",
+ "filter": "فیلتر",
+ "force-delete": "حذف اجباری",
+ "force-remove": "حذف اجباری",
+ "general": "عمومی",
+ "guest": "مهمان",
+ "id": "شناسه",
+ "image": "تصویر",
+ "items-per-page-option": "{ count } آیتم به ازای هر صفحه",
+ "items-selected-count": "{ count } آیتم انتخاب شده است.",
+ "keep-editing": "به ویرایش ادامه دهید",
+ "language": "زبان",
+ "launch-extension": "اجرای اکستنشن",
+ "list-items-and-n-more": "{ items } and {nMore} more",
+ "live-update": "بروزرسانی برخط",
+ "locale": "منطقه",
+ "log-out": "خروج",
+ "login": "ورود",
+ "login-image-title": "سلام! خوش آمدید. از دیدار شما خرسندیم",
+ "login-title": "ورود به {brand}",
+ "manage-tags": "مدیریت برچسب ها",
+ "manage-tags-description": "برچسب ها را در سطح جهانی بروزرسانی یا حذف کنید.",
+ "medium-date": "تاریخ با طول متوسط",
+ "more": "ادامه...",
+ "name": "نام",
+ "no-alerts": "هیچ پیغامی وجود ندارد",
+ "no-bulk-actions-available": "هیچ اقدام انبوهی در دسترس نیست.",
+ "no-results": "بدون نتیجه",
+ "not-applicable": "قابل اجرا نیست",
+ "not-set": "تنظیم نشده است.",
+ "notify-assign-to-channel-success-with-count": "تعداد {count} مورد به با موفقیت به کانال { channelCode } اختصاص یافت.",
+ "notify-bulk-update-success": "تعداد { count } موجودیت { entity } بروزرسانی شد",
+ "notify-create-error": "خطایی روی داد، { entity } ایجاد نشد.",
+ "notify-create-success": "{ entity } ایجاد شد.",
+ "notify-delete-error": "خطایی روی داد، { entity } حذف نشد.",
+ "notify-delete-error-with-count": "تعداد {count} آیتم حذف نشد",
+ "notify-delete-success": "{ entity } حذف شد.",
+ "notify-delete-success-with-count": "تعداد {count} آیتم با موفقیت حذف شد.",
+ "notify-remove-from-channel-success-with-count": "{ count } آیتم با موفقیت از کانال حذف شد",
+ "notify-save-changes-error": "خطایی روی داد، تغییرات ذخیره نشد.",
+ "notify-saved-changes": "تغییرات ذخیره شد",
+ "notify-update-error": "خطایی روی داد، { entity } بروزرسانی نشد.",
+ "notify-update-success": "{ entity } بروزرسانی شد.",
+ "notify-updated-tags-success": "برچسب ها با موفقیت بروزرسانی شد",
+ "okay": "اوکی",
+ "operator-contains": "شامل",
+ "operator-eq": "برابر با",
+ "operator-gt": "برزرگتر از",
+ "operator-lt": "کوچکتر از",
+ "operator-not-contains": "شامل نباشد",
+ "operator-not-eq": "برابر نباشد",
+ "operator-notContains": "شامل نباشد",
+ "operator-regex": "فیلتر براساس رجکس",
+ "password": "رمزعبور",
+ "position": "موقعیت",
+ "price": "قیمت",
+ "price-with-tax": "قیمت با مالیات",
+ "private": "خصوصی",
+ "public": "عمومی",
+ "remember-me": "مرا به خاطر داشته باش",
+ "remove": "حذف",
+ "remove-from-channel": "حذف از کانال",
+ "remove-item-from-list": "حذف آیتم از لیست",
+ "reset-columns": "ریست ستون ها",
+ "results-count": "{ count } نتیجه",
+ "sample-formatting": "فرمت نمونه",
+ "search-and-filter-list": "جستجو و فیلتر لیست",
+ "search-by-name": "جستجو براساس نام",
+ "select": "انتخاب...",
+ "select-display-language": "زبان نمایش را انتخاب کنید",
+ "select-items-with-count": "{ count } آیتم را انتخاب کنید",
+ "select-products": "انتخاب محصولات",
+ "select-relation-id": "انتخاب شناسه",
+ "select-table-columns": "انتخاب ستون های جدول",
+ "select-today": "انتخاب امروز",
+ "select-variants": "انتخاب نوع محصول",
+ "seller": "فروشنده",
+ "set-language": "تنظیم زبان",
+ "short-date": "تاریخ با طول کوتاه",
+ "slug": "اسلاگ",
+ "start-date": "تاریخ شروع",
+ "status": "وضعیت",
+ "tags": "برچسب ها",
+ "theme": "پوسته",
+ "there-are-unsaved-changes": "تغییرات ذخیره نشده ای وجود دارد. تغییر صفحه باعث از بین رفتن این تغییرات می شود.",
+ "toggle-all": "تغییر وضعیت همه موارد",
+ "total-items": "{currentStart} تا {currentEnd} از {totalItems} آیتم",
+ "update": "بروزرسانی",
+ "updated-at": "بروزرسانی شده در تاریخ",
+ "username": "نام کاربری",
+ "value": "مقدار",
+ "view-contents": "مشاهده محتواها",
+ "view-next-month": "مشاهده ماه بعد",
+ "view-previous-month": "مشاهده ماه قبل",
+ "visibility": "وضعیت نمایش",
+ "with-selected": "با {count} آیتم انتخاب شده"
+ },
+ "customer": {
+ "add-customer-to-group": "افزودن مشتری به گروه",
+ "add-customer-to-groups-with-count": "افزودن مشتری به {count} گروه",
+ "add-customers-to-group": "افزودن مشتریان به گروه",
+ "add-customers-to-group-success": "تعداد {customerCount} مشتری به گروه \"{ groupName }\" اضافه شد.",
+ "add-customers-to-group-with-count": "افزودن {count} مشتری",
+ "add-customers-to-group-with-name": "افزودن مشتریان به گروه \"{ groupName }\"",
+ "addresses": "آدرس ها",
+ "city": "شهر",
+ "company": "شرکت",
+ "confirm-remove-customer-from-group": "مشتری از گروه حذف شود؟",
+ "country": "کشور",
+ "create-customer-group": "ایجاد گروه مشتریان",
+ "create-new-address": "ایجاد آدرس",
+ "create-new-customer": "ایجاد مشتری جدید",
+ "create-new-customer-group": "ایجاد گروه مشتریان جدید",
+ "customer": "مشتری",
+ "customer-group": "گروه مشتریان",
+ "customer-groups": "گروه های مشتریان",
+ "customer-history": "تاریخچه مشتری",
+ "customers": "مشتریان",
+ "default-billing-address": "صورتحساب پیشفرض",
+ "default-shipping-address": "حمل و نقل پیشفرض",
+ "email-address": "آدرس ایمیل",
+ "email-verification-sent": "یک ایمیل تأیید به { emailAddress } ارسال شد.",
+ "first-name": "نام",
+ "full-name": "نام کامل",
+ "guest": "مهمان",
+ "history-customer-added-to-group": "مشتری به گروه \"{ groupName }\" اضافه شد.",
+ "history-customer-address-created": "آدرس ایجاد شد",
+ "history-customer-address-deleted": "آدرس حذف شد",
+ "history-customer-address-updated": "آدرس بروزرسانی شد",
+ "history-customer-detail-updated": "جزئیات مشتری بروزرسانی شد",
+ "history-customer-email-update-requested": "به روز رسانی آدرس ایمیل درخواست شد",
+ "history-customer-email-update-verified": "بهروزرسانی آدرس ایمیل تأیید شد",
+ "history-customer-password-reset-requested": "بازنشانی رمز عبور درخواست شد",
+ "history-customer-password-reset-verified": "بازنشانی رمز عبور تأیید شد",
+ "history-customer-password-updated": "رمز عبور بروزرسانی شد",
+ "history-customer-registered": "مشتری ثبت نام کرد",
+ "history-customer-removed-from-group": "مشتری از گروه \"{ groupName }\" حذف شد",
+ "history-customer-verified": "مشتری تایید شد",
+ "history-using-external-auth-strategy": "براساس { strategy }",
+ "history-using-native-auth-strategy": "براساس آدرس ایمیل",
+ "last-login": "آخرین ورود",
+ "last-name": "نام خانوادگی",
+ "name": "نام",
+ "new-email-address": "آدرس ایمیل جدید",
+ "no-orders-placed": "سفارشی ثبت نشده است",
+ "not-a-member-of-any-groups": "این مشتری عضو هیچ گروهی نیست",
+ "old-email-address": "آدرس ایمیل قدیمی",
+ "orders": "سفارشات",
+ "password": "رمزعبور",
+ "phone-number": "موبایل/تلفن",
+ "postal-code": "کد پستی",
+ "province": "استان",
+ "registered": "ثبت نام شده",
+ "remove-customers-from-group-success": "تعداد {customerCount} مشتری از گروه \"{ groupName }\" حذف شد.",
+ "remove-from-group": "حذف از این گروه",
+ "search-customers-by-email": "جستجو براساس آدرس ایمیل",
+ "search-customers-by-email-last-name-postal-code": "جستجو براساس ایمیل / نام خانوادگی / کد پستی",
+ "select-customer": "انتخاب مشتری",
+ "set-as-default-billing-address": "تنظیم بعنوان صورتحساب پیشفرض",
+ "set-as-default-shipping-address": "تنظیم بعنوان حمل و نقل پیشفرض",
+ "street-line-1": "خیابان اصلی",
+ "street-line-2": "خیابان فرعی",
+ "title": "عنوان",
+ "update-customer-group": "بروزرسانی گروه مشتریان",
+ "verified": "تایید شده",
+ "view-group-members": "مشاهده اعضای گروه"
+ },
+ "dashboard": {
+ "add-widget": "افزودن ابزارک",
+ "latest-orders": "آخرین سفارشات",
+ "metric-average-order-value": "میانگین ارزش سفارش",
+ "metric-number-of-orders": "تعداد سفارشی",
+ "metric-order-total-value": "ارزش کل سفارش",
+ "metrics": "معیارها",
+ "orders-summary": "خلاصه سفارشات",
+ "remove-widget": "حذف ابزارک",
+ "thisMonth": "ماه جاری",
+ "thisWeek": "هفته جاری",
+ "today": "امروز",
+ "total-order-value": "ارزش کل",
+ "total-orders": "کل سفارشات",
+ "widget-resize": "تغییر ابعاد",
+ "widget-width": "عرض: {width}",
+ "yesterday": "دیروز"
+ },
+ "datetime": {
+ "ago-days": "{count} روز پیش",
+ "ago-hours": "{count} ساعت پیش",
+ "ago-minutes": "{count} دقیقه پیش",
+ "ago-seconds": "{count} ثانیه پیش",
+ "ago-years": "{count} سال پیش",
+ "duration-milliseconds": "{ms} میلی ثانیه",
+ "duration-minutes:seconds": "{m}:{s}",
+ "duration-seconds": "{s} ثانیه",
+ "month-apr": "آوریل",
+ "month-aug": "اوت",
+ "month-dec": "دسامبر",
+ "month-feb": "فوریه",
+ "month-jan": "ژانویه",
+ "month-jul": "جولای",
+ "month-jun": "ژوئن",
+ "month-mar": "مارس",
+ "month-may": "می",
+ "month-nov": "نوامبر",
+ "month-oct": "اکتبر",
+ "month-sep": "سپتامبر",
+ "time": "زمان",
+ "weekday-fr": "جمعه",
+ "weekday-mo": "دوشنبه",
+ "weekday-sa": "شنبه",
+ "weekday-su": "یکشنبه",
+ "weekday-th": "پنج شنبه",
+ "weekday-tu": "سه شنبه",
+ "weekday-we": "چهارشنبه"
+ },
+ "editor": {
+ "image-alt": "توضیحات",
+ "image-src": "منبع",
+ "image-title": "عنوان",
+ "insert-image": "درج تصویر",
+ "link-href": "آدرس/لیست",
+ "link-target": "نحوه اجرای لینک",
+ "link-title": "عنوان لینک",
+ "remove-link": "حذف",
+ "set-link": "تنظیم لینک"
+ },
+ "error": {
+ "403-forbidden": "شما در حال حاضر مجاز به دسترسی به \"{ path }\" نیستید. یا فاقد مجوز هستید یا جلسه شما منقضی شده است.",
+ "could-not-connect-to-server": "اتصال به سرور امکان پذیر نیست",
+ "facet-value-form-values-do-not-match": "تعداد مقادیر در فرم ویژگی ها با تعداد واقعی مقادیر مطابقت ندارد",
+ "health-check-failed": "بررسی سلامت سیستم ناموفق بود",
+ "no-default-shipping-zone-set": "این کانال منطقه حمل و نقل پیش فرض ندارد. این ممکن است باعث ایجاد خطا در محاسبه هزینه ارسال سفارش شود.",
+ "no-default-tax-zone-set": "این کانال فاقد منطقه مالیاتی پیش فرض است که باعث خطا در محاسبه قیمت ها می شود. لطفا یک منطقه ایجاد یا انتخاب کنید."
+ },
+ "marketing": {
+ "actions": "اقدامات",
+ "add-action": "افزودن اقدام",
+ "add-condition": "افزودن شرایط",
+ "conditions": "شرایط",
+ "coupon-code": "کد تخفیف",
+ "create-new-promotion": "ایجاد تبلیغ جدید",
+ "ends-at": "تاریخ پایان",
+ "per-customer-limit": "محدودیت به ازای مشتری",
+ "promotion": "تبلیغات",
+ "search-by-name-or-coupon-code": "جستجو براساس نام یا کد تخفیف",
+ "starts-at": "تاریخ شروع"
+ },
+ "nav": {
+ "administrators": "مدیران",
+ "assets": "دارایی ها",
+ "catalog": "کاتالوگ",
+ "channels": "کانال ها",
+ "collections": "مجموعه ها",
+ "countries": "کشورها",
+ "customer-groups": "گروه های مشتری",
+ "customers": "مشتریان",
+ "facets": "ویژگی ها",
+ "global-settings": "تنظیمات جهانی",
+ "inventory": "انبار",
+ "job-queue": "صف کارها",
+ "marketing": "بازاریابی",
+ "orders": "سفارشات",
+ "payment-methods": "روش های پرداخت",
+ "promotions": "تبلیغات",
+ "roles": "نقش ها",
+ "sales": "فروش",
+ "sellers": "فروشندگان",
+ "settings": "تنظیمات",
+ "shipping-methods": "روش های حمل و نقل",
+ "system": "سیستم",
+ "system-status": "وضعیت سیستم",
+ "tax-categories": "دسته های مالیاتی",
+ "tax-rates": "نرخ های مالیاتی",
+ "zones": "مناطق"
+ },
+ "order": {
+ "add-item-to-order": "افزودن آیتم به سفارش",
+ "add-note": "افزودن یادداشت",
+ "add-payment": "افزودن پرداخت",
+ "add-payment-to-order": "افزودن پرداخت به سفارش",
+ "add-payment-to-order-success": "پرداخت با موفقیت به سفارش اضافه شد",
+ "add-surcharge": "افزودن اضافه بها/جریمه",
+ "added-items": "آیتم های اضافه شده",
+ "amount": "میزان",
+ "arrange-additional-payment": "تنظیم پرداخت های جانبی",
+ "billing-address": "آدرس صورتحساب",
+ "cancel": "لغو",
+ "cancel-entire-order": "لغو کردن کل سفارش",
+ "cancel-fulfillment": "لغو کردن تکمیل سفارش",
+ "cancel-modification": "لغو کردن تغییرات سفارش",
+ "cancel-order": "لغو کردن سفارش یا آیتم ها",
+ "cancel-payment": "لغو کردن پرداخت",
+ "cancel-reason-customer-request": "درخواست مشتری",
+ "cancel-reason-not-available": "در دسترس نیست",
+ "cancel-selected-items": "لغو آیتم های انتخاب شده",
+ "cancel-specified-items": "لغو آیتم های مشخص شده",
+ "cancellation-reason": "دلیل لغو",
+ "cancelled-order-success": "سفارش با موفقیت لغو شد",
+ "complete-draft-order": "تکمیل پیش نویس سفارش",
+ "confirm-modifications": "تایید تغییرات سفارش",
+ "contents": "محتواها",
+ "create-fulfillment": "ثبت تکمیل سفارش",
+ "create-fulfillment-success": "تکمیل سفارش ثبت شد",
+ "customer": "مشتری",
+ "delete-draft-order": "حذف پیش نویس",
+ "draft-order": "سفارش پیش نویس",
+ "edit-billing-address": "ویرایش آدرس صورتحساب",
+ "edit-shipping-address": "ویرایش آدرس حمل و نقل",
+ "error-message": "پیغام خطا",
+ "existing-address": "آدرس موجود",
+ "existing-customer": "مشتری موجود",
+ "filter-is-active": "فعال است",
+ "fulfill": "ثبت تکمیل",
+ "fulfill-order": "تکمیل سفارش",
+ "fulfillment": "تکمیل",
+ "fulfillment-method": "روش تکمیل",
+ "history-coupon-code-applied": "کد تخفیف اعمال شد",
+ "history-coupon-code-removed": "کد تخفیف حذف شد",
+ "history-fulfillment-created": "تکمیل سفارش ثبت شد",
+ "history-fulfillment-delivered": "تحویل سفارش ثبت شد",
+ "history-fulfillment-shipped": "حمل و نقل سفارش ثبت شد",
+ "history-fulfillment-transition": "وضعیت تکمیل سفارش از {from} به {to} تغییر کرد",
+ "history-items-cancelled": "تعداد {count} آیتم لغو شد",
+ "history-order-cancelled": "سفارش لغو شد",
+ "history-order-created": "سفارش ایجاد شد",
+ "history-order-fulfilled": "سفارش تکمیل شد",
+ "history-order-modified": "سفارش ویرایش شد",
+ "history-order-transition": "وضعیت سفارش از {from} به {to} تغییر کرد",
+ "history-payment-settled": "پرداخت سفارش تسویه شد",
+ "history-payment-transition": "وضعیت پرداخت با شناسه #{id} از {from} به {to} تغییر کرد",
+ "history-refund-transition": "وضعیت بازگشت وجه با شناسه #{id} از {from} به {to} تغییر کرد",
+ "item-count": "تعداد {count} آیتم",
+ "line-fulfillment-all": "تمامی آیتم ها تکمیل شده است",
+ "line-fulfillment-none": "هیچ آیتمی تکمیل نشده است",
+ "line-fulfillment-partial": "تعداد { count } از { total } آیتم تکمیل شده است.",
+ "manually-transition-to-state": "تغییر وضعیت بصورت دستی",
+ "manually-transition-to-state-message": "به صورت دستی سفارش را به حالت دیگری منتقل کنید. توجه داشته باشید که وضعیت سفارش ها توسط قوانینی کنترل می شود که ممکن است از انتقال های خاصی جلوگیری کند.",
+ "modification-adding-items": "اضافه کردن تعداد {count} آیتم",
+ "modification-adding-surcharges": "اضافه کردن تعداد {count} اضافه بها / جریمه",
+ "modification-adjusting-lines": "تنظیم تعداد {count} خط",
+ "modification-not-settled": "تسویه نشده است",
+ "modification-recalculate-shipping": "محاسبه مجدد حمل و نقل",
+ "modification-settled": "تسویه شده است",
+ "modification-summary": "خلاصه تغییرات",
+ "modification-updating-billing-address": "بروزرسانی آدرس صورتحساب",
+ "modification-updating-shipping-address": "بروزرسانی آدرس حمل و نقل",
+ "modifications": "تغییرات",
+ "modify-order": "تغییر سفارش",
+ "modify-order-price-difference": "تفاوت قیمتی",
+ "net-price": "قیمت کل",
+ "note": "یادداشت",
+ "note-is-private": "یادداشت شخصی است",
+ "note-only-visible-to-administrators": "فقط برای مدیران قابل مشاهده است",
+ "note-visible-to-customer": "فقط برای مدیران و مشتری قابل مشاهده است",
+ "order": "سفارش",
+ "order-history": "تاریخچه سفارش",
+ "order-is-empty": "سفارش خالی است",
+ "order-state-diagram": "دیاگرام وضعیت سفارش",
+ "order-type": "نوع سفارش",
+ "order-type-aggregate": "تجمیعی",
+ "order-type-regular": "معمولی",
+ "order-type-seller": "فروشنده",
+ "orders": "سفارشات",
+ "payment": "پرداخت",
+ "payment-amount": "میران پرداخت",
+ "payment-metadata": "اطلاعات تکمیلی پرداخت",
+ "payment-method": "روش پرداخت",
+ "payment-state": "وضعیت پرداخت",
+ "payment-to-refund": "تبدیل پرداخت به بازگشت وجه / استرداد",
+ "payments": "پرداخت ها",
+ "placed-at": "انجام شده در",
+ "preview-changes": "پیش نمایش تغییرات",
+ "product-name": "نام محصول",
+ "product-sku": "شناسه انحصاری محصول",
+ "promotions-applied": "کد تخفیف تبلیغاتی اعمال شد",
+ "prorated-unit-price": "تخصیص قیمت واحد",
+ "quantity": "تعداد",
+ "refund": "بازگشت وجه / استرداد",
+ "refund-adjustment": "تنظیم استرداد وجه",
+ "refund-and-cancel-order": "استرداد وجه و لغو سفارش",
+ "refund-cancellation-reason": "علت لغو یا استرداد سفارش",
+ "refund-cancellation-reason-required": "علت لغو یا استرداد سفارش الزامی است",
+ "refund-metadata": "توضیحات تکمیلی استرداد وجه",
+ "refund-order-failed": "استرداد وجه ناموفق بود",
+ "refund-order-success": "ثبت استرداد وجه با موفقیت برای سفارش انجام شد",
+ "refund-reason": "علت استرداد وجه",
+ "refund-reason-customer-request": "درخواست مشتری",
+ "refund-reason-not-available": "در دسترس نیست",
+ "refund-shipping": "حمل و نقل استرداد وجه",
+ "refund-total": "کل مبلغ استرداد وجه",
+ "refund-total-error": "کل مبلغ استرداد وجه باید بین {min} و {max} باشد",
+ "refund-total-warning": "کل مبلغ استرداد وجه از مبلغ پرداختی انتخابی بیشتر است. مبلغ باقیمانده استرداد از سایر پرداخت ها مسترد خواهد شد.",
+ "refund-with-amount": "استرداد وجه به میزان {amount}",
+ "refunded-count": "تعداد {count} آیتم استرداد وجه شد",
+ "removed-items": "آیتم های حذف شده",
+ "search-by-order-filters": "جستجو براساس نام یا کد یا شناسه تراکنش",
+ "select-address": "انتخاب آدرس",
+ "select-shipping-method": "انتخاب شیوه حمل و نقل",
+ "select-state": "انتخاب وضعیت",
+ "seller-orders": "سفارشات فروشنده",
+ "set-billing-address": "تعیین آدرس صورتحساب",
+ "set-coupon-codes": "تعیین کد تخفیف",
+ "set-customer-for-order": "تعیین مشتری",
+ "set-fulfillment-state": "علامت زدن بعنوان {state}",
+ "set-shipping-address": "تنظیم آدرس حمل و نقل",
+ "set-shipping-method": "تنظیم شیوه حمل و نقل",
+ "settle-payment": "تسویه پرداخت",
+ "settle-payment-error": "تسویه پرداخت ناموفق بود",
+ "settle-payment-success": "تسویه پرداخت با موفقیت انجام شد",
+ "settle-refund": "تسویه استرداد وجه",
+ "settle-refund-manual-instructions": "پس از استرداد وجه بصورت دستی از طریق ارائهدهنده پرداخت خود ({method})، شناسه تراکنش را در اینجا ثبت کنید.",
+ "settle-refund-success": "تسویه استرداد وجه با موفقیت انجام شد",
+ "shipping": "حمل و نقل",
+ "shipping-address": "آدرس حمل و نقل",
+ "shipping-cancelled": "حمل و نقل لغو شده است",
+ "shipping-method": "شیوه حمل و نقل",
+ "state": "وضعیت",
+ "sub-total": "زیر مجموع",
+ "successfully-updated-fulfillment": "تکمیل با موفقیت بروزرسانی شد",
+ "surcharges": "اضافه بها / جریمه ها",
+ "tax-base": "پایه مالیات",
+ "tax-description": "توضیحات مالیات",
+ "tax-rate": "نرخ مالیات",
+ "tax-summary": "خلاصه مالیات",
+ "tax-total": "کل مالیات",
+ "total": "کل",
+ "tracking-code": "کد رهگیری",
+ "transaction-id": "شناسه تراکنش",
+ "transition-to-state": "انتقال به حالت { state }",
+ "transitioned-payment-to-state-success": "پرداخت با موفقیت به { state } منتقل شد",
+ "transitioned-to-state-success": "با موفقیت به { state } انتقال یافت",
+ "unable-to-transition-to-state-try-another": "سفارش به وضعیت \"{state}\" قابل انتقال نیست. لطفاً یک وضعیت جایگزین انتخاب کنید.",
+ "unfulfilled": "تکمیل نشده",
+ "unit-price": "قیمت واحد"
+ },
+ "settings": {
+ "add-countries-to-zone": "افزودن کشورها به ناحیه { zoneName }",
+ "add-countries-to-zone-success": "تعداد { countryCount } کشور به ناحیه \"{ zoneName }\" اضافه شد",
+ "add-products-to-test-order": "افزودن محصولات به سفارش تستی",
+ "administrator": "مدیر",
+ "channel": "کانال",
+ "channel-token": "توکن کانال",
+ "country": "کشور",
+ "create-new-channel": "ایجاد کانال جدید",
+ "create-new-country": "ایجاد کشور جدید",
+ "create-new-payment-method": "ایجاد روش پرداخت جدید",
+ "create-new-role": "ایجاد نقش جدید",
+ "create-new-seller": "ایجاد فروشنده جدید",
+ "create-new-shipping-method": "ایجاد روش حمل و نقل جدید",
+ "create-new-tax-category": "ایجاد دسته بندی مالیاتی جدید",
+ "create-new-tax-rate": "ایجاد نرخ مالیاتی جدید",
+ "create-new-zone": "ایجاد ناحیه جدید",
+ "default-currency": "واحد پولی پیش فرض",
+ "default-role-label": "این یک نقش پیشفرض است و نمیتوان آن را تغییر داد",
+ "default-shipping-zone": "ناحیه حمل و نقل پیشفرض",
+ "default-tax-zone": "ناحیه مالیاتی پیشفرض",
+ "defaults": "پیش فرض ها",
+ "eligible": "مطلوب",
+ "email-address": "آدرس ایمیل",
+ "email-address-or-identifier": "آدرس ایمیل یا شناسه انحصاری",
+ "first-name": "نام",
+ "fulfillment-handler": "کنترل کننده تکمیل سفارش",
+ "global-available-languages-tooltip": "زبان های قابل استفاده در کانال ها را تعیین میکند. سپس هر کانال می تواند زیرمجموعه ای از این زبان ها را پشتیبانی کند.",
+ "global-out-of-stock-threshold": "آستانه جهانی اتمام موجودی کالا",
+ "global-out-of-stock-threshold-tooltip": "سطح موجودی را تعیین می کند که براساس آن یک نوع کالا، ناموجود در نظر گرفته می شود. استفاده از یک مقدار منفی، قابلیت ثبت سفارش پشتیبان را فعال می کند. البته این تنظیم می تواند توسط انواع محصولات براساس تنظیمات هر نوع محصول نادیده گرفته شود.",
+ "last-name": "نام خانوادگی",
+ "no-eligible-shipping-methods": "هیچ روش حمل و نقل مطلوبی یافت نشد",
+ "password": "رمزعبور",
+ "payment-eligibility-checker": "بررسی واجد شرایط پرداخت بودن",
+ "payment-handler": "کنترل کننده پرداخت",
+ "payment-method": "شیوه پرداخت",
+ "permissions": "مجوزها",
+ "prices-include-tax": "قیمت ها شامل مالیات برای منطقه پیش فرض می باشد",
+ "profile": "پروفایل",
+ "rate": "نرخ",
+ "remove-countries-from-zone-success": "تعداد { countryCount } کشور از منطقه \"{ zoneName }\" حذف شد",
+ "remove-from-zone": "حذف آیتم از ناحیه",
+ "role": "نقش",
+ "roles": "نقش ها",
+ "search-by-product-name-or-sku": "جستجو براساس نام محصول یا شناسه انحصاری محصول",
+ "seller": "فروشنده",
+ "shipping-calculator": "ماشین حساب حمل و نقل",
+ "shipping-eligibility-checker": "بررسی واجد شرایط حمل و نقل بودن",
+ "shipping-method": "شیوه حمل و نقل",
+ "tax-category": "دسته بندی مالیاتی",
+ "tax-rate": "نرخ مالیات",
+ "test-address": "بررسی آدرس",
+ "test-result": "نتایج بررسی",
+ "test-shipping-method": "بررسی روش حمل و نقل",
+ "test-shipping-methods": "بررسی روش های حمل و نقل",
+ "track-inventory-default": "مدیریت انبار بصورت پیشفرض فعال باشد",
+ "view-zone-members": "مشاهده اعضا",
+ "zone": "ناحیه"
+ },
+ "state": {
+ "adding-items": "افزودن آیتم ها",
+ "arranging-additional-payment": "مرتب سازی پرداخت های تکمیلی",
+ "arranging-payment": "مرتب سازی پرداخت",
+ "authorized": "مجاز",
+ "cancelled": "لغو شده",
+ "created": "ایجاد شده",
+ "declined": "رد شده",
+ "delivered": "تحویل شده",
+ "draft": "پیش نویس",
+ "error": "خطا",
+ "failed": "ناموفق",
+ "modifying": "درحال تغییر",
+ "partially-delivered": "بخشی تحویل شده",
+ "partially-shipped": "بخشی در حمل و نقل",
+ "payment-authorized": "پرداخت مجاز بوده",
+ "payment-settled": "پرداخت تسویه شده",
+ "pending": "درانتظار",
+ "settled": "تسویه شده",
+ "shipped": "در حمل و نقل"
+ },
+ "system": {
+ "all-job-queues": "صف صف های وظایف",
+ "health-all-systems-up": "همه بخش ها بدرستی کار میکند.",
+ "health-error": "خطا! یک بخش یا بیشتر از سیستم از دسترس خارج شده است.",
+ "health-last-checked": "زمان آخرین بررسی",
+ "health-message": "پیغام",
+ "health-refresh": "بروزرسانی",
+ "health-status": "وضعیت",
+ "health-status-down": "پایین",
+ "health-status-up": "بالا",
+ "hide-settled-jobs": "پنهان کردن وظایف تکمیل شده",
+ "job-data": "اطلاعات کار",
+ "job-duration": "مدت زمان کار",
+ "job-error": "خطای کار",
+ "job-queue-name": "نام صف",
+ "job-result": "نتیجه کار",
+ "job-state": "وضعیت کار"
+ }
+}
\ No newline at end of file
diff --git a/packages/admin-ui/src/lib/static/vendure-ui-config.json b/packages/admin-ui/src/lib/static/vendure-ui-config.json
index 69cd54b9bf..a9a72f9851 100644
--- a/packages/admin-ui/src/lib/static/vendure-ui-config.json
+++ b/packages/admin-ui/src/lib/static/vendure-ui-config.json
@@ -21,7 +21,8 @@
"fr",
"ru",
"uk",
- "it"
+ "it",
+ "fa"
],
"brand": "",
"hideVendureBranding": false,
diff --git a/packages/asset-server-plugin/package.json b/packages/asset-server-plugin/package.json
index a1338c49a9..31384d6a63 100644
--- a/packages/asset-server-plugin/package.json
+++ b/packages/asset-server-plugin/package.json
@@ -1,6 +1,6 @@
{
"name": "@vendure/asset-server-plugin",
- "version": "2.1.0-next.6",
+ "version": "2.1.0-next.7",
"main": "lib/index.js",
"types": "lib/index.d.ts",
"files": [
@@ -27,8 +27,8 @@
"@types/fs-extra": "^11.0.1",
"@types/node-fetch": "^2.5.8",
"@types/sharp": "^0.30.4",
- "@vendure/common": "2.1.0-next.6",
- "@vendure/core": "2.1.0-next.6",
+ "@vendure/common": "2.1.0-next.7",
+ "@vendure/core": "2.1.0-next.7",
"express": "^4.17.1",
"node-fetch": "^2.6.7",
"rimraf": "^3.0.2",
diff --git a/packages/cli/package.json b/packages/cli/package.json
index 9706d64179..2c82e03d5d 100644
--- a/packages/cli/package.json
+++ b/packages/cli/package.json
@@ -1,6 +1,6 @@
{
"name": "@vendure/cli",
- "version": "2.1.0-next.6",
+ "version": "2.1.0-next.7",
"description": "A modern, headless ecommerce framework",
"repository": {
"type": "git",
@@ -34,7 +34,7 @@
],
"dependencies": {
"@clack/prompts": "^0.7.0",
- "@vendure/common": "2.1.0-next.6",
+ "@vendure/common": "2.1.0-next.7",
"change-case": "^4.1.2",
"commander": "^11.0.0",
"fs-extra": "^11.1.1",
diff --git a/packages/common/package.json b/packages/common/package.json
index e2e51b2072..9d5eb9594c 100644
--- a/packages/common/package.json
+++ b/packages/common/package.json
@@ -1,6 +1,6 @@
{
"name": "@vendure/common",
- "version": "2.1.0-next.6",
+ "version": "2.1.0-next.7",
"main": "index.js",
"license": "MIT",
"scripts": {
diff --git a/packages/core/e2e/order-promotion.e2e-spec.ts b/packages/core/e2e/order-promotion.e2e-spec.ts
index 6241535566..669e5301fb 100644
--- a/packages/core/e2e/order-promotion.e2e-spec.ts
+++ b/packages/core/e2e/order-promotion.e2e-spec.ts
@@ -837,6 +837,7 @@ describe('Promotions applied to Orders', () => {
describe('discountOnItemWithFacets', () => {
const couponCode = '50%_off_sale_items';
let promotion: Codegen.PromotionFragment;
+
function getItemSale1Line<
T extends Array<
| CodegenShop.UpdatedOrderFragment['lines'][number]
@@ -1943,78 +1944,160 @@ describe('Promotions applied to Orders', () => {
});
// https://github.com/vendure-ecommerce/vendure/issues/2385
- it('prevents negative line price', async () => {
- await shopClient.asAnonymousUser();
- const item1000 = getVariantBySlug('item-1000')!;
+ describe('prevents negative line price', () => {
+ const TAX_INCLUDED_CHANNEL_TOKEN_2 = 'tax_included_channel_2';
const couponCode1 = '100%_off';
const couponCode2 = '100%_off';
- await createPromotion({
- enabled: true,
- name: '100% discount ',
- couponCode: couponCode1,
- conditions: [],
- actions: [
- {
- code: productsPercentageDiscount.code,
- arguments: [
- { name: 'discount', value: '100' },
- {
- name: 'productVariantIds',
- value: `["${item1000.id}"]`,
- },
- ],
+ let taxIncludedChannel: Codegen.ChannelFragment;
+
+ beforeAll(async () => {
+ // Create a channel where the prices include tax, so we can ensure
+ // that PromotionActions are working as expected when taxes are included
+ const { createChannel } = await adminClient.query<
+ Codegen.CreateChannelMutation,
+ Codegen.CreateChannelMutationVariables
+ >(CREATE_CHANNEL, {
+ input: {
+ code: 'tax-included-channel-2',
+ currencyCode: CurrencyCode.GBP,
+ pricesIncludeTax: true,
+ defaultTaxZoneId: 'T_1',
+ defaultShippingZoneId: 'T_1',
+ defaultLanguageCode: LanguageCode.en,
+ token: TAX_INCLUDED_CHANNEL_TOKEN_2,
},
- ],
- });
- await createPromotion({
- enabled: true,
- name: '20% discount ',
- couponCode: couponCode2,
- conditions: [],
- actions: [
- {
- code: productsPercentageDiscount.code,
- arguments: [
- { name: 'discount', value: '20' },
- {
- name: 'productVariantIds',
- value: `["${item1000.id}"]`,
- },
- ],
+ });
+ taxIncludedChannel = createChannel as Codegen.ChannelFragment;
+ await adminClient.query<
+ Codegen.AssignProductsToChannelMutation,
+ Codegen.AssignProductsToChannelMutationVariables
+ >(ASSIGN_PRODUCT_TO_CHANNEL, {
+ input: {
+ channelId: taxIncludedChannel.id,
+ priceFactor: 1,
+ productIds: products.map(p => p.id),
},
- ],
+ });
+ const item1000 = getVariantBySlug('item-1000')!;
+ const promo100 = await createPromotion({
+ enabled: true,
+ name: '100% discount ',
+ couponCode: couponCode1,
+ conditions: [],
+ actions: [
+ {
+ code: productsPercentageDiscount.code,
+ arguments: [
+ { name: 'discount', value: '100' },
+ {
+ name: 'productVariantIds',
+ value: `["${item1000.id}"]`,
+ },
+ ],
+ },
+ ],
+ });
+ const promo20 = await createPromotion({
+ enabled: true,
+ name: '20% discount ',
+ couponCode: couponCode2,
+ conditions: [],
+ actions: [
+ {
+ code: productsPercentageDiscount.code,
+ arguments: [
+ { name: 'discount', value: '20' },
+ {
+ name: 'productVariantIds',
+ value: `["${item1000.id}"]`,
+ },
+ ],
+ },
+ ],
+ });
+ await adminClient.query<
+ Codegen.AssignPromotionToChannelMutation,
+ Codegen.AssignPromotionToChannelMutationVariables
+ >(ASSIGN_PROMOTIONS_TO_CHANNEL, {
+ input: {
+ promotionIds: [promo100.id, promo20.id],
+ channelId: taxIncludedChannel.id,
+ },
+ });
});
- await shopClient.query<
- CodegenShop.ApplyCouponCodeMutation,
- CodegenShop.ApplyCouponCodeMutationVariables
- >(APPLY_COUPON_CODE, { couponCode: couponCode1 });
+ it('prices exclude tax', async () => {
+ await shopClient.asAnonymousUser();
+ const item1000 = getVariantBySlug('item-1000')!;
- await shopClient.query<
- CodegenShop.AddItemToOrderMutation,
- CodegenShop.AddItemToOrderMutationVariables
- >(ADD_ITEM_TO_ORDER, {
- productVariantId: item1000.id,
- quantity: 1,
+ await shopClient.query<
+ CodegenShop.ApplyCouponCodeMutation,
+ CodegenShop.ApplyCouponCodeMutationVariables
+ >(APPLY_COUPON_CODE, { couponCode: couponCode1 });
+
+ await shopClient.query<
+ CodegenShop.AddItemToOrderMutation,
+ CodegenShop.AddItemToOrderMutationVariables
+ >(ADD_ITEM_TO_ORDER, {
+ productVariantId: item1000.id,
+ quantity: 1,
+ });
+
+ const { activeOrder: check1 } = await shopClient.query(
+ GET_ACTIVE_ORDER,
+ );
+
+ expect(check1!.lines[0].discountedUnitPriceWithTax).toBe(0);
+ expect(check1!.totalWithTax).toBe(0);
+
+ await shopClient.query<
+ CodegenShop.ApplyCouponCodeMutation,
+ CodegenShop.ApplyCouponCodeMutationVariables
+ >(APPLY_COUPON_CODE, { couponCode: couponCode2 });
+
+ const { activeOrder: check2 } = await shopClient.query(
+ GET_ACTIVE_ORDER,
+ );
+ expect(check2!.lines[0].discountedUnitPriceWithTax).toBe(0);
+ expect(check2!.totalWithTax).toBe(0);
});
- const { activeOrder: check1 } = await shopClient.query(
- GET_ACTIVE_ORDER,
- );
+ it('prices include tax', async () => {
+ shopClient.setChannelToken(TAX_INCLUDED_CHANNEL_TOKEN_2);
+ await shopClient.asAnonymousUser();
+ const item1000 = getVariantBySlug('item-1000')!;
- expect(check1!.lines[0].discountedUnitPriceWithTax).toBe(0);
- expect(check1!.totalWithTax).toBe(0);
+ await shopClient.query<
+ CodegenShop.ApplyCouponCodeMutation,
+ CodegenShop.ApplyCouponCodeMutationVariables
+ >(APPLY_COUPON_CODE, { couponCode: couponCode1 });
- await shopClient.query<
- CodegenShop.ApplyCouponCodeMutation,
- CodegenShop.ApplyCouponCodeMutationVariables
- >(APPLY_COUPON_CODE, { couponCode: couponCode2 });
+ await shopClient.query<
+ CodegenShop.AddItemToOrderMutation,
+ CodegenShop.AddItemToOrderMutationVariables
+ >(ADD_ITEM_TO_ORDER, {
+ productVariantId: item1000.id,
+ quantity: 1,
+ });
- const { activeOrder: check2 } = await shopClient.query(
- GET_ACTIVE_ORDER,
- );
- expect(check2!.lines[0].discountedUnitPriceWithTax).toBe(0);
- expect(check2!.totalWithTax).toBe(0);
+ const { activeOrder: check1 } = await shopClient.query(
+ GET_ACTIVE_ORDER,
+ );
+
+ expect(check1!.lines[0].discountedUnitPriceWithTax).toBe(0);
+ expect(check1!.totalWithTax).toBe(0);
+
+ await shopClient.query<
+ CodegenShop.ApplyCouponCodeMutation,
+ CodegenShop.ApplyCouponCodeMutationVariables
+ >(APPLY_COUPON_CODE, { couponCode: couponCode2 });
+
+ const { activeOrder: check2 } = await shopClient.query(
+ GET_ACTIVE_ORDER,
+ );
+ expect(check2!.lines[0].discountedUnitPriceWithTax).toBe(0);
+ expect(check2!.totalWithTax).toBe(0);
+ });
});
async function getProducts() {
diff --git a/packages/core/package.json b/packages/core/package.json
index ecf9752979..54577a915d 100644
--- a/packages/core/package.json
+++ b/packages/core/package.json
@@ -1,6 +1,6 @@
{
"name": "@vendure/core",
- "version": "2.1.0-next.6",
+ "version": "2.1.0-next.7",
"description": "A modern, headless ecommerce framework",
"repository": {
"type": "git",
@@ -50,7 +50,7 @@
"@nestjs/testing": "10.2.1",
"@nestjs/typeorm": "10.0.0",
"@types/fs-extra": "^9.0.1",
- "@vendure/common": "2.1.0-next.6",
+ "@vendure/common": "2.1.0-next.7",
"bcrypt": "^5.1.1",
"body-parser": "^1.20.2",
"chalk": "^4.1.2",
diff --git a/packages/core/src/config/promotion/actions/product-percentage-discount-action.ts b/packages/core/src/config/promotion/actions/product-percentage-discount-action.ts
index 10a6b92e64..2f1bb55ee0 100644
--- a/packages/core/src/config/promotion/actions/product-percentage-discount-action.ts
+++ b/packages/core/src/config/promotion/actions/product-percentage-discount-action.ts
@@ -23,7 +23,6 @@ export const productsPercentageDiscount = new PromotionItemAction({
label: [{ languageCode: LanguageCode.en, value: 'Product variants' }],
},
},
-
execute(ctx, orderLine, args) {
if (lineContainsIds(args.productVariantIds, orderLine)) {
const unitPrice = ctx.channel.pricesIncludeTax ? orderLine.unitPriceWithTax : orderLine.unitPrice;
diff --git a/packages/core/src/entity/order-line/order-line.entity.ts b/packages/core/src/entity/order-line/order-line.entity.ts
index 198d75df8e..990d01e03b 100644
--- a/packages/core/src/entity/order-line/order-line.entity.ts
+++ b/packages/core/src/entity/order-line/order-line.entity.ts
@@ -332,7 +332,8 @@ export class OrderLine extends VendureEntity implements HasCustomFields {
addAdjustment(adjustment: Adjustment) {
// We should not allow adding adjustments which would
// result in a negative unit price
- const maxDiscount = this.proratedLinePrice * -1;
+ const maxDiscount =
+ (this.listPriceIncludesTax ? this.proratedLinePriceWithTax : this.proratedLinePrice) * -1;
const limitedAdjustment: Adjustment = {
...adjustment,
amount: Math.max(maxDiscount, adjustment.amount),
diff --git a/packages/create/package.json b/packages/create/package.json
index f69ce08781..d0faa1a3ef 100644
--- a/packages/create/package.json
+++ b/packages/create/package.json
@@ -1,6 +1,6 @@
{
"name": "@vendure/create",
- "version": "2.1.0-next.6",
+ "version": "2.1.0-next.7",
"license": "MIT",
"bin": {
"create": "./index.js"
@@ -28,14 +28,14 @@
"@types/fs-extra": "^9.0.1",
"@types/handlebars": "^4.1.0",
"@types/semver": "^6.2.2",
- "@vendure/core": "2.1.0-next.6",
+ "@vendure/core": "2.1.0-next.7",
"rimraf": "^3.0.2",
"ts-node": "^10.9.1",
"typescript": "4.9.5"
},
"dependencies": {
"@clack/prompts": "^0.7.0",
- "@vendure/common": "2.1.0-next.6",
+ "@vendure/common": "2.1.0-next.7",
"commander": "^11.0.0",
"cross-spawn": "^7.0.3",
"detect-port": "^1.5.1",
diff --git a/packages/dev-server/package.json b/packages/dev-server/package.json
index eb01e0428c..fb970462a3 100644
--- a/packages/dev-server/package.json
+++ b/packages/dev-server/package.json
@@ -1,6 +1,6 @@
{
"name": "dev-server",
- "version": "2.1.0-next.6",
+ "version": "2.1.0-next.7",
"main": "index.js",
"license": "MIT",
"private": true,
@@ -15,18 +15,18 @@
},
"dependencies": {
"@nestjs/axios": "^3.0.0",
- "@vendure/admin-ui-plugin": "2.1.0-next.6",
- "@vendure/asset-server-plugin": "2.1.0-next.6",
- "@vendure/common": "2.1.0-next.6",
- "@vendure/core": "2.1.0-next.6",
- "@vendure/elasticsearch-plugin": "2.1.0-next.6",
- "@vendure/email-plugin": "2.1.0-next.6",
+ "@vendure/admin-ui-plugin": "2.1.0-next.7",
+ "@vendure/asset-server-plugin": "2.1.0-next.7",
+ "@vendure/common": "2.1.0-next.7",
+ "@vendure/core": "2.1.0-next.7",
+ "@vendure/elasticsearch-plugin": "2.1.0-next.7",
+ "@vendure/email-plugin": "2.1.0-next.7",
"typescript": "4.9.5"
},
"devDependencies": {
"@types/csv-stringify": "^3.1.0",
- "@vendure/testing": "2.1.0-next.6",
- "@vendure/ui-devkit": "2.1.0-next.6",
+ "@vendure/testing": "2.1.0-next.7",
+ "@vendure/ui-devkit": "2.1.0-next.7",
"commander": "^7.1.0",
"concurrently": "^8.2.1",
"csv-stringify": "^5.3.3",
diff --git a/packages/elasticsearch-plugin/package.json b/packages/elasticsearch-plugin/package.json
index b6aa03a2fb..38a4510940 100644
--- a/packages/elasticsearch-plugin/package.json
+++ b/packages/elasticsearch-plugin/package.json
@@ -1,6 +1,6 @@
{
"name": "@vendure/elasticsearch-plugin",
- "version": "2.1.0-next.6",
+ "version": "2.1.0-next.7",
"license": "MIT",
"main": "lib/index.js",
"types": "lib/index.d.ts",
@@ -26,8 +26,8 @@
"fast-deep-equal": "^3.1.3"
},
"devDependencies": {
- "@vendure/common": "2.1.0-next.6",
- "@vendure/core": "2.1.0-next.6",
+ "@vendure/common": "2.1.0-next.7",
+ "@vendure/core": "2.1.0-next.7",
"rimraf": "^3.0.2",
"typescript": "4.9.5"
}
diff --git a/packages/email-plugin/package.json b/packages/email-plugin/package.json
index 403fc6f0e6..58ead0b4da 100644
--- a/packages/email-plugin/package.json
+++ b/packages/email-plugin/package.json
@@ -1,6 +1,6 @@
{
"name": "@vendure/email-plugin",
- "version": "2.1.0-next.6",
+ "version": "2.1.0-next.7",
"license": "MIT",
"main": "lib/index.js",
"types": "lib/index.d.ts",
@@ -35,8 +35,8 @@
"@types/fs-extra": "^9.0.1",
"@types/handlebars": "^4.1.0",
"@types/mjml": "^4.0.4",
- "@vendure/common": "2.1.0-next.6",
- "@vendure/core": "2.1.0-next.6",
+ "@vendure/common": "2.1.0-next.7",
+ "@vendure/core": "2.1.0-next.7",
"rimraf": "^3.0.2",
"typescript": "4.9.5"
}
diff --git a/packages/harden-plugin/package.json b/packages/harden-plugin/package.json
index 6406288e4c..b88a276d03 100644
--- a/packages/harden-plugin/package.json
+++ b/packages/harden-plugin/package.json
@@ -1,6 +1,6 @@
{
"name": "@vendure/harden-plugin",
- "version": "2.1.0-next.6",
+ "version": "2.1.0-next.7",
"license": "MIT",
"main": "lib/index.js",
"types": "lib/index.d.ts",
@@ -21,7 +21,7 @@
"graphql-query-complexity": "^0.12.0"
},
"devDependencies": {
- "@vendure/common": "2.1.0-next.6",
- "@vendure/core": "2.1.0-next.6"
+ "@vendure/common": "2.1.0-next.7",
+ "@vendure/core": "2.1.0-next.7"
}
}
diff --git a/packages/job-queue-plugin/package.json b/packages/job-queue-plugin/package.json
index 16e00e3bc7..647557f534 100644
--- a/packages/job-queue-plugin/package.json
+++ b/packages/job-queue-plugin/package.json
@@ -1,6 +1,6 @@
{
"name": "@vendure/job-queue-plugin",
- "version": "2.1.0-next.6",
+ "version": "2.1.0-next.7",
"license": "MIT",
"main": "package/index.js",
"types": "package/index.d.ts",
@@ -23,8 +23,8 @@
},
"devDependencies": {
"@google-cloud/pubsub": "^2.8.0",
- "@vendure/common": "2.1.0-next.6",
- "@vendure/core": "2.1.0-next.6",
+ "@vendure/common": "2.1.0-next.7",
+ "@vendure/core": "2.1.0-next.7",
"bullmq": "^3.15.5",
"ioredis": "^5.3.0",
"rimraf": "^3.0.2",
diff --git a/packages/payments-plugin/package.json b/packages/payments-plugin/package.json
index 935c2c4a4f..21b9832e86 100644
--- a/packages/payments-plugin/package.json
+++ b/packages/payments-plugin/package.json
@@ -1,6 +1,6 @@
{
"name": "@vendure/payments-plugin",
- "version": "2.1.0-next.6",
+ "version": "2.1.0-next.7",
"license": "MIT",
"main": "package/index.js",
"types": "package/index.d.ts",
@@ -46,9 +46,9 @@
"@mollie/api-client": "^3.7.0",
"@types/braintree": "^2.22.15",
"@types/localtunnel": "2.0.1",
- "@vendure/common": "2.1.0-next.6",
- "@vendure/core": "2.1.0-next.6",
- "@vendure/testing": "2.1.0-next.6",
+ "@vendure/common": "2.1.0-next.7",
+ "@vendure/core": "2.1.0-next.7",
+ "@vendure/testing": "2.1.0-next.7",
"braintree": "^3.16.0",
"localtunnel": "2.0.2",
"nock": "^13.1.4",
diff --git a/packages/testing/package.json b/packages/testing/package.json
index f6eb0f5e8e..8714cb747d 100644
--- a/packages/testing/package.json
+++ b/packages/testing/package.json
@@ -1,6 +1,6 @@
{
"name": "@vendure/testing",
- "version": "2.1.0-next.6",
+ "version": "2.1.0-next.7",
"description": "End-to-end testing tools for Vendure projects",
"keywords": [
"vendure",
@@ -38,7 +38,7 @@
"dependencies": {
"@graphql-typed-document-node/core": "^3.2.0",
"@types/node-fetch": "^2.6.4",
- "@vendure/common": "2.1.0-next.6",
+ "@vendure/common": "2.1.0-next.7",
"faker": "^4.1.0",
"form-data": "^4.0.0",
"graphql": "16.8.0",
@@ -49,7 +49,7 @@
"devDependencies": {
"@types/mysql": "^2.15.15",
"@types/pg": "^7.14.5",
- "@vendure/core": "2.1.0-next.6",
+ "@vendure/core": "2.1.0-next.7",
"mysql": "^2.18.1",
"pg": "^8.4.0",
"rimraf": "^3.0.0",
diff --git a/packages/ui-devkit/package.json b/packages/ui-devkit/package.json
index 15be5b095e..9577c20bc4 100644
--- a/packages/ui-devkit/package.json
+++ b/packages/ui-devkit/package.json
@@ -1,6 +1,6 @@
{
"name": "@vendure/ui-devkit",
- "version": "2.1.0-next.6",
+ "version": "2.1.0-next.7",
"description": "A library for authoring Vendure Admin UI extensions",
"keywords": [
"vendure",
@@ -40,8 +40,8 @@
"@angular/cli": "^16.2.0",
"@angular/compiler": "^16.2.2",
"@angular/compiler-cli": "^16.2.2",
- "@vendure/admin-ui": "2.1.0-next.6",
- "@vendure/common": "2.1.0-next.6",
+ "@vendure/admin-ui": "2.1.0-next.7",
+ "@vendure/common": "2.1.0-next.7",
"chalk": "^4.1.0",
"chokidar": "^3.5.3",
"fs-extra": "^11.1.1",
@@ -51,7 +51,7 @@
"devDependencies": {
"@rollup/plugin-node-resolve": "^15.2.1",
"@types/fs-extra": "^11.0.1",
- "@vendure/core": "2.1.0-next.6",
+ "@vendure/core": "2.1.0-next.7",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"rimraf": "^3.0.2",