diff --git a/engine/blog/admin.py b/engine/blog/admin.py
index 54e427b3..0c44db09 100644
--- a/engine/blog/admin.py
+++ b/engine/blog/admin.py
@@ -1,6 +1,8 @@
from django.contrib.admin import register
from django.db.models import TextField
-from django_summernote.admin import SummernoteModelAdminMixin
+from django_summernote.admin import (
+ SummernoteModelAdminMixin,
+)
from unfold.admin import ModelAdmin
from unfold_markdown import MarkdownWidget
@@ -11,7 +13,7 @@ from engine.core.admin import ActivationActionsMixin, FieldsetsMixin
@register(Post)
class PostAdmin(
SummernoteModelAdminMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin
-): # type: ignore [misc, type-arg]
+):
list_display = ("title", "author", "slug", "created", "modified")
list_filter = ("author", "tags", "created", "modified")
search_fields = ("title", "content", "slug")
@@ -40,7 +42,7 @@ class PostAdmin(
@register(PostTag)
-class PostTagAdmin(ModelAdmin): # type: ignore [type-arg]
+class PostTagAdmin(ModelAdmin):
list_display = ("tag_name", "name")
search_fields = ("tag_name", "name")
ordering = ("tag_name",)
diff --git a/engine/blog/apps.py b/engine/blog/apps.py
index 500c1bdd..87fa6ba2 100644
--- a/engine/blog/apps.py
+++ b/engine/blog/apps.py
@@ -9,5 +9,5 @@ class BlogConfig(AppConfig):
# noinspection PyUnresolvedReferences
def ready(self) -> None:
- import engine.blog.elasticsearch.documents
+ import engine.blog.elasticsearch.documents # noqa: F401
import engine.blog.signals # noqa: F401
diff --git a/engine/blog/elasticsearch/documents.py b/engine/blog/elasticsearch/documents.py
index 779c644a..122b7bad 100644
--- a/engine/blog/elasticsearch/documents.py
+++ b/engine/blog/elasticsearch/documents.py
@@ -10,7 +10,7 @@ from engine.core.elasticsearch import (
from engine.core.elasticsearch.documents import BaseDocument
-class PostDocument(ActiveOnlyMixin, BaseDocument): # type: ignore [misc]
+class PostDocument(ActiveOnlyMixin, BaseDocument):
title = fields.TextField(
attr="title",
analyzer="standard",
diff --git a/engine/blog/filters.py b/engine/blog/filters.py
index fd6f1db3..0b8fc327 100644
--- a/engine/blog/filters.py
+++ b/engine/blog/filters.py
@@ -4,7 +4,7 @@ from engine.blog.models import Post
from engine.core.filters import CaseInsensitiveListFilter
-class PostFilter(FilterSet): # type: ignore [misc]
+class PostFilter(FilterSet):
uuid = UUIDFilter(field_name="uuid", lookup_expr="exact")
slug = CharFilter(field_name="slug", lookup_expr="exact")
author = UUIDFilter(field_name="author__uuid", lookup_expr="exact")
diff --git a/engine/blog/graphene/object_types.py b/engine/blog/graphene/object_types.py
index 08cef11e..1039e38c 100644
--- a/engine/blog/graphene/object_types.py
+++ b/engine/blog/graphene/object_types.py
@@ -1,20 +1,20 @@
-import graphene
-from graphene import relay
+from django.http import HttpRequest
+from graphene import List, String, relay
from graphene_django import DjangoObjectType
from engine.blog.models import Post, PostTag
class PostType(DjangoObjectType):
- tags = graphene.List(lambda: PostTagType)
- content = graphene.String()
+ tags = List(lambda: PostTagType)
+ content = String()
class Meta:
model = Post
fields = ["tags", "content", "title", "slug"]
interfaces = (relay.Node,)
- def resolve_content(self: Post, _info):
+ def resolve_content(self: Post, _info: HttpRequest) -> str:
return self.content.html.replace("\n", "
")
diff --git a/engine/blog/locale/ar_AR/LC_MESSAGES/django.po b/engine/blog/locale/ar_AR/LC_MESSAGES/django.po
index 2118c458..36928391 100644
--- a/engine/blog/locale/ar_AR/LC_MESSAGES/django.po
+++ b/engine/blog/locale/ar_AR/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: LANGUAGE \n"
@@ -25,7 +25,7 @@ msgstr "سرد جميع المشاركات (للقراءة فقط)"
msgid "retrieve a single post (read-only)"
msgstr "استرداد منشور واحد (للقراءة فقط)"
-#: engine/blog/models.py:13
+#: engine/blog/models.py:20
msgid ""
"Represents a blog post model. The Post class defines the structure and "
"behavior of a blog post. It includes attributes for author, title, content, "
@@ -39,62 +39,62 @@ msgstr ""
"والعلامات المرتبطة بها. يفرض الصنف قيودًا مثل طلب إما محتوى أو مرفق ملف ولكن "
"ليس كلاهما في نفس الوقت. كما أنها تدعم إنشاء سبيكة تلقائية بناءً على العنوان."
-#: engine/blog/models.py:24
+#: engine/blog/models.py:41
msgid "post title"
msgstr "عنوان المنشور"
-#: engine/blog/models.py:24
+#: engine/blog/models.py:42
msgid "title"
msgstr "العنوان"
-#: engine/blog/models.py:69
+#: engine/blog/models.py:89
msgid "is static page"
msgstr "هي صفحة ثابتة"
-#: engine/blog/models.py:70
+#: engine/blog/models.py:91
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
msgstr ""
"هل هذا منشور لصفحة ذات عنوان URL ثابت (على سبيل المثال '/مساعدة/التسليم'؟)"
-#: engine/blog/models.py:77
+#: engine/blog/models.py:99
msgid "post"
msgstr "المنشور"
-#: engine/blog/models.py:78
+#: engine/blog/models.py:100
msgid "posts"
msgstr "المنشورات"
-#: engine/blog/models.py:82
+#: engine/blog/models.py:105
msgid "markdown files are not supported yet - use markdown content instead"
msgstr ""
"ملفات تخفيض السعر غير مدعومة Yer - استخدم محتوى تخفيض السعر بدلاً من ذلك!"
-#: engine/blog/models.py:84
+#: engine/blog/models.py:110
msgid ""
"a markdown file or markdown content must be provided - mutually exclusive"
msgstr "يجب توفير ملف ترميز أو محتوى ترميز مخفض - متنافيان"
-#: engine/blog/models.py:116
+#: engine/blog/models.py:144
msgid "internal tag identifier for the post tag"
msgstr "معرّف العلامة الداخلي لعلامة المنشور"
-#: engine/blog/models.py:117
+#: engine/blog/models.py:145
msgid "tag name"
msgstr "اسم العلامة"
-#: engine/blog/models.py:121
+#: engine/blog/models.py:149
msgid "user-friendly name for the post tag"
msgstr "اسم سهل الاستخدام لعلامة المنشور"
-#: engine/blog/models.py:122
+#: engine/blog/models.py:150
msgid "tag display name"
msgstr "اسم عرض العلامة"
-#: engine/blog/models.py:130
+#: engine/blog/models.py:158
msgid "post tag"
msgstr "علامة المشاركة"
-#: engine/blog/models.py:131
+#: engine/blog/models.py:159
msgid "post tags"
msgstr "علامات المشاركة"
diff --git a/engine/blog/locale/cs_CZ/LC_MESSAGES/django.po b/engine/blog/locale/cs_CZ/LC_MESSAGES/django.po
index d5a4755b..531b3f07 100644
--- a/engine/blog/locale/cs_CZ/LC_MESSAGES/django.po
+++ b/engine/blog/locale/cs_CZ/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: LANGUAGE \n"
@@ -25,7 +25,7 @@ msgstr "Seznam všech příspěvků (pouze pro čtení)"
msgid "retrieve a single post (read-only)"
msgstr "Získání jednoho příspěvku (pouze pro čtení)"
-#: engine/blog/models.py:13
+#: engine/blog/models.py:20
msgid ""
"Represents a blog post model. The Post class defines the structure and "
"behavior of a blog post. It includes attributes for author, title, content, "
@@ -40,65 +40,65 @@ msgstr ""
"je požadavek na obsah nebo přílohu souboru, ale ne obojí současně. Podporuje "
"také automatické generování slugu na základě názvu."
-#: engine/blog/models.py:24
+#: engine/blog/models.py:41
msgid "post title"
msgstr "Název příspěvku"
-#: engine/blog/models.py:24
+#: engine/blog/models.py:42
msgid "title"
msgstr "Název"
-#: engine/blog/models.py:69
+#: engine/blog/models.py:89
msgid "is static page"
msgstr "je statická stránka"
-#: engine/blog/models.py:70
+#: engine/blog/models.py:91
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
msgstr ""
"je to příspěvek pro stránku se statickou adresou URL (např. `/help/"
"delivery`)?"
-#: engine/blog/models.py:77
+#: engine/blog/models.py:99
msgid "post"
msgstr "Příspěvek"
-#: engine/blog/models.py:78
+#: engine/blog/models.py:100
msgid "posts"
msgstr "Příspěvky"
-#: engine/blog/models.py:82
+#: engine/blog/models.py:105
msgid "markdown files are not supported yet - use markdown content instead"
msgstr ""
"Soubory Markdown nejsou podporovány - místo toho použijte obsah Markdown!"
-#: engine/blog/models.py:84
+#: engine/blog/models.py:110
msgid ""
"a markdown file or markdown content must be provided - mutually exclusive"
msgstr ""
"musí být poskytnut soubor markdown nebo obsah markdown - vzájemně se "
"vylučují."
-#: engine/blog/models.py:116
+#: engine/blog/models.py:144
msgid "internal tag identifier for the post tag"
msgstr "interní identifikátor tagu pro tag příspěvku"
-#: engine/blog/models.py:117
+#: engine/blog/models.py:145
msgid "tag name"
msgstr "Název štítku"
-#: engine/blog/models.py:121
+#: engine/blog/models.py:149
msgid "user-friendly name for the post tag"
msgstr "Uživatelsky přívětivý název pro značku příspěvku"
-#: engine/blog/models.py:122
+#: engine/blog/models.py:150
msgid "tag display name"
msgstr "Zobrazení názvu štítku"
-#: engine/blog/models.py:130
+#: engine/blog/models.py:158
msgid "post tag"
msgstr "Označení příspěvku"
-#: engine/blog/models.py:131
+#: engine/blog/models.py:159
msgid "post tags"
msgstr "Štítky příspěvků"
diff --git a/engine/blog/locale/da_DK/LC_MESSAGES/django.po b/engine/blog/locale/da_DK/LC_MESSAGES/django.po
index c5fe897d..7ba181c6 100644
--- a/engine/blog/locale/da_DK/LC_MESSAGES/django.po
+++ b/engine/blog/locale/da_DK/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: LANGUAGE \n"
@@ -25,7 +25,7 @@ msgstr "Vis alle indlæg (skrivebeskyttet)"
msgid "retrieve a single post (read-only)"
msgstr "Hent et enkelt indlæg (skrivebeskyttet)"
-#: engine/blog/models.py:13
+#: engine/blog/models.py:20
msgid ""
"Represents a blog post model. The Post class defines the structure and "
"behavior of a blog post. It includes attributes for author, title, content, "
@@ -41,62 +41,62 @@ msgstr ""
"ikke begge dele på samme tid. Den understøtter også automatisk generering af "
"slugs baseret på titlen."
-#: engine/blog/models.py:24
+#: engine/blog/models.py:41
msgid "post title"
msgstr "Indlæggets titel"
-#: engine/blog/models.py:24
+#: engine/blog/models.py:42
msgid "title"
msgstr "Titel"
-#: engine/blog/models.py:69
+#: engine/blog/models.py:89
msgid "is static page"
msgstr "er en statisk side"
-#: engine/blog/models.py:70
+#: engine/blog/models.py:91
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
msgstr ""
"Er dette et indlæg til en side med statisk URL (f.eks. `/help/delivery`)?"
-#: engine/blog/models.py:77
+#: engine/blog/models.py:99
msgid "post"
msgstr "Indlæg"
-#: engine/blog/models.py:78
+#: engine/blog/models.py:100
msgid "posts"
msgstr "Indlæg"
-#: engine/blog/models.py:82
+#: engine/blog/models.py:105
msgid "markdown files are not supported yet - use markdown content instead"
msgstr "Markdown-filer understøttes ikke - brug markdown-indhold i stedet!"
-#: engine/blog/models.py:84
+#: engine/blog/models.py:110
msgid ""
"a markdown file or markdown content must be provided - mutually exclusive"
msgstr ""
"en markdown-fil eller markdown-indhold skal leveres - gensidigt udelukkende"
-#: engine/blog/models.py:116
+#: engine/blog/models.py:144
msgid "internal tag identifier for the post tag"
msgstr "intern tag-identifikator for indlægs-tagget"
-#: engine/blog/models.py:117
+#: engine/blog/models.py:145
msgid "tag name"
msgstr "Tag-navn"
-#: engine/blog/models.py:121
+#: engine/blog/models.py:149
msgid "user-friendly name for the post tag"
msgstr "Brugervenligt navn til posttagget"
-#: engine/blog/models.py:122
+#: engine/blog/models.py:150
msgid "tag display name"
msgstr "Navn på tag-visning"
-#: engine/blog/models.py:130
+#: engine/blog/models.py:158
msgid "post tag"
msgstr "Tag til indlæg"
-#: engine/blog/models.py:131
+#: engine/blog/models.py:159
msgid "post tags"
msgstr "Tags til indlæg"
diff --git a/engine/blog/locale/de_DE/LC_MESSAGES/django.po b/engine/blog/locale/de_DE/LC_MESSAGES/django.po
index e840da7e..0f899268 100644
--- a/engine/blog/locale/de_DE/LC_MESSAGES/django.po
+++ b/engine/blog/locale/de_DE/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: LANGUAGE \n"
@@ -25,7 +25,7 @@ msgstr "Alle Beiträge auflisten (schreibgeschützt)"
msgid "retrieve a single post (read-only)"
msgstr "Einen einzelnen Beitrag abrufen (schreibgeschützt)"
-#: engine/blog/models.py:13
+#: engine/blog/models.py:20
msgid ""
"Represents a blog post model. The Post class defines the structure and "
"behavior of a blog post. It includes attributes for author, title, content, "
@@ -42,66 +42,66 @@ msgstr ""
"unterstützt auch die automatische Slug-Generierung auf der Grundlage des "
"Titels."
-#: engine/blog/models.py:24
+#: engine/blog/models.py:41
msgid "post title"
msgstr "Titel des Beitrags"
-#: engine/blog/models.py:24
+#: engine/blog/models.py:42
msgid "title"
msgstr "Titel"
-#: engine/blog/models.py:69
+#: engine/blog/models.py:89
msgid "is static page"
msgstr "ist eine statische Seite"
-#: engine/blog/models.py:70
+#: engine/blog/models.py:91
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
msgstr ""
"Ist dies ein Beitrag für eine Seite mit statischer URL (z. B. `/help/"
"delivery`)?"
-#: engine/blog/models.py:77
+#: engine/blog/models.py:99
msgid "post"
msgstr "Beitrag"
-#: engine/blog/models.py:78
+#: engine/blog/models.py:100
msgid "posts"
msgstr "Beiträge"
-#: engine/blog/models.py:82
+#: engine/blog/models.py:105
msgid "markdown files are not supported yet - use markdown content instead"
msgstr ""
"Markdown-Dateien werden nicht unterstützt - verwenden Sie stattdessen "
"Markdown-Inhalte!"
-#: engine/blog/models.py:84
+#: engine/blog/models.py:110
msgid ""
"a markdown file or markdown content must be provided - mutually exclusive"
msgstr ""
"eine Markdown-Datei oder ein Markdown-Inhalt muss bereitgestellt werden - "
"beide schließen sich gegenseitig aus"
-#: engine/blog/models.py:116
+#: engine/blog/models.py:144
msgid "internal tag identifier for the post tag"
msgstr "interner Tag-Bezeichner für den Post-Tag"
-#: engine/blog/models.py:117
+#: engine/blog/models.py:145
msgid "tag name"
msgstr "Tag name"
-#: engine/blog/models.py:121
+#: engine/blog/models.py:149
msgid "user-friendly name for the post tag"
msgstr "Benutzerfreundlicher Name für das Post-Tag"
-#: engine/blog/models.py:122
+#: engine/blog/models.py:150
msgid "tag display name"
msgstr "Tag-Anzeigename"
-#: engine/blog/models.py:130
+#: engine/blog/models.py:158
msgid "post tag"
msgstr "Tag eintragen"
-#: engine/blog/models.py:131
+#: engine/blog/models.py:159
msgid "post tags"
msgstr "Tags eintragen"
diff --git a/engine/blog/locale/en_GB/LC_MESSAGES/django.po b/engine/blog/locale/en_GB/LC_MESSAGES/django.po
index 50d13e54..5cd5706f 100644
--- a/engine/blog/locale/en_GB/LC_MESSAGES/django.po
+++ b/engine/blog/locale/en_GB/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: LANGUAGE \n"
@@ -29,7 +29,7 @@ msgstr "List all posts (read-only)"
msgid "retrieve a single post (read-only)"
msgstr "Retrieve a single post (read-only)"
-#: engine/blog/models.py:13
+#: engine/blog/models.py:20
msgid ""
"Represents a blog post model. The Post class defines the structure and "
"behavior of a blog post. It includes attributes for author, title, content, "
@@ -45,61 +45,61 @@ msgstr ""
"both simultaneously. It also supports automatic slug generation based on the "
"title."
-#: engine/blog/models.py:24
+#: engine/blog/models.py:41
msgid "post title"
msgstr "Post's title"
-#: engine/blog/models.py:24
+#: engine/blog/models.py:42
msgid "title"
msgstr "Title"
-#: engine/blog/models.py:69
+#: engine/blog/models.py:89
msgid "is static page"
msgstr "is static page"
-#: engine/blog/models.py:70
+#: engine/blog/models.py:91
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
msgstr "is this a post for a page with static URL (e.g. `/help/delivery`)?"
-#: engine/blog/models.py:77
+#: engine/blog/models.py:99
msgid "post"
msgstr "Post"
-#: engine/blog/models.py:78
+#: engine/blog/models.py:100
msgid "posts"
msgstr "Posts"
-#: engine/blog/models.py:82
+#: engine/blog/models.py:105
msgid "markdown files are not supported yet - use markdown content instead"
msgstr "Markdown files are not supported yer - use markdown content instead!"
-#: engine/blog/models.py:84
+#: engine/blog/models.py:110
msgid ""
"a markdown file or markdown content must be provided - mutually exclusive"
msgstr ""
"a markdown file or markdown content must be provided - mutually exclusive"
-#: engine/blog/models.py:116
+#: engine/blog/models.py:144
msgid "internal tag identifier for the post tag"
msgstr "internal tag identifier for the post tag"
-#: engine/blog/models.py:117
+#: engine/blog/models.py:145
msgid "tag name"
msgstr "Tag name"
-#: engine/blog/models.py:121
+#: engine/blog/models.py:149
msgid "user-friendly name for the post tag"
msgstr "User-friendly name for the post tag"
-#: engine/blog/models.py:122
+#: engine/blog/models.py:150
msgid "tag display name"
msgstr "Tag display name"
-#: engine/blog/models.py:130
+#: engine/blog/models.py:158
msgid "post tag"
msgstr "Post tag"
-#: engine/blog/models.py:131
+#: engine/blog/models.py:159
msgid "post tags"
msgstr "Post tags"
diff --git a/engine/blog/locale/en_US/LC_MESSAGES/django.po b/engine/blog/locale/en_US/LC_MESSAGES/django.po
index 5db6bbf7..64661b18 100644
--- a/engine/blog/locale/en_US/LC_MESSAGES/django.po
+++ b/engine/blog/locale/en_US/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: LANGUAGE \n"
@@ -25,7 +25,7 @@ msgstr "List all posts (read-only)"
msgid "retrieve a single post (read-only)"
msgstr "Retrieve a single post (read-only)"
-#: engine/blog/models.py:13
+#: engine/blog/models.py:20
msgid ""
"Represents a blog post model. The Post class defines the structure and "
"behavior of a blog post. It includes attributes for author, title, content, "
@@ -41,61 +41,61 @@ msgstr ""
"both simultaneously. It also supports automatic slug generation based on the "
"title."
-#: engine/blog/models.py:24
+#: engine/blog/models.py:41
msgid "post title"
msgstr "Post's title"
-#: engine/blog/models.py:24
+#: engine/blog/models.py:42
msgid "title"
msgstr "Title"
-#: engine/blog/models.py:69
+#: engine/blog/models.py:89
msgid "is static page"
msgstr "is static page"
-#: engine/blog/models.py:70
+#: engine/blog/models.py:91
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
msgstr "is this a post for a page with static URL (e.g. `/help/delivery`)?"
-#: engine/blog/models.py:77
+#: engine/blog/models.py:99
msgid "post"
msgstr "Post"
-#: engine/blog/models.py:78
+#: engine/blog/models.py:100
msgid "posts"
msgstr "Posts"
-#: engine/blog/models.py:82
+#: engine/blog/models.py:105
msgid "markdown files are not supported yet - use markdown content instead"
msgstr "Markdown files are not supported yer - use markdown content instead!"
-#: engine/blog/models.py:84
+#: engine/blog/models.py:110
msgid ""
"a markdown file or markdown content must be provided - mutually exclusive"
msgstr ""
"a markdown file or markdown content must be provided - mutually exclusive"
-#: engine/blog/models.py:116
+#: engine/blog/models.py:144
msgid "internal tag identifier for the post tag"
msgstr "internal tag identifier for the post tag"
-#: engine/blog/models.py:117
+#: engine/blog/models.py:145
msgid "tag name"
msgstr "Tag name"
-#: engine/blog/models.py:121
+#: engine/blog/models.py:149
msgid "user-friendly name for the post tag"
msgstr "User-friendly name for the post tag"
-#: engine/blog/models.py:122
+#: engine/blog/models.py:150
msgid "tag display name"
msgstr "Tag display name"
-#: engine/blog/models.py:130
+#: engine/blog/models.py:158
msgid "post tag"
msgstr "Post tag"
-#: engine/blog/models.py:131
+#: engine/blog/models.py:159
msgid "post tags"
msgstr "Post tags"
diff --git a/engine/blog/locale/es_ES/LC_MESSAGES/django.po b/engine/blog/locale/es_ES/LC_MESSAGES/django.po
index 977d1495..f54145ca 100644
--- a/engine/blog/locale/es_ES/LC_MESSAGES/django.po
+++ b/engine/blog/locale/es_ES/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: LANGUAGE \n"
@@ -25,7 +25,7 @@ msgstr "Listar todos los mensajes (sólo lectura)"
msgid "retrieve a single post (read-only)"
msgstr "Recuperar una única entrada (sólo lectura)"
-#: engine/blog/models.py:13
+#: engine/blog/models.py:20
msgid ""
"Represents a blog post model. The Post class defines the structure and "
"behavior of a blog post. It includes attributes for author, title, content, "
@@ -41,65 +41,65 @@ msgstr ""
"adjunto, pero no ambos simultáneamente. También admite la generación "
"automática de slug a partir del título."
-#: engine/blog/models.py:24
+#: engine/blog/models.py:41
msgid "post title"
msgstr "Título del mensaje"
-#: engine/blog/models.py:24
+#: engine/blog/models.py:42
msgid "title"
msgstr "Título"
-#: engine/blog/models.py:69
+#: engine/blog/models.py:89
msgid "is static page"
msgstr "es una página estática"
-#: engine/blog/models.py:70
+#: engine/blog/models.py:91
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
msgstr ""
"¿se trata de una entrada para una página con URL estática (por ejemplo, `/"
"help/delivery`)?"
-#: engine/blog/models.py:77
+#: engine/blog/models.py:99
msgid "post"
msgstr "Publicar en"
-#: engine/blog/models.py:78
+#: engine/blog/models.py:100
msgid "posts"
msgstr "Puestos"
-#: engine/blog/models.py:82
+#: engine/blog/models.py:105
msgid "markdown files are not supported yet - use markdown content instead"
msgstr ""
"No se admiten archivos Markdown - ¡utiliza contenido Markdown en su lugar!"
-#: engine/blog/models.py:84
+#: engine/blog/models.py:110
msgid ""
"a markdown file or markdown content must be provided - mutually exclusive"
msgstr ""
"se debe proporcionar un archivo markdown o contenido markdown - mutuamente "
"excluyentes"
-#: engine/blog/models.py:116
+#: engine/blog/models.py:144
msgid "internal tag identifier for the post tag"
msgstr "identificador interno de la etiqueta post"
-#: engine/blog/models.py:117
+#: engine/blog/models.py:145
msgid "tag name"
msgstr "Nombre de la etiqueta"
-#: engine/blog/models.py:121
+#: engine/blog/models.py:149
msgid "user-friendly name for the post tag"
msgstr "Nombre fácil de usar para la etiqueta de la entrada"
-#: engine/blog/models.py:122
+#: engine/blog/models.py:150
msgid "tag display name"
msgstr "Nombre de la etiqueta"
-#: engine/blog/models.py:130
+#: engine/blog/models.py:158
msgid "post tag"
msgstr "Etiqueta postal"
-#: engine/blog/models.py:131
+#: engine/blog/models.py:159
msgid "post tags"
msgstr "Etiquetas"
diff --git a/engine/blog/locale/fa_IR/LC_MESSAGES/django.po b/engine/blog/locale/fa_IR/LC_MESSAGES/django.po
index 1802ee62..ca6a33d6 100644
--- a/engine/blog/locale/fa_IR/LC_MESSAGES/django.po
+++ b/engine/blog/locale/fa_IR/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -28,7 +28,7 @@ msgstr ""
msgid "retrieve a single post (read-only)"
msgstr ""
-#: engine/blog/models.py:13
+#: engine/blog/models.py:20
msgid ""
"Represents a blog post model. The Post class defines the structure and "
"behavior of a blog post. It includes attributes for author, title, content, "
@@ -38,60 +38,60 @@ msgid ""
"title."
msgstr ""
-#: engine/blog/models.py:24
+#: engine/blog/models.py:41
msgid "post title"
msgstr ""
-#: engine/blog/models.py:24
+#: engine/blog/models.py:42
msgid "title"
msgstr ""
-#: engine/blog/models.py:69
+#: engine/blog/models.py:89
msgid "is static page"
msgstr ""
-#: engine/blog/models.py:70
+#: engine/blog/models.py:91
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
msgstr ""
-#: engine/blog/models.py:77
+#: engine/blog/models.py:99
msgid "post"
msgstr ""
-#: engine/blog/models.py:78
+#: engine/blog/models.py:100
msgid "posts"
msgstr ""
-#: engine/blog/models.py:82
+#: engine/blog/models.py:105
msgid "markdown files are not supported yet - use markdown content instead"
msgstr ""
-#: engine/blog/models.py:84
+#: engine/blog/models.py:110
msgid ""
"a markdown file or markdown content must be provided - mutually exclusive"
msgstr ""
-#: engine/blog/models.py:116
+#: engine/blog/models.py:144
msgid "internal tag identifier for the post tag"
msgstr ""
-#: engine/blog/models.py:117
+#: engine/blog/models.py:145
msgid "tag name"
msgstr ""
-#: engine/blog/models.py:121
+#: engine/blog/models.py:149
msgid "user-friendly name for the post tag"
msgstr ""
-#: engine/blog/models.py:122
+#: engine/blog/models.py:150
msgid "tag display name"
msgstr ""
-#: engine/blog/models.py:130
+#: engine/blog/models.py:158
msgid "post tag"
msgstr ""
-#: engine/blog/models.py:131
+#: engine/blog/models.py:159
msgid "post tags"
msgstr ""
diff --git a/engine/blog/locale/fr_FR/LC_MESSAGES/django.po b/engine/blog/locale/fr_FR/LC_MESSAGES/django.po
index 3bf88282..e22e8cfc 100644
--- a/engine/blog/locale/fr_FR/LC_MESSAGES/django.po
+++ b/engine/blog/locale/fr_FR/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: LANGUAGE \n"
@@ -25,7 +25,7 @@ msgstr "Liste de tous les messages (en lecture seule)"
msgid "retrieve a single post (read-only)"
msgstr "Récupérer un seul message (en lecture seule)"
-#: engine/blog/models.py:13
+#: engine/blog/models.py:20
msgid ""
"Represents a blog post model. The Post class defines the structure and "
"behavior of a blog post. It includes attributes for author, title, content, "
@@ -42,66 +42,66 @@ msgstr ""
"simultanément. Elle prend également en charge la génération automatique "
"d'une balise en fonction du titre."
-#: engine/blog/models.py:24
+#: engine/blog/models.py:41
msgid "post title"
msgstr "Titre du message"
-#: engine/blog/models.py:24
+#: engine/blog/models.py:42
msgid "title"
msgstr "Titre"
-#: engine/blog/models.py:69
+#: engine/blog/models.py:89
msgid "is static page"
msgstr "est une page statique"
-#: engine/blog/models.py:70
+#: engine/blog/models.py:91
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
msgstr ""
"s'agit-il d'un message pour une page dont l'URL est statique (par exemple `/"
"help/delivery`) ?"
-#: engine/blog/models.py:77
+#: engine/blog/models.py:99
msgid "post"
msgstr "Poste"
-#: engine/blog/models.py:78
+#: engine/blog/models.py:100
msgid "posts"
msgstr "Postes"
-#: engine/blog/models.py:82
+#: engine/blog/models.py:105
msgid "markdown files are not supported yet - use markdown content instead"
msgstr ""
"Les fichiers Markdown ne sont pas pris en charge - utilisez plutôt du "
"contenu Markdown !"
-#: engine/blog/models.py:84
+#: engine/blog/models.py:110
msgid ""
"a markdown file or markdown content must be provided - mutually exclusive"
msgstr ""
"un fichier markdown ou un contenu markdown doit être fourni - ils s'excluent "
"mutuellement"
-#: engine/blog/models.py:116
+#: engine/blog/models.py:144
msgid "internal tag identifier for the post tag"
msgstr "identifiant interne de la balise post"
-#: engine/blog/models.py:117
+#: engine/blog/models.py:145
msgid "tag name"
msgstr "Nom du jour"
-#: engine/blog/models.py:121
+#: engine/blog/models.py:149
msgid "user-friendly name for the post tag"
msgstr "Nom convivial pour la balise post"
-#: engine/blog/models.py:122
+#: engine/blog/models.py:150
msgid "tag display name"
msgstr "Nom d'affichage de l'étiquette"
-#: engine/blog/models.py:130
+#: engine/blog/models.py:158
msgid "post tag"
msgstr "Tag de poste"
-#: engine/blog/models.py:131
+#: engine/blog/models.py:159
msgid "post tags"
msgstr "Tags de la poste"
diff --git a/engine/blog/locale/he_IL/LC_MESSAGES/django.po b/engine/blog/locale/he_IL/LC_MESSAGES/django.po
index 5bbf4749..ba976d53 100644
--- a/engine/blog/locale/he_IL/LC_MESSAGES/django.po
+++ b/engine/blog/locale/he_IL/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: LANGUAGE \n"
@@ -25,7 +25,7 @@ msgstr "הצג את כל ההודעות (לקריאה בלבד)"
msgid "retrieve a single post (read-only)"
msgstr "איתור פוסט בודד (לקריאה בלבד)"
-#: engine/blog/models.py:13
+#: engine/blog/models.py:20
msgid ""
"Represents a blog post model. The Post class defines the structure and "
"behavior of a blog post. It includes attributes for author, title, content, "
@@ -39,60 +39,60 @@ msgstr ""
"ותגיות נלוות. המחלקה אוכפת אילוצים כגון דרישה לתוכן או לקובץ מצורף, אך לא "
"לשניהם בו-זמנית. היא תומכת גם ביצירה אוטומטית של slug על סמך הכותרת."
-#: engine/blog/models.py:24
+#: engine/blog/models.py:41
msgid "post title"
msgstr "כותרת הפוסט"
-#: engine/blog/models.py:24
+#: engine/blog/models.py:42
msgid "title"
msgstr "כותרת"
-#: engine/blog/models.py:69
+#: engine/blog/models.py:89
msgid "is static page"
msgstr "הוא דף סטטי"
-#: engine/blog/models.py:70
+#: engine/blog/models.py:91
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
msgstr "האם זו הודעה לדף עם כתובת URL סטטית (למשל `/help/delivery`)?"
-#: engine/blog/models.py:77
+#: engine/blog/models.py:99
msgid "post"
msgstr "פוסט"
-#: engine/blog/models.py:78
+#: engine/blog/models.py:100
msgid "posts"
msgstr "פוסטים"
-#: engine/blog/models.py:82
+#: engine/blog/models.py:105
msgid "markdown files are not supported yet - use markdown content instead"
msgstr "קובצי Markdown אינם נתמכים עדיין - השתמש בתוכן Markdown במקום!"
-#: engine/blog/models.py:84
+#: engine/blog/models.py:110
msgid ""
"a markdown file or markdown content must be provided - mutually exclusive"
msgstr "יש לספק קובץ markdown או תוכן markdown - באופן בלעדי"
-#: engine/blog/models.py:116
+#: engine/blog/models.py:144
msgid "internal tag identifier for the post tag"
msgstr "מזהה תגיות פנימי עבור תגיות הפוסט"
-#: engine/blog/models.py:117
+#: engine/blog/models.py:145
msgid "tag name"
msgstr "שם היום"
-#: engine/blog/models.py:121
+#: engine/blog/models.py:149
msgid "user-friendly name for the post tag"
msgstr "שם ידידותי למשתמש עבור תגיות הפוסט"
-#: engine/blog/models.py:122
+#: engine/blog/models.py:150
msgid "tag display name"
msgstr "שם תצוגה של התג"
-#: engine/blog/models.py:130
+#: engine/blog/models.py:158
msgid "post tag"
msgstr "תגית פוסט"
-#: engine/blog/models.py:131
+#: engine/blog/models.py:159
msgid "post tags"
msgstr "תגיות פוסט"
diff --git a/engine/blog/locale/hi_IN/LC_MESSAGES/django.po b/engine/blog/locale/hi_IN/LC_MESSAGES/django.po
index 87b24f87..bf2876f6 100644
--- a/engine/blog/locale/hi_IN/LC_MESSAGES/django.po
+++ b/engine/blog/locale/hi_IN/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: LANGUAGE \n"
@@ -28,7 +28,7 @@ msgstr ""
msgid "retrieve a single post (read-only)"
msgstr ""
-#: engine/blog/models.py:13
+#: engine/blog/models.py:20
msgid ""
"Represents a blog post model. The Post class defines the structure and "
"behavior of a blog post. It includes attributes for author, title, content, "
@@ -38,60 +38,60 @@ msgid ""
"title."
msgstr ""
-#: engine/blog/models.py:24
+#: engine/blog/models.py:41
msgid "post title"
msgstr ""
-#: engine/blog/models.py:24
+#: engine/blog/models.py:42
msgid "title"
msgstr ""
-#: engine/blog/models.py:69
+#: engine/blog/models.py:89
msgid "is static page"
msgstr ""
-#: engine/blog/models.py:70
+#: engine/blog/models.py:91
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
msgstr ""
-#: engine/blog/models.py:77
+#: engine/blog/models.py:99
msgid "post"
msgstr ""
-#: engine/blog/models.py:78
+#: engine/blog/models.py:100
msgid "posts"
msgstr ""
-#: engine/blog/models.py:82
+#: engine/blog/models.py:105
msgid "markdown files are not supported yet - use markdown content instead"
msgstr ""
-#: engine/blog/models.py:84
+#: engine/blog/models.py:110
msgid ""
"a markdown file or markdown content must be provided - mutually exclusive"
msgstr ""
-#: engine/blog/models.py:116
+#: engine/blog/models.py:144
msgid "internal tag identifier for the post tag"
msgstr ""
-#: engine/blog/models.py:117
+#: engine/blog/models.py:145
msgid "tag name"
msgstr ""
-#: engine/blog/models.py:121
+#: engine/blog/models.py:149
msgid "user-friendly name for the post tag"
msgstr ""
-#: engine/blog/models.py:122
+#: engine/blog/models.py:150
msgid "tag display name"
msgstr ""
-#: engine/blog/models.py:130
+#: engine/blog/models.py:158
msgid "post tag"
msgstr ""
-#: engine/blog/models.py:131
+#: engine/blog/models.py:159
msgid "post tags"
msgstr ""
diff --git a/engine/blog/locale/hr_HR/LC_MESSAGES/django.po b/engine/blog/locale/hr_HR/LC_MESSAGES/django.po
index 1802ee62..ca6a33d6 100644
--- a/engine/blog/locale/hr_HR/LC_MESSAGES/django.po
+++ b/engine/blog/locale/hr_HR/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -28,7 +28,7 @@ msgstr ""
msgid "retrieve a single post (read-only)"
msgstr ""
-#: engine/blog/models.py:13
+#: engine/blog/models.py:20
msgid ""
"Represents a blog post model. The Post class defines the structure and "
"behavior of a blog post. It includes attributes for author, title, content, "
@@ -38,60 +38,60 @@ msgid ""
"title."
msgstr ""
-#: engine/blog/models.py:24
+#: engine/blog/models.py:41
msgid "post title"
msgstr ""
-#: engine/blog/models.py:24
+#: engine/blog/models.py:42
msgid "title"
msgstr ""
-#: engine/blog/models.py:69
+#: engine/blog/models.py:89
msgid "is static page"
msgstr ""
-#: engine/blog/models.py:70
+#: engine/blog/models.py:91
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
msgstr ""
-#: engine/blog/models.py:77
+#: engine/blog/models.py:99
msgid "post"
msgstr ""
-#: engine/blog/models.py:78
+#: engine/blog/models.py:100
msgid "posts"
msgstr ""
-#: engine/blog/models.py:82
+#: engine/blog/models.py:105
msgid "markdown files are not supported yet - use markdown content instead"
msgstr ""
-#: engine/blog/models.py:84
+#: engine/blog/models.py:110
msgid ""
"a markdown file or markdown content must be provided - mutually exclusive"
msgstr ""
-#: engine/blog/models.py:116
+#: engine/blog/models.py:144
msgid "internal tag identifier for the post tag"
msgstr ""
-#: engine/blog/models.py:117
+#: engine/blog/models.py:145
msgid "tag name"
msgstr ""
-#: engine/blog/models.py:121
+#: engine/blog/models.py:149
msgid "user-friendly name for the post tag"
msgstr ""
-#: engine/blog/models.py:122
+#: engine/blog/models.py:150
msgid "tag display name"
msgstr ""
-#: engine/blog/models.py:130
+#: engine/blog/models.py:158
msgid "post tag"
msgstr ""
-#: engine/blog/models.py:131
+#: engine/blog/models.py:159
msgid "post tags"
msgstr ""
diff --git a/engine/blog/locale/id_ID/LC_MESSAGES/django.po b/engine/blog/locale/id_ID/LC_MESSAGES/django.po
index d4a10394..8592e02d 100644
--- a/engine/blog/locale/id_ID/LC_MESSAGES/django.po
+++ b/engine/blog/locale/id_ID/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: LANGUAGE \n"
@@ -25,7 +25,7 @@ msgstr "Daftar semua postingan (hanya-baca)"
msgid "retrieve a single post (read-only)"
msgstr "Mengambil satu postingan (hanya-baca)"
-#: engine/blog/models.py:13
+#: engine/blog/models.py:20
msgid ""
"Represents a blog post model. The Post class defines the structure and "
"behavior of a blog post. It includes attributes for author, title, content, "
@@ -41,66 +41,66 @@ msgstr ""
"secara bersamaan. Kelas ini juga mendukung pembuatan slug otomatis "
"berdasarkan judul."
-#: engine/blog/models.py:24
+#: engine/blog/models.py:41
msgid "post title"
msgstr "Judul postingan"
-#: engine/blog/models.py:24
+#: engine/blog/models.py:42
msgid "title"
msgstr "Judul"
-#: engine/blog/models.py:69
+#: engine/blog/models.py:89
msgid "is static page"
msgstr "adalah halaman statis"
-#: engine/blog/models.py:70
+#: engine/blog/models.py:91
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
msgstr ""
"apakah ini adalah postingan untuk halaman dengan URL statis (misalnya `/help/"
"pengiriman`)?"
-#: engine/blog/models.py:77
+#: engine/blog/models.py:99
msgid "post"
msgstr "Pos"
-#: engine/blog/models.py:78
+#: engine/blog/models.py:100
msgid "posts"
msgstr "Posting"
-#: engine/blog/models.py:82
+#: engine/blog/models.py:105
msgid "markdown files are not supported yet - use markdown content instead"
msgstr ""
"File penurunan harga tidak didukung - gunakan konten penurunan harga sebagai "
"gantinya!"
-#: engine/blog/models.py:84
+#: engine/blog/models.py:110
msgid ""
"a markdown file or markdown content must be provided - mutually exclusive"
msgstr ""
"file penurunan harga atau konten penurunan harga harus disediakan - tidak "
"boleh ada yang sama"
-#: engine/blog/models.py:116
+#: engine/blog/models.py:144
msgid "internal tag identifier for the post tag"
msgstr "pengidentifikasi tag internal untuk tag pos"
-#: engine/blog/models.py:117
+#: engine/blog/models.py:145
msgid "tag name"
msgstr "Nama tag"
-#: engine/blog/models.py:121
+#: engine/blog/models.py:149
msgid "user-friendly name for the post tag"
msgstr "Nama yang mudah digunakan untuk tag postingan"
-#: engine/blog/models.py:122
+#: engine/blog/models.py:150
msgid "tag display name"
msgstr "Nama tampilan tag"
-#: engine/blog/models.py:130
+#: engine/blog/models.py:158
msgid "post tag"
msgstr "Tag pos"
-#: engine/blog/models.py:131
+#: engine/blog/models.py:159
msgid "post tags"
msgstr "Tag pos"
diff --git a/engine/blog/locale/it_IT/LC_MESSAGES/django.po b/engine/blog/locale/it_IT/LC_MESSAGES/django.po
index 53de0228..a6b7dd83 100644
--- a/engine/blog/locale/it_IT/LC_MESSAGES/django.po
+++ b/engine/blog/locale/it_IT/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: LANGUAGE \n"
@@ -25,7 +25,7 @@ msgstr "Elenco di tutti i messaggi (solo lettura)"
msgid "retrieve a single post (read-only)"
msgstr "Recuperare un singolo post (solo lettura)"
-#: engine/blog/models.py:13
+#: engine/blog/models.py:20
msgid ""
"Represents a blog post model. The Post class defines the structure and "
"behavior of a blog post. It includes attributes for author, title, content, "
@@ -41,64 +41,64 @@ msgstr ""
"di un file allegato, ma non di entrambi contemporaneamente. Supporta anche "
"la generazione automatica dello slug in base al titolo."
-#: engine/blog/models.py:24
+#: engine/blog/models.py:41
msgid "post title"
msgstr "Titolo del post"
-#: engine/blog/models.py:24
+#: engine/blog/models.py:42
msgid "title"
msgstr "Titolo"
-#: engine/blog/models.py:69
+#: engine/blog/models.py:89
msgid "is static page"
msgstr "è una pagina statica"
-#: engine/blog/models.py:70
+#: engine/blog/models.py:91
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
msgstr ""
"Si tratta di un post per una pagina con URL statico (ad esempio `/help/"
"delivery`)?"
-#: engine/blog/models.py:77
+#: engine/blog/models.py:99
msgid "post"
msgstr "Posta"
-#: engine/blog/models.py:78
+#: engine/blog/models.py:100
msgid "posts"
msgstr "Messaggi"
-#: engine/blog/models.py:82
+#: engine/blog/models.py:105
msgid "markdown files are not supported yet - use markdown content instead"
msgstr "I file Markdown non sono supportati: usa invece i contenuti Markdown!"
-#: engine/blog/models.py:84
+#: engine/blog/models.py:110
msgid ""
"a markdown file or markdown content must be provided - mutually exclusive"
msgstr ""
"deve essere fornito un file markdown o un contenuto markdown - si escludono "
"a vicenda"
-#: engine/blog/models.py:116
+#: engine/blog/models.py:144
msgid "internal tag identifier for the post tag"
msgstr "identificatore interno del tag post"
-#: engine/blog/models.py:117
+#: engine/blog/models.py:145
msgid "tag name"
msgstr "Nome del tag"
-#: engine/blog/models.py:121
+#: engine/blog/models.py:149
msgid "user-friendly name for the post tag"
msgstr "Nome intuitivo per il tag del post"
-#: engine/blog/models.py:122
+#: engine/blog/models.py:150
msgid "tag display name"
msgstr "Nome del tag"
-#: engine/blog/models.py:130
+#: engine/blog/models.py:158
msgid "post tag"
msgstr "Post tag"
-#: engine/blog/models.py:131
+#: engine/blog/models.py:159
msgid "post tags"
msgstr "Tag dei post"
diff --git a/engine/blog/locale/ja_JP/LC_MESSAGES/django.po b/engine/blog/locale/ja_JP/LC_MESSAGES/django.po
index 3d91f551..606de971 100644
--- a/engine/blog/locale/ja_JP/LC_MESSAGES/django.po
+++ b/engine/blog/locale/ja_JP/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: LANGUAGE \n"
@@ -25,7 +25,7 @@ msgstr "すべての投稿をリストアップする(読み取り専用)"
msgid "retrieve a single post (read-only)"
msgstr "単一の投稿を取得する(読み取り専用)"
-#: engine/blog/models.py:13
+#: engine/blog/models.py:20
msgid ""
"Represents a blog post model. The Post class defines the structure and "
"behavior of a blog post. It includes attributes for author, title, content, "
@@ -40,64 +40,64 @@ msgstr ""
"時に要求しないといった制約を強制します。また、タイトルに基づくスラッグの自動"
"生成もサポートしています。"
-#: engine/blog/models.py:24
+#: engine/blog/models.py:41
msgid "post title"
msgstr "投稿タイトル"
-#: engine/blog/models.py:24
+#: engine/blog/models.py:42
msgid "title"
msgstr "タイトル"
-#: engine/blog/models.py:69
+#: engine/blog/models.py:89
msgid "is static page"
msgstr "は静的ページ"
-#: engine/blog/models.py:70
+#: engine/blog/models.py:91
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
msgstr "これは静的URLのページ(例:`/help/delivery`)への投稿ですか?"
-#: engine/blog/models.py:77
+#: engine/blog/models.py:99
msgid "post"
msgstr "ポスト"
-#: engine/blog/models.py:78
+#: engine/blog/models.py:100
msgid "posts"
msgstr "投稿"
-#: engine/blog/models.py:82
+#: engine/blog/models.py:105
msgid "markdown files are not supported yet - use markdown content instead"
msgstr ""
"マークダウン・ファイルはサポートされていません - 代わりにマークダウン・コンテ"
"ンツを使用してください!"
-#: engine/blog/models.py:84
+#: engine/blog/models.py:110
msgid ""
"a markdown file or markdown content must be provided - mutually exclusive"
msgstr ""
"マークダウン・ファイルまたはマークダウン・コンテンツを提供しなければならな"
"い。"
-#: engine/blog/models.py:116
+#: engine/blog/models.py:144
msgid "internal tag identifier for the post tag"
msgstr "投稿タグの内部タグ識別子"
-#: engine/blog/models.py:117
+#: engine/blog/models.py:145
msgid "tag name"
msgstr "タグ名"
-#: engine/blog/models.py:121
+#: engine/blog/models.py:149
msgid "user-friendly name for the post tag"
msgstr "投稿タグのユーザーフレンドリーな名前"
-#: engine/blog/models.py:122
+#: engine/blog/models.py:150
msgid "tag display name"
msgstr "タグ表示名"
-#: engine/blog/models.py:130
+#: engine/blog/models.py:158
msgid "post tag"
msgstr "投稿タグ"
-#: engine/blog/models.py:131
+#: engine/blog/models.py:159
msgid "post tags"
msgstr "投稿タグ"
diff --git a/engine/blog/locale/kk_KZ/LC_MESSAGES/django.po b/engine/blog/locale/kk_KZ/LC_MESSAGES/django.po
index 87b24f87..bf2876f6 100644
--- a/engine/blog/locale/kk_KZ/LC_MESSAGES/django.po
+++ b/engine/blog/locale/kk_KZ/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: LANGUAGE \n"
@@ -28,7 +28,7 @@ msgstr ""
msgid "retrieve a single post (read-only)"
msgstr ""
-#: engine/blog/models.py:13
+#: engine/blog/models.py:20
msgid ""
"Represents a blog post model. The Post class defines the structure and "
"behavior of a blog post. It includes attributes for author, title, content, "
@@ -38,60 +38,60 @@ msgid ""
"title."
msgstr ""
-#: engine/blog/models.py:24
+#: engine/blog/models.py:41
msgid "post title"
msgstr ""
-#: engine/blog/models.py:24
+#: engine/blog/models.py:42
msgid "title"
msgstr ""
-#: engine/blog/models.py:69
+#: engine/blog/models.py:89
msgid "is static page"
msgstr ""
-#: engine/blog/models.py:70
+#: engine/blog/models.py:91
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
msgstr ""
-#: engine/blog/models.py:77
+#: engine/blog/models.py:99
msgid "post"
msgstr ""
-#: engine/blog/models.py:78
+#: engine/blog/models.py:100
msgid "posts"
msgstr ""
-#: engine/blog/models.py:82
+#: engine/blog/models.py:105
msgid "markdown files are not supported yet - use markdown content instead"
msgstr ""
-#: engine/blog/models.py:84
+#: engine/blog/models.py:110
msgid ""
"a markdown file or markdown content must be provided - mutually exclusive"
msgstr ""
-#: engine/blog/models.py:116
+#: engine/blog/models.py:144
msgid "internal tag identifier for the post tag"
msgstr ""
-#: engine/blog/models.py:117
+#: engine/blog/models.py:145
msgid "tag name"
msgstr ""
-#: engine/blog/models.py:121
+#: engine/blog/models.py:149
msgid "user-friendly name for the post tag"
msgstr ""
-#: engine/blog/models.py:122
+#: engine/blog/models.py:150
msgid "tag display name"
msgstr ""
-#: engine/blog/models.py:130
+#: engine/blog/models.py:158
msgid "post tag"
msgstr ""
-#: engine/blog/models.py:131
+#: engine/blog/models.py:159
msgid "post tags"
msgstr ""
diff --git a/engine/blog/locale/ko_KR/LC_MESSAGES/django.po b/engine/blog/locale/ko_KR/LC_MESSAGES/django.po
index c1e50f04..5bce4fd5 100644
--- a/engine/blog/locale/ko_KR/LC_MESSAGES/django.po
+++ b/engine/blog/locale/ko_KR/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: LANGUAGE \n"
@@ -25,7 +25,7 @@ msgstr "모든 게시물 나열(읽기 전용)"
msgid "retrieve a single post (read-only)"
msgstr "단일 게시물 검색(읽기 전용)"
-#: engine/blog/models.py:13
+#: engine/blog/models.py:20
msgid ""
"Represents a blog post model. The Post class defines the structure and "
"behavior of a blog post. It includes attributes for author, title, content, "
@@ -40,61 +40,61 @@ msgstr ""
"둘 다 동시에 요구하지 않는 등의 제약 조건을 적용합니다. 또한 제목에 따른 자"
"동 슬러그 생성도 지원합니다."
-#: engine/blog/models.py:24
+#: engine/blog/models.py:41
msgid "post title"
msgstr "게시물 제목"
-#: engine/blog/models.py:24
+#: engine/blog/models.py:42
msgid "title"
msgstr "제목"
-#: engine/blog/models.py:69
+#: engine/blog/models.py:89
msgid "is static page"
msgstr "는 정적 페이지입니다."
-#: engine/blog/models.py:70
+#: engine/blog/models.py:91
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
msgstr "정적 URL(예: `/help/delivery`)이 있는 페이지의 게시물인가요?"
-#: engine/blog/models.py:77
+#: engine/blog/models.py:99
msgid "post"
msgstr "게시물"
-#: engine/blog/models.py:78
+#: engine/blog/models.py:100
msgid "posts"
msgstr "게시물"
-#: engine/blog/models.py:82
+#: engine/blog/models.py:105
msgid "markdown files are not supported yet - use markdown content instead"
msgstr ""
"마크다운 파일은 지원되지 않습니다 예 - 대신 마크다운 콘텐츠를 사용하세요!"
-#: engine/blog/models.py:84
+#: engine/blog/models.py:110
msgid ""
"a markdown file or markdown content must be provided - mutually exclusive"
msgstr "마크다운 파일 또는 마크다운 콘텐츠가 제공되어야 합니다."
-#: engine/blog/models.py:116
+#: engine/blog/models.py:144
msgid "internal tag identifier for the post tag"
msgstr "게시물 태그의 내부 태그 식별자"
-#: engine/blog/models.py:117
+#: engine/blog/models.py:145
msgid "tag name"
msgstr "태그 이름"
-#: engine/blog/models.py:121
+#: engine/blog/models.py:149
msgid "user-friendly name for the post tag"
msgstr "게시물 태그의 사용자 친화적인 이름"
-#: engine/blog/models.py:122
+#: engine/blog/models.py:150
msgid "tag display name"
msgstr "태그 표시 이름"
-#: engine/blog/models.py:130
+#: engine/blog/models.py:158
msgid "post tag"
msgstr "게시물 태그"
-#: engine/blog/models.py:131
+#: engine/blog/models.py:159
msgid "post tags"
msgstr "게시물 태그"
diff --git a/engine/blog/locale/nl_NL/LC_MESSAGES/django.po b/engine/blog/locale/nl_NL/LC_MESSAGES/django.po
index 4f5d83b9..5afad4af 100644
--- a/engine/blog/locale/nl_NL/LC_MESSAGES/django.po
+++ b/engine/blog/locale/nl_NL/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: LANGUAGE \n"
@@ -25,7 +25,7 @@ msgstr "Alle berichten weergeven (alleen-lezen)"
msgid "retrieve a single post (read-only)"
msgstr "Een enkel bericht ophalen (alleen-lezen)"
-#: engine/blog/models.py:13
+#: engine/blog/models.py:20
msgid ""
"Represents a blog post model. The Post class defines the structure and "
"behavior of a blog post. It includes attributes for author, title, content, "
@@ -41,66 +41,66 @@ msgstr ""
"maar niet beide tegelijk. Het ondersteunt ook het automatisch genereren van "
"slugs op basis van de titel."
-#: engine/blog/models.py:24
+#: engine/blog/models.py:41
msgid "post title"
msgstr "Titel van de post"
-#: engine/blog/models.py:24
+#: engine/blog/models.py:42
msgid "title"
msgstr "Titel"
-#: engine/blog/models.py:69
+#: engine/blog/models.py:89
msgid "is static page"
msgstr "is statische pagina"
-#: engine/blog/models.py:70
+#: engine/blog/models.py:91
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
msgstr ""
"Is dit een bericht voor een pagina met een statische URL (bijv. `/help/"
"delivery`)?"
-#: engine/blog/models.py:77
+#: engine/blog/models.py:99
msgid "post"
msgstr "Plaats"
-#: engine/blog/models.py:78
+#: engine/blog/models.py:100
msgid "posts"
msgstr "Berichten"
-#: engine/blog/models.py:82
+#: engine/blog/models.py:105
msgid "markdown files are not supported yet - use markdown content instead"
msgstr ""
"Markdown-bestanden worden niet ondersteund - gebruik in plaats daarvan "
"markdown-inhoud!"
-#: engine/blog/models.py:84
+#: engine/blog/models.py:110
msgid ""
"a markdown file or markdown content must be provided - mutually exclusive"
msgstr ""
"er moet een markdown-bestand of markdown-inhoud worden geleverd - wederzijds "
"exclusief"
-#: engine/blog/models.py:116
+#: engine/blog/models.py:144
msgid "internal tag identifier for the post tag"
msgstr "interne tagidentifier voor de posttag"
-#: engine/blog/models.py:117
+#: engine/blog/models.py:145
msgid "tag name"
msgstr "Tag naam"
-#: engine/blog/models.py:121
+#: engine/blog/models.py:149
msgid "user-friendly name for the post tag"
msgstr "Gebruiksvriendelijke naam voor de posttag"
-#: engine/blog/models.py:122
+#: engine/blog/models.py:150
msgid "tag display name"
msgstr "Tag weergavenaam"
-#: engine/blog/models.py:130
+#: engine/blog/models.py:158
msgid "post tag"
msgstr "Post tag"
-#: engine/blog/models.py:131
+#: engine/blog/models.py:159
msgid "post tags"
msgstr "Post tags"
diff --git a/engine/blog/locale/no_NO/LC_MESSAGES/django.po b/engine/blog/locale/no_NO/LC_MESSAGES/django.po
index 9b97fdd2..b279564c 100644
--- a/engine/blog/locale/no_NO/LC_MESSAGES/django.po
+++ b/engine/blog/locale/no_NO/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: LANGUAGE \n"
@@ -25,7 +25,7 @@ msgstr "Liste over alle innlegg (skrivebeskyttet)"
msgid "retrieve a single post (read-only)"
msgstr "Hent et enkelt innlegg (skrivebeskyttet)"
-#: engine/blog/models.py:13
+#: engine/blog/models.py:20
msgid ""
"Represents a blog post model. The Post class defines the structure and "
"behavior of a blog post. It includes attributes for author, title, content, "
@@ -41,62 +41,62 @@ msgstr ""
"må være med, men ikke begge deler samtidig. Den støtter også automatisk "
"generering av slug basert på tittelen."
-#: engine/blog/models.py:24
+#: engine/blog/models.py:41
msgid "post title"
msgstr "Innleggets tittel"
-#: engine/blog/models.py:24
+#: engine/blog/models.py:42
msgid "title"
msgstr "Title"
-#: engine/blog/models.py:69
+#: engine/blog/models.py:89
msgid "is static page"
msgstr "er statisk side"
-#: engine/blog/models.py:70
+#: engine/blog/models.py:91
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
msgstr ""
"er dette et innlegg for en side med statisk URL (f.eks. `/help/delivery`)?"
-#: engine/blog/models.py:77
+#: engine/blog/models.py:99
msgid "post"
msgstr "Post"
-#: engine/blog/models.py:78
+#: engine/blog/models.py:100
msgid "posts"
msgstr "Innlegg"
-#: engine/blog/models.py:82
+#: engine/blog/models.py:105
msgid "markdown files are not supported yet - use markdown content instead"
msgstr "Markdown-filer støttes ikke - bruk markdown-innhold i stedet!"
-#: engine/blog/models.py:84
+#: engine/blog/models.py:110
msgid ""
"a markdown file or markdown content must be provided - mutually exclusive"
msgstr ""
"en markdown-fil eller markdown-innhold må oppgis - gjensidig utelukkende"
-#: engine/blog/models.py:116
+#: engine/blog/models.py:144
msgid "internal tag identifier for the post tag"
msgstr "intern tagg-identifikator for innleggstaggen"
-#: engine/blog/models.py:117
+#: engine/blog/models.py:145
msgid "tag name"
msgstr "Tagg navn"
-#: engine/blog/models.py:121
+#: engine/blog/models.py:149
msgid "user-friendly name for the post tag"
msgstr "Brukervennlig navn for innleggstaggen"
-#: engine/blog/models.py:122
+#: engine/blog/models.py:150
msgid "tag display name"
msgstr "Visningsnavn for taggen"
-#: engine/blog/models.py:130
+#: engine/blog/models.py:158
msgid "post tag"
msgstr "Post tag"
-#: engine/blog/models.py:131
+#: engine/blog/models.py:159
msgid "post tags"
msgstr "Tagger for innlegg"
diff --git a/engine/blog/locale/pl_PL/LC_MESSAGES/django.po b/engine/blog/locale/pl_PL/LC_MESSAGES/django.po
index cef7d647..dbff05c4 100644
--- a/engine/blog/locale/pl_PL/LC_MESSAGES/django.po
+++ b/engine/blog/locale/pl_PL/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: LANGUAGE \n"
@@ -25,7 +25,7 @@ msgstr "Lista wszystkich postów (tylko do odczytu)"
msgid "retrieve a single post (read-only)"
msgstr "Pobieranie pojedynczego wpisu (tylko do odczytu)"
-#: engine/blog/models.py:13
+#: engine/blog/models.py:20
msgid ""
"Represents a blog post model. The Post class defines the structure and "
"behavior of a blog post. It includes attributes for author, title, content, "
@@ -41,64 +41,64 @@ msgstr ""
"nie obu jednocześnie. Obsługuje również automatyczne generowanie slug na "
"podstawie tytułu."
-#: engine/blog/models.py:24
+#: engine/blog/models.py:41
msgid "post title"
msgstr "Tytuł postu"
-#: engine/blog/models.py:24
+#: engine/blog/models.py:42
msgid "title"
msgstr "Tytuł"
-#: engine/blog/models.py:69
+#: engine/blog/models.py:89
msgid "is static page"
msgstr "jest stroną statyczną"
-#: engine/blog/models.py:70
+#: engine/blog/models.py:91
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
msgstr ""
"Czy jest to post dla strony ze statycznym adresem URL (np. `/help/delivery`)?"
-#: engine/blog/models.py:77
+#: engine/blog/models.py:99
msgid "post"
msgstr "Post"
-#: engine/blog/models.py:78
+#: engine/blog/models.py:100
msgid "posts"
msgstr "Posty"
-#: engine/blog/models.py:82
+#: engine/blog/models.py:105
msgid "markdown files are not supported yet - use markdown content instead"
msgstr ""
"Pliki Markdown nie są obsługiwane - zamiast tego użyj zawartości Markdown!"
-#: engine/blog/models.py:84
+#: engine/blog/models.py:110
msgid ""
"a markdown file or markdown content must be provided - mutually exclusive"
msgstr ""
"należy dostarczyć plik markdown lub zawartość markdown - wzajemnie się "
"wykluczające"
-#: engine/blog/models.py:116
+#: engine/blog/models.py:144
msgid "internal tag identifier for the post tag"
msgstr "wewnętrzny identyfikator tagu posta"
-#: engine/blog/models.py:117
+#: engine/blog/models.py:145
msgid "tag name"
msgstr "Nazwa tagu"
-#: engine/blog/models.py:121
+#: engine/blog/models.py:149
msgid "user-friendly name for the post tag"
msgstr "Przyjazna dla użytkownika nazwa tagu posta"
-#: engine/blog/models.py:122
+#: engine/blog/models.py:150
msgid "tag display name"
msgstr "Wyświetlana nazwa znacznika"
-#: engine/blog/models.py:130
+#: engine/blog/models.py:158
msgid "post tag"
msgstr "Tag posta"
-#: engine/blog/models.py:131
+#: engine/blog/models.py:159
msgid "post tags"
msgstr "Tagi postów"
diff --git a/engine/blog/locale/pt_BR/LC_MESSAGES/django.po b/engine/blog/locale/pt_BR/LC_MESSAGES/django.po
index 80a9fcab..c092e9e6 100644
--- a/engine/blog/locale/pt_BR/LC_MESSAGES/django.po
+++ b/engine/blog/locale/pt_BR/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: LANGUAGE \n"
@@ -25,7 +25,7 @@ msgstr "Listar todas as postagens (somente leitura)"
msgid "retrieve a single post (read-only)"
msgstr "Recuperar um único post (somente leitura)"
-#: engine/blog/models.py:13
+#: engine/blog/models.py:20
msgid ""
"Represents a blog post model. The Post class defines the structure and "
"behavior of a blog post. It includes attributes for author, title, content, "
@@ -41,64 +41,64 @@ msgstr ""
"simultaneamente. Ela também oferece suporte à geração automática de slug com "
"base no título."
-#: engine/blog/models.py:24
+#: engine/blog/models.py:41
msgid "post title"
msgstr "Título da postagem"
-#: engine/blog/models.py:24
+#: engine/blog/models.py:42
msgid "title"
msgstr "Título"
-#: engine/blog/models.py:69
+#: engine/blog/models.py:89
msgid "is static page"
msgstr "é uma página estática"
-#: engine/blog/models.py:70
+#: engine/blog/models.py:91
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
msgstr ""
"Essa é uma postagem para uma página com URL estático (por exemplo, `/help/"
"delivery`)?"
-#: engine/blog/models.py:77
+#: engine/blog/models.py:99
msgid "post"
msgstr "Postar"
-#: engine/blog/models.py:78
+#: engine/blog/models.py:100
msgid "posts"
msgstr "Publicações"
-#: engine/blog/models.py:82
+#: engine/blog/models.py:105
msgid "markdown files are not supported yet - use markdown content instead"
msgstr ""
"Os arquivos markdown não são suportados - use conteúdo markdown em vez disso!"
-#: engine/blog/models.py:84
+#: engine/blog/models.py:110
msgid ""
"a markdown file or markdown content must be provided - mutually exclusive"
msgstr ""
"um arquivo ou conteúdo de markdown deve ser fornecido - mutuamente exclusivo"
-#: engine/blog/models.py:116
+#: engine/blog/models.py:144
msgid "internal tag identifier for the post tag"
msgstr "identificador de tag interno para a tag de postagem"
-#: engine/blog/models.py:117
+#: engine/blog/models.py:145
msgid "tag name"
msgstr "Nome da etiqueta"
-#: engine/blog/models.py:121
+#: engine/blog/models.py:149
msgid "user-friendly name for the post tag"
msgstr "Nome de fácil utilização para a tag de postagem"
-#: engine/blog/models.py:122
+#: engine/blog/models.py:150
msgid "tag display name"
msgstr "Nome de exibição da tag"
-#: engine/blog/models.py:130
+#: engine/blog/models.py:158
msgid "post tag"
msgstr "Etiqueta de postagem"
-#: engine/blog/models.py:131
+#: engine/blog/models.py:159
msgid "post tags"
msgstr "Tags de postagem"
diff --git a/engine/blog/locale/ro_RO/LC_MESSAGES/django.po b/engine/blog/locale/ro_RO/LC_MESSAGES/django.po
index 82f68227..f44050e4 100644
--- a/engine/blog/locale/ro_RO/LC_MESSAGES/django.po
+++ b/engine/blog/locale/ro_RO/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: LANGUAGE \n"
@@ -25,7 +25,7 @@ msgstr "Listează toate postările (doar pentru citire)"
msgid "retrieve a single post (read-only)"
msgstr "Recuperează o singură postare (read-only)"
-#: engine/blog/models.py:13
+#: engine/blog/models.py:20
msgid ""
"Represents a blog post model. The Post class defines the structure and "
"behavior of a blog post. It includes attributes for author, title, content, "
@@ -41,65 +41,65 @@ msgstr ""
"fișier atașat, dar nu ambele simultan. De asemenea, acceptă generarea "
"automată a slug-ului pe baza titlului."
-#: engine/blog/models.py:24
+#: engine/blog/models.py:41
msgid "post title"
msgstr "Titlul postului"
-#: engine/blog/models.py:24
+#: engine/blog/models.py:42
msgid "title"
msgstr "Titlul"
-#: engine/blog/models.py:69
+#: engine/blog/models.py:89
msgid "is static page"
msgstr "este o pagină statică"
-#: engine/blog/models.py:70
+#: engine/blog/models.py:91
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
msgstr ""
"este aceasta o postare pentru o pagină cu URL static (de exemplu `/help/"
"delivery`)?"
-#: engine/blog/models.py:77
+#: engine/blog/models.py:99
msgid "post"
msgstr "Post"
-#: engine/blog/models.py:78
+#: engine/blog/models.py:100
msgid "posts"
msgstr "Mesaje"
-#: engine/blog/models.py:82
+#: engine/blog/models.py:105
msgid "markdown files are not supported yet - use markdown content instead"
msgstr ""
"Fișierele Markdown nu sunt acceptate - utilizați în schimb conținut Markdown!"
-#: engine/blog/models.py:84
+#: engine/blog/models.py:110
msgid ""
"a markdown file or markdown content must be provided - mutually exclusive"
msgstr ""
"trebuie furnizat un fișier markdown sau conținut markdown - se exclud "
"reciproc"
-#: engine/blog/models.py:116
+#: engine/blog/models.py:144
msgid "internal tag identifier for the post tag"
msgstr "identificator intern de etichetă pentru eticheta postului"
-#: engine/blog/models.py:117
+#: engine/blog/models.py:145
msgid "tag name"
msgstr "Nume etichetă"
-#: engine/blog/models.py:121
+#: engine/blog/models.py:149
msgid "user-friendly name for the post tag"
msgstr "Nume ușor de utilizat pentru eticheta postului"
-#: engine/blog/models.py:122
+#: engine/blog/models.py:150
msgid "tag display name"
msgstr "Nume afișare etichetă"
-#: engine/blog/models.py:130
+#: engine/blog/models.py:158
msgid "post tag"
msgstr "Etichetă post"
-#: engine/blog/models.py:131
+#: engine/blog/models.py:159
msgid "post tags"
msgstr "Etichete poștale"
diff --git a/engine/blog/locale/ru_RU/LC_MESSAGES/django.po b/engine/blog/locale/ru_RU/LC_MESSAGES/django.po
index e75c3ff4..91d3c813 100644
--- a/engine/blog/locale/ru_RU/LC_MESSAGES/django.po
+++ b/engine/blog/locale/ru_RU/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: LANGUAGE \n"
@@ -25,7 +25,7 @@ msgstr "Список всех сообщений (только для чтени
msgid "retrieve a single post (read-only)"
msgstr "Получение одного сообщения (только для чтения)"
-#: engine/blog/models.py:13
+#: engine/blog/models.py:20
msgid ""
"Represents a blog post model. The Post class defines the structure and "
"behavior of a blog post. It includes attributes for author, title, content, "
@@ -41,65 +41,65 @@ msgstr ""
"вложение файла, но не то и другое одновременно. Он также поддерживает "
"автоматическую генерацию slug на основе заголовка."
-#: engine/blog/models.py:24
+#: engine/blog/models.py:41
msgid "post title"
msgstr "Заголовок сообщения"
-#: engine/blog/models.py:24
+#: engine/blog/models.py:42
msgid "title"
msgstr "Название"
-#: engine/blog/models.py:69
+#: engine/blog/models.py:89
msgid "is static page"
msgstr "это статическая страница"
-#: engine/blog/models.py:70
+#: engine/blog/models.py:91
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
msgstr ""
"Это сообщение для страницы со статическим URL (например, `/help/delivery`)?"
-#: engine/blog/models.py:77
+#: engine/blog/models.py:99
msgid "post"
msgstr "Пост"
-#: engine/blog/models.py:78
+#: engine/blog/models.py:100
msgid "posts"
msgstr "Посты"
-#: engine/blog/models.py:82
+#: engine/blog/models.py:105
msgid "markdown files are not supported yet - use markdown content instead"
msgstr ""
"Файлы в формате Markdown не поддерживаются - используйте вместо них "
"содержимое в формате Markdown!"
-#: engine/blog/models.py:84
+#: engine/blog/models.py:110
msgid ""
"a markdown file or markdown content must be provided - mutually exclusive"
msgstr ""
"необходимо предоставить файл разметки или содержимое разметки - "
"взаимоисключающие варианты"
-#: engine/blog/models.py:116
+#: engine/blog/models.py:144
msgid "internal tag identifier for the post tag"
msgstr "внутренний идентификатор тега для тега post"
-#: engine/blog/models.py:117
+#: engine/blog/models.py:145
msgid "tag name"
msgstr "Название тега"
-#: engine/blog/models.py:121
+#: engine/blog/models.py:149
msgid "user-friendly name for the post tag"
msgstr "Удобное для пользователя название тега поста"
-#: engine/blog/models.py:122
+#: engine/blog/models.py:150
msgid "tag display name"
msgstr "Отображаемое имя тега"
-#: engine/blog/models.py:130
+#: engine/blog/models.py:158
msgid "post tag"
msgstr "Тэг поста"
-#: engine/blog/models.py:131
+#: engine/blog/models.py:159
msgid "post tags"
msgstr "Тэги постов"
diff --git a/engine/blog/locale/sv_SE/LC_MESSAGES/django.po b/engine/blog/locale/sv_SE/LC_MESSAGES/django.po
index 97ae7afc..7c77d545 100644
--- a/engine/blog/locale/sv_SE/LC_MESSAGES/django.po
+++ b/engine/blog/locale/sv_SE/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: LANGUAGE \n"
@@ -25,7 +25,7 @@ msgstr "Lista alla inlägg (skrivskyddad)"
msgid "retrieve a single post (read-only)"
msgstr "Hämta ett enskilt inlägg (skrivskyddat)"
-#: engine/blog/models.py:13
+#: engine/blog/models.py:20
msgid ""
"Represents a blog post model. The Post class defines the structure and "
"behavior of a blog post. It includes attributes for author, title, content, "
@@ -41,63 +41,63 @@ msgstr ""
"filbilaga krävs, men inte båda samtidigt. Den stöder också automatisk "
"sluggenerering baserat på titeln."
-#: engine/blog/models.py:24
+#: engine/blog/models.py:41
msgid "post title"
msgstr "Inläggets titel"
-#: engine/blog/models.py:24
+#: engine/blog/models.py:42
msgid "title"
msgstr "Titel"
-#: engine/blog/models.py:69
+#: engine/blog/models.py:89
msgid "is static page"
msgstr "är statisk sida"
-#: engine/blog/models.py:70
+#: engine/blog/models.py:91
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
msgstr ""
"är detta ett inlägg för en sida med statisk URL (t.ex. `/help/delivery`)?"
-#: engine/blog/models.py:77
+#: engine/blog/models.py:99
msgid "post"
msgstr "Post"
-#: engine/blog/models.py:78
+#: engine/blog/models.py:100
msgid "posts"
msgstr "Inlägg"
-#: engine/blog/models.py:82
+#: engine/blog/models.py:105
msgid "markdown files are not supported yet - use markdown content instead"
msgstr "Markdown-filer stöds inte - använd markdown-innehåll istället!"
-#: engine/blog/models.py:84
+#: engine/blog/models.py:110
msgid ""
"a markdown file or markdown content must be provided - mutually exclusive"
msgstr ""
"en markdown-fil eller markdown-innehåll måste tillhandahållas - ömsesidigt "
"uteslutande"
-#: engine/blog/models.py:116
+#: engine/blog/models.py:144
msgid "internal tag identifier for the post tag"
msgstr "intern taggidentifierare för inläggstaggen"
-#: engine/blog/models.py:117
+#: engine/blog/models.py:145
msgid "tag name"
msgstr "Tagg namn"
-#: engine/blog/models.py:121
+#: engine/blog/models.py:149
msgid "user-friendly name for the post tag"
msgstr "Användarvänligt namn för inläggstaggen"
-#: engine/blog/models.py:122
+#: engine/blog/models.py:150
msgid "tag display name"
msgstr "Taggens visningsnamn"
-#: engine/blog/models.py:130
+#: engine/blog/models.py:158
msgid "post tag"
msgstr "Post tagg"
-#: engine/blog/models.py:131
+#: engine/blog/models.py:159
msgid "post tags"
msgstr "Taggar för inlägg"
diff --git a/engine/blog/locale/th_TH/LC_MESSAGES/django.po b/engine/blog/locale/th_TH/LC_MESSAGES/django.po
index fc069214..c80cda96 100644
--- a/engine/blog/locale/th_TH/LC_MESSAGES/django.po
+++ b/engine/blog/locale/th_TH/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: LANGUAGE \n"
@@ -25,7 +25,7 @@ msgstr "แสดงรายการโพสต์ทั้งหมด (อ
msgid "retrieve a single post (read-only)"
msgstr "ดึงโพสต์เดียว (อ่านอย่างเดียว)"
-#: engine/blog/models.py:13
+#: engine/blog/models.py:20
msgid ""
"Represents a blog post model. The Post class defines the structure and "
"behavior of a blog post. It includes attributes for author, title, content, "
@@ -39,60 +39,60 @@ msgstr ""
"และแท็กที่เกี่ยวข้อง คลาสนี้บังคับใช้ข้อจำกัด เช่น ต้องมีเนื้อหาหรือไฟล์แนบอย่างใดอย่างหนึ่ง "
"แต่ไม่สามารถมีทั้งสองอย่างพร้อมกันได้ นอกจากนี้ยังรองรับการสร้าง slug โดยอัตโนมัติจากชื่อเรื่อง"
-#: engine/blog/models.py:24
+#: engine/blog/models.py:41
msgid "post title"
msgstr "ชื่อโพสต์"
-#: engine/blog/models.py:24
+#: engine/blog/models.py:42
msgid "title"
msgstr "ชื่อเรื่อง"
-#: engine/blog/models.py:69
+#: engine/blog/models.py:89
msgid "is static page"
msgstr "เป็นหน้าคงที่"
-#: engine/blog/models.py:70
+#: engine/blog/models.py:91
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
msgstr "นี่คือโพสต์สำหรับหน้าที่มี URL แบบคงที่ (เช่น `/help/delivery`)?"
-#: engine/blog/models.py:77
+#: engine/blog/models.py:99
msgid "post"
msgstr "โพสต์"
-#: engine/blog/models.py:78
+#: engine/blog/models.py:100
msgid "posts"
msgstr "โพสต์"
-#: engine/blog/models.py:82
+#: engine/blog/models.py:105
msgid "markdown files are not supported yet - use markdown content instead"
msgstr "ไฟล์มาร์กดาวน์ยังไม่รองรับในตอนนี้ - กรุณาใช้เนื้อหาแบบมาร์กดาวน์แทน!"
-#: engine/blog/models.py:84
+#: engine/blog/models.py:110
msgid ""
"a markdown file or markdown content must be provided - mutually exclusive"
msgstr "ไฟล์มาร์กดาวน์หรือเนื้อหาแบบมาร์กดาวน์ต้องได้รับการจัดเตรียมไว้ - ไม่สามารถใช้ร่วมกันได้"
-#: engine/blog/models.py:116
+#: engine/blog/models.py:144
msgid "internal tag identifier for the post tag"
msgstr "ตัวระบุแท็กภายในสำหรับแท็กโพสต์"
-#: engine/blog/models.py:117
+#: engine/blog/models.py:145
msgid "tag name"
msgstr "ชื่อวัน"
-#: engine/blog/models.py:121
+#: engine/blog/models.py:149
msgid "user-friendly name for the post tag"
msgstr "ชื่อที่ใช้งานได้ง่ายสำหรับแท็กโพสต์"
-#: engine/blog/models.py:122
+#: engine/blog/models.py:150
msgid "tag display name"
msgstr "แสดงชื่อแท็ก"
-#: engine/blog/models.py:130
+#: engine/blog/models.py:158
msgid "post tag"
msgstr "โพสต์แท็ก"
-#: engine/blog/models.py:131
+#: engine/blog/models.py:159
msgid "post tags"
msgstr "ป้ายกำกับโพสต์"
diff --git a/engine/blog/locale/tr_TR/LC_MESSAGES/django.po b/engine/blog/locale/tr_TR/LC_MESSAGES/django.po
index c485516b..458a405f 100644
--- a/engine/blog/locale/tr_TR/LC_MESSAGES/django.po
+++ b/engine/blog/locale/tr_TR/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: LANGUAGE \n"
@@ -25,7 +25,7 @@ msgstr "Tüm gönderileri listele (salt okunur)"
msgid "retrieve a single post (read-only)"
msgstr "Tek bir gönderiyi al (salt okunur)"
-#: engine/blog/models.py:13
+#: engine/blog/models.py:20
msgid ""
"Represents a blog post model. The Post class defines the structure and "
"behavior of a blog post. It includes attributes for author, title, content, "
@@ -41,65 +41,65 @@ msgstr ""
"kısıtlamalar uygular. Ayrıca başlığa dayalı otomatik slug oluşturmayı da "
"destekler."
-#: engine/blog/models.py:24
+#: engine/blog/models.py:41
msgid "post title"
msgstr "Gönderinin başlığı"
-#: engine/blog/models.py:24
+#: engine/blog/models.py:42
msgid "title"
msgstr "Başlık"
-#: engine/blog/models.py:69
+#: engine/blog/models.py:89
msgid "is static page"
msgstr "statik sayfadır"
-#: engine/blog/models.py:70
+#: engine/blog/models.py:91
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
msgstr ""
"Bu, statik URL'ye sahip bir sayfa (örneğin `/help/delivery`) için bir "
"gönderi mi?"
-#: engine/blog/models.py:77
+#: engine/blog/models.py:99
msgid "post"
msgstr "Posta"
-#: engine/blog/models.py:78
+#: engine/blog/models.py:100
msgid "posts"
msgstr "Mesajlar"
-#: engine/blog/models.py:82
+#: engine/blog/models.py:105
msgid "markdown files are not supported yet - use markdown content instead"
msgstr ""
"Markdown dosyaları desteklenmiyor yer - bunun yerine markdown içeriği "
"kullanın!"
-#: engine/blog/models.py:84
+#: engine/blog/models.py:110
msgid ""
"a markdown file or markdown content must be provided - mutually exclusive"
msgstr ""
"bir markdown dosyası veya markdown içeriği sağlanmalıdır - birbirini dışlayan"
-#: engine/blog/models.py:116
+#: engine/blog/models.py:144
msgid "internal tag identifier for the post tag"
msgstr "gönderi etiketi için dahili etiket tanımlayıcısı"
-#: engine/blog/models.py:117
+#: engine/blog/models.py:145
msgid "tag name"
msgstr "Etiket adı"
-#: engine/blog/models.py:121
+#: engine/blog/models.py:149
msgid "user-friendly name for the post tag"
msgstr "Gönderi etiketi için kullanıcı dostu ad"
-#: engine/blog/models.py:122
+#: engine/blog/models.py:150
msgid "tag display name"
msgstr "Etiket görünen adı"
-#: engine/blog/models.py:130
+#: engine/blog/models.py:158
msgid "post tag"
msgstr "Mesaj etiketi"
-#: engine/blog/models.py:131
+#: engine/blog/models.py:159
msgid "post tags"
msgstr "Gönderi etiketleri"
diff --git a/engine/blog/locale/vi_VN/LC_MESSAGES/django.po b/engine/blog/locale/vi_VN/LC_MESSAGES/django.po
index 060ab9e0..181d7254 100644
--- a/engine/blog/locale/vi_VN/LC_MESSAGES/django.po
+++ b/engine/blog/locale/vi_VN/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: LANGUAGE \n"
@@ -25,7 +25,7 @@ msgstr "Danh sách tất cả các bài đăng (chỉ đọc)"
msgid "retrieve a single post (read-only)"
msgstr "Lấy một bài đăng duy nhất (chỉ đọc)"
-#: engine/blog/models.py:13
+#: engine/blog/models.py:20
msgid ""
"Represents a blog post model. The Post class defines the structure and "
"behavior of a blog post. It includes attributes for author, title, content, "
@@ -40,65 +40,65 @@ msgstr ""
"ràng buộc như yêu cầu phải có nội dung hoặc tệp đính kèm nhưng không cả hai "
"cùng lúc. Nó cũng hỗ trợ tạo slug tự động dựa trên tiêu đề."
-#: engine/blog/models.py:24
+#: engine/blog/models.py:41
msgid "post title"
msgstr "Tiêu đề bài đăng"
-#: engine/blog/models.py:24
+#: engine/blog/models.py:42
msgid "title"
msgstr "Tiêu đề"
-#: engine/blog/models.py:69
+#: engine/blog/models.py:89
msgid "is static page"
msgstr "là trang tĩnh"
-#: engine/blog/models.py:70
+#: engine/blog/models.py:91
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
msgstr ""
"Đây có phải là bài đăng cho một trang có URL tĩnh (ví dụ: `/help/delivery`) "
"không?"
-#: engine/blog/models.py:77
+#: engine/blog/models.py:99
msgid "post"
msgstr "Bài đăng"
-#: engine/blog/models.py:78
+#: engine/blog/models.py:100
msgid "posts"
msgstr "Bài đăng"
-#: engine/blog/models.py:82
+#: engine/blog/models.py:105
msgid "markdown files are not supported yet - use markdown content instead"
msgstr ""
"Tệp Markdown hiện chưa được hỗ trợ - hãy sử dụng nội dung Markdown thay thế!"
-#: engine/blog/models.py:84
+#: engine/blog/models.py:110
msgid ""
"a markdown file or markdown content must be provided - mutually exclusive"
msgstr ""
"Phải cung cấp tệp Markdown hoặc nội dung Markdown - hai tùy chọn này là "
"tương phản nhau."
-#: engine/blog/models.py:116
+#: engine/blog/models.py:144
msgid "internal tag identifier for the post tag"
msgstr "Mã định danh thẻ nội bộ cho thẻ bài viết"
-#: engine/blog/models.py:117
+#: engine/blog/models.py:145
msgid "tag name"
msgstr "Tên ngày"
-#: engine/blog/models.py:121
+#: engine/blog/models.py:149
msgid "user-friendly name for the post tag"
msgstr "Tên thân thiện với người dùng cho thẻ bài viết"
-#: engine/blog/models.py:122
+#: engine/blog/models.py:150
msgid "tag display name"
msgstr "Hiển thị tên thẻ"
-#: engine/blog/models.py:130
+#: engine/blog/models.py:158
msgid "post tag"
msgstr "Thẻ bài viết"
-#: engine/blog/models.py:131
+#: engine/blog/models.py:159
msgid "post tags"
msgstr "Thẻ bài viết"
diff --git a/engine/blog/locale/zh_Hans/LC_MESSAGES/django.po b/engine/blog/locale/zh_Hans/LC_MESSAGES/django.po
index e190b359..97af618e 100644
--- a/engine/blog/locale/zh_Hans/LC_MESSAGES/django.po
+++ b/engine/blog/locale/zh_Hans/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: LANGUAGE \n"
@@ -25,7 +25,7 @@ msgstr "列出所有帖子(只读)"
msgid "retrieve a single post (read-only)"
msgstr "检索单个帖子(只读)"
-#: engine/blog/models.py:13
+#: engine/blog/models.py:20
msgid ""
"Represents a blog post model. The Post class defines the structure and "
"behavior of a blog post. It includes attributes for author, title, content, "
@@ -38,60 +38,60 @@ msgstr ""
"附件、标签和相关标记的属性。该类可强制执行一些限制条件,如要求提供内容或文件"
"附件,但不能同时提供这两种内容。它还支持根据标题自动生成标签。"
-#: engine/blog/models.py:24
+#: engine/blog/models.py:41
msgid "post title"
msgstr "帖子标题"
-#: engine/blog/models.py:24
+#: engine/blog/models.py:42
msgid "title"
msgstr "标题"
-#: engine/blog/models.py:69
+#: engine/blog/models.py:89
msgid "is static page"
msgstr "是静态页面"
-#: engine/blog/models.py:70
+#: engine/blog/models.py:91
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
msgstr "这是静态 URL 页面(如 `/help/delivery`)的帖子吗?"
-#: engine/blog/models.py:77
+#: engine/blog/models.py:99
msgid "post"
msgstr "职位"
-#: engine/blog/models.py:78
+#: engine/blog/models.py:100
msgid "posts"
msgstr "职位"
-#: engine/blog/models.py:82
+#: engine/blog/models.py:105
msgid "markdown files are not supported yet - use markdown content instead"
msgstr "不支持 Markdown 文件,请使用 Markdown 内容!"
-#: engine/blog/models.py:84
+#: engine/blog/models.py:110
msgid ""
"a markdown file or markdown content must be provided - mutually exclusive"
msgstr "必须提供标记符文件或标记符内容 - 相互排斥"
-#: engine/blog/models.py:116
+#: engine/blog/models.py:144
msgid "internal tag identifier for the post tag"
msgstr "职位标签的内部标签标识符"
-#: engine/blog/models.py:117
+#: engine/blog/models.py:145
msgid "tag name"
msgstr "标签名称"
-#: engine/blog/models.py:121
+#: engine/blog/models.py:149
msgid "user-friendly name for the post tag"
msgstr "方便用户使用的帖子标签名称"
-#: engine/blog/models.py:122
+#: engine/blog/models.py:150
msgid "tag display name"
msgstr "标签显示名称"
-#: engine/blog/models.py:130
+#: engine/blog/models.py:158
msgid "post tag"
msgstr "职位标签"
-#: engine/blog/models.py:131
+#: engine/blog/models.py:159
msgid "post tags"
msgstr "帖子标签"
diff --git a/engine/blog/models.py b/engine/blog/models.py
index 7c9658de..c09133d6 100644
--- a/engine/blog/models.py
+++ b/engine/blog/models.py
@@ -15,8 +15,8 @@ from markdown_field import MarkdownField
from engine.core.abstract import NiceModel
-class Post(NiceModel): # type: ignore [django-manager-missing]
- __doc__ = _( # type: ignore [assignment]
+class Post(NiceModel):
+ __doc__ = _( # pyright: ignore[reportUnknownVariableType]
"Represents a blog post model. "
"The Post class defines the structure and behavior of a blog post. "
"It includes attributes for author, title, content, optional file attachment, slug, and associated tags. "
diff --git a/engine/blog/viewsets.py b/engine/blog/viewsets.py
index 0ca86f77..a617ec96 100644
--- a/engine/blog/viewsets.py
+++ b/engine/blog/viewsets.py
@@ -11,8 +11,8 @@ from engine.core.permissions import EvibesPermission
@extend_schema_view(**POST_SCHEMA)
-class PostViewSet(ReadOnlyModelViewSet): # type: ignore [type-arg]
- __doc__ = _( # type: ignore [assignment]
+class PostViewSet(ReadOnlyModelViewSet):
+ __doc__ = _(
"Encapsulates operations for managing and retrieving Post entities in a read-only model view set. "
"This class is tailored to handle Post objects that are active and allows filtration based on defined "
"filters. It integrates with Django's backend filtering system and ensures operations align with the "
diff --git a/engine/core/abstract.py b/engine/core/abstract.py
index 9f7cf6c4..40851d7d 100644
--- a/engine/core/abstract.py
+++ b/engine/core/abstract.py
@@ -24,12 +24,12 @@ class NiceModel(Model):
)
created = CreationDateTimeField(
_("created"), help_text=_("when the object first appeared on the database")
- ) # type: ignore [no-untyped-call]
+ )
modified = ModificationDateTimeField(
_("modified"), help_text=_("when the object was last modified")
- ) # type: ignore [no-untyped-call]
+ )
- def save( # type: ignore [override]
+ def save(
self,
*,
force_insert: bool = False,
diff --git a/engine/core/admin.py b/engine/core/admin.py
index a4a1a2e9..f9afb886 100644
--- a/engine/core/admin.py
+++ b/engine/core/admin.py
@@ -31,6 +31,7 @@ from mptt.admin import DraggableMPTTAdmin
from unfold.admin import ModelAdmin, TabularInline
from unfold.contrib.import_export.forms import ExportForm, ImportForm
from unfold.decorators import action
+from unfold.typing import FieldsetsType
from unfold.widgets import UnfoldAdminSelectWidget, UnfoldAdminTextInputWidget
from engine.core.forms import (
@@ -70,9 +71,7 @@ class FieldsetsMixin:
additional_fields: list[str] | None = []
model: ClassVar[Type[Model]]
- def get_fieldsets(
- self, request: HttpRequest, obj: Any = None
- ) -> list[tuple[str, dict[str, list[str]]]]:
+ def get_fieldsets(self, request: HttpRequest, obj: Any = None) -> FieldsetsType:
if request:
pass
@@ -82,8 +81,8 @@ class FieldsetsMixin:
fieldsets = []
def add_translations_fieldset(
- fss: list[tuple[str, dict[str, list[str]]]],
- ) -> list[tuple[str, dict[str, list[str]]]]:
+ fss: FieldsetsType,
+ ) -> FieldsetsType:
with suppress(NotRegistered):
transoptions = translator.get_options_for_model(self.model)
translation_fields = []
@@ -95,7 +94,7 @@ class FieldsetsMixin:
_("translations"),
{"classes": ["tab"], "fields": translation_fields},
)
- ] # type: ignore [list-item]
+ ]
return fss
if self.general_fields:
@@ -140,8 +139,8 @@ class FieldsetsMixin:
ts.append(name)
if ts:
fieldsets.append((_("timestamps"), {"classes": ["tab"], "fields": ts}))
- fieldsets = add_translations_fieldset(fieldsets) # type: ignore [arg-type, assignment]
- return fieldsets # type: ignore [return-value]
+ fieldsets = add_translations_fieldset(fieldsets)
+ return fieldsets
# noinspection PyUnresolvedReferences
@@ -161,14 +160,14 @@ class ActivationActionsMixin:
def activate_selected(self, request: HttpRequest, queryset: QuerySet[Any]) -> None:
try:
queryset.update(is_active=True)
- self.message_user( # type: ignore [attr-defined]
+ self.message_user(
request=request,
message=_("selected items have been activated.").lower(),
level=messages.SUCCESS,
)
except Exception as e:
- self.message_user(request=request, message=str(e), level=messages.ERROR) # type: ignore [attr-defined]
+ self.message_user(request=request, message=str(e), level=messages.ERROR)
@action(
description=_("deactivate selected %(verbose_name_plural)s").lower(),
@@ -179,17 +178,17 @@ class ActivationActionsMixin:
) -> None:
try:
queryset.update(is_active=False)
- self.message_user( # type: ignore [attr-defined]
+ self.message_user(
request=request,
message=_("selected items have been deactivated.").lower(),
level=messages.SUCCESS,
)
except Exception as e:
- self.message_user(request=request, message=str(e), level=messages.ERROR) # type: ignore [attr-defined]
+ self.message_user(request=request, message=str(e), level=messages.ERROR)
-class AttributeValueInline(TabularInline): # type: ignore [type-arg]
+class AttributeValueInline(TabularInline):
model = AttributeValue
extra = 0
autocomplete_fields = ["attribute"]
@@ -201,7 +200,7 @@ class AttributeValueInline(TabularInline): # type: ignore [type-arg]
return super().get_queryset(request).select_related("attribute", "product")
-class ProductImageInline(TabularInline): # type: ignore [type-arg]
+class ProductImageInline(TabularInline):
model = ProductImage
extra = 0
tab = True
@@ -212,7 +211,7 @@ class ProductImageInline(TabularInline): # type: ignore [type-arg]
return super().get_queryset(request).select_related("product")
-class StockInline(TabularInline): # type: ignore [type-arg]
+class StockInline(TabularInline):
model = Stock
extra = 0
form = StockForm
@@ -224,7 +223,7 @@ class StockInline(TabularInline): # type: ignore [type-arg]
return super().get_queryset(request).select_related("vendor", "product")
-class OrderProductInline(TabularInline): # type: ignore [type-arg]
+class OrderProductInline(TabularInline):
model = OrderProduct
extra = 0
readonly_fields = ("product", "quantity", "buy_price")
@@ -242,7 +241,7 @@ class OrderProductInline(TabularInline): # type: ignore [type-arg]
)
-class CategoryChildrenInline(TabularInline): # type: ignore [type-arg]
+class CategoryChildrenInline(TabularInline):
model = Category
fk_name = "parent"
extra = 0
@@ -255,9 +254,9 @@ class CategoryChildrenInline(TabularInline): # type: ignore [type-arg]
@register(AttributeGroup)
class AttributeGroupAdmin(
DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin
-): # type: ignore [misc, type-arg]
+):
# noinspection PyClassVar
- model = AttributeGroup # type: ignore [misc]
+ model = AttributeGroup
list_display = (
"name",
"modified",
@@ -281,9 +280,9 @@ class AttributeGroupAdmin(
@register(Attribute)
class AttributeAdmin(
DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin
-): # type: ignore [misc, type-arg]
+):
# noinspection PyClassVar
- model = Attribute # type: ignore [misc]
+ model = Attribute
list_display = (
"name",
"group",
@@ -320,9 +319,9 @@ class AttributeAdmin(
@register(AttributeValue)
-class AttributeValueAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg]
+class AttributeValueAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin):
# noinspection PyClassVar
- model = AttributeValue # type: ignore [misc]
+ model = AttributeValue
list_display = (
"attribute",
"value",
@@ -413,9 +412,9 @@ class CategoryAdmin(
@register(Brand)
class BrandAdmin(
DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin
-): # type: ignore [misc, type-arg]
+):
# noinspection PyClassVar
- model = Brand # type: ignore [misc]
+ model = Brand
list_display = (
"name",
"priority",
@@ -451,9 +450,9 @@ class ProductAdmin(
ActivationActionsMixin,
ModelAdmin,
ImportExportModelAdmin,
-): # type: ignore [misc, type-arg]
+):
# noinspection PyClassVar
- model = Product # type: ignore [misc]
+ model = Product
list_display = (
"sku",
"name",
@@ -532,9 +531,9 @@ class ProductAdmin(
@register(ProductTag)
class ProductTagAdmin(
DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin
-): # type: ignore [misc, type-arg]
+):
# noinspection PyClassVar
- model = ProductTag # type: ignore [misc]
+ model = ProductTag
list_display = ("tag_name",)
search_fields = ("tag_name",)
readonly_fields = (
@@ -552,9 +551,9 @@ class ProductTagAdmin(
@register(CategoryTag)
class CategoryTagAdmin(
DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin
-): # type: ignore [misc, type-arg]
+):
# noinspection PyClassVar
- model = CategoryTag # type: ignore [misc]
+ model = CategoryTag
list_display = (
"name",
"tag_name",
@@ -580,9 +579,9 @@ class CategoryTagAdmin(
@register(Vendor)
class VendorAdmin(
DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin
-): # type: ignore [misc, type-arg]
+):
# noinspection PyClassVar
- model = Vendor # type: ignore [misc]
+ model = Vendor
list_display = (
"name",
"markup_percent",
@@ -622,9 +621,9 @@ class VendorAdmin(
@register(Feedback)
class FeedbackAdmin(
DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin
-): # type: ignore [misc, type-arg]
+):
# noinspection PyClassVar
- model = Feedback # type: ignore [misc]
+ model = Feedback
list_display = (
"order_product",
"rating",
@@ -657,9 +656,9 @@ class FeedbackAdmin(
@register(Order)
class OrderAdmin(
DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin
-): # type: ignore [misc, type-arg]
+):
# noinspection PyClassVar
- model = Order # type: ignore [misc]
+ model = Order
list_display = (
"human_readable_id",
"user",
@@ -710,9 +709,9 @@ class OrderAdmin(
@register(OrderProduct)
class OrderProductAdmin(
DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin
-): # type: ignore [misc, type-arg]
+):
# noinspection PyClassVar
- model = OrderProduct # type: ignore [misc]
+ model = OrderProduct
list_display = (
"order",
"product",
@@ -750,9 +749,9 @@ class OrderProductAdmin(
@register(PromoCode)
class PromoCodeAdmin(
DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin
-): # type: ignore [misc, type-arg]
+):
# noinspection PyClassVar
- model = PromoCode # type: ignore [misc]
+ model = PromoCode
list_display = (
"code",
"discount_percent",
@@ -796,9 +795,9 @@ class PromoCodeAdmin(
@register(Promotion)
class PromotionAdmin(
DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin
-): # type: ignore [misc, type-arg]
+):
# noinspection PyClassVar
- model = Promotion # type: ignore [misc]
+ model = Promotion
list_display = (
"name",
"discount_percent",
@@ -825,9 +824,9 @@ class PromotionAdmin(
@register(Stock)
class StockAdmin(
DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin
-): # type: ignore [misc, type-arg]
+):
# noinspection PyClassVar
- model = Stock # type: ignore [misc]
+ model = Stock
form = StockForm
list_display = (
"product",
@@ -875,9 +874,9 @@ class StockAdmin(
@register(Wishlist)
class WishlistAdmin(
DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin
-): # type: ignore [misc, type-arg]
+):
# noinspection PyClassVar
- model = Wishlist # type: ignore [misc]
+ model = Wishlist
list_display = (
"user",
"modified",
@@ -903,9 +902,9 @@ class WishlistAdmin(
@register(ProductImage)
class ProductImageAdmin(
DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin
-): # type: ignore [misc, type-arg]
+):
# noinspection PyClassVar
- model = ProductImage # type: ignore [misc]
+ model = ProductImage
list_display = (
"alt",
"product",
@@ -939,9 +938,9 @@ class ProductImageAdmin(
@register(Address)
-class AddressAdmin(DjangoQLSearchMixin, FieldsetsMixin, GISModelAdmin): # type: ignore [misc]
+class AddressAdmin(DjangoQLSearchMixin, FieldsetsMixin, GISModelAdmin):
# noinspection PyClassVar
- model = Address # type: ignore [misc]
+ model = Address
list_display = (
"street",
"city",
@@ -991,9 +990,9 @@ class AddressAdmin(DjangoQLSearchMixin, FieldsetsMixin, GISModelAdmin): # type:
@register(CustomerRelationshipManagementProvider)
class CustomerRelationshipManagementProviderAdmin(
DjangoQLSearchMixin, FieldsetsMixin, ModelAdmin
-): # type: ignore [misc, type-arg]
+):
# noinspection PyClassVar
- model = CustomerRelationshipManagementProvider # type: ignore [misc]
+ model = CustomerRelationshipManagementProvider
list_display = (
"name",
"default",
@@ -1020,9 +1019,9 @@ class CustomerRelationshipManagementProviderAdmin(
@register(OrderCrmLink)
-class OrderCrmLinkAdmin(DjangoQLSearchMixin, FieldsetsMixin, ModelAdmin): # type: ignore [misc, type-arg]
+class OrderCrmLinkAdmin(DjangoQLSearchMixin, FieldsetsMixin, ModelAdmin):
# noinspection PyClassVar
- model = OrderCrmLink # type: ignore [misc]
+ model = OrderCrmLink
list_display = (
"crm_lead_id",
"order",
@@ -1086,7 +1085,7 @@ class ConstanceConfig:
# noinspection PyTypeChecker
site.unregister([Config])
# noinspection PyTypeChecker
-site.register([ConstanceConfig], BaseConstanceAdmin) # type: ignore [list-item]
+site.register([ConstanceConfig], BaseConstanceAdmin)
site.site_title = settings.PROJECT_NAME
site.site_header = "eVibes"
site.index_title = settings.PROJECT_NAME
diff --git a/engine/core/elasticsearch/__init__.py b/engine/core/elasticsearch/__init__.py
index 7756e3ae..185ec46b 100644
--- a/engine/core/elasticsearch/__init__.py
+++ b/engine/core/elasticsearch/__init__.py
@@ -434,9 +434,9 @@ def _lang_analyzer(lang_code: str) -> str:
class ActiveOnlyMixin:
def get_queryset(self) -> QuerySet[Any]:
- return super().get_queryset().filter(is_active=True) # type: ignore [no-any-return, misc]
+ return super().get_queryset().filter(is_active=True)
- def should_index_object(self, obj) -> bool: # type: ignore [no-untyped-def]
+ def should_index_object(self, obj) -> bool:
return getattr(obj, "is_active", False)
diff --git a/engine/core/elasticsearch/documents.py b/engine/core/elasticsearch/documents.py
index f741f8c7..cf7f05b5 100644
--- a/engine/core/elasticsearch/documents.py
+++ b/engine/core/elasticsearch/documents.py
@@ -13,7 +13,7 @@ from engine.core.elasticsearch import (
from engine.core.models import Brand, Category, Product
-class BaseDocument(Document): # type: ignore [misc]
+class BaseDocument(Document):
name = fields.TextField(
attr="name",
analyzer="standard",
@@ -197,7 +197,7 @@ add_multilang_fields(BrandDocument)
registry.register_document(BrandDocument)
-class TestModelDocument(Document): # type: ignore [misc]
+class TestModelDocument(Document):
class Index:
name = "testmodels"
diff --git a/engine/core/filters.py b/engine/core/filters.py
index cd27fcf0..70fa2ef1 100644
--- a/engine/core/filters.py
+++ b/engine/core/filters.py
@@ -51,7 +51,7 @@ from engine.core.models import (
logger = logging.getLogger(__name__)
-class CaseInsensitiveListFilter(BaseInFilter, CharFilter): # type: ignore [misc]
+class CaseInsensitiveListFilter(BaseInFilter, CharFilter):
def filter(self, qs: QuerySet[Any], value: Any) -> QuerySet[Any]:
if not value:
return qs
@@ -74,7 +74,7 @@ class CaseInsensitiveListFilter(BaseInFilter, CharFilter): # type: ignore [misc
# noinspection PyUnusedLocal
-class ProductFilter(FilterSet): # type: ignore [misc]
+class ProductFilter(FilterSet):
search = CharFilter(field_name="name", method="search_products", label=_("Search"))
uuid = UUIDFilter(field_name="uuid", lookup_expr="exact", label=_("UUID"))
name = CharFilter(lookup_expr="icontains", label=_("Name"))
@@ -188,7 +188,7 @@ class ProductFilter(FilterSet): # type: ignore [misc]
if not value:
return queryset
- es_products = process_query(query=value, indexes=("products",)) # type: ignore
+ es_products = process_query(query=value, indexes=("products",))
uuids = [p.get("uuid") for p in (es_products or {}).get("products", [])][:33]
if not uuids:
return queryset.none()
@@ -392,7 +392,7 @@ class ProductFilter(FilterSet): # type: ignore [misc]
# noinspection PyUnusedLocal
-class OrderFilter(FilterSet): # type: ignore [misc]
+class OrderFilter(FilterSet):
search = CharFilter(
method="filter_search",
label=_("Search (ID, product name or part number)"),
@@ -455,7 +455,7 @@ class OrderFilter(FilterSet): # type: ignore [misc]
).distinct()
-class WishlistFilter(FilterSet): # type: ignore [misc]
+class WishlistFilter(FilterSet):
uuid = UUIDFilter(field_name="uuid", lookup_expr="exact")
user_email = CharFilter(
field_name="user__email", lookup_expr="iexact", label=_("User email")
@@ -479,7 +479,7 @@ class WishlistFilter(FilterSet): # type: ignore [misc]
# noinspection PyUnusedLocal
-class CategoryFilter(FilterSet): # type: ignore [misc]
+class CategoryFilter(FilterSet):
search = CharFilter(
field_name="name", method="search_categories", label=_("Search")
)
@@ -521,7 +521,7 @@ class CategoryFilter(FilterSet): # type: ignore [misc]
for category in process_query(query=value, indexes=("categories",))[
"categories"
]
- ] # type: ignore
+ ]
return queryset.filter(uuid__in=uuids)
@@ -621,7 +621,7 @@ class CategoryFilter(FilterSet): # type: ignore [misc]
# noinspection PyUnusedLocal
-class BrandFilter(FilterSet): # type: ignore [misc]
+class BrandFilter(FilterSet):
search = CharFilter(field_name="name", method="search_brands", label=_("Search"))
uuid = UUIDFilter(field_name="uuid", lookup_expr="exact")
name = CharFilter(lookup_expr="icontains", label=_("Name"))
@@ -653,12 +653,12 @@ class BrandFilter(FilterSet): # type: ignore [misc]
uuids = [
brand.get("uuid")
for brand in process_query(query=value, indexes=("brands",))["brands"]
- ] # type: ignore
+ ]
return queryset.filter(uuid__in=uuids)
-class FeedbackFilter(FilterSet): # type: ignore [misc]
+class FeedbackFilter(FilterSet):
uuid = UUIDFilter(field_name="uuid", lookup_expr="exact", label=_("UUID"))
product_uuid = UUIDFilter(
field_name="order_product__product__uuid",
@@ -687,7 +687,7 @@ class FeedbackFilter(FilterSet): # type: ignore [misc]
fields = ["uuid", "product_uuid", "user_uuid", "order_by"]
-class AddressFilter(FilterSet): # type: ignore [misc]
+class AddressFilter(FilterSet):
uuid = UUIDFilter(field_name="uuid", lookup_expr="exact", label=_("UUID"))
user_uuid = UUIDFilter(
field_name="user__uuid", lookup_expr="exact", label=_("User UUID")
diff --git a/engine/core/graphene/__init__.py b/engine/core/graphene/__init__.py
index 382eefd7..c461af03 100644
--- a/engine/core/graphene/__init__.py
+++ b/engine/core/graphene/__init__.py
@@ -3,7 +3,7 @@ from typing import Any
from graphene import Mutation
-class BaseMutation(Mutation): # type: ignore [misc]
+class BaseMutation(Mutation):
def __init__(self, *args: list[Any], **kwargs: dict[Any, Any]) -> None:
super().__init__(*args, **kwargs)
diff --git a/engine/core/graphene/dashboard_mutations/product.py b/engine/core/graphene/dashboard_mutations/product.py
index 0bbc97af..747158dc 100644
--- a/engine/core/graphene/dashboard_mutations/product.py
+++ b/engine/core/graphene/dashboard_mutations/product.py
@@ -53,7 +53,7 @@ def resolve_tags(product, tag_uuids):
product.tags.set(tags)
-class AttributeInput(InputObjectType): # type: ignore[misc]
+class AttributeInput(InputObjectType):
attribute_uuid = UUID(required=False, name="attributeUuid")
group_name = String(required=False, name="groupName")
attribute_name = String(required=False, name="attributeName")
@@ -61,7 +61,7 @@ class AttributeInput(InputObjectType): # type: ignore[misc]
value = String(required=True)
-class ProductInput(InputObjectType): # type: ignore[misc]
+class ProductInput(InputObjectType):
name = NonNull(String)
description = String(required=False)
is_digital = Boolean(required=False, name="isDigital")
@@ -85,15 +85,15 @@ class CreateProduct(BaseMutation):
product = Field(ProductType)
@staticmethod
- def mutate(parent, info, product_data): # type: ignore [override]
+ def mutate(parent, info, product_data):
user = info.context.user
if not user.has_perm("core.add_product"):
raise PermissionDenied(permission_denied_message)
- category = Category.objects.get(uuid=product_data["category_uuid"]) # type: ignore[index]
+ category = Category.objects.get(uuid=product_data["category_uuid"])
brand = None
if product_data.get("brand_uuid"):
- with suppress(Brand.DoesNotExist): # type: ignore[name-defined]
- brand = Brand.objects.get(uuid=product_data["brand_uuid"]) # type: ignore[index]
+ with suppress(Brand.DoesNotExist):
+ brand = Brand.objects.get(uuid=product_data["brand_uuid"])
product = Product.objects.create(
name=product_data["name"],
@@ -124,7 +124,7 @@ class UpdateProduct(BaseMutation):
product = Field(ProductType)
@staticmethod
- def mutate(parent, info, product_uuid, product_data): # type: ignore [override]
+ def mutate(parent, info, product_uuid, product_data):
user = info.context.user
if not user.has_perm("core.change_product"):
raise PermissionDenied(permission_denied_message)
@@ -142,10 +142,10 @@ class UpdateProduct(BaseMutation):
updates[model_field] = product_data[field_in]
if product_data.get("category_uuid"):
- product.category = Category.objects.get(uuid=product_data["category_uuid"]) # type: ignore[index]
+ product.category = Category.objects.get(uuid=product_data["category_uuid"])
if product_data.get("brand_uuid") is not None:
if product_data.get("brand_uuid"):
- product.brand = Brand.objects.get(uuid=product_data["brand_uuid"]) # type: ignore[index]
+ product.brand = Brand.objects.get(uuid=product_data["brand_uuid"])
else:
product.brand = None
@@ -171,7 +171,7 @@ class DeleteProduct(BaseMutation):
ok = Boolean()
@staticmethod
- def mutate(parent, info, product_uuid): # type: ignore [override]
+ def mutate(parent, info, product_uuid):
user = info.context.user
if not user.has_perm("core.delete_product"):
raise PermissionDenied(permission_denied_message)
diff --git a/engine/core/graphene/mutations.py b/engine/core/graphene/mutations.py
index e0d9fde4..c66ebc98 100644
--- a/engine/core/graphene/mutations.py
+++ b/engine/core/graphene/mutations.py
@@ -8,7 +8,6 @@ from django.http import Http404
from django.utils.translation import gettext_lazy as _
from graphene import UUID, Boolean, Field, Int, List, String
from graphene.types.generic import GenericScalar
-from graphene_django.utils import camelize
from engine.core.elasticsearch import process_query
from engine.core.graphene import BaseMutation
@@ -27,6 +26,7 @@ from engine.core.utils.emailing import contact_us_email
from engine.core.utils.messages import permission_denied_message
from engine.core.utils.nominatim import fetch_address_suggestions
from engine.payments.graphene.object_types import TransactionType
+from evibes.utils.renderers import camelize
logger = logging.getLogger(__name__)
@@ -49,7 +49,7 @@ class CacheOperator(BaseMutation):
data = GenericScalar(description=_("cached data"))
@staticmethod
- def mutate(parent, info, key, data=None, timeout=None) -> dict[Any, Any]: # type: ignore [override]
+ def mutate(parent, info, key, data=None, timeout=None) -> dict[Any, Any]:
return camelize(web_cache(info.context, key, data, timeout))
@@ -64,7 +64,7 @@ class RequestCursedURL(BaseMutation):
data = GenericScalar(description=_("camelized JSON data from the requested URL"))
@staticmethod
- def mutate(parent, info, url) -> dict[str, Any]: # type: ignore [override]
+ def mutate(parent, info, url) -> dict[str, Any]:
if not is_url_safe(url):
raise BadRequest(_("only URLs starting with http(s):// are allowed"))
try:
@@ -94,7 +94,7 @@ class AddOrderProduct(BaseMutation):
order = Field(OrderType)
@staticmethod
- def mutate(parent, info, product_uuid, order_uuid, attributes=None): # type: ignore [override]
+ def mutate(parent, info, product_uuid, order_uuid, attributes=None):
user = info.context.user
try:
order = Order.objects.get(uuid=order_uuid)
@@ -123,7 +123,7 @@ class RemoveOrderProduct(BaseMutation):
order = Field(OrderType)
@staticmethod
- def mutate(parent, info, product_uuid, order_uuid, attributes=None): # type: ignore [override]
+ def mutate(parent, info, product_uuid, order_uuid, attributes=None):
user = info.context.user
try:
order = Order.objects.get(uuid=order_uuid)
@@ -150,7 +150,7 @@ class RemoveAllOrderProducts(BaseMutation):
order = Field(OrderType)
@staticmethod
- def mutate(parent, info, order_uuid): # type: ignore [override]
+ def mutate(parent, info, order_uuid):
user = info.context.user
order = Order.objects.get(uuid=order_uuid)
if not (user.has_perm("core.delete_orderproduct") or user == order.user):
@@ -173,7 +173,7 @@ class RemoveOrderProductsOfAKind(BaseMutation):
order = Field(OrderType)
@staticmethod
- def mutate(parent, info, product_uuid, order_uuid): # type: ignore [override]
+ def mutate(parent, info, product_uuid, order_uuid):
user = info.context.user
order = Order.objects.get(uuid=order_uuid)
if not (user.has_perm("core.delete_orderproduct") or user == order.user):
@@ -214,7 +214,7 @@ class BuyOrder(BaseMutation):
shipping_address=None,
billing_address=None,
chosen_products=None,
- ): # type: ignore [override]
+ ):
if not any([order_uuid, order_hr_id]) or all([order_uuid, order_hr_id]):
raise BadRequest(
_(
@@ -276,7 +276,7 @@ class BulkOrderAction(BaseMutation):
products,
order_uuid=None,
order_hr_id=None,
- ): # type: ignore [override]
+ ):
if not any([order_uuid, order_hr_id]) or all([order_uuid, order_hr_id]):
raise BadRequest(
_(
@@ -326,7 +326,7 @@ class BulkWishlistAction(BaseMutation):
action,
products,
wishlist_uuid=None,
- ): # type: ignore [override]
+ ):
if not wishlist_uuid:
raise BadRequest(_("please provide wishlist_uuid value"))
user = info.context.user
@@ -379,7 +379,7 @@ class BuyUnregisteredOrder(BaseMutation):
customer_shipping_address=None,
promocode_uuid=None,
is_business=False,
- ): # type: ignore [override]
+ ):
order = Order.objects.create(status="MOMENTAL")
transaction = order.buy_without_registration(
products=products,
@@ -408,7 +408,7 @@ class AddWishlistProduct(BaseMutation):
wishlist = Field(WishlistType)
@staticmethod
- def mutate(parent, info, product_uuid, wishlist_uuid): # type: ignore [override]
+ def mutate(parent, info, product_uuid, wishlist_uuid):
user = info.context.user
try:
wishlist = Wishlist.objects.get(uuid=wishlist_uuid)
@@ -436,7 +436,7 @@ class RemoveWishlistProduct(BaseMutation):
wishlist = Field(WishlistType)
@staticmethod
- def mutate(parent, info, product_uuid, wishlist_uuid): # type: ignore [override]
+ def mutate(parent, info, product_uuid, wishlist_uuid):
user = info.context.user
try:
wishlist = Wishlist.objects.get(uuid=wishlist_uuid)
@@ -463,7 +463,7 @@ class RemoveAllWishlistProducts(BaseMutation):
wishlist = Field(WishlistType)
@staticmethod
- def mutate(parent, info, wishlist_uuid): # type: ignore [override]
+ def mutate(parent, info, wishlist_uuid):
user = info.context.user
try:
wishlist = Wishlist.objects.get(uuid=wishlist_uuid)
@@ -494,7 +494,7 @@ class BuyWishlist(BaseMutation):
transaction = Field(TransactionType, required=False)
@staticmethod
- def mutate(parent, info, wishlist_uuid, force_balance=False, force_payment=False): # type: ignore [override]
+ def mutate(parent, info, wishlist_uuid, force_balance=False, force_payment=False):
user = info.context.user
try:
wishlist = Wishlist.objects.get(uuid=wishlist_uuid)
@@ -557,7 +557,7 @@ class BuyProduct(BaseMutation):
attributes=None,
force_balance=False,
force_payment=False,
- ): # type: ignore [override]
+ ):
user = info.context.user
order = Order.objects.create(user=user, status="MOMENTAL")
order.add_product(
@@ -589,7 +589,7 @@ class FeedbackProductAction(BaseMutation):
feedback = Field(FeedbackType, required=False)
@staticmethod
- def mutate(parent, info, order_product_uuid, action, comment=None, rating=None): # type: ignore [override]
+ def mutate(parent, info, order_product_uuid, action, comment=None, rating=None):
user = info.context.user
try:
order_product = OrderProduct.objects.get(uuid=order_product_uuid)
@@ -620,7 +620,7 @@ class CreateAddress(BaseMutation):
address = Field(AddressType)
@staticmethod
- def mutate(parent, info, raw_data): # type: ignore [override]
+ def mutate(parent, info, raw_data):
user = info.context.user if info.context.user.is_authenticated else None
address = Address.objects.create(raw_data=raw_data, user=user)
@@ -635,7 +635,7 @@ class DeleteAddress(BaseMutation):
success = Boolean()
@staticmethod
- def mutate(parent, info, uuid): # type: ignore [override]
+ def mutate(parent, info, uuid):
try:
address = Address.objects.get(uuid=uuid)
if (
@@ -663,7 +663,7 @@ class AutocompleteAddress(BaseMutation):
suggestions = GenericScalar()
@staticmethod
- def mutate(parent, info, q, limit): # type: ignore [override]
+ def mutate(parent, info, q, limit):
if 1 > limit > 10:
raise BadRequest(_("limit must be between 1 and 10"))
try:
@@ -688,7 +688,7 @@ class ContactUs(BaseMutation):
error = String()
@staticmethod
- def mutate(parent, info, email, name, subject, message, phone_number=None): # type: ignore [override]
+ def mutate(parent, info, email, name, subject, message, phone_number=None):
try:
contact_us_email.delay(
{
@@ -717,7 +717,7 @@ class Search(BaseMutation):
description = _("elasticsearch - works like a charm")
@staticmethod
- def mutate(parent, info, query): # type: ignore [override]
+ def mutate(parent, info, query):
data = process_query(query=query, request=info.context)
# noinspection PyTypeChecker
diff --git a/engine/core/graphene/object_types.py b/engine/core/graphene/object_types.py
index 1f6abe78..161dfd42 100644
--- a/engine/core/graphene/object_types.py
+++ b/engine/core/graphene/object_types.py
@@ -22,7 +22,6 @@ from graphene import (
from graphene.types.generic import GenericScalar
from graphene_django import DjangoObjectType
from graphene_django.filter import DjangoFilterConnectionField
-from graphene_django.utils import camelize
from mptt.querysets import TreeQuerySet
from engine.core.models import (
@@ -56,11 +55,12 @@ from engine.core.utils.seo_builders import (
website_schema,
)
from engine.payments.graphene.object_types import TransactionType
+from evibes.utils.renderers import camelize
logger = logging.getLogger(__name__)
-class SEOMetaType(ObjectType): # type: ignore [misc]
+class SEOMetaType(ObjectType):
title = String()
description = String()
canonical = String()
@@ -71,7 +71,7 @@ class SEOMetaType(ObjectType): # type: ignore [misc]
hreflang = String()
-class AttributeType(DjangoObjectType): # type: ignore [misc]
+class AttributeType(DjangoObjectType):
values = List(lambda: AttributeValueType, description=_("attribute values"))
class Meta:
@@ -91,7 +91,7 @@ class AttributeType(DjangoObjectType): # type: ignore [misc]
return base_qs
-class AttributeGroupType(DjangoObjectType): # type: ignore [misc]
+class AttributeGroupType(DjangoObjectType):
attributes = List(lambda: AttributeType, description=_("grouped attributes"))
class Meta:
@@ -112,7 +112,7 @@ class AttributeGroupType(DjangoObjectType): # type: ignore [misc]
return qs
-class BrandType(DjangoObjectType): # type: ignore [misc]
+class BrandType(DjangoObjectType):
categories = List(lambda: CategoryType, description=_("categories"))
seo_meta = Field(SEOMetaType, description=_("SEO Meta snapshot"))
@@ -198,17 +198,17 @@ class BrandType(DjangoObjectType): # type: ignore [misc]
}
-class FilterableAttributeType(ObjectType): # type: ignore [misc]
+class FilterableAttributeType(ObjectType):
attribute_name = String(required=True)
possible_values = List(String, required=True)
-class MinMaxPriceType(ObjectType): # type: ignore [misc]
+class MinMaxPriceType(ObjectType):
min_price = Float()
max_price = Float()
-class CategoryType(DjangoObjectType): # type: ignore [misc]
+class CategoryType(DjangoObjectType):
children = List(
lambda: CategoryType,
description=_("categories"),
@@ -358,7 +358,7 @@ class CategoryType(DjangoObjectType): # type: ignore [misc]
}
-class VendorType(DjangoObjectType): # type: ignore [misc]
+class VendorType(DjangoObjectType):
markup_percent = Float(description=_("markup percentage"))
class Meta:
@@ -369,7 +369,7 @@ class VendorType(DjangoObjectType): # type: ignore [misc]
description = _("vendors")
-class AddressType(DjangoObjectType): # type: ignore [misc]
+class AddressType(DjangoObjectType):
latitude = Float(description=_("Latitude (Y coordinate)"))
longitude = Float(description=_("Longitude (X coordinate)"))
@@ -399,7 +399,7 @@ class AddressType(DjangoObjectType): # type: ignore [misc]
return self.location.y if self.location else None
-class FeedbackType(DjangoObjectType): # type: ignore [misc]
+class FeedbackType(DjangoObjectType):
comment = String(description=_("comment"))
rating = Int(
description=_("rating value from 1 to 10, inclusive, or 0 if not set.")
@@ -413,7 +413,7 @@ class FeedbackType(DjangoObjectType): # type: ignore [misc]
description = _("represents feedback from a user.")
-class OrderProductType(DjangoObjectType): # type: ignore [misc]
+class OrderProductType(DjangoObjectType):
attributes = GenericScalar(description=_("attributes"))
notifications = GenericScalar(description=_("notifications"))
download_url = String(
@@ -451,7 +451,7 @@ class OrderProductType(DjangoObjectType): # type: ignore [misc]
return self.download_url
-class OrderType(DjangoObjectType): # type: ignore [misc]
+class OrderType(DjangoObjectType):
order_products = DjangoFilterConnectionField(
OrderProductType, description=_("a list of order products in this order")
)
@@ -508,7 +508,7 @@ class OrderType(DjangoObjectType): # type: ignore [misc]
return None
-class ProductImageType(DjangoObjectType): # type: ignore [misc]
+class ProductImageType(DjangoObjectType):
image = String(description=_("image url"))
class Meta:
@@ -522,7 +522,7 @@ class ProductImageType(DjangoObjectType): # type: ignore [misc]
return info.context.build_absolute_uri(self.image.url) if self.image else ""
-class ProductType(DjangoObjectType): # type: ignore [misc]
+class ProductType(DjangoObjectType):
category = Field(CategoryType, description=_("category"))
images = DjangoFilterConnectionField(ProductImageType, description=_("images"))
feedbacks = DjangoFilterConnectionField(FeedbackType, description=_("feedbacks"))
@@ -646,7 +646,7 @@ class ProductType(DjangoObjectType): # type: ignore [misc]
return self.discount_price
-class AttributeValueType(DjangoObjectType): # type: ignore [misc]
+class AttributeValueType(DjangoObjectType):
value = String(description=_("attribute value"))
class Meta:
@@ -657,7 +657,7 @@ class AttributeValueType(DjangoObjectType): # type: ignore [misc]
description = _("attribute value")
-class PromoCodeType(DjangoObjectType): # type: ignore [misc]
+class PromoCodeType(DjangoObjectType):
discount = Float()
discount_type = String()
@@ -679,13 +679,13 @@ class PromoCodeType(DjangoObjectType): # type: ignore [misc]
float(self.discount_percent)
if self.discount_percent
else float(self.discount_amount)
- ) # type: ignore [arg-type]
+ )
def resolve_discount_type(self: PromoCode, _info) -> str:
return "percent" if self.discount_percent else "amount"
-class PromotionType(DjangoObjectType): # type: ignore [misc]
+class PromotionType(DjangoObjectType):
products = DjangoFilterConnectionField(
ProductType, description=_("products on sale")
)
@@ -698,7 +698,7 @@ class PromotionType(DjangoObjectType): # type: ignore [misc]
description = _("promotions")
-class StockType(DjangoObjectType): # type: ignore [misc]
+class StockType(DjangoObjectType):
vendor = Field(VendorType, description=_("vendor"))
product = Field(ProductType, description=_("product"))
@@ -710,7 +710,7 @@ class StockType(DjangoObjectType): # type: ignore [misc]
description = _("stocks")
-class WishlistType(DjangoObjectType): # type: ignore [misc]
+class WishlistType(DjangoObjectType):
products = DjangoFilterConnectionField(
ProductType, description=_("wishlisted products")
)
@@ -722,7 +722,7 @@ class WishlistType(DjangoObjectType): # type: ignore [misc]
description = _("wishlists")
-class ProductTagType(DjangoObjectType): # type: ignore [misc]
+class ProductTagType(DjangoObjectType):
product_set = DjangoFilterConnectionField(
ProductType, description=_("tagged products")
)
@@ -735,7 +735,7 @@ class ProductTagType(DjangoObjectType): # type: ignore [misc]
description = _("product tags")
-class CategoryTagType(DjangoObjectType): # type: ignore [misc]
+class CategoryTagType(DjangoObjectType):
category_set = DjangoFilterConnectionField(
CategoryType, description=_("tagged categories")
)
@@ -748,7 +748,7 @@ class CategoryTagType(DjangoObjectType): # type: ignore [misc]
description = _("categories tags")
-class ConfigType(ObjectType): # type: ignore [misc]
+class ConfigType(ObjectType):
project_name = String(description=_("project name"))
company_name = String(description=_("company name"))
company_address = String(description=_("company address"))
@@ -768,7 +768,7 @@ class ConfigType(ObjectType): # type: ignore [misc]
description = _("company configuration")
-class LanguageType(ObjectType): # type: ignore [misc]
+class LanguageType(ObjectType):
code = String(description=_("language code"))
name = String(description=_("language name"))
flag = String(description=_("language flag, if exists :)"))
@@ -777,34 +777,34 @@ class LanguageType(ObjectType): # type: ignore [misc]
description = _("supported languages")
-class SearchProductsResultsType(ObjectType): # type: ignore [misc]
+class SearchProductsResultsType(ObjectType):
uuid = UUID()
name = String()
slug = String()
image = String()
-class SearchCategoriesResultsType(ObjectType): # type: ignore [misc]
+class SearchCategoriesResultsType(ObjectType):
uuid = UUID()
name = String()
slug = String()
image = String()
-class SearchBrandsResultsType(ObjectType): # type: ignore [misc]
+class SearchBrandsResultsType(ObjectType):
uuid = UUID()
name = String()
slug = String()
image = String()
-class SearchPostsResultsType(ObjectType): # type: ignore [misc]
+class SearchPostsResultsType(ObjectType):
uuid = UUID()
name = String()
slug = String()
-class SearchResultsType(ObjectType): # type: ignore [misc]
+class SearchResultsType(ObjectType):
products = List(
description=_("products search results"), of_type=SearchProductsResultsType
)
@@ -817,6 +817,6 @@ class SearchResultsType(ObjectType): # type: ignore [misc]
posts = List(description=_("posts search results"), of_type=SearchPostsResultsType)
-class BulkProductInput(InputObjectType): # type: ignore [misc]
+class BulkProductInput(InputObjectType):
uuid = UUID(required=True)
attributes = GenericScalar(required=False)
diff --git a/engine/core/locale/ar_AR/LC_MESSAGES/django.po b/engine/core/locale/ar_AR/LC_MESSAGES/django.po
index a0b24550..4755775e 100644
--- a/engine/core/locale/ar_AR/LC_MESSAGES/django.po
+++ b/engine/core/locale/ar_AR/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 22:12+0300\n"
+"POT-Creation-Date: 2025-12-18 19:09+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -25,112 +25,111 @@ msgstr "يستخدم المعرف الفريد لتحديد أي كائن قاع
msgid "is active"
msgstr "نشط"
-#: engine/core/abstract.py:21
+#: engine/core/abstract.py:22
msgid ""
-"if set to false, this object can't be seen by users without needed "
-"permission"
+"if set to false, this object can't be seen by users without needed permission"
msgstr ""
"إذا تم تعيينه على خطأ، لا يمكن للمستخدمين رؤية هذا الكائن دون الحاجة إلى إذن"
-#: engine/core/abstract.py:23 engine/core/choices.py:18
+#: engine/core/abstract.py:26 engine/core/choices.py:18
msgid "created"
msgstr "تم إنشاؤها"
-#: engine/core/abstract.py:23
+#: engine/core/abstract.py:26
msgid "when the object first appeared on the database"
msgstr "عندما ظهر الكائن لأول مرة في قاعدة البيانات"
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "modified"
msgstr "تم التعديل"
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "when the object was last modified"
msgstr "متى تم تحرير الكائن آخر مرة"
-#: engine/core/admin.py:85
+#: engine/core/admin.py:94
msgid "translations"
msgstr "الترجمات"
-#: engine/core/admin.py:89
+#: engine/core/admin.py:102
msgid "general"
msgstr "جنرال لواء"
-#: engine/core/admin.py:91
+#: engine/core/admin.py:106
msgid "relations"
msgstr "العلاقات"
-#: engine/core/admin.py:93
+#: engine/core/admin.py:111
msgid "additional info"
msgstr "معلومات إضافية"
-#: engine/core/admin.py:111
+#: engine/core/admin.py:133
msgid "metadata"
msgstr "البيانات الوصفية"
-#: engine/core/admin.py:118
+#: engine/core/admin.py:141
msgid "timestamps"
msgstr "الطوابع الزمنية"
-#: engine/core/admin.py:133
+#: engine/core/admin.py:157
#, python-format
msgid "activate selected %(verbose_name_plural)s"
msgstr "تنشيط المحدد _PH_0__%(verbose_name_plural)s"
-#: engine/core/admin.py:138
+#: engine/core/admin.py:165
msgid "selected items have been activated."
msgstr "تم تفعيل العناصر المختارة!"
-#: engine/core/admin.py:144
+#: engine/core/admin.py:173
#, python-format
msgid "deactivate selected %(verbose_name_plural)s"
msgstr "إلغاء التنشيط المحدد _PH_0_%(verbose_name_plural)s"
-#: engine/core/admin.py:149
+#: engine/core/admin.py:183
msgid "selected items have been deactivated."
msgstr "تم إلغاء تنشيط العناصر المحددة!"
-#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586
-#: engine/core/graphene/object_types.py:593 engine/core/models.py:801
-#: engine/core/models.py:809
+#: engine/core/admin.py:195 engine/core/graphene/object_types.py:650
+#: engine/core/graphene/object_types.py:657 engine/core/models.py:824
+#: engine/core/models.py:832
msgid "attribute value"
msgstr "قيمة السمة"
-#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75
-#: engine/core/models.py:810
+#: engine/core/admin.py:196 engine/core/graphene/object_types.py:75
+#: engine/core/models.py:833
msgid "attribute values"
msgstr "قيم السمات"
-#: engine/core/admin.py:172
+#: engine/core/admin.py:207
msgid "image"
msgstr "الصورة"
-#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474
+#: engine/core/admin.py:208 engine/core/graphene/object_types.py:527
msgid "images"
msgstr "الصور"
-#: engine/core/admin.py:184 engine/core/models.py:566
+#: engine/core/admin.py:219 engine/core/models.py:587
msgid "stock"
msgstr "المخزون"
-#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640
+#: engine/core/admin.py:220 engine/core/graphene/object_types.py:710
msgid "stocks"
msgstr "الأسهم"
-#: engine/core/admin.py:196 engine/core/models.py:1818
+#: engine/core/admin.py:231 engine/core/models.py:1930
msgid "order product"
msgstr "طلب المنتج"
-#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389
-#: engine/core/models.py:1819
+#: engine/core/admin.py:232 engine/core/graphene/object_types.py:438
+#: engine/core/models.py:1931
msgid "order products"
msgstr "اطلب المنتجات"
-#: engine/core/admin.py:210 engine/core/admin.py:211
+#: engine/core/admin.py:250 engine/core/admin.py:251
msgid "children"
msgstr "الأطفال"
-#: engine/core/admin.py:977
+#: engine/core/admin.py:1059
msgid "Config"
msgstr "التكوين"
@@ -154,8 +153,7 @@ msgstr "تم التسليم"
msgid "canceled"
msgstr "تم الإلغاء"
-#: engine/core/choices.py:8 engine/core/choices.py:16
-#: engine/core/choices.py:24
+#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24
msgid "failed"
msgstr "فشل"
@@ -183,61 +181,62 @@ msgstr "مومنتال"
msgid "successful"
msgstr "ناجح"
-#: engine/core/docs/drf/views.py:31
+#: engine/core/docs/drf/views.py:30
msgid "OpenAPI schema in selected format with selected language"
msgstr "مخطط OpenAPI بتنسيق محدد مع لغة محددة"
-#: engine/core/docs/drf/views.py:33
+#: engine/core/docs/drf/views.py:32
msgid ""
"OpenApi3 schema for this API. Format can be selected via content "
"negotiation. Language can be selected with Accept-Language and query "
"parameter both."
msgstr ""
-"مخطط OpenApi3 لواجهة برمجة التطبيقات هذه. يمكن تحديد التنسيق عبر التفاوض على"
-" المحتوى. يمكن تحديد اللغة باستخدام معلمة قبول اللغة ومعلمة الاستعلام على حد"
-" سواء."
+"مخطط OpenApi3 لواجهة برمجة التطبيقات هذه. يمكن تحديد التنسيق عبر التفاوض على "
+"المحتوى. يمكن تحديد اللغة باستخدام معلمة قبول اللغة ومعلمة الاستعلام على حد "
+"سواء."
-#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37
+#: engine/core/docs/drf/views.py:43 engine/core/graphene/mutations.py:37
msgid "cache I/O"
msgstr "ذاكرة التخزين المؤقت للإدخال/الإخراج"
-#: engine/core/docs/drf/views.py:46
+#: engine/core/docs/drf/views.py:45
msgid ""
"apply only a key to read permitted data from cache.\n"
"apply key, data and timeout with authentication to write data to cache."
msgstr ""
"تطبيق مفتاح فقط لقراءة البيانات المسموح بها من ذاكرة التخزين المؤقت.\n"
-"تطبيق مفتاح وبيانات ومهلة مع المصادقة لكتابة البيانات إلى ذاكرة التخزين المؤقت."
+"تطبيق مفتاح وبيانات ومهلة مع المصادقة لكتابة البيانات إلى ذاكرة التخزين "
+"المؤقت."
-#: engine/core/docs/drf/views.py:62
+#: engine/core/docs/drf/views.py:63
msgid "get a list of supported languages"
msgstr "الحصول على قائمة باللغات المدعومة"
-#: engine/core/docs/drf/views.py:74
+#: engine/core/docs/drf/views.py:75
msgid "get application's exposable parameters"
msgstr "الحصول على معلمات التطبيق القابلة للكشف"
-#: engine/core/docs/drf/views.py:84
+#: engine/core/docs/drf/views.py:89
msgid "send a message to the support team"
msgstr "إرسال رسالة إلى فريق الدعم"
-#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57
+#: engine/core/docs/drf/views.py:103 engine/core/graphene/mutations.py:59
msgid "request a CORSed URL"
msgstr "طلب عنوان URL مرتبط بـ CORSed. مسموح بـ https فقط."
-#: engine/core/docs/drf/views.py:112
+#: engine/core/docs/drf/views.py:119
msgid "Search between products, categories and brands"
msgstr "البحث بين المنتجات والفئات والعلامات التجارية"
-#: engine/core/docs/drf/views.py:130
+#: engine/core/docs/drf/views.py:141
msgid "global search endpoint to query across project's tables"
msgstr "نقطة نهاية بحث عالمية للاستعلام عبر جداول المشروع"
-#: engine/core/docs/drf/views.py:139
+#: engine/core/docs/drf/views.py:150
msgid "purchase an order as a business"
msgstr "شراء طلب شراء كشركة"
-#: engine/core/docs/drf/views.py:146
+#: engine/core/docs/drf/views.py:158
msgid ""
"purchase an order as a business, using the provided `products` with "
"`product_uuid` and `attributes`."
@@ -245,212 +244,210 @@ msgstr ""
"اشترِ طلبًا كعمل تجاري، باستخدام \"المنتجات\" المتوفرة مع \"معرّف_المنتج\" "
"و\"السمات\"."
-#: engine/core/docs/drf/views.py:164
+#: engine/core/docs/drf/views.py:177
msgid "download a digital asset from purchased digital order"
msgstr "تنزيل أصل رقمي من طلب رقمي تم شراؤه"
-#: engine/core/docs/drf/viewsets.py:61
+#: engine/core/docs/drf/viewsets.py:65
msgid "list all attribute groups (simple view)"
msgstr "سرد كل مجموعات السمات (عرض بسيط)"
-#: engine/core/docs/drf/viewsets.py:68
+#: engine/core/docs/drf/viewsets.py:75
msgid "retrieve a single attribute group (detailed view)"
msgstr "استرداد مجموعة سمة واحدة (عرض تفصيلي)"
-#: engine/core/docs/drf/viewsets.py:75
+#: engine/core/docs/drf/viewsets.py:82
msgid "create an attribute group"
msgstr "إنشاء مجموعة سمات"
-#: engine/core/docs/drf/viewsets.py:82
+#: engine/core/docs/drf/viewsets.py:92
msgid "delete an attribute group"
msgstr "حذف مجموعة سمات"
-#: engine/core/docs/drf/viewsets.py:89
+#: engine/core/docs/drf/viewsets.py:99
msgid "rewrite an existing attribute group saving non-editables"
msgstr "إعادة كتابة مجموعة سمات موجودة تحفظ غير القابلة للتعديل"
-#: engine/core/docs/drf/viewsets.py:96
-msgid ""
-"rewrite some fields of an existing attribute group saving non-editables"
+#: engine/core/docs/drf/viewsets.py:107
+msgid "rewrite some fields of an existing attribute group saving non-editables"
msgstr "إعادة كتابة بعض حقول مجموعة سمات موجودة تحفظ غير القابلة للتعديل"
-#: engine/core/docs/drf/viewsets.py:106
+#: engine/core/docs/drf/viewsets.py:118
msgid "list all attributes (simple view)"
msgstr "سرد جميع السمات (عرض بسيط)"
-#: engine/core/docs/drf/viewsets.py:113
+#: engine/core/docs/drf/viewsets.py:128
msgid "retrieve a single attribute (detailed view)"
msgstr "استرداد سمة واحدة (عرض تفصيلي)"
-#: engine/core/docs/drf/viewsets.py:120
+#: engine/core/docs/drf/viewsets.py:135
msgid "create an attribute"
msgstr "إنشاء سمة"
-#: engine/core/docs/drf/viewsets.py:127
+#: engine/core/docs/drf/viewsets.py:142
msgid "delete an attribute"
msgstr "حذف سمة"
-#: engine/core/docs/drf/viewsets.py:134
+#: engine/core/docs/drf/viewsets.py:149
msgid "rewrite an existing attribute saving non-editables"
msgstr "إعادة كتابة سمة موجودة تحفظ غير القابلة للتعديل"
-#: engine/core/docs/drf/viewsets.py:141
+#: engine/core/docs/drf/viewsets.py:156
msgid "rewrite some fields of an existing attribute saving non-editables"
msgstr "إعادة كتابة بعض حقول سمة موجودة تحفظ غير القابلة للتعديل"
-#: engine/core/docs/drf/viewsets.py:151
+#: engine/core/docs/drf/viewsets.py:166
msgid "list all attribute values (simple view)"
msgstr "سرد جميع قيم السمات (عرض بسيط)"
-#: engine/core/docs/drf/viewsets.py:158
+#: engine/core/docs/drf/viewsets.py:176
msgid "retrieve a single attribute value (detailed view)"
msgstr "استرداد قيمة سمة واحدة (عرض تفصيلي)"
-#: engine/core/docs/drf/viewsets.py:165
+#: engine/core/docs/drf/viewsets.py:183
msgid "create an attribute value"
msgstr "إنشاء قيمة السمة"
-#: engine/core/docs/drf/viewsets.py:172
+#: engine/core/docs/drf/viewsets.py:193
msgid "delete an attribute value"
msgstr "حذف قيمة سمة"
-#: engine/core/docs/drf/viewsets.py:179
+#: engine/core/docs/drf/viewsets.py:200
msgid "rewrite an existing attribute value saving non-editables"
msgstr "إعادة كتابة قيمة سمة موجودة تحفظ غير القابلة للتعديل"
-#: engine/core/docs/drf/viewsets.py:186
-msgid ""
-"rewrite some fields of an existing attribute value saving non-editables"
+#: engine/core/docs/drf/viewsets.py:208
+msgid "rewrite some fields of an existing attribute value saving non-editables"
msgstr "إعادة كتابة بعض حقول قيمة سمة موجودة حفظ غير قابل للتعديل"
-#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197
+#: engine/core/docs/drf/viewsets.py:219 engine/core/docs/drf/viewsets.py:220
msgid "list all categories (simple view)"
msgstr "قائمة بجميع الفئات (عرض بسيط)"
-#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205
+#: engine/core/docs/drf/viewsets.py:230 engine/core/docs/drf/viewsets.py:231
msgid "retrieve a single category (detailed view)"
msgstr "استرداد فئة واحدة (عرض تفصيلي)"
-#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258
+#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:286
msgid "Category UUID or slug"
msgstr "معرّف الفئة UUID أو سبيكة"
-#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221
+#: engine/core/docs/drf/viewsets.py:246 engine/core/docs/drf/viewsets.py:247
msgid "create a category"
msgstr "إنشاء فئة"
-#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229
+#: engine/core/docs/drf/viewsets.py:254 engine/core/docs/drf/viewsets.py:255
msgid "delete a category"
msgstr "حذف فئة"
-#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237
+#: engine/core/docs/drf/viewsets.py:262 engine/core/docs/drf/viewsets.py:263
msgid "rewrite an existing category saving non-editables"
msgstr "إعادة كتابة فئة موجودة حفظ غير المواد غير القابلة للتعديل"
-#: engine/core/docs/drf/viewsets.py:244 engine/core/docs/drf/viewsets.py:245
+#: engine/core/docs/drf/viewsets.py:270 engine/core/docs/drf/viewsets.py:272
msgid "rewrite some fields of an existing category saving non-editables"
msgstr "إعادة كتابة بعض حقول فئة موجودة حفظ غير القابلة للتعديل"
-#: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704
-#: engine/core/docs/drf/viewsets.py:988
+#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:1046
#: engine/core/graphene/object_types.py:117
-#: engine/core/graphene/object_types.py:207
-#: engine/core/graphene/object_types.py:482
+#: engine/core/graphene/object_types.py:236
+#: engine/core/graphene/object_types.py:537
msgid "SEO Meta snapshot"
msgstr "لقطة تعريفية لتحسين محركات البحث SEO"
-#: engine/core/docs/drf/viewsets.py:253
+#: engine/core/docs/drf/viewsets.py:281
msgid "returns a snapshot of the category's SEO meta data"
msgstr "إرجاع لقطة من البيانات الوصفية لتحسين محركات البحث الخاصة بالفئة"
-#: engine/core/docs/drf/viewsets.py:274
+#: engine/core/docs/drf/viewsets.py:302
msgid "list all orders (simple view)"
msgstr "قائمة بجميع الفئات (عرض بسيط)"
-#: engine/core/docs/drf/viewsets.py:275
+#: engine/core/docs/drf/viewsets.py:303
msgid "for non-staff users, only their own orders are returned."
msgstr "بالنسبة للمستخدمين من غير الموظفين، يتم إرجاع الطلبات الخاصة بهم فقط."
-#: engine/core/docs/drf/viewsets.py:281
+#: engine/core/docs/drf/viewsets.py:309
msgid ""
-"Case-insensitive substring search across human_readable_id, "
-"order_products.product.name, and order_products.product.partnumber"
+"Case-insensitive substring search across human_readable_id, order_products."
+"product.name, and order_products.product.partnumber"
msgstr ""
"البحث في سلسلة فرعية غير حساسة لحالة الأحرف عبر human_readable_id و "
"order_products.product.name و order_products.product.partnumber"
-#: engine/core/docs/drf/viewsets.py:288
+#: engine/core/docs/drf/viewsets.py:316
msgid "Filter orders with buy_time >= this ISO 8601 datetime"
msgstr "تصفية الطلبات ذات وقت_الشراء >= تاريخ ووقت الشراء هذا ISO 8601"
-#: engine/core/docs/drf/viewsets.py:293
+#: engine/core/docs/drf/viewsets.py:321
msgid "Filter orders with buy_time <= this ISO 8601 datetime"
msgstr "تصفية الطلبات ذات وقت_الشراء <= تاريخ ووقت الشراء ISO 8601 هذا"
-#: engine/core/docs/drf/viewsets.py:298
+#: engine/core/docs/drf/viewsets.py:326
msgid "Filter by exact order UUID"
msgstr "تصفية حسب الطلب الدقيق UUID"
-#: engine/core/docs/drf/viewsets.py:303
+#: engine/core/docs/drf/viewsets.py:331
msgid "Filter by exact human-readable order ID"
msgstr "التصفية حسب مُعرِّف الطلب المقروء بشريًا بالضبط"
-#: engine/core/docs/drf/viewsets.py:308
+#: engine/core/docs/drf/viewsets.py:336
msgid "Filter by user's email (case-insensitive exact match)"
msgstr ""
"تصفية حسب البريد الإلكتروني للمستخدم (مطابقة تامة غير حساسة لحالة الأحرف)"
-#: engine/core/docs/drf/viewsets.py:313
+#: engine/core/docs/drf/viewsets.py:341
msgid "Filter by user's UUID"
msgstr "تصفية حسب معرّف المستخدم UUID"
-#: engine/core/docs/drf/viewsets.py:318
+#: engine/core/docs/drf/viewsets.py:347
msgid "Filter by order status (case-insensitive substring match)"
msgstr "تصفية حسب حالة الطلب (مطابقة سلسلة فرعية غير حساسة لحالة الأحرف)"
-#: engine/core/docs/drf/viewsets.py:324
+#: engine/core/docs/drf/viewsets.py:354
msgid ""
-"Order by one of: uuid, human_readable_id, user_email, user, status, created,"
-" modified, buy_time, random. Prefix with '-' for descending (e.g. "
-"'-buy_time')."
+"Order by one of: uuid, human_readable_id, user_email, user, status, created, "
+"modified, buy_time, random. Prefix with '-' for descending (e.g. '-"
+"buy_time')."
msgstr ""
"الترتيب حسب واحد من: uuid، معرف_بشري_مقروء، بريد_إلكتروني_مستخدم، مستخدم، "
"حالة، إنشاء، تعديل، وقت_الشراء، عشوائي. البادئة بحرف \"-\" للترتيب التنازلي "
"(على سبيل المثال \"-وقت_الشراء\")."
-#: engine/core/docs/drf/viewsets.py:336
+#: engine/core/docs/drf/viewsets.py:366
msgid "retrieve a single order (detailed view)"
msgstr "استرداد فئة واحدة (عرض تفصيلي)"
-#: engine/core/docs/drf/viewsets.py:341
+#: engine/core/docs/drf/viewsets.py:371
msgid "Order UUID or human-readable id"
msgstr "طلب معرّف UUID أو معرّف قابل للقراءة البشرية"
-#: engine/core/docs/drf/viewsets.py:351
+#: engine/core/docs/drf/viewsets.py:381
msgid "create an order"
msgstr "إنشاء سمة"
-#: engine/core/docs/drf/viewsets.py:352
+#: engine/core/docs/drf/viewsets.py:382
msgid "doesn't work for non-staff users."
msgstr "لا يعمل مع المستخدمين من غير الموظفين."
-#: engine/core/docs/drf/viewsets.py:359
+#: engine/core/docs/drf/viewsets.py:389
msgid "delete an order"
msgstr "حذف سمة"
-#: engine/core/docs/drf/viewsets.py:366
+#: engine/core/docs/drf/viewsets.py:396
msgid "rewrite an existing order saving non-editables"
msgstr "إعادة كتابة فئة موجودة حفظ غير المواد غير القابلة للتعديل"
-#: engine/core/docs/drf/viewsets.py:373
+#: engine/core/docs/drf/viewsets.py:403
msgid "rewrite some fields of an existing order saving non-editables"
msgstr "إعادة كتابة بعض حقول فئة موجودة حفظ غير القابلة للتعديل"
-#: engine/core/docs/drf/viewsets.py:380
+#: engine/core/docs/drf/viewsets.py:410
msgid "purchase an order"
msgstr "سعر الشراء وقت الطلب"
-#: engine/core/docs/drf/viewsets.py:382
+#: engine/core/docs/drf/viewsets.py:412
msgid ""
"finalizes the order purchase. if `force_balance` is used, the purchase is "
"completed using the user's balance; if `force_payment` is used, a "
@@ -459,59 +456,59 @@ msgstr ""
"ينهي أمر الشراء. إذا تم استخدام \"فرض_الرصيد\"، يتم إكمال عملية الشراء "
"باستخدام رصيد المستخدم؛ إذا تم استخدام \"فرض_الدفع\"، يتم بدء المعاملة."
-#: engine/core/docs/drf/viewsets.py:397
+#: engine/core/docs/drf/viewsets.py:427
msgid "retrieve current pending order of a user"
msgstr "استرداد الطلب المعلق الحالي للمستخدم"
-#: engine/core/docs/drf/viewsets.py:398
+#: engine/core/docs/drf/viewsets.py:428
msgid "retrieves a current pending order of an authenticated user"
msgstr "استرداد الطلب الحالي المعلق لمستخدم مصادق عليه"
-#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334
+#: engine/core/docs/drf/viewsets.py:438 engine/core/graphene/mutations.py:354
msgid "purchase an order without account creation"
msgstr "شراء طلب شراء بدون إنشاء حساب"
-#: engine/core/docs/drf/viewsets.py:409
+#: engine/core/docs/drf/viewsets.py:439
msgid "finalizes the order purchase for a non-registered user."
msgstr "إنهاء طلب الشراء لمستخدم غير مسجل."
-#: engine/core/docs/drf/viewsets.py:420
+#: engine/core/docs/drf/viewsets.py:450
msgid "add product to order"
msgstr "إضافة منتج إلى الطلب"
-#: engine/core/docs/drf/viewsets.py:421
+#: engine/core/docs/drf/viewsets.py:452
msgid ""
"adds a product to an order using the provided `product_uuid` and "
"`attributes`."
msgstr "يضيف منتجًا إلى طلب باستخدام \"معرّف_المنتج\" و\"السمات\" المتوفرة."
-#: engine/core/docs/drf/viewsets.py:429
+#: engine/core/docs/drf/viewsets.py:461
msgid "add a list of products to order, quantities will not count"
msgstr "إضافة قائمة بالمنتجات المطلوب طلبها، لن يتم احتساب الكميات"
-#: engine/core/docs/drf/viewsets.py:430
+#: engine/core/docs/drf/viewsets.py:463
msgid ""
"adds a list of products to an order using the provided `product_uuid` and "
"`attributes`."
msgstr ""
-"يضيف قائمة من المنتجات إلى طلب باستخدام \"معرّف_المنتج\" و\"السمات\" "
-"المتوفرة."
+"يضيف قائمة من المنتجات إلى طلب باستخدام \"معرّف_المنتج\" و\"السمات\" المتوفرة."
-#: engine/core/docs/drf/viewsets.py:438
+#: engine/core/docs/drf/viewsets.py:472
msgid "remove product from order"
msgstr "إزالة منتج من الطلب"
-#: engine/core/docs/drf/viewsets.py:439
+#: engine/core/docs/drf/viewsets.py:474
msgid ""
"removes a product from an order using the provided `product_uuid` and "
"`attributes`."
-msgstr "يزيل منتجًا من أحد الطلبات باستخدام \"معرّف_المنتج\" و\"السمات\" المتوفرة."
+msgstr ""
+"يزيل منتجًا من أحد الطلبات باستخدام \"معرّف_المنتج\" و\"السمات\" المتوفرة."
-#: engine/core/docs/drf/viewsets.py:447
+#: engine/core/docs/drf/viewsets.py:483
msgid "remove product from order, quantities will not count"
msgstr "إزالة منتج من الطلب، لن يتم احتساب الكميات"
-#: engine/core/docs/drf/viewsets.py:448
+#: engine/core/docs/drf/viewsets.py:485
msgid ""
"removes a list of products from an order using the provided `product_uuid` "
"and `attributes`"
@@ -519,185 +516,198 @@ msgstr ""
"يزيل قائمة من المنتجات من الطلب باستخدام \"معرّف_المنتج\" و\"السمات\" "
"المتوفرة."
-#: engine/core/docs/drf/viewsets.py:459
+#: engine/core/docs/drf/viewsets.py:497
msgid "list all wishlists (simple view)"
msgstr "سرد جميع السمات (عرض بسيط)"
-#: engine/core/docs/drf/viewsets.py:460
+#: engine/core/docs/drf/viewsets.py:498
msgid "for non-staff users, only their own wishlists are returned."
msgstr ""
"بالنسبة للمستخدمين من غير الموظفين، يتم إرجاع قوائم الرغبات الخاصة بهم فقط."
-#: engine/core/docs/drf/viewsets.py:467
+#: engine/core/docs/drf/viewsets.py:508
msgid "retrieve a single wishlist (detailed view)"
msgstr "استرداد سمة واحدة (عرض تفصيلي)"
-#: engine/core/docs/drf/viewsets.py:474
+#: engine/core/docs/drf/viewsets.py:515
msgid "create an wishlist"
msgstr "إنشاء سمة"
-#: engine/core/docs/drf/viewsets.py:475
+#: engine/core/docs/drf/viewsets.py:516
msgid "Doesn't work for non-staff users."
msgstr "لا يعمل مع المستخدمين من غير الموظفين."
-#: engine/core/docs/drf/viewsets.py:482
+#: engine/core/docs/drf/viewsets.py:523
msgid "delete an wishlist"
msgstr "حذف سمة"
-#: engine/core/docs/drf/viewsets.py:489
+#: engine/core/docs/drf/viewsets.py:530
msgid "rewrite an existing wishlist saving non-editables"
msgstr "إعادة كتابة سمة موجودة تحفظ غير القابلة للتعديل"
-#: engine/core/docs/drf/viewsets.py:496
+#: engine/core/docs/drf/viewsets.py:537
msgid "rewrite some fields of an existing wishlist saving non-editables"
msgstr "إعادة كتابة بعض حقول سمة موجودة تحفظ غير القابلة للتعديل"
-#: engine/core/docs/drf/viewsets.py:503
+#: engine/core/docs/drf/viewsets.py:544
msgid "retrieve current pending wishlist of a user"
msgstr "استرداد قائمة الرغبات المعلقة الحالية للمستخدم"
-#: engine/core/docs/drf/viewsets.py:504
+#: engine/core/docs/drf/viewsets.py:545
msgid "retrieves a current pending wishlist of an authenticated user"
msgstr "استرداد قائمة أمنيات حالية معلقة لمستخدم مصادق عليه"
-#: engine/core/docs/drf/viewsets.py:514
+#: engine/core/docs/drf/viewsets.py:555
msgid "add product to wishlist"
msgstr "إضافة منتج إلى الطلب"
-#: engine/core/docs/drf/viewsets.py:515
+#: engine/core/docs/drf/viewsets.py:557
msgid "adds a product to an wishlist using the provided `product_uuid`"
msgstr "يضيف منتجًا إلى قائمة أمنيات باستخدام 'product_uid' المتوفرة"
-#: engine/core/docs/drf/viewsets.py:523
+#: engine/core/docs/drf/viewsets.py:566
msgid "remove product from wishlist"
msgstr "إزالة منتج من قائمة الرغبات"
-#: engine/core/docs/drf/viewsets.py:524
+#: engine/core/docs/drf/viewsets.py:568
msgid "removes a product from an wishlist using the provided `product_uuid`"
msgstr "يزيل منتجًا من قائمة أمنيات باستخدام 'product_uid' المتوفرة"
-#: engine/core/docs/drf/viewsets.py:532
+#: engine/core/docs/drf/viewsets.py:577
msgid "add many products to wishlist"
msgstr "إضافة العديد من المنتجات إلى قائمة الرغبات"
-#: engine/core/docs/drf/viewsets.py:533
+#: engine/core/docs/drf/viewsets.py:579
msgid "adds many products to an wishlist using the provided `product_uuids`"
msgstr ""
"يضيف العديد من المنتجات إلى قائمة الرغبات باستخدام 'product_uids' المتوفرة"
-#: engine/core/docs/drf/viewsets.py:541
+#: engine/core/docs/drf/viewsets.py:588
msgid "remove many products from wishlist"
msgstr "إزالة منتج من الطلب"
-#: engine/core/docs/drf/viewsets.py:542
+#: engine/core/docs/drf/viewsets.py:590
msgid ""
"removes many products from an wishlist using the provided `product_uuids`"
msgstr ""
"يزيل العديد من المنتجات من قائمة الرغبات باستخدام 'product_uids' المتوفرة"
-#: engine/core/docs/drf/viewsets.py:549
+#: engine/core/docs/drf/viewsets.py:598
msgid ""
"Filter by one or more attribute name/value pairs. \n"
"• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n"
-"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n"
-"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n"
+"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, "
+"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, "
+"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n"
+"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), "
+"`true`/`false` for booleans, integers, floats; otherwise treated as "
+"string. \n"
"• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n"
"Examples: \n"
-"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n"
+"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\","
+"\"bluetooth\"]`, \n"
"`b64-description=icontains-aGVhdC1jb2xk`"
msgstr ""
"تصفية حسب زوج واحد أو أكثر من أسماء/قيم السمات. \n"
"- **صيغة**: `attr_name=الطريقة-القيمة[ ؛ attr2=الطريقة2-القيمة2]...`\n"
-"- **الأساليب** (افتراضيًا إلى \"يحتوي على\" إذا تم حذفها): \"بالضبط\"، \"بالضبط\"، \"بالضبط\"، \"يحتوي\"، \"يحتوي\"، \"لاغية\"، \"يبدأ ب\"، \"يبدأ ب\"، \"يبدأ ب\"، \"ينتهي ب\"، \"ينتهي ب\"، \"regex\"، \"iregex\"، \"lt\"، \"lte\"، \"gt\"، \"gte\"، \"in\n"
-"- **كتابة القيمة**: تتم تجربة JSON أولًا (حتى تتمكن من تمرير القوائم/المجادلات)، \"صحيح\"/\"خطأ\" للمنطقيين والأعداد الصحيحة والعوامات؛ وإلا يتم التعامل معها كسلسلة. \n"
-"- **القاعدة 64**: البادئة ب \"b64-\" لتشفير القيمة الخام بأمان لقاعدة 64- لتشفير القيمة الخام. \n"
+"- **الأساليب** (افتراضيًا إلى \"يحتوي على\" إذا تم حذفها): \"بالضبط\"، "
+"\"بالضبط\"، \"بالضبط\"، \"يحتوي\"، \"يحتوي\"، \"لاغية\"، \"يبدأ ب\"، \"يبدأ "
+"ب\"، \"يبدأ ب\"، \"ينتهي ب\"، \"ينتهي ب\"، \"regex\"، \"iregex\"، \"lt\"، "
+"\"lte\"، \"gt\"، \"gte\"، \"in\n"
+"- **كتابة القيمة**: تتم تجربة JSON أولًا (حتى تتمكن من تمرير القوائم/"
+"المجادلات)، \"صحيح\"/\"خطأ\" للمنطقيين والأعداد الصحيحة والعوامات؛ وإلا يتم "
+"التعامل معها كسلسلة. \n"
+"- **القاعدة 64**: البادئة ب \"b64-\" لتشفير القيمة الخام بأمان لقاعدة 64- "
+"لتشفير القيمة الخام. \n"
"أمثلة: \n"
-"'color=exact-red'، 'size=gt-10'، 'features=in-[\"wifi\"،\"bluetooth\"]، 'fatures=in-[\"wifi\",\"bluetooth\"],\n"
+"'color=exact-red'، 'size=gt-10'، 'features=in-[\"wifi\"،\"bluetooth\"]، "
+"'fatures=in-[\"wifi\",\"bluetooth\"],\n"
"\"b64-description=icontains-aGVhdC1jb2xk"
-#: engine/core/docs/drf/viewsets.py:568 engine/core/docs/drf/viewsets.py:569
+#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
msgid "list all products (simple view)"
msgstr "قائمة بجميع المنتجات (عرض بسيط)"
-#: engine/core/docs/drf/viewsets.py:574
+#: engine/core/docs/drf/viewsets.py:623
msgid "(exact) Product UUID"
msgstr "(بالضبط) UUID المنتج"
-#: engine/core/docs/drf/viewsets.py:581
+#: engine/core/docs/drf/viewsets.py:630
msgid ""
-"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n"
+"Comma-separated list of fields to sort by. Prefix with `-` for "
+"descending. \n"
"**Allowed:** uuid, rating, name, slug, created, modified, price, random"
msgstr ""
"قائمة مفصولة بفواصل من الحقول للفرز حسب. البادئة بـ \"-\" للفرز التنازلي. \n"
"**مسموح بها:** uuid، تصنيف، اسم، سبيكة، إنشاء، تعديل، سعر، عشوائي"
-#: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599
+#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
msgid "retrieve a single product (detailed view)"
msgstr "استرداد منتج واحد (عرض تفصيلي)"
-#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634
-#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672
-#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710
+#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683
+#: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725
+#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763
msgid "Product UUID or slug"
msgstr "معرف المنتج UUID أو سبيكة المنتج"
-#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
+#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
#: engine/core/graphene/dashboard_mutations/product.py:80
#: engine/core/graphene/dashboard_mutations/product.py:118
#: engine/core/graphene/dashboard_mutations/product.py:166
msgid "create a product"
msgstr "إنشاء منتج"
-#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629
+#: engine/core/docs/drf/viewsets.py:677 engine/core/docs/drf/viewsets.py:678
msgid "rewrite an existing product, preserving non-editable fields"
msgstr "إعادة كتابة منتج موجود، مع الحفاظ على الحقول غير القابلة للتحرير"
-#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
+#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:700
msgid ""
"update some fields of an existing product, preserving non-editable fields"
msgstr "تحديث بعض حقول منتج موجود، مع الحفاظ على الحقول غير القابلة للتحرير"
-#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
+#: engine/core/docs/drf/viewsets.py:719 engine/core/docs/drf/viewsets.py:720
msgid "delete a product"
msgstr "حذف منتج"
-#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686
+#: engine/core/docs/drf/viewsets.py:738 engine/core/docs/drf/viewsets.py:739
msgid "lists all permitted feedbacks for a product"
msgstr "سرد جميع الملاحظات المسموح بها للمنتج"
-#: engine/core/docs/drf/viewsets.py:705
+#: engine/core/docs/drf/viewsets.py:758
msgid "returns a snapshot of the product's SEO meta data"
msgstr "إرجاع لقطة من البيانات الوصفية لتحسين محركات البحث للمنتج"
-#: engine/core/docs/drf/viewsets.py:726
+#: engine/core/docs/drf/viewsets.py:779
msgid "list all addresses"
msgstr "قائمة بجميع العناوين"
-#: engine/core/docs/drf/viewsets.py:736
+#: engine/core/docs/drf/viewsets.py:789
msgid "retrieve a single address"
msgstr "استرجاع عنوان واحد"
-#: engine/core/docs/drf/viewsets.py:746
+#: engine/core/docs/drf/viewsets.py:799
msgid "create a new address"
msgstr "إنشاء عنوان جديد"
-#: engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:810
msgid "delete an address"
msgstr "حذف عنوان"
-#: engine/core/docs/drf/viewsets.py:767
+#: engine/core/docs/drf/viewsets.py:820
msgid "update an entire address"
msgstr "تحديث عنوان كامل"
-#: engine/core/docs/drf/viewsets.py:778
+#: engine/core/docs/drf/viewsets.py:831
msgid "partially update an address"
msgstr "تحديث جزئي للعنوان"
-#: engine/core/docs/drf/viewsets.py:789
+#: engine/core/docs/drf/viewsets.py:842
msgid "autocomplete address suggestions"
msgstr "إدخال عنوان الإكمال التلقائي"
-#: engine/core/docs/drf/viewsets.py:794
+#: engine/core/docs/drf/viewsets.py:848
msgid "raw data query string, please append with data from geo-IP endpoint"
msgstr ""
"تطبيق docker compose exec تطبيق docker exec الشعر تشغيل إدارة python.py "
@@ -706,509 +716,509 @@ msgstr ""
"pl -l pt-br -l ro-ro -l ru-ru -l zh-hans -l zh-ans -a core -a geo -a geo -a "
"payments -a vibes_auth -a blog"
-#: engine/core/docs/drf/viewsets.py:800
+#: engine/core/docs/drf/viewsets.py:855
msgid "limit the results amount, 1 < limit < 10, default: 5"
msgstr "تحديد كمية النتائج، 1 < الحد < 10، الافتراضي: 5"
-#: engine/core/docs/drf/viewsets.py:816
+#: engine/core/docs/drf/viewsets.py:871
msgid "list all feedbacks (simple view)"
msgstr "سرد جميع الملاحظات (عرض بسيط)"
-#: engine/core/docs/drf/viewsets.py:823
+#: engine/core/docs/drf/viewsets.py:881
msgid "retrieve a single feedback (detailed view)"
msgstr "استرداد تعليق واحد (عرض مفصل)"
-#: engine/core/docs/drf/viewsets.py:830
+#: engine/core/docs/drf/viewsets.py:888
msgid "create a feedback"
msgstr "إنشاء ملاحظات"
-#: engine/core/docs/drf/viewsets.py:837
+#: engine/core/docs/drf/viewsets.py:895
msgid "delete a feedback"
msgstr "حذف تعليق"
-#: engine/core/docs/drf/viewsets.py:844
+#: engine/core/docs/drf/viewsets.py:902
msgid "rewrite an existing feedback saving non-editables"
msgstr "إعادة كتابة ملاحظات حالية تحفظ المواد غير القابلة للتعديل"
-#: engine/core/docs/drf/viewsets.py:851
+#: engine/core/docs/drf/viewsets.py:909
msgid "rewrite some fields of an existing feedback saving non-editables"
msgstr "إعادة كتابة بعض حقول الملاحظات الحالية التي تحفظ غير القابلة للتعديل"
-#: engine/core/docs/drf/viewsets.py:861
+#: engine/core/docs/drf/viewsets.py:919
msgid "list all order–product relations (simple view)"
msgstr "سرد جميع العلاقات بين الطلب والمنتج (عرض بسيط)"
-#: engine/core/docs/drf/viewsets.py:871
+#: engine/core/docs/drf/viewsets.py:929
msgid "retrieve a single order–product relation (detailed view)"
msgstr "استرداد علاقة طلب منتج واحد (عرض تفصيلي)"
-#: engine/core/docs/drf/viewsets.py:881
+#: engine/core/docs/drf/viewsets.py:939
msgid "create a new order–product relation"
msgstr "إنشاء علاقة جديدة بين الطلب والمنتج"
-#: engine/core/docs/drf/viewsets.py:891
+#: engine/core/docs/drf/viewsets.py:949
msgid "replace an existing order–product relation"
msgstr "استبدال علاقة الطلب-المنتج الحالية"
-#: engine/core/docs/drf/viewsets.py:901
+#: engine/core/docs/drf/viewsets.py:959
msgid "partially update an existing order–product relation"
msgstr "تحديث جزئي لعلاقة الطلب والمنتج الحالية"
-#: engine/core/docs/drf/viewsets.py:911
+#: engine/core/docs/drf/viewsets.py:969
msgid "delete an order–product relation"
msgstr "حذف علاقة الطلب-المنتج"
-#: engine/core/docs/drf/viewsets.py:921
+#: engine/core/docs/drf/viewsets.py:979
msgid "add or remove feedback on an order–product relation"
msgstr "إضافة أو إزالة الملاحظات على العلاقة بين الطلب والمنتج"
-#: engine/core/docs/drf/viewsets.py:938
+#: engine/core/docs/drf/viewsets.py:996
msgid "list all brands (simple view)"
msgstr "قائمة بجميع العلامات التجارية (عرض بسيط)"
-#: engine/core/docs/drf/viewsets.py:945
+#: engine/core/docs/drf/viewsets.py:1003
msgid "retrieve a single brand (detailed view)"
msgstr "استرداد علامة تجارية واحدة (عرض تفصيلي)"
-#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993
+#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051
msgid "Brand UUID or slug"
msgstr "UUID أو سبيكة العلامة التجارية"
-#: engine/core/docs/drf/viewsets.py:960
+#: engine/core/docs/drf/viewsets.py:1018
msgid "create a brand"
msgstr "إنشاء علامة تجارية"
-#: engine/core/docs/drf/viewsets.py:967
+#: engine/core/docs/drf/viewsets.py:1025
msgid "delete a brand"
msgstr "حذف علامة تجارية"
-#: engine/core/docs/drf/viewsets.py:974
+#: engine/core/docs/drf/viewsets.py:1032
msgid "rewrite an existing brand saving non-editables"
msgstr "إعادة كتابة علامة تجارية حالية توفر المواد غير القابلة للتعديل"
-#: engine/core/docs/drf/viewsets.py:981
+#: engine/core/docs/drf/viewsets.py:1039
msgid "rewrite some fields of an existing brand saving non-editables"
msgstr "إعادة كتابة بعض الحقول لعلامة تجارية موجودة حفظ غير قابلة للتعديل"
-#: engine/core/docs/drf/viewsets.py:1006
+#: engine/core/docs/drf/viewsets.py:1064
msgid "list all vendors (simple view)"
msgstr "قائمة بجميع البائعين (عرض بسيط)"
-#: engine/core/docs/drf/viewsets.py:1013
+#: engine/core/docs/drf/viewsets.py:1074
msgid "retrieve a single vendor (detailed view)"
msgstr "استرداد بائع واحد (عرض تفصيلي)"
-#: engine/core/docs/drf/viewsets.py:1020
+#: engine/core/docs/drf/viewsets.py:1081
msgid "create a vendor"
msgstr "إنشاء بائع"
-#: engine/core/docs/drf/viewsets.py:1027
+#: engine/core/docs/drf/viewsets.py:1088
msgid "delete a vendor"
msgstr "حذف بائع"
-#: engine/core/docs/drf/viewsets.py:1034
+#: engine/core/docs/drf/viewsets.py:1095
msgid "rewrite an existing vendor saving non-editables"
msgstr "إعادة كتابة بائع موجود حفظ المواد غير القابلة للتعديل"
-#: engine/core/docs/drf/viewsets.py:1041
+#: engine/core/docs/drf/viewsets.py:1102
msgid "rewrite some fields of an existing vendor saving non-editables"
msgstr "إعادة كتابة بعض حقول البائع الحالي لحفظ المواد غير القابلة للتعديل"
-#: engine/core/docs/drf/viewsets.py:1051
+#: engine/core/docs/drf/viewsets.py:1112
msgid "list all product images (simple view)"
msgstr "سرد جميع صور المنتج (عرض بسيط)"
-#: engine/core/docs/drf/viewsets.py:1058
+#: engine/core/docs/drf/viewsets.py:1122
msgid "retrieve a single product image (detailed view)"
msgstr "استرداد صورة منتج واحد (عرض تفصيلي)"
-#: engine/core/docs/drf/viewsets.py:1065
+#: engine/core/docs/drf/viewsets.py:1129
msgid "create a product image"
msgstr "إنشاء صورة المنتج"
-#: engine/core/docs/drf/viewsets.py:1072
+#: engine/core/docs/drf/viewsets.py:1139
msgid "delete a product image"
msgstr "حذف صورة المنتج"
-#: engine/core/docs/drf/viewsets.py:1079
+#: engine/core/docs/drf/viewsets.py:1146
msgid "rewrite an existing product image saving non-editables"
msgstr "إعادة كتابة صورة منتج موجود حفظ غير قابل للتعديل"
-#: engine/core/docs/drf/viewsets.py:1086
+#: engine/core/docs/drf/viewsets.py:1154
msgid "rewrite some fields of an existing product image saving non-editables"
msgstr "إعادة كتابة بعض حقول صورة منتج موجود حفظ غير قابل للتعديل"
-#: engine/core/docs/drf/viewsets.py:1096
+#: engine/core/docs/drf/viewsets.py:1165
msgid "list all promo codes (simple view)"
msgstr "قائمة بجميع الرموز الترويجية (عرض بسيط)"
-#: engine/core/docs/drf/viewsets.py:1103
+#: engine/core/docs/drf/viewsets.py:1175
msgid "retrieve a single promo code (detailed view)"
msgstr "استرداد رمز ترويجي واحد (عرض تفصيلي)"
-#: engine/core/docs/drf/viewsets.py:1110
+#: engine/core/docs/drf/viewsets.py:1182
msgid "create a promo code"
msgstr "إنشاء رمز ترويجي"
-#: engine/core/docs/drf/viewsets.py:1117
+#: engine/core/docs/drf/viewsets.py:1189
msgid "delete a promo code"
msgstr "حذف الرمز الترويجي"
-#: engine/core/docs/drf/viewsets.py:1124
+#: engine/core/docs/drf/viewsets.py:1196
msgid "rewrite an existing promo code saving non-editables"
msgstr "إعادة كتابة الرمز الترويجي الحالي الذي يوفر غير القابل للتعديل"
-#: engine/core/docs/drf/viewsets.py:1131
+#: engine/core/docs/drf/viewsets.py:1203
msgid "rewrite some fields of an existing promo code saving non-editables"
msgstr "إعادة كتابة بعض حقول الرمز الترويجي الحالي مع حفظ غير القابل للتعديل"
-#: engine/core/docs/drf/viewsets.py:1141
+#: engine/core/docs/drf/viewsets.py:1213
msgid "list all promotions (simple view)"
msgstr "قائمة بجميع العروض الترويجية (عرض بسيط)"
-#: engine/core/docs/drf/viewsets.py:1148
+#: engine/core/docs/drf/viewsets.py:1223
msgid "retrieve a single promotion (detailed view)"
msgstr "استرداد ترقية واحدة (عرض تفصيلي)"
-#: engine/core/docs/drf/viewsets.py:1155
+#: engine/core/docs/drf/viewsets.py:1230
msgid "create a promotion"
msgstr "إنشاء عرض ترويجي"
-#: engine/core/docs/drf/viewsets.py:1162
+#: engine/core/docs/drf/viewsets.py:1237
msgid "delete a promotion"
msgstr "حذف ترقية"
-#: engine/core/docs/drf/viewsets.py:1169
+#: engine/core/docs/drf/viewsets.py:1244
msgid "rewrite an existing promotion saving non-editables"
msgstr "إعادة كتابة عرض ترويجي حالي يوفر المواد غير القابلة للتعديل"
-#: engine/core/docs/drf/viewsets.py:1176
+#: engine/core/docs/drf/viewsets.py:1251
msgid "rewrite some fields of an existing promotion saving non-editables"
msgstr ""
"إعادة كتابة بعض الحقول في ترقية حالية مع حفظ غير المواد غير القابلة للتعديل"
-#: engine/core/docs/drf/viewsets.py:1186
+#: engine/core/docs/drf/viewsets.py:1261
msgid "list all stocks (simple view)"
msgstr "قائمة بجميع الأسهم (عرض بسيط)"
-#: engine/core/docs/drf/viewsets.py:1193
+#: engine/core/docs/drf/viewsets.py:1268
msgid "retrieve a single stock (detailed view)"
msgstr "استرداد مخزون واحد (عرض تفصيلي)"
-#: engine/core/docs/drf/viewsets.py:1200
+#: engine/core/docs/drf/viewsets.py:1275
msgid "create a stock record"
msgstr "إنشاء سجل مخزون"
-#: engine/core/docs/drf/viewsets.py:1207
+#: engine/core/docs/drf/viewsets.py:1282
msgid "delete a stock record"
msgstr "حذف سجل مخزون"
-#: engine/core/docs/drf/viewsets.py:1214
+#: engine/core/docs/drf/viewsets.py:1289
msgid "rewrite an existing stock record saving non-editables"
msgstr "إعادة كتابة سجل مخزون موجود يحفظ المواد غير القابلة للتعديل"
-#: engine/core/docs/drf/viewsets.py:1221
+#: engine/core/docs/drf/viewsets.py:1297
msgid "rewrite some fields of an existing stock record saving non-editables"
msgstr "إعادة كتابة بعض حقول السجل الحالي للمخزون مع حفظ غير القابل للتعديل"
-#: engine/core/docs/drf/viewsets.py:1231
+#: engine/core/docs/drf/viewsets.py:1308
msgid "list all product tags (simple view)"
msgstr "سرد جميع علامات المنتج (عرض بسيط)"
-#: engine/core/docs/drf/viewsets.py:1238
+#: engine/core/docs/drf/viewsets.py:1318
msgid "retrieve a single product tag (detailed view)"
msgstr "استرداد علامة منتج واحد (عرض تفصيلي)"
-#: engine/core/docs/drf/viewsets.py:1245
+#: engine/core/docs/drf/viewsets.py:1325
msgid "create a product tag"
msgstr "إنشاء علامة منتج"
-#: engine/core/docs/drf/viewsets.py:1252
+#: engine/core/docs/drf/viewsets.py:1335
msgid "delete a product tag"
msgstr "حذف علامة منتج"
-#: engine/core/docs/drf/viewsets.py:1259
+#: engine/core/docs/drf/viewsets.py:1342
msgid "rewrite an existing product tag saving non-editables"
msgstr "إعادة كتابة علامة منتج موجود حفظ غير قابل للتعديل"
-#: engine/core/docs/drf/viewsets.py:1266
+#: engine/core/docs/drf/viewsets.py:1350
msgid "rewrite some fields of an existing product tag saving non-editables"
msgstr "إعادة كتابة بعض حقول علامة منتج موجود حفظ غير قابل للتعديل"
-#: engine/core/elasticsearch/__init__.py:122
-#: engine/core/elasticsearch/__init__.py:570
+#: engine/core/elasticsearch/__init__.py:127
+#: engine/core/elasticsearch/__init__.py:627
msgid "no search term provided."
msgstr "لم يتم توفير مصطلح بحث."
-#: engine/core/filters.py:69 engine/core/filters.py:426
-#: engine/core/filters.py:553
+#: engine/core/filters.py:78 engine/core/filters.py:484
+#: engine/core/filters.py:625
msgid "Search"
msgstr "بحث"
-#: engine/core/filters.py:70 engine/core/filters.py:583
-#: engine/core/filters.py:612
+#: engine/core/filters.py:79 engine/core/filters.py:662
+#: engine/core/filters.py:691
msgid "UUID"
msgstr "UUID"
-#: engine/core/filters.py:71 engine/core/filters.py:428
-#: engine/core/filters.py:555
+#: engine/core/filters.py:80 engine/core/filters.py:487
+#: engine/core/filters.py:627
msgid "Name"
msgstr "الاسم"
-#: engine/core/filters.py:72 engine/core/filters.py:557
+#: engine/core/filters.py:82 engine/core/filters.py:630
msgid "Categories"
msgstr "الفئات"
-#: engine/core/filters.py:74
+#: engine/core/filters.py:86
msgid "Categories Slugs"
msgstr "الفئات الرخويات"
-#: engine/core/filters.py:75 engine/core/filters.py:436
+#: engine/core/filters.py:88 engine/core/filters.py:495
msgid "Tags"
msgstr "الوسوم"
-#: engine/core/filters.py:76
+#: engine/core/filters.py:90
msgid "Min Price"
msgstr "الحد الأدنى للسعر"
-#: engine/core/filters.py:77
+#: engine/core/filters.py:93
msgid "Max Price"
msgstr "ماكس برايس"
-#: engine/core/filters.py:78
+#: engine/core/filters.py:95
msgid "Is Active"
msgstr "نشط"
-#: engine/core/filters.py:79
+#: engine/core/filters.py:96
msgid "Brand"
msgstr "العلامة التجارية"
-#: engine/core/filters.py:80
+#: engine/core/filters.py:97
msgid "Attributes"
msgstr "السمات"
-#: engine/core/filters.py:81
+#: engine/core/filters.py:99
msgid "Quantity"
msgstr "الكمية"
-#: engine/core/filters.py:82 engine/core/filters.py:430
-#: engine/core/filters.py:556 engine/core/models.py:321
-#: engine/core/models.py:489 engine/core/models.py:644
+#: engine/core/filters.py:101 engine/core/filters.py:489
+#: engine/core/filters.py:628 engine/core/models.py:327
+#: engine/core/models.py:508 engine/core/models.py:665
msgid "Slug"
msgstr "سبيكة"
-#: engine/core/filters.py:83
+#: engine/core/filters.py:102
msgid "Is Digital"
msgstr "هو رقمي"
-#: engine/core/filters.py:84
+#: engine/core/filters.py:104
msgid "Include sub-categories"
msgstr "تضمين الفئات الفرعية"
-#: engine/core/filters.py:87
+#: engine/core/filters.py:108
msgid "Include personal ordered"
msgstr "تضمين المنتجات المطلوبة شخصيًا"
-#: engine/core/filters.py:89 engine/core/models.py:648
+#: engine/core/filters.py:110 engine/core/models.py:669
msgid "SKU"
msgstr "وحدة التخزين"
-#: engine/core/filters.py:184
+#: engine/core/filters.py:212
msgid "there must be a category_uuid to use include_subcategories flag"
msgstr "يجب أن يكون هناك category_uid لاستخدام علامة تضمين_الفئات_الفرعية"
-#: engine/core/filters.py:353
+#: engine/core/filters.py:398
msgid "Search (ID, product name or part number)"
msgstr "البحث (المعرف أو اسم المنتج أو رقم الجزء)"
-#: engine/core/filters.py:356
+#: engine/core/filters.py:402
msgid "Bought after (inclusive)"
msgstr "تم الشراء بعد (شامل)"
-#: engine/core/filters.py:357
+#: engine/core/filters.py:405
msgid "Bought before (inclusive)"
msgstr "تم الشراء من قبل (شامل)"
-#: engine/core/filters.py:360 engine/core/filters.py:407
-#: engine/core/filters.py:614
+#: engine/core/filters.py:410 engine/core/filters.py:461
+#: engine/core/filters.py:696
msgid "User email"
msgstr "البريد الإلكتروني للمستخدم"
-#: engine/core/filters.py:361 engine/core/filters.py:408
-#: engine/core/filters.py:592 engine/core/filters.py:613
+#: engine/core/filters.py:413 engine/core/filters.py:464
+#: engine/core/filters.py:671 engine/core/filters.py:693
msgid "User UUID"
msgstr "معرّف المستخدم UUID"
-#: engine/core/filters.py:362
+#: engine/core/filters.py:415
msgid "Status"
msgstr "الحالة"
-#: engine/core/filters.py:366
+#: engine/core/filters.py:419
msgid "Human Readable ID"
msgstr "معرّف قابل للقراءة من قبل الإنسان"
-#: engine/core/filters.py:429
+#: engine/core/filters.py:488
msgid "Parent"
msgstr "الوالدين"
-#: engine/core/filters.py:433
+#: engine/core/filters.py:492
msgid "Whole category(has at least 1 product or not)"
msgstr "الفئة الكاملة (تحتوي على منتج واحد على الأقل أو لا)"
-#: engine/core/filters.py:437
+#: engine/core/filters.py:496
msgid "Level"
msgstr "المستوى"
-#: engine/core/filters.py:587
+#: engine/core/filters.py:666
msgid "Product UUID"
msgstr "UUID المنتج"
-#: engine/core/graphene/mutations.py:40
+#: engine/core/graphene/mutations.py:41
msgid "key to look for in or set into the cache"
msgstr ""
"مفتاح للبحث عنه في ذاكرة التخزين المؤقت أو تعيينه في ذاكرة التخزين المؤقت"
-#: engine/core/graphene/mutations.py:41
+#: engine/core/graphene/mutations.py:43
msgid "data to store in cache"
msgstr "البيانات المراد تخزينها في ذاكرة التخزين المؤقت"
-#: engine/core/graphene/mutations.py:44
+#: engine/core/graphene/mutations.py:46
msgid "timeout in seconds to set the data for into the cache"
msgstr "المهلة بالثواني لتعيين البيانات في ذاكرة التخزين المؤقت"
-#: engine/core/graphene/mutations.py:47
+#: engine/core/graphene/mutations.py:49
msgid "cached data"
msgstr "البيانات المخزنة مؤقتاً"
-#: engine/core/graphene/mutations.py:62
+#: engine/core/graphene/mutations.py:64
msgid "camelized JSON data from the requested URL"
msgstr "بيانات JSON مجمّلة من عنوان URL المطلوب"
-#: engine/core/graphene/mutations.py:67 engine/core/views.py:257
+#: engine/core/graphene/mutations.py:69 engine/core/views.py:249
msgid "only URLs starting with http(s):// are allowed"
msgstr "يُسمح فقط بعناوين URL التي تبدأ ب http(s)://"
-#: engine/core/graphene/mutations.py:83
+#: engine/core/graphene/mutations.py:87
msgid "add a product to the order"
msgstr "إضافة منتج إلى الطلب"
-#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131
-#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287
+#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139
+#: engine/core/graphene/mutations.py:255 engine/core/graphene/mutations.py:307
#, python-brace-format
msgid "order {order_uuid} not found"
msgstr "الطلب {order_uuid} غير موجود!"
-#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159
+#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167
msgid "remove a product from the order"
msgstr "إزالة منتج من الطلب"
-#: engine/core/graphene/mutations.py:137
+#: engine/core/graphene/mutations.py:145
msgid "remove all products from the order"
msgstr "إزالة جميع المنتجات من الطلب"
-#: engine/core/graphene/mutations.py:182
+#: engine/core/graphene/mutations.py:190
msgid "buy an order"
msgstr "شراء طلبية"
-#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265
+#: engine/core/graphene/mutations.py:221 engine/core/graphene/mutations.py:283
msgid "please provide either order_uuid or order_hr_id - mutually exclusive"
msgstr "يرجى تقديم إما Order_uuid أو order_uid_hr_hr_id - متنافيان!"
-#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501
-#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712
+#: engine/core/graphene/mutations.py:250 engine/core/graphene/mutations.py:525
+#: engine/core/graphene/mutations.py:574 engine/core/viewsets.py:753
msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr "جاء نوع خاطئ من طريقة order.buy(): {type(instance)!s}"
-#: engine/core/graphene/mutations.py:245
+#: engine/core/graphene/mutations.py:261
msgid "perform an action on a list of products in the order"
msgstr "تنفيذ إجراء على قائمة من المنتجات بالترتيب"
-#: engine/core/graphene/mutations.py:250
+#: engine/core/graphene/mutations.py:266
msgid "remove/add"
msgstr "إزالة/إضافة"
-#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323
+#: engine/core/graphene/mutations.py:302 engine/core/graphene/mutations.py:343
msgid "action must be either add or remove"
msgstr "يجب أن يكون الإجراء إما \"إضافة\" أو \"إزالة\"!"
-#: engine/core/graphene/mutations.py:293
+#: engine/core/graphene/mutations.py:313
msgid "perform an action on a list of products in the wishlist"
msgstr "تنفيذ إجراء على قائمة المنتجات في قائمة الأمنيات"
-#: engine/core/graphene/mutations.py:311
+#: engine/core/graphene/mutations.py:331
msgid "please provide wishlist_uuid value"
msgstr "يُرجى تقديم قيمة \"wishlist_uid\"."
-#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404
-#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460
-#: engine/core/graphene/mutations.py:504
+#: engine/core/graphene/mutations.py:348 engine/core/graphene/mutations.py:424
+#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480
+#: engine/core/graphene/mutations.py:530
#, python-brace-format
msgid "wishlist {wishlist_uuid} not found"
msgstr "قائمة الرغبات {wishlist_uuid} غير موجودة!"
-#: engine/core/graphene/mutations.py:382
+#: engine/core/graphene/mutations.py:402
msgid "add a product to the wishlist"
msgstr "إضافة منتج إلى الطلب"
-#: engine/core/graphene/mutations.py:410
+#: engine/core/graphene/mutations.py:430
msgid "remove a product from the wishlist"
msgstr "إزالة منتج من الطلب"
-#: engine/core/graphene/mutations.py:438
+#: engine/core/graphene/mutations.py:458
msgid "remove all products from the wishlist"
msgstr "إزالة منتج من الطلب"
-#: engine/core/graphene/mutations.py:466
+#: engine/core/graphene/mutations.py:486
msgid "buy all products from the wishlist"
msgstr "إزالة منتج من الطلب"
-#: engine/core/graphene/mutations.py:510
+#: engine/core/graphene/mutations.py:536
msgid "buy a product"
msgstr "شراء طلبية"
-#: engine/core/graphene/mutations.py:516
+#: engine/core/graphene/mutations.py:543
msgid ""
-"please send the attributes as the string formatted like "
-"attr1=value1,attr2=value2"
+"please send the attributes as the string formatted like attr1=value1,"
+"attr2=value2"
msgstr "الرجاء إرسال السمات كسلسلة منسقة مثل attr1=قيمة1، attr2=قيمة2"
-#: engine/core/graphene/mutations.py:549
+#: engine/core/graphene/mutations.py:581
msgid "add or delete a feedback for orderproduct"
msgstr "إضافة أو حذف تعليق على طلبالمنتج"
-#: engine/core/graphene/mutations.py:573
+#: engine/core/graphene/mutations.py:607
msgid "action must be either `add` or `remove`"
msgstr "يجب أن يكون الإجراء إما \"إضافة\" أو \"إزالة\"!"
-#: engine/core/graphene/mutations.py:576
+#: engine/core/graphene/mutations.py:610
#, python-brace-format
msgid "order product {order_product_uuid} not found"
msgstr "طلب المنتج {order_product_uuid} غير موجود!"
-#: engine/core/graphene/mutations.py:582
+#: engine/core/graphene/mutations.py:617
msgid "original address string provided by the user"
msgstr "سلسلة العنوان الأصلي المقدمة من المستخدم"
-#: engine/core/graphene/mutations.py:618 engine/core/models.py:955
-#: engine/core/models.py:968 engine/core/models.py:1383
-#: engine/core/models.py:1412 engine/core/models.py:1437
-#: engine/core/viewsets.py:715
+#: engine/core/graphene/mutations.py:654 engine/core/models.py:978
+#: engine/core/models.py:991 engine/core/models.py:1435
+#: engine/core/models.py:1466 engine/core/models.py:1497
+#: engine/core/viewsets.py:760
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr "{name} غير موجود: {uuid}!"
-#: engine/core/graphene/mutations.py:632
+#: engine/core/graphene/mutations.py:668
msgid "limit must be between 1 and 10"
msgstr "يجب أن يكون الحد بين 1 و10"
-#: engine/core/graphene/mutations.py:681
+#: engine/core/graphene/mutations.py:717
msgid "elasticsearch - works like a charm"
msgstr "ElasticSearch - يعمل مثل السحر"
#: engine/core/graphene/object_types.py:82
-#: engine/core/graphene/object_types.py:370
-#: engine/core/graphene/object_types.py:417 engine/core/models.py:772
-#: engine/core/models.py:1250 engine/core/models.py:1897
+#: engine/core/graphene/object_types.py:417
+#: engine/core/graphene/object_types.py:468 engine/core/models.py:795
+#: engine/core/models.py:1289 engine/core/models.py:2021
msgid "attributes"
msgstr "السمات"
@@ -1221,89 +1231,88 @@ msgid "groups of attributes"
msgstr "مجموعات السمات"
#: engine/core/graphene/object_types.py:116
-#: engine/core/graphene/object_types.py:193
-#: engine/core/graphene/object_types.py:223 engine/core/models.py:432
+#: engine/core/graphene/object_types.py:214
+#: engine/core/graphene/object_types.py:252 engine/core/models.py:451
msgid "categories"
msgstr "الفئات"
-#: engine/core/graphene/object_types.py:124 engine/core/models.py:503
+#: engine/core/graphene/object_types.py:132 engine/core/models.py:522
msgid "brands"
msgstr "العلامات التجارية"
-#: engine/core/graphene/object_types.py:195
+#: engine/core/graphene/object_types.py:216
msgid "category image url"
msgstr "الفئات"
-#: engine/core/graphene/object_types.py:196
-#: engine/core/graphene/object_types.py:317 engine/core/models.py:283
+#: engine/core/graphene/object_types.py:217
+#: engine/core/graphene/object_types.py:362 engine/core/models.py:289
msgid "markup percentage"
msgstr "النسبة المئوية للترميز"
-#: engine/core/graphene/object_types.py:199
+#: engine/core/graphene/object_types.py:221
msgid "which attributes and values can be used for filtering this category."
msgstr "ما هي السمات والقيم التي يمكن استخدامها لتصفية هذه الفئة."
-#: engine/core/graphene/object_types.py:203
-msgid ""
-"minimum and maximum prices for products in this category, if available."
+#: engine/core/graphene/object_types.py:227
+msgid "minimum and maximum prices for products in this category, if available."
msgstr ""
"الحد الأدنى والحد الأقصى لأسعار المنتجات في هذه الفئة، إذا كانت متوفرة."
-#: engine/core/graphene/object_types.py:205
+#: engine/core/graphene/object_types.py:231
msgid "tags for this category"
msgstr "العلامات الخاصة بهذه الفئة"
-#: engine/core/graphene/object_types.py:206
+#: engine/core/graphene/object_types.py:234
msgid "products in this category"
msgstr "المنتجات في هذه الفئة"
-#: engine/core/graphene/object_types.py:324 engine/core/models.py:188
+#: engine/core/graphene/object_types.py:369 engine/core/models.py:194
msgid "vendors"
msgstr "البائعون"
-#: engine/core/graphene/object_types.py:328
+#: engine/core/graphene/object_types.py:373
msgid "Latitude (Y coordinate)"
msgstr "خط العرض (الإحداثي Y)"
-#: engine/core/graphene/object_types.py:329
+#: engine/core/graphene/object_types.py:374
msgid "Longitude (X coordinate)"
msgstr "خط الطول (الإحداثي X)"
-#: engine/core/graphene/object_types.py:358
+#: engine/core/graphene/object_types.py:403
msgid "comment"
msgstr "كيفية"
-#: engine/core/graphene/object_types.py:359
-#: engine/core/graphene/object_types.py:483
+#: engine/core/graphene/object_types.py:405
+#: engine/core/graphene/object_types.py:539
msgid "rating value from 1 to 10, inclusive, or 0 if not set."
msgstr "قيمة التصنيف من 1 إلى 10، شاملة، أو 0 إذا لم يتم تعيينها."
-#: engine/core/graphene/object_types.py:366
+#: engine/core/graphene/object_types.py:413
msgid "represents feedback from a user."
msgstr "يمثل ملاحظات من المستخدم."
-#: engine/core/graphene/object_types.py:371
-#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244
+#: engine/core/graphene/object_types.py:418
+#: engine/core/graphene/object_types.py:469 engine/core/models.py:1283
msgid "notifications"
msgstr "الإشعارات"
-#: engine/core/graphene/object_types.py:372
+#: engine/core/graphene/object_types.py:420
msgid "download url for this order product if applicable"
msgstr "تحميل الرابط الخاص بمنتج الطلب هذا إن أمكن"
-#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736
+#: engine/core/graphene/object_types.py:422 engine/core/models.py:1848
msgid "feedback"
msgstr "الملاحظات"
-#: engine/core/graphene/object_types.py:407
+#: engine/core/graphene/object_types.py:456
msgid "a list of order products in this order"
msgstr "قائمة بطلب المنتجات بهذا الترتيب"
-#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214
+#: engine/core/graphene/object_types.py:458 engine/core/models.py:1253
msgid "billing address"
msgstr "عنوان إرسال الفواتير"
-#: engine/core/graphene/object_types.py:412
+#: engine/core/graphene/object_types.py:462
msgid ""
"shipping address for this order, leave blank if same as billing address or "
"if not applicable"
@@ -1311,53 +1320,53 @@ msgstr ""
"عنوان الشحن لهذا الطلب، اترك العنوان فارغًا إذا كان هو نفسه عنوان إرسال "
"الفواتير أو إذا لم يكن منطبقًا"
-#: engine/core/graphene/object_types.py:414
+#: engine/core/graphene/object_types.py:465
msgid "total price of this order"
msgstr "السعر الإجمالي لهذا الطلب"
-#: engine/core/graphene/object_types.py:415
+#: engine/core/graphene/object_types.py:466
msgid "total quantity of products in order"
msgstr "إجمالي كمية المنتجات بالترتيب"
-#: engine/core/graphene/object_types.py:416
+#: engine/core/graphene/object_types.py:467
msgid "are all products in the order digital"
msgstr "هل جميع المنتجات في الطلب رقمي"
-#: engine/core/graphene/object_types.py:419
+#: engine/core/graphene/object_types.py:471
msgid "transactions for this order"
msgstr "المعاملات الخاصة بهذا الطلب"
-#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278
+#: engine/core/graphene/object_types.py:491 engine/core/models.py:1317
msgid "orders"
msgstr "الطلبات"
-#: engine/core/graphene/object_types.py:459
+#: engine/core/graphene/object_types.py:512
msgid "image url"
msgstr "رابط الصورة"
-#: engine/core/graphene/object_types.py:466
+#: engine/core/graphene/object_types.py:519
msgid "product's images"
msgstr "صور المنتج"
-#: engine/core/graphene/object_types.py:473 engine/core/models.py:431
-#: engine/core/models.py:586
+#: engine/core/graphene/object_types.py:526 engine/core/models.py:450
+#: engine/core/models.py:607
msgid "category"
msgstr "الفئة"
-#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737
+#: engine/core/graphene/object_types.py:528 engine/core/models.py:1849
msgid "feedbacks"
msgstr "الملاحظات"
-#: engine/core/graphene/object_types.py:476 engine/core/models.py:502
-#: engine/core/models.py:595
+#: engine/core/graphene/object_types.py:529 engine/core/models.py:521
+#: engine/core/models.py:616
msgid "brand"
msgstr "العلامة التجارية"
-#: engine/core/graphene/object_types.py:477 engine/core/models.py:106
+#: engine/core/graphene/object_types.py:531 engine/core/models.py:106
msgid "attribute groups"
msgstr "مجموعات السمات"
-#: engine/core/graphene/object_types.py:478
+#: engine/core/graphene/object_types.py:533
#: engine/core/templates/digital_order_created_email.html:111
#: engine/core/templates/digital_order_delivered_email.html:109
#: engine/core/templates/shipped_order_created_email.html:109
@@ -1365,7 +1374,7 @@ msgstr "مجموعات السمات"
msgid "price"
msgstr "السعر"
-#: engine/core/graphene/object_types.py:479
+#: engine/core/graphene/object_types.py:534
#: engine/core/templates/digital_order_created_email.html:110
#: engine/core/templates/digital_order_delivered_email.html:108
#: engine/core/templates/shipped_order_created_email.html:108
@@ -1373,39 +1382,39 @@ msgstr "السعر"
msgid "quantity"
msgstr "الكمية"
-#: engine/core/graphene/object_types.py:480
+#: engine/core/graphene/object_types.py:535
msgid "number of feedbacks"
msgstr "عدد الملاحظات"
-#: engine/core/graphene/object_types.py:481
+#: engine/core/graphene/object_types.py:536
msgid "only available for personal orders"
msgstr "المنتجات متاحة للطلبات الشخصية فقط"
-#: engine/core/graphene/object_types.py:484
+#: engine/core/graphene/object_types.py:541
msgid "discount price"
msgstr "سعر الخصم"
-#: engine/core/graphene/object_types.py:508 engine/core/models.py:658
+#: engine/core/graphene/object_types.py:565 engine/core/models.py:679
msgid "products"
msgstr "المنتجات"
-#: engine/core/graphene/object_types.py:611
+#: engine/core/graphene/object_types.py:675
msgid "promocodes"
msgstr "الرموز الترويجية"
-#: engine/core/graphene/object_types.py:621
+#: engine/core/graphene/object_types.py:690
msgid "products on sale"
msgstr "المنتجات المعروضة للبيع"
-#: engine/core/graphene/object_types.py:628 engine/core/models.py:904
+#: engine/core/graphene/object_types.py:698 engine/core/models.py:927
msgid "promotions"
msgstr "العروض الترويجية"
-#: engine/core/graphene/object_types.py:632 engine/core/models.py:187
+#: engine/core/graphene/object_types.py:702 engine/core/models.py:193
msgid "vendor"
msgstr "البائع"
-#: engine/core/graphene/object_types.py:633 engine/core/models.py:657
+#: engine/core/graphene/object_types.py:703 engine/core/models.py:678
#: engine/core/templates/digital_order_created_email.html:109
#: engine/core/templates/digital_order_delivered_email.html:107
#: engine/core/templates/shipped_order_created_email.html:107
@@ -1413,100 +1422,100 @@ msgstr "البائع"
msgid "product"
msgstr "المنتج"
-#: engine/core/graphene/object_types.py:644 engine/core/models.py:927
+#: engine/core/graphene/object_types.py:715 engine/core/models.py:950
msgid "wishlisted products"
msgstr "المنتجات المفضلة"
-#: engine/core/graphene/object_types.py:650 engine/core/models.py:944
+#: engine/core/graphene/object_types.py:722 engine/core/models.py:967
msgid "wishlists"
msgstr "قوائم التمنيات"
-#: engine/core/graphene/object_types.py:654
+#: engine/core/graphene/object_types.py:727
msgid "tagged products"
msgstr "المنتجات الموسومة"
-#: engine/core/graphene/object_types.py:661 engine/core/models.py:224
-#: engine/core/models.py:601
+#: engine/core/graphene/object_types.py:735 engine/core/models.py:230
+#: engine/core/models.py:622
msgid "product tags"
msgstr "علامات المنتج"
-#: engine/core/graphene/object_types.py:665
+#: engine/core/graphene/object_types.py:740
msgid "tagged categories"
msgstr "الفئات الموسومة"
-#: engine/core/graphene/object_types.py:672
+#: engine/core/graphene/object_types.py:748
msgid "categories tags"
msgstr "علامات الفئات"
-#: engine/core/graphene/object_types.py:676
+#: engine/core/graphene/object_types.py:752
msgid "project name"
msgstr "اسم المشروع"
-#: engine/core/graphene/object_types.py:677
+#: engine/core/graphene/object_types.py:753
msgid "company name"
msgstr "اسم الشركة"
-#: engine/core/graphene/object_types.py:678
+#: engine/core/graphene/object_types.py:754
msgid "company address"
msgstr "عنوان الشركة"
-#: engine/core/graphene/object_types.py:679
+#: engine/core/graphene/object_types.py:755
msgid "company phone number"
msgstr "رقم هاتف الشركة"
-#: engine/core/graphene/object_types.py:680
+#: engine/core/graphene/object_types.py:758
msgid "email from, sometimes it must be used instead of host user value"
msgstr ""
-"\"البريد الإلكتروني من\"، في بعض الأحيان يجب استخدامه بدلاً من قيمة المستخدم"
-" المضيف"
+"\"البريد الإلكتروني من\"، في بعض الأحيان يجب استخدامه بدلاً من قيمة المستخدم "
+"المضيف"
-#: engine/core/graphene/object_types.py:681
+#: engine/core/graphene/object_types.py:761
msgid "email host user"
msgstr "مستخدم البريد الإلكتروني المضيف"
-#: engine/core/graphene/object_types.py:682
+#: engine/core/graphene/object_types.py:762
msgid "maximum amount for payment"
msgstr "الحد الأقصى لمبلغ السداد"
-#: engine/core/graphene/object_types.py:683
+#: engine/core/graphene/object_types.py:763
msgid "minimum amount for payment"
msgstr "الحد الأدنى لمبلغ السداد"
-#: engine/core/graphene/object_types.py:684
+#: engine/core/graphene/object_types.py:764
msgid "analytics data"
msgstr "بيانات التحليلات"
-#: engine/core/graphene/object_types.py:685
+#: engine/core/graphene/object_types.py:765
msgid "advertisement data"
msgstr "بيانات الإعلانات"
-#: engine/core/graphene/object_types.py:688
+#: engine/core/graphene/object_types.py:768
msgid "company configuration"
msgstr "التكوين"
-#: engine/core/graphene/object_types.py:692
+#: engine/core/graphene/object_types.py:772
msgid "language code"
msgstr "رمز اللغة"
-#: engine/core/graphene/object_types.py:693
+#: engine/core/graphene/object_types.py:773
msgid "language name"
msgstr "اسم اللغة"
-#: engine/core/graphene/object_types.py:694
+#: engine/core/graphene/object_types.py:774
msgid "language flag, if exists :)"
msgstr "علم اللغة، إذا كان موجوداً :)"
-#: engine/core/graphene/object_types.py:697
+#: engine/core/graphene/object_types.py:777
msgid "supported languages"
msgstr "الحصول على قائمة باللغات المدعومة"
-#: engine/core/graphene/object_types.py:728
-#: engine/core/graphene/object_types.py:729
-#: engine/core/graphene/object_types.py:730
+#: engine/core/graphene/object_types.py:809
+#: engine/core/graphene/object_types.py:812
+#: engine/core/graphene/object_types.py:815
msgid "products search results"
msgstr "نتائج البحث عن المنتجات"
-#: engine/core/graphene/object_types.py:731
+#: engine/core/graphene/object_types.py:817
msgid "posts search results"
msgstr "نتائج البحث عن المنتجات"
@@ -1534,7 +1543,7 @@ msgstr "مجموعة السمات الرئيسية"
msgid "attribute group's name"
msgstr "اسم مجموعة السمات"
-#: engine/core/models.py:105 engine/core/models.py:734
+#: engine/core/models.py:105 engine/core/models.py:755
msgid "attribute group"
msgstr "مجموعة السمات"
@@ -1552,52 +1561,52 @@ msgstr ""
"تفاعلهم. يتم استخدام فئة البائع لتعريف وإدارة المعلومات المتعلقة ببائع "
"خارجي. وهو يخزن اسم البائع، وتفاصيل المصادقة المطلوبة للاتصال، والنسبة "
"المئوية للترميز المطبقة على المنتجات المسترجعة من البائع. يحتفظ هذا النموذج "
-"أيضًا ببيانات وصفية وقيود إضافية، مما يجعله مناسبًا للاستخدام في الأنظمة "
-"التي تتفاعل مع البائعين الخارجيين."
+"أيضًا ببيانات وصفية وقيود إضافية، مما يجعله مناسبًا للاستخدام في الأنظمة التي "
+"تتفاعل مع البائعين الخارجيين."
-#: engine/core/models.py:124
+#: engine/core/models.py:125
msgid "stores credentials and endpoints required for vendor communication"
msgstr ""
"تخزين بيانات الاعتماد ونقاط النهاية المطلوبة لاتصالات واجهة برمجة التطبيقات "
"الخاصة بالمورّد"
-#: engine/core/models.py:125
+#: engine/core/models.py:127
msgid "authentication info"
msgstr "معلومات المصادقة"
-#: engine/core/models.py:130
+#: engine/core/models.py:132
msgid "define the markup for products retrieved from this vendor"
msgstr "تحديد الترميز للمنتجات المسترجعة من هذا البائع"
-#: engine/core/models.py:131
+#: engine/core/models.py:133
msgid "vendor markup percentage"
msgstr "نسبة هامش الربح للبائع"
-#: engine/core/models.py:135
+#: engine/core/models.py:137
msgid "name of this vendor"
msgstr "اسم هذا البائع"
-#: engine/core/models.py:136
+#: engine/core/models.py:138
msgid "vendor name"
msgstr "اسم البائع"
-#: engine/core/models.py:147
+#: engine/core/models.py:153
msgid "response file"
msgstr "ملف الاستجابة"
-#: engine/core/models.py:148
+#: engine/core/models.py:154
msgid "vendor's last processing response"
msgstr "استجابة البائع الأخيرة للمعالجة"
-#: engine/core/models.py:154
+#: engine/core/models.py:160
msgid "vendor's integration file path"
msgstr "مسار ملف تكامل البائع"
-#: engine/core/models.py:155
+#: engine/core/models.py:161
msgid "integration path"
msgstr "مسار التكامل"
-#: engine/core/models.py:197
+#: engine/core/models.py:203
msgid ""
"Represents a product tag used for classifying or identifying products. The "
"ProductTag class is designed to uniquely identify and classify products "
@@ -1606,48 +1615,48 @@ msgid ""
"metadata customization for administrative purposes."
msgstr ""
"يمثل علامة منتج تُستخدم لتصنيف المنتجات أو تعريفها. صُممت فئة ProductTag "
-"لتعريف المنتجات وتصنيفها بشكل فريد من خلال مزيج من معرّف علامة داخلي واسم "
-"عرض سهل الاستخدام. وهي تدعم العمليات التي يتم تصديرها من خلال mixins وتوفر "
-"تخصيص البيانات الوصفية لأغراض إدارية."
+"لتعريف المنتجات وتصنيفها بشكل فريد من خلال مزيج من معرّف علامة داخلي واسم عرض "
+"سهل الاستخدام. وهي تدعم العمليات التي يتم تصديرها من خلال mixins وتوفر تخصيص "
+"البيانات الوصفية لأغراض إدارية."
-#: engine/core/models.py:209 engine/core/models.py:240
+#: engine/core/models.py:215 engine/core/models.py:246
msgid "internal tag identifier for the product tag"
msgstr "معرّف العلامة الداخلي لعلامة المنتج"
-#: engine/core/models.py:210 engine/core/models.py:241
+#: engine/core/models.py:216 engine/core/models.py:247
msgid "tag name"
msgstr "اسم العلامة"
-#: engine/core/models.py:214 engine/core/models.py:245
+#: engine/core/models.py:220 engine/core/models.py:251
msgid "user-friendly name for the product tag"
msgstr "اسم سهل الاستخدام لعلامة المنتج"
-#: engine/core/models.py:215 engine/core/models.py:246
+#: engine/core/models.py:221 engine/core/models.py:252
msgid "tag display name"
msgstr "اسم عرض العلامة"
-#: engine/core/models.py:223
+#: engine/core/models.py:229
msgid "product tag"
msgstr "علامة المنتج"
-#: engine/core/models.py:229
+#: engine/core/models.py:235
msgid ""
"Represents a category tag used for products. This class models a category "
"tag that can be used to associate and classify products. It includes "
"attributes for an internal tag identifier and a user-friendly display name."
msgstr ""
-"يمثل علامة فئة تستخدم للمنتجات. تمثل هذه الفئة علامة فئة يمكن استخدامها لربط"
-" المنتجات وتصنيفها. وهي تتضمن سمات لمعرف علامة داخلي واسم عرض سهل الاستخدام."
+"يمثل علامة فئة تستخدم للمنتجات. تمثل هذه الفئة علامة فئة يمكن استخدامها لربط "
+"المنتجات وتصنيفها. وهي تتضمن سمات لمعرف علامة داخلي واسم عرض سهل الاستخدام."
-#: engine/core/models.py:254
+#: engine/core/models.py:260
msgid "category tag"
msgstr "علامة الفئة"
-#: engine/core/models.py:255 engine/core/models.py:327
+#: engine/core/models.py:261 engine/core/models.py:333
msgid "category tags"
msgstr "علامات الفئة"
-#: engine/core/models.py:260
+#: engine/core/models.py:266
msgid ""
"Represents a category entity to organize and group related items in a "
"hierarchical structure. Categories may have hierarchical relationships with "
@@ -1663,111 +1672,110 @@ msgstr ""
"علاقات هرمية مع فئات أخرى، مما يدعم العلاقات بين الأصل والطفل. تتضمن الفئة "
"حقول للبيانات الوصفية والتمثيل المرئي، والتي تعمل كأساس للميزات المتعلقة "
"بالفئات. تُستخدم هذه الفئة عادةً لتعريف وإدارة فئات المنتجات أو غيرها من "
-"التجميعات المماثلة داخل التطبيق، مما يسمح للمستخدمين أو المسؤولين بتحديد اسم"
-" الفئات ووصفها وتسلسلها الهرمي، بالإضافة إلى تعيين سمات مثل الصور أو "
-"العلامات أو الأولوية."
+"التجميعات المماثلة داخل التطبيق، مما يسمح للمستخدمين أو المسؤولين بتحديد اسم "
+"الفئات ووصفها وتسلسلها الهرمي، بالإضافة إلى تعيين سمات مثل الصور أو العلامات "
+"أو الأولوية."
-#: engine/core/models.py:274
+#: engine/core/models.py:280
msgid "upload an image representing this category"
msgstr "تحميل صورة تمثل هذه الفئة"
-#: engine/core/models.py:277
+#: engine/core/models.py:283
msgid "category image"
msgstr "صورة الفئة"
-#: engine/core/models.py:282
+#: engine/core/models.py:288
msgid "define a markup percentage for products in this category"
msgstr "تحديد نسبة ترميز للمنتجات في هذه الفئة"
-#: engine/core/models.py:291
+#: engine/core/models.py:297
msgid "parent of this category to form a hierarchical structure"
msgstr "أصل هذه الفئة لتكوين بنية هرمية"
-#: engine/core/models.py:292
+#: engine/core/models.py:298
msgid "parent category"
msgstr "الفئة الرئيسية"
-#: engine/core/models.py:297
+#: engine/core/models.py:303
msgid "category name"
msgstr "اسم الفئة"
-#: engine/core/models.py:298
+#: engine/core/models.py:304
msgid "provide a name for this category"
msgstr "تقديم اسم لهذه الفئة"
-#: engine/core/models.py:305
+#: engine/core/models.py:311
msgid "add a detailed description for this category"
msgstr "إضافة وصف تفصيلي لهذه الفئة"
-#: engine/core/models.py:306
+#: engine/core/models.py:312
msgid "category description"
msgstr "وصف الفئة"
-#: engine/core/models.py:326
+#: engine/core/models.py:332
msgid "tags that help describe or group this category"
msgstr "العلامات التي تساعد في وصف هذه الفئة أو تجميعها"
-#: engine/core/models.py:333 engine/core/models.py:495
+#: engine/core/models.py:339 engine/core/models.py:514
msgid "priority"
msgstr "الأولوية"
-#: engine/core/models.py:438
+#: engine/core/models.py:457
msgid ""
"Represents a Brand object in the system. This class handles information and "
"attributes related to a brand, including its name, logos, description, "
"associated categories, a unique slug, and priority order. It allows for the "
-"organization and representation of brand-related data within the "
-"application."
+"organization and representation of brand-related data within the application."
msgstr ""
"يمثل كائن العلامة التجارية في النظام. تتعامل هذه الفئة مع المعلومات والسمات "
"المتعلقة بالعلامة التجارية، بما في ذلك اسمها وشعاراتها ووصفها والفئات "
"المرتبطة بها وسبيكة فريدة وترتيب الأولوية. يسمح بتنظيم وتمثيل البيانات "
"المتعلقة بالعلامة التجارية داخل التطبيق."
-#: engine/core/models.py:448
+#: engine/core/models.py:467
msgid "name of this brand"
msgstr "اسم هذه العلامة التجارية"
-#: engine/core/models.py:449
+#: engine/core/models.py:468
msgid "brand name"
msgstr "اسم العلامة التجارية"
-#: engine/core/models.py:456
+#: engine/core/models.py:475
msgid "upload a logo representing this brand"
msgstr "تحميل شعار يمثل هذه العلامة التجارية"
-#: engine/core/models.py:458
+#: engine/core/models.py:477
msgid "brand small image"
msgstr "صورة العلامة التجارية الصغيرة"
-#: engine/core/models.py:464
+#: engine/core/models.py:483
msgid "upload a big logo representing this brand"
msgstr "رفع شعار كبير يمثل هذه العلامة التجارية"
-#: engine/core/models.py:466
+#: engine/core/models.py:485
msgid "brand big image"
msgstr "صورة كبيرة للعلامة التجارية"
-#: engine/core/models.py:471
+#: engine/core/models.py:490
msgid "add a detailed description of the brand"
msgstr "إضافة وصف تفصيلي للعلامة التجارية"
-#: engine/core/models.py:472
+#: engine/core/models.py:491
msgid "brand description"
msgstr "وصف العلامة التجارية"
-#: engine/core/models.py:477
+#: engine/core/models.py:496
msgid "optional categories that this brand is associated with"
msgstr "الفئات الاختيارية التي ترتبط بها هذه العلامة التجارية"
-#: engine/core/models.py:478
+#: engine/core/models.py:497
msgid "associated categories"
msgstr "الفئات"
-#: engine/core/models.py:508
+#: engine/core/models.py:527
msgid ""
-"Represents the stock of a product managed in the system. This class provides"
-" details about the relationship between vendors, products, and their stock "
+"Represents the stock of a product managed in the system. This class provides "
+"details about the relationship between vendors, products, and their stock "
"information, as well as inventory-related properties like price, purchase "
"price, quantity, SKU, and digital assets. It is part of the inventory "
"management system to allow tracking and evaluation of products available "
@@ -1779,72 +1787,72 @@ msgstr ""
"والأصول الرقمية. وهي جزء من نظام إدارة المخزون للسماح بتتبع وتقييم المنتجات "
"المتاحة من مختلف البائعين."
-#: engine/core/models.py:520
+#: engine/core/models.py:539
msgid "the vendor supplying this product stock"
msgstr "البائع الذي يورد هذا المنتج المخزون"
-#: engine/core/models.py:521
+#: engine/core/models.py:540
msgid "associated vendor"
msgstr "البائع المرتبط"
-#: engine/core/models.py:525
+#: engine/core/models.py:544
msgid "final price to the customer after markups"
msgstr "السعر النهائي للعميل بعد هوامش الربح"
-#: engine/core/models.py:526
+#: engine/core/models.py:545
msgid "selling price"
msgstr "سعر البيع"
-#: engine/core/models.py:531
+#: engine/core/models.py:550
msgid "the product associated with this stock entry"
msgstr "المنتج المرتبط بإدخال المخزون هذا"
-#: engine/core/models.py:532 engine/core/models.py:797
-#: engine/core/models.py:843 engine/core/models.py:1792
+#: engine/core/models.py:551 engine/core/models.py:820
+#: engine/core/models.py:866 engine/core/models.py:1904
msgid "associated product"
msgstr "المنتج المرتبط"
-#: engine/core/models.py:539
+#: engine/core/models.py:558
msgid "the price paid to the vendor for this product"
msgstr "السعر المدفوع للبائع مقابل هذا المنتج"
-#: engine/core/models.py:540
+#: engine/core/models.py:559
msgid "vendor purchase price"
msgstr "سعر الشراء من البائع"
-#: engine/core/models.py:544
+#: engine/core/models.py:563
msgid "available quantity of the product in stock"
msgstr "الكمية المتوفرة من المنتج في المخزون"
-#: engine/core/models.py:545
+#: engine/core/models.py:564
msgid "quantity in stock"
msgstr "الكمية في المخزون"
-#: engine/core/models.py:549
+#: engine/core/models.py:568
msgid "vendor-assigned SKU for identifying the product"
msgstr "SKU المعين من قبل البائع لتحديد المنتج"
-#: engine/core/models.py:550
+#: engine/core/models.py:569
msgid "vendor sku"
msgstr "وحدة تخزين البائع"
-#: engine/core/models.py:556
+#: engine/core/models.py:575
msgid "digital file associated with this stock if applicable"
msgstr "الملف الرقمي المرتبط بهذا المخزون إن أمكن"
-#: engine/core/models.py:557
+#: engine/core/models.py:576
msgid "digital file"
msgstr "ملف رقمي"
-#: engine/core/models.py:560
+#: engine/core/models.py:580
msgid "system attributes"
msgstr "سمات النظام"
-#: engine/core/models.py:567
+#: engine/core/models.py:588
msgid "stock entries"
msgstr "إدخالات المخزون"
-#: engine/core/models.py:572
+#: engine/core/models.py:593
msgid ""
"Represents a product with attributes such as category, brand, tags, digital "
"status, name, description, part number, and slug. Provides related utility "
@@ -1857,68 +1865,68 @@ msgid ""
msgstr ""
"يمثل منتجًا بخصائص مثل الفئة والعلامة التجارية والعلامات والحالة الرقمية "
"والاسم والوصف ورقم الجزء والعلامة التجارية والحالة الرقمية والاسم والوصف "
-"ورقم الجزء والسبيكة. يوفر خصائص الأداة المساعدة ذات الصلة لاسترداد التقييمات"
-" وعدد الملاحظات والسعر والكمية وإجمالي الطلبات. مصمم للاستخدام في نظام "
-"يتعامل مع التجارة الإلكترونية أو إدارة المخزون. تتفاعل هذه الفئة مع النماذج "
-"ذات الصلة (مثل الفئة والعلامة التجارية وعلامة المنتج) وتدير التخزين المؤقت "
+"ورقم الجزء والسبيكة. يوفر خصائص الأداة المساعدة ذات الصلة لاسترداد التقييمات "
+"وعدد الملاحظات والسعر والكمية وإجمالي الطلبات. مصمم للاستخدام في نظام يتعامل "
+"مع التجارة الإلكترونية أو إدارة المخزون. تتفاعل هذه الفئة مع النماذج ذات "
+"الصلة (مثل الفئة والعلامة التجارية وعلامة المنتج) وتدير التخزين المؤقت "
"للخصائص التي يتم الوصول إليها بشكل متكرر لتحسين الأداء. يتم استخدامه لتعريف "
"ومعالجة بيانات المنتج والمعلومات المرتبطة به داخل التطبيق."
-#: engine/core/models.py:585
+#: engine/core/models.py:606
msgid "category this product belongs to"
msgstr "الفئة التي ينتمي إليها هذا المنتج"
-#: engine/core/models.py:594
+#: engine/core/models.py:615
msgid "optionally associate this product with a brand"
msgstr "ربط هذا المنتج اختياريًا بعلامة تجارية"
-#: engine/core/models.py:600
+#: engine/core/models.py:621
msgid "tags that help describe or group this product"
msgstr "العلامات التي تساعد في وصف أو تجميع هذا المنتج"
-#: engine/core/models.py:605
+#: engine/core/models.py:626
msgid "indicates whether this product is digitally delivered"
msgstr "يشير إلى ما إذا كان هذا المنتج يتم تسليمه رقميًا أم لا"
-#: engine/core/models.py:606
+#: engine/core/models.py:627
msgid "is product digital"
msgstr "هل المنتج رقمي"
-#: engine/core/models.py:612
+#: engine/core/models.py:633
msgid "provide a clear identifying name for the product"
msgstr "توفير اسم تعريفي واضح للمنتج"
-#: engine/core/models.py:613
+#: engine/core/models.py:634
msgid "product name"
msgstr "اسم المنتج"
-#: engine/core/models.py:619 engine/core/models.py:892
+#: engine/core/models.py:640 engine/core/models.py:915
msgid "add a detailed description of the product"
msgstr "إضافة وصف تفصيلي للمنتج"
-#: engine/core/models.py:620
+#: engine/core/models.py:641
msgid "product description"
msgstr "وصف المنتج"
-#: engine/core/models.py:627
+#: engine/core/models.py:648
msgid "part number for this product"
msgstr "رقم الجزء لهذا المنتج"
-#: engine/core/models.py:628
+#: engine/core/models.py:649
msgid "part number"
msgstr "رقم الجزء"
-#: engine/core/models.py:647
+#: engine/core/models.py:668
msgid "stock keeping unit for this product"
msgstr "وحدة حفظ المخزون لهذا المنتج"
-#: engine/core/models.py:720
+#: engine/core/models.py:741
msgid ""
"Represents an attribute in the system. This class is used to define and "
"manage attributes, which are customizable pieces of data that can be "
"associated with other entities. Attributes have associated categories, "
-"groups, value types, and names. The model supports multiple types of values,"
-" including string, integer, float, boolean, array, and object. This allows "
+"groups, value types, and names. The model supports multiple types of values, "
+"including string, integer, float, boolean, array, and object. This allows "
"for dynamic and flexible data structuring."
msgstr ""
"يمثل سمة في النظام. تُستخدم هذه الفئة لتعريف السمات وإدارتها، وهي عبارة عن "
@@ -1927,89 +1935,89 @@ msgstr ""
"من القيم، بما في ذلك السلسلة، والعدد الصحيح، والعائم، والمنطقي، والصفيف، "
"والكائن. وهذا يسمح بهيكلة ديناميكية ومرنة للبيانات."
-#: engine/core/models.py:733
+#: engine/core/models.py:754
msgid "group of this attribute"
msgstr "مجموعة هذه السمة"
-#: engine/core/models.py:739
+#: engine/core/models.py:760
msgid "string"
msgstr "الخيط"
-#: engine/core/models.py:740
+#: engine/core/models.py:761
msgid "integer"
msgstr "عدد صحيح"
-#: engine/core/models.py:741
+#: engine/core/models.py:762
msgid "float"
msgstr "تعويم"
-#: engine/core/models.py:742
+#: engine/core/models.py:763
msgid "boolean"
msgstr "منطقية"
-#: engine/core/models.py:743
+#: engine/core/models.py:764
msgid "array"
msgstr "المصفوفة"
-#: engine/core/models.py:744
+#: engine/core/models.py:765
msgid "object"
msgstr "الكائن"
-#: engine/core/models.py:746
+#: engine/core/models.py:767
msgid "type of the attribute's value"
msgstr "نوع قيمة السمة"
-#: engine/core/models.py:747
+#: engine/core/models.py:768
msgid "value type"
msgstr "نوع القيمة"
-#: engine/core/models.py:752
+#: engine/core/models.py:773
msgid "name of this attribute"
msgstr "اسم هذه السمة"
-#: engine/core/models.py:753
+#: engine/core/models.py:774
msgid "attribute's name"
msgstr "اسم السمة"
-#: engine/core/models.py:758
+#: engine/core/models.py:779
msgid "is filterable"
msgstr "قابل للتصفية"
-#: engine/core/models.py:759
+#: engine/core/models.py:781
msgid "designates whether this attribute can be used for filtering or not"
msgstr "يحدد ما إذا كان يمكن استخدام هذه السمة للتصفية أم لا"
-#: engine/core/models.py:771 engine/core/models.py:789
+#: engine/core/models.py:794 engine/core/models.py:812
#: engine/core/templates/digital_order_delivered_email.html:134
msgid "attribute"
msgstr "السمة"
-#: engine/core/models.py:777
+#: engine/core/models.py:800
msgid ""
-"Represents a specific value for an attribute that is linked to a product. It"
-" links the 'attribute' to a unique 'value', allowing better organization and"
-" dynamic representation of product characteristics."
+"Represents a specific value for an attribute that is linked to a product. It "
+"links the 'attribute' to a unique 'value', allowing better organization and "
+"dynamic representation of product characteristics."
msgstr ""
"يمثل قيمة محددة لسمة مرتبطة بمنتج ما. يربط \"السمة\" بـ \"قيمة\" فريدة، مما "
"يسمح بتنظيم أفضل وتمثيل ديناميكي لخصائص المنتج."
-#: engine/core/models.py:788
+#: engine/core/models.py:811
msgid "attribute of this value"
msgstr "سمة هذه القيمة"
-#: engine/core/models.py:796
+#: engine/core/models.py:819
msgid "the specific product associated with this attribute's value"
msgstr "المنتج المحدد المرتبط بقيمة هذه السمة"
-#: engine/core/models.py:802
+#: engine/core/models.py:825
msgid "the specific value for this attribute"
msgstr "القيمة المحددة لهذه السمة"
-#: engine/core/models.py:815
+#: engine/core/models.py:838
msgid ""
"Represents a product image associated with a product in the system. This "
-"class is designed to manage images for products, including functionality for"
-" uploading image files, associating them with specific products, and "
+"class is designed to manage images for products, including functionality for "
+"uploading image files, associating them with specific products, and "
"determining their display order. It also includes an accessibility feature "
"with alternative text for the images."
msgstr ""
@@ -2017,210 +2025,209 @@ msgstr ""
"بالمنتجات، بما في ذلك وظيفة تحميل ملفات الصور، وربطها بمنتجات معينة، وتحديد "
"ترتيب عرضها. وتتضمن أيضًا ميزة إمكانية الوصول مع نص بديل للصور."
-#: engine/core/models.py:826
+#: engine/core/models.py:849
msgid "provide alternative text for the image for accessibility"
msgstr "توفير نص بديل للصورة لإمكانية الوصول"
-#: engine/core/models.py:827
+#: engine/core/models.py:850
msgid "image alt text"
msgstr "النص البديل للصورة"
-#: engine/core/models.py:830
+#: engine/core/models.py:853
msgid "upload the image file for this product"
msgstr "تحميل ملف الصورة لهذا المنتج"
-#: engine/core/models.py:831 engine/core/models.py:862
+#: engine/core/models.py:854 engine/core/models.py:885
msgid "product image"
msgstr "صورة المنتج"
-#: engine/core/models.py:836
+#: engine/core/models.py:859
msgid "determines the order in which images are displayed"
msgstr "يحدد الترتيب الذي يتم عرض الصور به"
-#: engine/core/models.py:837
+#: engine/core/models.py:860
msgid "display priority"
msgstr "أولوية العرض"
-#: engine/core/models.py:842
+#: engine/core/models.py:865
msgid "the product that this image represents"
msgstr "المنتج الذي تمثله هذه الصورة"
-#: engine/core/models.py:863
+#: engine/core/models.py:886
msgid "product images"
msgstr "صور المنتج"
-#: engine/core/models.py:868
+#: engine/core/models.py:891
msgid ""
"Represents a promotional campaign for products with a discount. This class "
"is used to define and manage promotional campaigns that offer a percentage-"
"based discount for products. The class includes attributes for setting the "
"discount rate, providing details about the promotion, and linking it to the "
-"applicable products. It integrates with the product catalog to determine the"
-" affected items in the campaign."
+"applicable products. It integrates with the product catalog to determine the "
+"affected items in the campaign."
msgstr ""
-"يمثل حملة ترويجية للمنتجات ذات الخصم. تُستخدم هذه الفئة لتعريف وإدارة "
-"الحملات الترويجية التي تقدم خصمًا على أساس النسبة المئوية للمنتجات. تتضمن "
-"الفئة سمات لتعيين معدل الخصم وتوفير تفاصيل حول العرض الترويجي وربطه "
-"بالمنتجات القابلة للتطبيق. تتكامل مع كتالوج المنتجات لتحديد العناصر المتأثرة"
-" في الحملة."
+"يمثل حملة ترويجية للمنتجات ذات الخصم. تُستخدم هذه الفئة لتعريف وإدارة الحملات "
+"الترويجية التي تقدم خصمًا على أساس النسبة المئوية للمنتجات. تتضمن الفئة سمات "
+"لتعيين معدل الخصم وتوفير تفاصيل حول العرض الترويجي وربطه بالمنتجات القابلة "
+"للتطبيق. تتكامل مع كتالوج المنتجات لتحديد العناصر المتأثرة في الحملة."
-#: engine/core/models.py:880
+#: engine/core/models.py:903
msgid "percentage discount for the selected products"
msgstr "النسبة المئوية للخصم على المنتجات المختارة"
-#: engine/core/models.py:881
+#: engine/core/models.py:904
msgid "discount percentage"
msgstr "نسبة الخصم"
-#: engine/core/models.py:886
+#: engine/core/models.py:909
msgid "provide a unique name for this promotion"
msgstr "تقديم اسم فريد لهذا العرض الترويجي"
-#: engine/core/models.py:887
+#: engine/core/models.py:910
msgid "promotion name"
msgstr "اسم الترقية"
-#: engine/core/models.py:893
+#: engine/core/models.py:916
msgid "promotion description"
msgstr "وصف الترقية"
-#: engine/core/models.py:898
+#: engine/core/models.py:921
msgid "select which products are included in this promotion"
msgstr "حدد المنتجات المشمولة في هذا العرض الترويجي"
-#: engine/core/models.py:899
+#: engine/core/models.py:922
msgid "included products"
msgstr "المنتجات المشمولة"
-#: engine/core/models.py:903
+#: engine/core/models.py:926
msgid "promotion"
msgstr "الترقية"
-#: engine/core/models.py:914
+#: engine/core/models.py:937
msgid ""
"Represents a user's wishlist for storing and managing desired products. The "
"class provides functionality to manage a collection of products, supporting "
"operations such as adding and removing products, as well as supporting "
"operations for adding and removing multiple products at once."
msgstr ""
-"يمثل قائمة أمنيات المستخدم لتخزين وإدارة المنتجات المطلوبة. توفر الفئة وظائف"
-" لإدارة مجموعة من المنتجات، وتدعم عمليات مثل إضافة المنتجات وإزالتها، "
+"يمثل قائمة أمنيات المستخدم لتخزين وإدارة المنتجات المطلوبة. توفر الفئة وظائف "
+"لإدارة مجموعة من المنتجات، وتدعم عمليات مثل إضافة المنتجات وإزالتها، "
"بالإضافة إلى دعم عمليات إضافة وإزالة منتجات متعددة في وقت واحد."
-#: engine/core/models.py:926
+#: engine/core/models.py:949
msgid "products that the user has marked as wanted"
msgstr "المنتجات التي حددها المستخدم على أنها مطلوبة"
-#: engine/core/models.py:934
+#: engine/core/models.py:957
msgid "user who owns this wishlist"
msgstr "المستخدم الذي يمتلك قائمة الرغبات هذه"
-#: engine/core/models.py:935
+#: engine/core/models.py:958
msgid "wishlist owner"
msgstr "مالك قائمة الرغبات"
-#: engine/core/models.py:943
+#: engine/core/models.py:966
msgid "wishlist"
msgstr "قائمة الرغبات"
-#: engine/core/models.py:985
+#: engine/core/models.py:1008
msgid ""
"Represents a documentary record tied to a product. This class is used to "
"store information about documentaries related to specific products, "
"including file uploads and their metadata. It contains methods and "
"properties to handle the file type and storage path for the documentary "
-"files. It extends functionality from specific mixins and provides additional"
-" custom features."
+"files. It extends functionality from specific mixins and provides additional "
+"custom features."
msgstr ""
-"يمثل سجل وثائقي مرتبط بمنتج ما. تُستخدم هذه الفئة لتخزين معلومات حول الأفلام"
-" الوثائقية المرتبطة بمنتجات محددة، بما في ذلك تحميلات الملفات وبياناتها "
+"يمثل سجل وثائقي مرتبط بمنتج ما. تُستخدم هذه الفئة لتخزين معلومات حول الأفلام "
+"الوثائقية المرتبطة بمنتجات محددة، بما في ذلك تحميلات الملفات وبياناتها "
"الوصفية. يحتوي على أساليب وخصائص للتعامل مع نوع الملف ومسار التخزين للملفات "
"الوثائقية. وهو يوسع الوظائف من مزيج معين ويوفر ميزات مخصصة إضافية."
-#: engine/core/models.py:998
+#: engine/core/models.py:1023
msgid "documentary"
msgstr "فيلم وثائقي"
-#: engine/core/models.py:999
+#: engine/core/models.py:1024
msgid "documentaries"
msgstr "الأفلام الوثائقية"
-#: engine/core/models.py:1009
+#: engine/core/models.py:1034
msgid "unresolved"
msgstr "لم يتم حلها"
-#: engine/core/models.py:1014
+#: engine/core/models.py:1039
msgid ""
-"Represents an address entity that includes location details and associations"
-" with a user. Provides functionality for geographic and address data "
-"storage, as well as integration with geocoding services. This class is "
-"designed to store detailed address information including components like "
-"street, city, region, country, and geolocation (longitude and latitude). It "
-"supports integration with geocoding APIs, enabling the storage of raw API "
-"responses for further processing or inspection. The class also allows "
-"associating an address with a user, facilitating personalized data handling."
+"Represents an address entity that includes location details and associations "
+"with a user. Provides functionality for geographic and address data storage, "
+"as well as integration with geocoding services. This class is designed to "
+"store detailed address information including components like street, city, "
+"region, country, and geolocation (longitude and latitude). It supports "
+"integration with geocoding APIs, enabling the storage of raw API responses "
+"for further processing or inspection. The class also allows associating an "
+"address with a user, facilitating personalized data handling."
msgstr ""
"يمثل كيان عنوان يتضمن تفاصيل الموقع والارتباطات مع المستخدم. يوفر وظائف "
"لتخزين البيانات الجغرافية وبيانات العنوان، بالإضافة إلى التكامل مع خدمات "
-"الترميز الجغرافي. صُممت هذه الفئة لتخزين معلومات العنوان التفصيلية بما في "
-"ذلك مكونات مثل الشارع والمدينة والمنطقة والبلد والموقع الجغرافي (خطوط الطول "
+"الترميز الجغرافي. صُممت هذه الفئة لتخزين معلومات العنوان التفصيلية بما في ذلك "
+"مكونات مثل الشارع والمدينة والمنطقة والبلد والموقع الجغرافي (خطوط الطول "
"والعرض). وهو يدعم التكامل مع واجهات برمجة التطبيقات للترميز الجغرافي، مما "
"يتيح تخزين استجابات واجهة برمجة التطبيقات الخام لمزيد من المعالجة أو الفحص. "
"تسمح الفئة أيضًا بربط عنوان مع مستخدم، مما يسهل التعامل مع البيانات الشخصية."
-#: engine/core/models.py:1029
+#: engine/core/models.py:1054
msgid "address line for the customer"
msgstr "سطر العنوان للعميل"
-#: engine/core/models.py:1030
+#: engine/core/models.py:1055
msgid "address line"
msgstr "سطر العنوان"
-#: engine/core/models.py:1032
+#: engine/core/models.py:1057
msgid "street"
msgstr "الشارع"
-#: engine/core/models.py:1033
+#: engine/core/models.py:1058
msgid "district"
msgstr "المنطقة"
-#: engine/core/models.py:1034
+#: engine/core/models.py:1059
msgid "city"
msgstr "المدينة"
-#: engine/core/models.py:1035
+#: engine/core/models.py:1060
msgid "region"
msgstr "المنطقة"
-#: engine/core/models.py:1036
+#: engine/core/models.py:1061
msgid "postal code"
msgstr "الرمز البريدي"
-#: engine/core/models.py:1037
+#: engine/core/models.py:1062
msgid "country"
msgstr "البلد"
-#: engine/core/models.py:1044
+#: engine/core/models.py:1069
msgid "geolocation point: (longitude, latitude)"
msgstr "نقطة تحديد الموقع الجغرافي(خط الطول، خط العرض)"
-#: engine/core/models.py:1047
+#: engine/core/models.py:1075
msgid "full JSON response from geocoder for this address"
msgstr "استجابة JSON كاملة من أداة التشفير الجغرافي لهذا العنوان"
-#: engine/core/models.py:1052
+#: engine/core/models.py:1081
msgid "stored JSON response from the geocoding service"
msgstr "استجابة JSON مخزّنة من خدمة الترميز الجغرافي"
-#: engine/core/models.py:1060
+#: engine/core/models.py:1091
msgid "address"
msgstr "العنوان"
-#: engine/core/models.py:1061
+#: engine/core/models.py:1092
msgid "addresses"
msgstr "العناوين"
-#: engine/core/models.py:1073
+#: engine/core/models.py:1104
msgid ""
"Represents a promotional code that can be used for discounts, managing its "
"validity, type of discount, and application. The PromoCode class stores "
@@ -2229,100 +2236,99 @@ msgid ""
"any), and status of its usage. It includes functionality to validate and "
"apply the promo code to an order while ensuring constraints are met."
msgstr ""
-"يمثل الرمز الترويجي الذي يمكن استخدامه للحصول على خصومات وإدارة صلاحيته ونوع"
-" الخصم والتطبيق. تقوم فئة PromoCode بتخزين تفاصيل حول الرمز الترويجي، بما في"
-" ذلك معرفه الفريد، وخصائص الخصم (المبلغ أو النسبة المئوية)، وفترة الصلاحية، "
+"يمثل الرمز الترويجي الذي يمكن استخدامه للحصول على خصومات وإدارة صلاحيته ونوع "
+"الخصم والتطبيق. تقوم فئة PromoCode بتخزين تفاصيل حول الرمز الترويجي، بما في "
+"ذلك معرفه الفريد، وخصائص الخصم (المبلغ أو النسبة المئوية)، وفترة الصلاحية، "
"والمستخدم المرتبط به (إن وجد)، وحالة استخدامه. ويتضمن وظيفة للتحقق من صحة "
"الرمز الترويجي وتطبيقه على الطلب مع ضمان استيفاء القيود."
-#: engine/core/models.py:1087
+#: engine/core/models.py:1118
msgid "unique code used by a user to redeem a discount"
msgstr "الرمز الفريد الذي يستخدمه المستخدم لاسترداد قيمة الخصم"
-#: engine/core/models.py:1088
+#: engine/core/models.py:1119
msgid "promo code identifier"
msgstr "معرّف الرمز الترويجي"
-#: engine/core/models.py:1095
+#: engine/core/models.py:1126
msgid "fixed discount amount applied if percent is not used"
msgstr "مبلغ الخصم الثابت المطبق في حالة عدم استخدام النسبة المئوية"
-#: engine/core/models.py:1096
+#: engine/core/models.py:1127
msgid "fixed discount amount"
msgstr "مبلغ الخصم الثابت"
-#: engine/core/models.py:1102
+#: engine/core/models.py:1133
msgid "percentage discount applied if fixed amount is not used"
msgstr "النسبة المئوية للخصم المطبق في حالة عدم استخدام مبلغ ثابت"
-#: engine/core/models.py:1103
+#: engine/core/models.py:1134
msgid "percentage discount"
msgstr "النسبة المئوية للخصم"
-#: engine/core/models.py:1108
+#: engine/core/models.py:1139
msgid "timestamp when the promocode expires"
msgstr "الطابع الزمني عند انتهاء صلاحية الرمز الترويجي"
-#: engine/core/models.py:1109
+#: engine/core/models.py:1140
msgid "end validity time"
msgstr "وقت انتهاء الصلاحية"
-#: engine/core/models.py:1114
+#: engine/core/models.py:1145
msgid "timestamp from which this promocode is valid"
msgstr "الطابع الزمني الذي يكون هذا الرمز الترويجي صالحاً منه"
-#: engine/core/models.py:1115
+#: engine/core/models.py:1146
msgid "start validity time"
msgstr "وقت بدء الصلاحية"
-#: engine/core/models.py:1120
+#: engine/core/models.py:1151
msgid "timestamp when the promocode was used, blank if not used yet"
-msgstr ""
-"الطابع الزمني عند استخدام الرمز الترويجي، فارغ إذا لم يتم استخدامه بعد"
+msgstr "الطابع الزمني عند استخدام الرمز الترويجي، فارغ إذا لم يتم استخدامه بعد"
-#: engine/core/models.py:1121
+#: engine/core/models.py:1152
msgid "usage timestamp"
msgstr "الطابع الزمني للاستخدام"
-#: engine/core/models.py:1126
+#: engine/core/models.py:1157
msgid "user assigned to this promocode if applicable"
msgstr "المستخدم المعين لهذا الرمز الترويجي إن أمكن"
-#: engine/core/models.py:1127
+#: engine/core/models.py:1158
msgid "assigned user"
msgstr "المستخدم المعين"
-#: engine/core/models.py:1134
+#: engine/core/models.py:1165
msgid "promo code"
msgstr "الرمز الترويجي"
-#: engine/core/models.py:1135
+#: engine/core/models.py:1166
msgid "promo codes"
msgstr "الرموز الترويجية"
-#: engine/core/models.py:1150
+#: engine/core/models.py:1182
msgid ""
"only one type of discount should be defined (amount or percent), but not "
"both or neither."
msgstr ""
-"يجب تحديد نوع واحد فقط من الخصم (المبلغ أو النسبة المئوية)، وليس كلا النوعين"
-" أو لا هذا ولا ذاك."
+"يجب تحديد نوع واحد فقط من الخصم (المبلغ أو النسبة المئوية)، وليس كلا النوعين "
+"أو لا هذا ولا ذاك."
-#: engine/core/models.py:1171
+#: engine/core/models.py:1204
msgid "promocode already used"
msgstr "تم استخدام الرمز الترويجي بالفعل"
-#: engine/core/models.py:1187
+#: engine/core/models.py:1226
#, python-brace-format
msgid "invalid discount type for promocode {self.uuid}"
msgstr "نوع الخصم غير صالح للرمز الترويجي {self.uuid}"
-#: engine/core/models.py:1196
+#: engine/core/models.py:1235
msgid ""
"Represents an order placed by a user. This class models an order within the "
"application, including its various attributes such as billing and shipping "
-"information, status, associated user, notifications, and related operations."
-" Orders can have associated products, promotions can be applied, addresses "
+"information, status, associated user, notifications, and related operations. "
+"Orders can have associated products, promotions can be applied, addresses "
"set, and shipping or billing details updated. Equally, functionality "
"supports managing the products in the order lifecycle."
msgstr ""
@@ -2332,150 +2338,150 @@ msgstr ""
"مرتبطة، ويمكن تطبيق العروض الترويجية، وتعيين العناوين، وتحديث تفاصيل الشحن "
"أو الفوترة. وبالمثل، تدعم الوظيفة إدارة المنتجات في دورة حياة الطلب."
-#: engine/core/models.py:1213
+#: engine/core/models.py:1252
msgid "the billing address used for this order"
msgstr "عنوان إرسال الفواتير المستخدم لهذا الطلب"
-#: engine/core/models.py:1221
+#: engine/core/models.py:1260
msgid "optional promo code applied to this order"
msgstr "الرمز الترويجي الاختياري المطبق على هذا الطلب"
-#: engine/core/models.py:1222
+#: engine/core/models.py:1261
msgid "applied promo code"
msgstr "الرمز الترويجي المطبق"
-#: engine/core/models.py:1230
+#: engine/core/models.py:1269
msgid "the shipping address used for this order"
msgstr "عنوان الشحن المستخدم لهذا الطلب"
-#: engine/core/models.py:1231
+#: engine/core/models.py:1270
msgid "shipping address"
msgstr "عنوان الشحن"
-#: engine/core/models.py:1237
+#: engine/core/models.py:1276
msgid "current status of the order in its lifecycle"
msgstr "الحالة الحالية للطلب في دورة حياته"
-#: engine/core/models.py:1238
+#: engine/core/models.py:1277
msgid "order status"
msgstr "حالة الطلب"
-#: engine/core/models.py:1243 engine/core/models.py:1769
+#: engine/core/models.py:1282 engine/core/models.py:1881
msgid "json structure of notifications to display to users"
msgstr ""
"بنية JSON للإشعارات التي سيتم عرضها للمستخدمين، في واجهة مستخدم المشرف، يتم "
"استخدام عرض الجدول"
-#: engine/core/models.py:1249
+#: engine/core/models.py:1288
msgid "json representation of order attributes for this order"
msgstr "تمثيل JSON لسمات الطلب لهذا الطلب"
-#: engine/core/models.py:1255
+#: engine/core/models.py:1294
msgid "the user who placed the order"
msgstr "المستخدم الذي قدم الطلب"
-#: engine/core/models.py:1256
+#: engine/core/models.py:1295
msgid "user"
msgstr "المستخدم"
-#: engine/core/models.py:1262
+#: engine/core/models.py:1301
msgid "the timestamp when the order was finalized"
msgstr "الطابع الزمني عند الانتهاء من الطلب"
-#: engine/core/models.py:1263
+#: engine/core/models.py:1302
msgid "buy time"
msgstr "وقت الشراء"
-#: engine/core/models.py:1270
+#: engine/core/models.py:1309
msgid "a human-readable identifier for the order"
msgstr "معرّف يمكن قراءته بواسطة البشر للطلب"
-#: engine/core/models.py:1271
+#: engine/core/models.py:1310
msgid "human readable id"
msgstr "معرّف يمكن قراءته من قبل البشر"
-#: engine/core/models.py:1277
+#: engine/core/models.py:1316
msgid "order"
msgstr "الطلب"
-#: engine/core/models.py:1319
+#: engine/core/models.py:1363
msgid "a user must have only one pending order at a time"
msgstr "يجب أن يكون لدى المستخدم طلب واحد فقط معلق في كل مرة!"
-#: engine/core/models.py:1351
+#: engine/core/models.py:1396
msgid "you cannot add products to an order that is not a pending one"
msgstr "لا يمكنك إضافة منتجات إلى طلب غير معلق إلى طلب غير معلق"
-#: engine/core/models.py:1356
+#: engine/core/models.py:1402
msgid "you cannot add inactive products to order"
msgstr "لا يمكنك إضافة منتجات غير نشطة للطلب"
-#: engine/core/models.py:1373
+#: engine/core/models.py:1424
msgid "you cannot add more products than available in stock"
msgstr "لا يمكنك إضافة منتجات أكثر من المتوفرة في المخزون"
-#: engine/core/models.py:1395 engine/core/models.py:1420
-#: engine/core/models.py:1428
+#: engine/core/models.py:1448 engine/core/models.py:1477
+#: engine/core/models.py:1487
msgid "you cannot remove products from an order that is not a pending one"
msgstr "لا يمكنك إزالة المنتجات من طلب غير معلق من طلب غير معلق"
-#: engine/core/models.py:1416
+#: engine/core/models.py:1472
#, python-brace-format
msgid "{name} does not exist with query <{query}>"
msgstr "{name} غير موجود مع الاستعلام <{query}>!"
-#: engine/core/models.py:1448
+#: engine/core/models.py:1511
msgid "promocode does not exist"
msgstr "الرمز الترويجي غير موجود"
-#: engine/core/models.py:1454
+#: engine/core/models.py:1526
msgid "you can only buy physical products with shipping address specified"
msgstr "يمكنك فقط شراء المنتجات المادية مع تحديد عنوان الشحن فقط!"
-#: engine/core/models.py:1473
+#: engine/core/models.py:1547
msgid "address does not exist"
msgstr "العنوان غير موجود"
-#: engine/core/models.py:1494 engine/core/models.py:1563
+#: engine/core/models.py:1569 engine/core/models.py:1648
msgid "you can not buy at this moment, please try again in a few minutes"
msgstr "لا يمكنك الشراء في هذه اللحظة، يرجى المحاولة مرة أخرى بعد بضع دقائق."
-#: engine/core/models.py:1497 engine/core/models.py:1559
+#: engine/core/models.py:1575 engine/core/models.py:1641
msgid "invalid force value"
msgstr "قيمة القوة غير صالحة"
-#: engine/core/models.py:1503 engine/core/models.py:1566
+#: engine/core/models.py:1581 engine/core/models.py:1652
msgid "you cannot purchase an empty order!"
msgstr "لا يمكنك شراء طلبية فارغة!"
-#: engine/core/models.py:1522
+#: engine/core/models.py:1602
msgid "you cannot buy an order without a user"
msgstr "لا يمكنك شراء طلب بدون مستخدم!"
-#: engine/core/models.py:1536
+#: engine/core/models.py:1616
msgid "a user without a balance cannot buy with balance"
msgstr "المستخدم بدون رصيد لا يمكنه الشراء بالرصيد!"
-#: engine/core/models.py:1541
+#: engine/core/models.py:1622
msgid "insufficient funds to complete the order"
msgstr "عدم كفاية الأموال لإكمال الطلب"
-#: engine/core/models.py:1575
+#: engine/core/models.py:1663
msgid ""
"you cannot buy without registration, please provide the following "
"information: customer name, customer email, customer phone number"
msgstr ""
-"لا يمكنك الشراء بدون تسجيل، يرجى تقديم المعلومات التالية: اسم العميل، البريد"
-" الإلكتروني للعميل، رقم هاتف العميل"
+"لا يمكنك الشراء بدون تسجيل، يرجى تقديم المعلومات التالية: اسم العميل، البريد "
+"الإلكتروني للعميل، رقم هاتف العميل"
-#: engine/core/models.py:1584
+#: engine/core/models.py:1674
#, python-brace-format
msgid ""
"invalid payment method: {payment_method} from {available_payment_methods}"
msgstr ""
"طريقة الدفع غير صالحة: {payment_method} من {available_payment_methods}!"
-#: engine/core/models.py:1699
+#: engine/core/models.py:1805
msgid ""
"Manages user feedback for products. This class is designed to capture and "
"store user feedback for specific products that they have purchased. It "
@@ -2488,32 +2494,31 @@ msgstr ""
"المستخدم، ومرجع إلى المنتج ذي الصلة في الطلب، وتقييم معين من قبل المستخدم. "
"يستخدم الفصل حقول قاعدة البيانات لنمذجة وإدارة بيانات الملاحظات بشكل فعال."
-#: engine/core/models.py:1711
+#: engine/core/models.py:1817
msgid "user-provided comments about their experience with the product"
msgstr "التعليقات المقدمة من المستخدمين حول تجربتهم مع المنتج"
-#: engine/core/models.py:1712
+#: engine/core/models.py:1818
msgid "feedback comments"
msgstr "تعليقات على الملاحظات"
-#: engine/core/models.py:1719
-msgid ""
-"references the specific product in an order that this feedback is about"
+#: engine/core/models.py:1826
+msgid "references the specific product in an order that this feedback is about"
msgstr "الإشارة إلى المنتج المحدد في الطلب الذي تدور حوله هذه الملاحظات"
-#: engine/core/models.py:1720
+#: engine/core/models.py:1828
msgid "related order product"
msgstr "منتجات الطلبات ذات الصلة"
-#: engine/core/models.py:1725
+#: engine/core/models.py:1833
msgid "user-assigned rating for the product"
msgstr "التصنيف المعين من قبل المستخدم للمنتج"
-#: engine/core/models.py:1726
+#: engine/core/models.py:1834
msgid "product rating"
msgstr "تصنيف المنتج"
-#: engine/core/models.py:1742
+#: engine/core/models.py:1854
msgid ""
"Represents products associated with orders and their attributes. The "
"OrderProduct model maintains information about a product that is part of an "
@@ -2528,135 +2533,135 @@ msgstr ""
"يمثل المنتجات المرتبطة بالطلبات وسماتها. يحتفظ نموذج OrderProduct بمعلومات "
"حول المنتج الذي هو جزء من الطلب، بما في ذلك تفاصيل مثل سعر الشراء والكمية "
"وسمات المنتج وحالته. يدير الإشعارات للمستخدم والمسؤولين ويتعامل مع عمليات "
-"مثل إرجاع رصيد المنتج أو إضافة ملاحظات. يوفر هذا النموذج أيضًا أساليب وخصائص"
-" تدعم منطق العمل، مثل حساب السعر الإجمالي أو إنشاء عنوان URL للتنزيل "
-"للمنتجات الرقمية. يتكامل النموذج مع نموذجي الطلب والمنتج ويخزن مرجعًا لهما."
+"مثل إرجاع رصيد المنتج أو إضافة ملاحظات. يوفر هذا النموذج أيضًا أساليب وخصائص "
+"تدعم منطق العمل، مثل حساب السعر الإجمالي أو إنشاء عنوان URL للتنزيل للمنتجات "
+"الرقمية. يتكامل النموذج مع نموذجي الطلب والمنتج ويخزن مرجعًا لهما."
-#: engine/core/models.py:1757
+#: engine/core/models.py:1869
msgid "the price paid by the customer for this product at purchase time"
msgstr "السعر الذي دفعه العميل لهذا المنتج وقت الشراء"
-#: engine/core/models.py:1758
+#: engine/core/models.py:1870
msgid "purchase price at order time"
msgstr "سعر الشراء وقت الطلب"
-#: engine/core/models.py:1763
+#: engine/core/models.py:1875
msgid "internal comments for admins about this ordered product"
msgstr "تعليقات داخلية للمسؤولين حول هذا المنتج المطلوب"
-#: engine/core/models.py:1764
+#: engine/core/models.py:1876
msgid "internal comments"
msgstr "التعليقات الداخلية"
-#: engine/core/models.py:1770
+#: engine/core/models.py:1882
msgid "user notifications"
msgstr "إشعارات المستخدم"
-#: engine/core/models.py:1775
+#: engine/core/models.py:1887
msgid "json representation of this item's attributes"
msgstr "تمثيل JSON لسمات هذا العنصر"
-#: engine/core/models.py:1776
+#: engine/core/models.py:1888
msgid "ordered product attributes"
msgstr "سمات المنتج المطلوبة"
-#: engine/core/models.py:1781
+#: engine/core/models.py:1893
msgid "reference to the parent order that contains this product"
msgstr "الإشارة إلى الطلب الأصلي الذي يحتوي على هذا المنتج"
-#: engine/core/models.py:1782
+#: engine/core/models.py:1894
msgid "parent order"
msgstr "ترتيب الوالدين"
-#: engine/core/models.py:1791
+#: engine/core/models.py:1903
msgid "the specific product associated with this order line"
msgstr "المنتج المحدد المرتبط بخط الطلب هذا"
-#: engine/core/models.py:1798
+#: engine/core/models.py:1910
msgid "quantity of this specific product in the order"
msgstr "كمية هذا المنتج المحدد في الطلب"
-#: engine/core/models.py:1799
+#: engine/core/models.py:1911
msgid "product quantity"
msgstr "كمية المنتج"
-#: engine/core/models.py:1806
+#: engine/core/models.py:1918
msgid "current status of this product in the order"
msgstr "الحالة الحالية لهذا المنتج بالترتيب"
-#: engine/core/models.py:1807
+#: engine/core/models.py:1919
msgid "product line status"
msgstr "حالة خط الإنتاج"
-#: engine/core/models.py:1872
+#: engine/core/models.py:1986
msgid "order product must have an order"
msgstr "يجب أن يكون لـ Orderproduct طلب مرتبط به!"
-#: engine/core/models.py:1874
+#: engine/core/models.py:1988
#, python-brace-format
msgid "wrong action specified for feedback: {action}"
msgstr "تم تحديد إجراء خاطئ للتغذية الراجعة: {action}!"
-#: engine/core/models.py:1888
+#: engine/core/models.py:2005
msgid "you cannot feedback an order which is not received"
msgstr "لا يمكنك التعليق على طلب لم يتم استلامه"
-#: engine/core/models.py:1894
+#: engine/core/models.py:2014
msgid "name"
msgstr "الاسم"
-#: engine/core/models.py:1895
+#: engine/core/models.py:2016
msgid "URL of the integration"
msgstr "رابط التكامل"
-#: engine/core/models.py:1896
+#: engine/core/models.py:2019
msgid "authentication credentials"
msgstr "بيانات اعتماد المصادقة"
-#: engine/core/models.py:1918
+#: engine/core/models.py:2042
msgid "you can only have one default CRM provider"
msgstr "يمكن أن يكون لديك موفر CRM افتراضي واحد فقط"
-#: engine/core/models.py:1928
+#: engine/core/models.py:2052
msgid "CRM"
msgstr "إدارة علاقات العملاء"
-#: engine/core/models.py:1929
+#: engine/core/models.py:2053
msgid "CRMs"
msgstr "إدارة علاقات العملاء"
-#: engine/core/models.py:1941
+#: engine/core/models.py:2069
msgid "order CRM link"
msgstr "رابط إدارة علاقات العملاء الخاصة بالطلب"
-#: engine/core/models.py:1942
+#: engine/core/models.py:2070
msgid "orders CRM links"
msgstr "روابط إدارة علاقات العملاء الخاصة بالطلبات"
-#: engine/core/models.py:1947
+#: engine/core/models.py:2075
msgid ""
"Represents the downloading functionality for digital assets associated with "
"orders. The DigitalAssetDownload class provides the ability to manage and "
"access downloads related to order products. It maintains information about "
-"the associated order product, the number of downloads, and whether the asset"
-" is publicly visible. It includes a method to generate a URL for downloading"
-" the asset when the associated order is in a completed status."
+"the associated order product, the number of downloads, and whether the asset "
+"is publicly visible. It includes a method to generate a URL for downloading "
+"the asset when the associated order is in a completed status."
msgstr ""
"يمثل وظيفة التنزيل للأصول الرقمية المرتبطة بالطلبات. توفر فئة "
"DigitalAssetDownload القدرة على إدارة التنزيلات المتعلقة بمنتجات الطلبات "
"والوصول إليها. وتحتفظ بمعلومات حول منتج الطلب المرتبط، وعدد التنزيلات، وما "
-"إذا كان الأصل مرئيًا للعامة. وتتضمن طريقة لإنشاء عنوان URL لتنزيل الأصل "
-"عندما يكون الطلب المرتبط في حالة مكتملة."
+"إذا كان الأصل مرئيًا للعامة. وتتضمن طريقة لإنشاء عنوان URL لتنزيل الأصل عندما "
+"يكون الطلب المرتبط في حالة مكتملة."
-#: engine/core/models.py:1961
+#: engine/core/models.py:2091
msgid "download"
msgstr "تنزيل"
-#: engine/core/models.py:1962
+#: engine/core/models.py:2092
msgid "downloads"
msgstr "التنزيلات"
-#: engine/core/serializers/utility.py:89
+#: engine/core/serializers/utility.py:91
msgid ""
"you must provide a comment, rating, and order product uuid to add feedback."
msgstr "يجب عليك تقديم تعليق، وتقييم، وطلب المنتج uuid لإضافة ملاحظاتك."
@@ -2851,11 +2856,12 @@ msgstr "مرحباً %(order.user.first_name)s,"
#, python-format
msgid ""
"thank you for your order #%(order.pk)s! we are pleased to inform you that\n"
-" we have taken your order into work. below are the details of your\n"
+" we have taken your order into work. below are "
+"the details of your\n"
" order:"
msgstr ""
-"شكرًا لك على طلبك #%(order.pk)s! يسعدنا إبلاغك بأننا قد أخذنا طلبك في العمل."
-" فيما يلي تفاصيل طلبك:"
+"شكرًا لك على طلبك #%(order.pk)s! يسعدنا إبلاغك بأننا قد أخذنا طلبك في العمل. "
+"فيما يلي تفاصيل طلبك:"
#: engine/core/templates/digital_order_created_email.html:112
#: engine/core/templates/digital_order_delivered_email.html:110
@@ -2962,7 +2968,8 @@ msgstr ""
#: engine/core/templates/shipped_order_created_email.html:101
#: engine/core/templates/shipped_order_delivered_email.html:101
msgid ""
-"thank you for your order! we are pleased to confirm your purchase. below are\n"
+"thank you for your order! we are pleased to confirm your purchase. below "
+"are\n"
" the details of your order:"
msgstr "شكرًا لك على طلبك! يسعدنا تأكيد طلبك. فيما يلي تفاصيل طلبك:"
@@ -2991,11 +2998,11 @@ msgstr ""
"جميع الحقوق\n"
" محفوظة"
-#: engine/core/utils/caching.py:44
+#: engine/core/utils/caching.py:48
msgid "both data and timeout are required"
msgstr "كل من البيانات والمهلة مطلوبة"
-#: engine/core/utils/caching.py:46
+#: engine/core/utils/caching.py:51
msgid "invalid timeout value, it must be between 0 and 216000 seconds"
msgstr "قيمة المهلة غير صالحة، يجب أن تكون بين 0 و216000 ثانية"
@@ -3004,17 +3011,17 @@ msgstr "قيمة المهلة غير صالحة، يجب أن تكون بين 0
msgid "{settings.PROJECT_NAME} | contact us initiated"
msgstr "{settings.PROJECT_NAME} | بادر بالاتصال بنا"
-#: engine/core/utils/emailing.py:73
+#: engine/core/utils/emailing.py:81
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order confirmation"
msgstr "{settings.PROJECT_NAME} | تأكيد الطلب"
-#: engine/core/utils/emailing.py:105
+#: engine/core/utils/emailing.py:115
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order delivered"
msgstr "{settings.PROJECT_NAME} | طلبية تم تسليمها"
-#: engine/core/utils/emailing.py:188
+#: engine/core/utils/emailing.py:203
#, python-brace-format
msgid "{settings.PROJECT_NAME} | promocode granted"
msgstr "{settings.PROJECT_NAME} |الرمز الترويجي الممنوح"
@@ -3027,12 +3034,12 @@ msgstr "ليس لديك إذن لتنفيذ هذا الإجراء."
msgid "NOMINATIM_URL must be configured."
msgstr "يجب تكوين معلمة NOMINATIM_URL!"
-#: engine/core/validators.py:19
+#: engine/core/validators.py:21
#, python-brace-format
msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels"
msgstr "يجب ألا تتجاوز أبعاد الصورة w{max_width} x h{max_height} بكسل!"
-#: engine/core/views.py:91
+#: engine/core/views.py:105
msgid ""
"Handles the request for the sitemap index and returns an XML response. It "
"ensures the response includes the appropriate content type header for XML."
@@ -3040,7 +3047,7 @@ msgstr ""
"يتعامل مع طلب فهرس خريطة الموقع ويعيد استجابة XML. يضمن أن تتضمن الاستجابة "
"رأس نوع المحتوى المناسب ل XML."
-#: engine/core/views.py:106
+#: engine/core/views.py:120
msgid ""
"Handles the detailed view response for a sitemap. This function processes "
"the request, fetches the appropriate sitemap detail response, and sets the "
@@ -3049,16 +3056,16 @@ msgstr ""
"يعالج استجابة العرض التفصيلي لخريطة الموقع. تقوم هذه الدالة بمعالجة الطلب، "
"وجلب استجابة تفاصيل خريطة الموقع المناسبة، وتعيين رأس نوع المحتوى ل XML."
-#: engine/core/views.py:141
+#: engine/core/views.py:156
msgid ""
"Returns a list of supported languages and their corresponding information."
msgstr "إرجاع قائمة باللغات المدعومة والمعلومات الخاصة بها."
-#: engine/core/views.py:173
+#: engine/core/views.py:183
msgid "Returns the parameters of the website as a JSON object."
msgstr "إرجاع معلمات الموقع الإلكتروني ككائن JSON."
-#: engine/core/views.py:192
+#: engine/core/views.py:199
msgid ""
"Handles cache operations such as reading and setting cache data with a "
"specified key and timeout."
@@ -3066,11 +3073,11 @@ msgstr ""
"يعالج عمليات ذاكرة التخزين المؤقت مثل قراءة بيانات ذاكرة التخزين المؤقت "
"وتعيينها بمفتاح ومهلة محددة."
-#: engine/core/views.py:219
+#: engine/core/views.py:221
msgid "Handles `contact us` form submissions."
msgstr "يتعامل مع عمليات إرسال نموذج \"اتصل بنا\"."
-#: engine/core/views.py:240
+#: engine/core/views.py:237
msgid ""
"Handles requests for processing and validating URLs from incoming POST "
"requests."
@@ -3078,78 +3085,86 @@ msgstr ""
"يعالج طلبات معالجة عناوين URL والتحقق من صحة عناوين URL من طلبات POST "
"الواردة."
-#: engine/core/views.py:280
+#: engine/core/views.py:274
msgid "Handles global search queries."
msgstr "يتعامل مع استعلامات البحث العامة."
-#: engine/core/views.py:295
+#: engine/core/views.py:290
msgid "Handles the logic of buying as a business without registration."
msgstr "يتعامل بمنطق الشراء كشركة تجارية دون تسجيل."
-#: engine/core/views.py:332
+#: engine/core/views.py:338
msgid ""
"Handles the downloading of a digital asset associated with an order.\n"
-"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the digital asset file located in the "
+"storage directory of the project. If the file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
msgstr ""
"يتعامل مع تنزيل الأصل الرقمي المرتبط بأمر ما.\n"
-"تحاول هذه الدالة خدمة ملف الأصل الرقمي الموجود في دليل التخزين الخاص بالمشروع. إذا لم يتم العثور على الملف، يتم رفع خطأ HTTP 404 للإشارة إلى أن المورد غير متوفر."
+"تحاول هذه الدالة خدمة ملف الأصل الرقمي الموجود في دليل التخزين الخاص "
+"بالمشروع. إذا لم يتم العثور على الملف، يتم رفع خطأ HTTP 404 للإشارة إلى أن "
+"المورد غير متوفر."
-#: engine/core/views.py:343
+#: engine/core/views.py:349
msgid "order_product_uuid is required"
msgstr "الطلب_برو_منتج_uuid مطلوب"
-#: engine/core/views.py:350
+#: engine/core/views.py:356
msgid "order product does not exist"
msgstr "طلب المنتج غير موجود"
-#: engine/core/views.py:353
+#: engine/core/views.py:359
msgid "you can only download the digital asset once"
msgstr "يمكنك تنزيل الأصل الرقمي مرة واحدة فقط"
-#: engine/core/views.py:356
+#: engine/core/views.py:363
msgid "the order must be paid before downloading the digital asset"
msgstr "يجب دفع الطلب قبل تنزيل الأصل الرقمي"
-#: engine/core/views.py:362
+#: engine/core/views.py:370
msgid "the order product does not have a product"
msgstr "لا يحتوي منتج الطلب على منتج"
-#: engine/core/views.py:399
+#: engine/core/views.py:414
msgid "favicon not found"
msgstr "الرمز المفضل غير موجود"
-#: engine/core/views.py:404
+#: engine/core/views.py:419
msgid ""
"Handles requests for the favicon of a website.\n"
-"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the favicon file located in the static "
+"directory of the project. If the favicon file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
msgstr ""
"يتعامل مع طلبات الرمز المفضل لموقع ويب.\n"
-"تحاول هذه الدالة عرض ملف الأيقونة المفضلة الموجود في الدليل الثابت للمشروع. إذا لم يتم العثور على ملف الأيقونة المفضلة، يتم رفع خطأ HTTP 404 للإشارة إلى أن المورد غير متوفر."
+"تحاول هذه الدالة عرض ملف الأيقونة المفضلة الموجود في الدليل الثابت للمشروع. "
+"إذا لم يتم العثور على ملف الأيقونة المفضلة، يتم رفع خطأ HTTP 404 للإشارة إلى "
+"أن المورد غير متوفر."
-#: engine/core/views.py:416
+#: engine/core/views.py:431
msgid ""
-"Redirects the request to the admin index page. The function handles incoming"
-" HTTP requests and redirects them to the Django admin interface index page. "
+"Redirects the request to the admin index page. The function handles incoming "
+"HTTP requests and redirects them to the Django admin interface index page. "
"It uses Django's `redirect` function for handling the HTTP redirection."
msgstr ""
-"يعيد توجيه الطلب إلى صفحة فهرس المشرف. تعالج الدالة طلبات HTTP الواردة وتعيد"
-" توجيهها إلى صفحة فهرس واجهة إدارة Django. تستخدم دالة \"إعادة التوجيه\" في "
+"يعيد توجيه الطلب إلى صفحة فهرس المشرف. تعالج الدالة طلبات HTTP الواردة وتعيد "
+"توجيهها إلى صفحة فهرس واجهة إدارة Django. تستخدم دالة \"إعادة التوجيه\" في "
"Django للتعامل مع إعادة توجيه HTTP."
-#: engine/core/views.py:429
+#: engine/core/views.py:443
msgid "Returns current version of the eVibes. "
msgstr "إرجاع الإصدار الحالي من eVibes."
-#: engine/core/views.py:623 engine/core/views.py:636
+#: engine/core/views.py:672 engine/core/views.py:687
#, python-format
msgid "Revenue & Orders (last %(days)d)"
msgstr "الإيرادات والطلبات (آخر %(days)d)"
-#: engine/core/views.py:793
+#: engine/core/views.py:868
msgid "Returns custom variables for Dashboard. "
msgstr "إرجاع المتغيرات المخصصة للوحة التحكم."
-#: engine/core/viewsets.py:136
+#: engine/core/viewsets.py:139
msgid ""
"Defines a viewset for managing Evibes-related operations. The EvibesViewSet "
"class inherits from ModelViewSet and provides functionality for handling "
@@ -3157,25 +3172,24 @@ msgid ""
"serializer classes based on the current action, customizable permissions, "
"and rendering formats."
msgstr ""
-"يحدد مجموعة طرق عرض لإدارة العمليات المتعلقة ب Evibes. يرث صنف EvibesViewSet"
-" من ModelViewSet ويوفر وظائف للتعامل مع الإجراءات والعمليات على كيانات "
-"Evibes. وتتضمن دعمًا لفئات المتسلسلات الديناميكية استنادًا إلى الإجراء "
-"الحالي، والأذونات القابلة للتخصيص، وتنسيقات العرض."
+"يحدد مجموعة طرق عرض لإدارة العمليات المتعلقة ب Evibes. يرث صنف EvibesViewSet "
+"من ModelViewSet ويوفر وظائف للتعامل مع الإجراءات والعمليات على كيانات "
+"Evibes. وتتضمن دعمًا لفئات المتسلسلات الديناميكية استنادًا إلى الإجراء الحالي، "
+"والأذونات القابلة للتخصيص، وتنسيقات العرض."
-#: engine/core/viewsets.py:156
+#: engine/core/viewsets.py:160
msgid ""
-"Represents a viewset for managing AttributeGroup objects. Handles operations"
-" related to AttributeGroup, including filtering, serialization, and "
-"retrieval of data. This class is part of the application's API layer and "
-"provides a standardized way to process requests and responses for "
-"AttributeGroup data."
+"Represents a viewset for managing AttributeGroup objects. Handles operations "
+"related to AttributeGroup, including filtering, serialization, and retrieval "
+"of data. This class is part of the application's API layer and provides a "
+"standardized way to process requests and responses for AttributeGroup data."
msgstr ""
"يمثل مجموعة طرق عرض لإدارة كائنات AttributeGroup. يتعامل مع العمليات "
"المتعلقة ب AttributeGroup، بما في ذلك التصفية والتسلسل واسترجاع البيانات. "
-"تعد هذه الفئة جزءًا من طبقة واجهة برمجة التطبيقات الخاصة بالتطبيق وتوفر "
-"طريقة موحدة لمعالجة الطلبات والاستجابات لبيانات AttributeGroup."
+"تعد هذه الفئة جزءًا من طبقة واجهة برمجة التطبيقات الخاصة بالتطبيق وتوفر طريقة "
+"موحدة لمعالجة الطلبات والاستجابات لبيانات AttributeGroup."
-#: engine/core/viewsets.py:175
+#: engine/core/viewsets.py:179
msgid ""
"Handles operations related to Attribute objects within the application. "
"Provides a set of API endpoints to interact with Attribute data. This class "
@@ -3190,21 +3204,20 @@ msgstr ""
"البيانات التي يتم إرجاعها، مثل التصفية حسب حقول معينة أو استرجاع معلومات "
"مفصلة مقابل معلومات مبسطة حسب الطلب."
-#: engine/core/viewsets.py:194
+#: engine/core/viewsets.py:198
msgid ""
"A viewset for managing AttributeValue objects. This viewset provides "
"functionality for listing, retrieving, creating, updating, and deleting "
"AttributeValue objects. It integrates with Django REST Framework's viewset "
-"mechanisms and uses appropriate serializers for different actions. Filtering"
-" capabilities are provided through the DjangoFilterBackend."
+"mechanisms and uses appropriate serializers for different actions. Filtering "
+"capabilities are provided through the DjangoFilterBackend."
msgstr ""
-"مجموعة طرق عرض لإدارة كائنات AttributeValue. توفر مجموعة طرق العرض هذه وظائف"
-" لإدراج كائنات AttributeValue واسترجاعها وإنشائها وتحديثها وحذفها. وهي "
-"تتكامل مع آليات مجموعة طرق عرض Django REST Framework وتستخدم المتسلسلات "
-"المناسبة للإجراءات المختلفة. يتم توفير إمكانيات التصفية من خلال "
-"DjangoFilterBackend."
+"مجموعة طرق عرض لإدارة كائنات AttributeValue. توفر مجموعة طرق العرض هذه وظائف "
+"لإدراج كائنات AttributeValue واسترجاعها وإنشائها وتحديثها وحذفها. وهي تتكامل "
+"مع آليات مجموعة طرق عرض Django REST Framework وتستخدم المتسلسلات المناسبة "
+"للإجراءات المختلفة. يتم توفير إمكانيات التصفية من خلال DjangoFilterBackend."
-#: engine/core/viewsets.py:213
+#: engine/core/viewsets.py:217
msgid ""
"Manages views for Category-related operations. The CategoryViewSet class is "
"responsible for handling operations related to the Category model in the "
@@ -3213,11 +3226,11 @@ msgid ""
"can access specific data."
msgstr ""
"يدير طرق العرض للعمليات المتعلقة بالفئة. فئة CategoryViewSet مسؤولة عن "
-"التعامل مع العمليات المتعلقة بنموذج الفئة في النظام. وهي تدعم استرجاع بيانات"
-" الفئة وتصفيتها وتسلسلها. تفرض مجموعة طرق العرض أيضًا الأذونات لضمان وصول "
+"التعامل مع العمليات المتعلقة بنموذج الفئة في النظام. وهي تدعم استرجاع بيانات "
+"الفئة وتصفيتها وتسلسلها. تفرض مجموعة طرق العرض أيضًا الأذونات لضمان وصول "
"المستخدمين المصرح لهم فقط إلى بيانات محددة."
-#: engine/core/viewsets.py:326
+#: engine/core/viewsets.py:346
msgid ""
"Represents a viewset for managing Brand instances. This class provides "
"functionality for querying, filtering, and serializing Brand objects. It "
@@ -3229,7 +3242,7 @@ msgstr ""
"Django's ViewSet لتبسيط تنفيذ نقاط نهاية واجهة برمجة التطبيقات لكائنات "
"العلامة التجارية."
-#: engine/core/viewsets.py:438
+#: engine/core/viewsets.py:458
msgid ""
"Manages operations related to the `Product` model in the system. This class "
"provides a viewset for managing products, including their filtering, "
@@ -3245,7 +3258,7 @@ msgstr ""
"عمل Django REST لعمليات RESTful API. يتضمن أساليب لاسترجاع تفاصيل المنتج، "
"وتطبيق الأذونات، والوصول إلى الملاحظات ذات الصلة بمنتج ما."
-#: engine/core/viewsets.py:574
+#: engine/core/viewsets.py:605
msgid ""
"Represents a viewset for managing Vendor objects. This viewset allows "
"fetching, filtering, and serializing Vendor data. It defines the queryset, "
@@ -3254,35 +3267,34 @@ msgid ""
"Vendor-related resources through the Django REST framework."
msgstr ""
"يمثل مجموعة طرق عرض لإدارة كائنات المورد. تسمح مجموعة العرض هذه بجلب بيانات "
-"البائع وتصفيتها وتسلسلها. وهي تُعرِّف مجموعة الاستعلام، وتكوينات التصفية، "
-"وفئات أداة التسلسل المستخدمة للتعامل مع الإجراءات المختلفة. الغرض من هذه "
-"الفئة هو توفير وصول مبسط إلى الموارد المتعلقة بالمورد من خلال إطار عمل "
-"Django REST."
+"البائع وتصفيتها وتسلسلها. وهي تُعرِّف مجموعة الاستعلام، وتكوينات التصفية، وفئات "
+"أداة التسلسل المستخدمة للتعامل مع الإجراءات المختلفة. الغرض من هذه الفئة هو "
+"توفير وصول مبسط إلى الموارد المتعلقة بالمورد من خلال إطار عمل Django REST."
-#: engine/core/viewsets.py:594
+#: engine/core/viewsets.py:625
msgid ""
"Representation of a view set handling Feedback objects. This class manages "
"operations related to Feedback objects, including listing, filtering, and "
"retrieving details. The purpose of this view set is to provide different "
-"serializers for different actions and implement permission-based handling of"
-" accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
+"serializers for different actions and implement permission-based handling of "
+"accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
"use of Django's filtering system for querying data."
msgstr ""
"تمثيل مجموعة عرض تتعامل مع كائنات الملاحظات. تدير هذه الفئة العمليات "
"المتعلقة بكائنات الملاحظات، بما في ذلك الإدراج والتصفية واسترجاع التفاصيل. "
"الغرض من مجموعة العرض هذه هو توفير متسلسلات مختلفة لإجراءات مختلفة وتنفيذ "
-"معالجة قائمة على الأذونات لكائنات الملاحظات التي يمكن الوصول إليها. وهي توسع"
-" \"مجموعة عرض الملاحظات\" الأساسية وتستفيد من نظام تصفية Django للاستعلام عن"
-" البيانات."
+"معالجة قائمة على الأذونات لكائنات الملاحظات التي يمكن الوصول إليها. وهي توسع "
+"\"مجموعة عرض الملاحظات\" الأساسية وتستفيد من نظام تصفية Django للاستعلام عن "
+"البيانات."
-#: engine/core/viewsets.py:621
+#: engine/core/viewsets.py:652
msgid ""
"ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes "
"various endpoints for handling order operations such as adding or removing "
-"products, performing purchases for registered as well as unregistered users,"
-" and retrieving the current authenticated user's pending orders. The ViewSet"
-" uses multiple serializers based on the specific action being performed and "
+"products, performing purchases for registered as well as unregistered users, "
+"and retrieving the current authenticated user's pending orders. The ViewSet "
+"uses multiple serializers based on the specific action being performed and "
"enforces permissions accordingly while interacting with order data."
msgstr ""
"ViewSet لإدارة الطلبات والعمليات ذات الصلة. توفر هذه الفئة وظائف لاسترداد "
@@ -3292,12 +3304,12 @@ msgstr ""
"عليه. يستخدم ViewSet العديد من المتسلسلات بناءً على الإجراء المحدد الذي يتم "
"تنفيذه ويفرض الأذونات وفقًا لذلك أثناء التفاعل مع بيانات الطلبات."
-#: engine/core/viewsets.py:825
+#: engine/core/viewsets.py:914
msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It "
-"includes filtering, permission checks, and serializer switching based on the"
-" requested action. Additionally, it provides a detailed action for handling "
+"includes filtering, permission checks, and serializer switching based on the "
+"requested action. Additionally, it provides a detailed action for handling "
"feedback on OrderProduct instances"
msgstr ""
"يوفر مجموعة طرق عرض لإدارة كيانات OrderProduct. تتيح مجموعة طرق العرض هذه "
@@ -3305,11 +3317,11 @@ msgstr ""
"من الأذونات، وتبديل المتسلسل بناءً على الإجراء المطلوب. بالإضافة إلى ذلك، "
"توفر إجراءً مفصلاً للتعامل مع الملاحظات على مثيلات OrderProduct"
-#: engine/core/viewsets.py:879
+#: engine/core/viewsets.py:974
msgid "Manages operations related to Product images in the application. "
msgstr "يدير العمليات المتعلقة بصور المنتج في التطبيق."
-#: engine/core/viewsets.py:892
+#: engine/core/viewsets.py:988
msgid ""
"Manages the retrieval and handling of PromoCode instances through various "
"API actions."
@@ -3317,32 +3329,32 @@ msgstr ""
"يدير استرداد مثيلات PromoCode ومعالجتها من خلال إجراءات واجهة برمجة "
"التطبيقات المختلفة."
-#: engine/core/viewsets.py:914
+#: engine/core/viewsets.py:1019
msgid "Represents a view set for managing promotions. "
msgstr "يمثل مجموعة عرض لإدارة الترقيات."
-#: engine/core/viewsets.py:927
+#: engine/core/viewsets.py:1032
msgid "Handles operations related to Stock data in the system."
msgstr "يتعامل مع العمليات المتعلقة ببيانات المخزون في النظام."
-#: engine/core/viewsets.py:941
+#: engine/core/viewsets.py:1046
msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the "
-"retrieval, modification, and customization of products within the wish list."
-" This ViewSet facilitates functionality such as adding, removing, and bulk "
+"retrieval, modification, and customization of products within the wish list. "
+"This ViewSet facilitates functionality such as adding, removing, and bulk "
"actions for wishlist products. Permission checks are integrated to ensure "
"that users can only manage their own wishlists unless explicit permissions "
"are granted."
msgstr ""
-"ViewSet لإدارة عمليات قائمة الرغبات. توفر مجموعة طرق عرض قائمة الأمنيات نقاط"
-" نهاية للتفاعل مع قائمة أمنيات المستخدم، مما يسمح باسترجاع المنتجات وتعديلها"
-" وتخصيصها ضمن قائمة الأمنيات. تسهل مجموعة العرض هذه وظائف مثل الإضافة "
+"ViewSet لإدارة عمليات قائمة الرغبات. توفر مجموعة طرق عرض قائمة الأمنيات نقاط "
+"نهاية للتفاعل مع قائمة أمنيات المستخدم، مما يسمح باسترجاع المنتجات وتعديلها "
+"وتخصيصها ضمن قائمة الأمنيات. تسهل مجموعة العرض هذه وظائف مثل الإضافة "
"والإزالة والإجراءات المجمعة لمنتجات قائمة الرغبات. يتم دمج عمليات التحقق من "
"الأذونات للتأكد من أن المستخدمين يمكنهم فقط إدارة قوائم الرغبات الخاصة بهم "
"ما لم يتم منح أذونات صريحة."
-#: engine/core/viewsets.py:1056
+#: engine/core/viewsets.py:1183
msgid ""
"This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom "
@@ -3355,12 +3367,12 @@ msgstr ""
"العناوين. وتتضمن سلوكيات متخصصة لطرق HTTP المختلفة، وتجاوزات المتسلسل، "
"ومعالجة الأذونات بناءً على سياق الطلب."
-#: engine/core/viewsets.py:1123
+#: engine/core/viewsets.py:1254
#, python-brace-format
msgid "Geocoding error: {e}"
msgstr "خطأ في الترميز الجغرافي: {e}"
-#: engine/core/viewsets.py:1131
+#: engine/core/viewsets.py:1262
msgid ""
"Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing "
diff --git a/engine/core/locale/cs_CZ/LC_MESSAGES/django.po b/engine/core/locale/cs_CZ/LC_MESSAGES/django.po
index 0708276f..682be696 100644
--- a/engine/core/locale/cs_CZ/LC_MESSAGES/django.po
+++ b/engine/core/locale/cs_CZ/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 22:12+0300\n"
+"POT-Creation-Date: 2025-12-18 19:09+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -26,113 +26,112 @@ msgstr ""
msgid "is active"
msgstr "Je aktivní"
-#: engine/core/abstract.py:21
+#: engine/core/abstract.py:22
msgid ""
-"if set to false, this object can't be seen by users without needed "
-"permission"
+"if set to false, this object can't be seen by users without needed permission"
msgstr ""
"Pokud je nastaveno na false, nemohou tento objekt vidět uživatelé bez "
"potřebného oprávnění."
-#: engine/core/abstract.py:23 engine/core/choices.py:18
+#: engine/core/abstract.py:26 engine/core/choices.py:18
msgid "created"
msgstr "Vytvořeno"
-#: engine/core/abstract.py:23
+#: engine/core/abstract.py:26
msgid "when the object first appeared on the database"
msgstr "Kdy se objekt poprvé objevil v databázi"
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "modified"
msgstr "Upraveno"
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "when the object was last modified"
msgstr "Kdy byl objekt naposledy upraven"
-#: engine/core/admin.py:85
+#: engine/core/admin.py:94
msgid "translations"
msgstr "Překlady"
-#: engine/core/admin.py:89
+#: engine/core/admin.py:102
msgid "general"
msgstr "Obecné"
-#: engine/core/admin.py:91
+#: engine/core/admin.py:106
msgid "relations"
msgstr "Vztahy"
-#: engine/core/admin.py:93
+#: engine/core/admin.py:111
msgid "additional info"
msgstr "další informace"
-#: engine/core/admin.py:111
+#: engine/core/admin.py:133
msgid "metadata"
msgstr "Metadata"
-#: engine/core/admin.py:118
+#: engine/core/admin.py:141
msgid "timestamps"
msgstr "Časová razítka"
-#: engine/core/admin.py:133
+#: engine/core/admin.py:157
#, python-format
msgid "activate selected %(verbose_name_plural)s"
msgstr "Aktivace vybraného %(verbose_name_plural)s"
-#: engine/core/admin.py:138
+#: engine/core/admin.py:165
msgid "selected items have been activated."
msgstr "Vybrané položky byly aktivovány!"
-#: engine/core/admin.py:144
+#: engine/core/admin.py:173
#, python-format
msgid "deactivate selected %(verbose_name_plural)s"
msgstr "Deaktivace vybraných %(verbose_name_plural)s"
-#: engine/core/admin.py:149
+#: engine/core/admin.py:183
msgid "selected items have been deactivated."
msgstr "Vybrané položky byly deaktivovány!"
-#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586
-#: engine/core/graphene/object_types.py:593 engine/core/models.py:801
-#: engine/core/models.py:809
+#: engine/core/admin.py:195 engine/core/graphene/object_types.py:650
+#: engine/core/graphene/object_types.py:657 engine/core/models.py:824
+#: engine/core/models.py:832
msgid "attribute value"
msgstr "Hodnota atributu"
-#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75
-#: engine/core/models.py:810
+#: engine/core/admin.py:196 engine/core/graphene/object_types.py:75
+#: engine/core/models.py:833
msgid "attribute values"
msgstr "Hodnoty atributů"
-#: engine/core/admin.py:172
+#: engine/core/admin.py:207
msgid "image"
msgstr "Obrázek"
-#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474
+#: engine/core/admin.py:208 engine/core/graphene/object_types.py:527
msgid "images"
msgstr "Obrázky"
-#: engine/core/admin.py:184 engine/core/models.py:566
+#: engine/core/admin.py:219 engine/core/models.py:587
msgid "stock"
msgstr "Stock"
-#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640
+#: engine/core/admin.py:220 engine/core/graphene/object_types.py:710
msgid "stocks"
msgstr "Zásoby"
-#: engine/core/admin.py:196 engine/core/models.py:1818
+#: engine/core/admin.py:231 engine/core/models.py:1930
msgid "order product"
msgstr "Objednat produkt"
-#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389
-#: engine/core/models.py:1819
+#: engine/core/admin.py:232 engine/core/graphene/object_types.py:438
+#: engine/core/models.py:1931
msgid "order products"
msgstr "Objednat produkty"
-#: engine/core/admin.py:210 engine/core/admin.py:211
+#: engine/core/admin.py:250 engine/core/admin.py:251
msgid "children"
msgstr "Děti"
-#: engine/core/admin.py:977
+#: engine/core/admin.py:1059
msgid "Config"
msgstr "Konfigurace"
@@ -156,8 +155,7 @@ msgstr "Doručeno na"
msgid "canceled"
msgstr "Zrušeno"
-#: engine/core/choices.py:8 engine/core/choices.py:16
-#: engine/core/choices.py:24
+#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24
msgid "failed"
msgstr "Neúspěšný"
@@ -185,11 +183,11 @@ msgstr "Momental"
msgid "successful"
msgstr "Úspěšné"
-#: engine/core/docs/drf/views.py:31
+#: engine/core/docs/drf/views.py:30
msgid "OpenAPI schema in selected format with selected language"
msgstr "Schéma OpenAPI ve vybraném formátu s vybraným jazykem"
-#: engine/core/docs/drf/views.py:33
+#: engine/core/docs/drf/views.py:32
msgid ""
"OpenApi3 schema for this API. Format can be selected via content "
"negotiation. Language can be selected with Accept-Language and query "
@@ -199,11 +197,11 @@ msgstr ""
"vyjednávání obsahu. Jazyk lze zvolit pomocí Accept-Language a parametru "
"dotazu."
-#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37
+#: engine/core/docs/drf/views.py:43 engine/core/graphene/mutations.py:37
msgid "cache I/O"
msgstr "Vstup/výstup mezipaměti"
-#: engine/core/docs/drf/views.py:46
+#: engine/core/docs/drf/views.py:45
msgid ""
"apply only a key to read permitted data from cache.\n"
"apply key, data and timeout with authentication to write data to cache."
@@ -211,36 +209,36 @@ msgstr ""
"Použijte pouze klíč pro čtení povolených dat z mezipaměti.\n"
"Pro zápis dat do mezipaměti použijte klíč, data a časový limit s ověřením."
-#: engine/core/docs/drf/views.py:62
+#: engine/core/docs/drf/views.py:63
msgid "get a list of supported languages"
msgstr "Získat seznam podporovaných jazyků"
-#: engine/core/docs/drf/views.py:74
+#: engine/core/docs/drf/views.py:75
msgid "get application's exposable parameters"
msgstr "Získání vystavitelných parametrů aplikace"
-#: engine/core/docs/drf/views.py:84
+#: engine/core/docs/drf/views.py:89
msgid "send a message to the support team"
msgstr "Odeslání zprávy týmu podpory"
-#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57
+#: engine/core/docs/drf/views.py:103 engine/core/graphene/mutations.py:59
msgid "request a CORSed URL"
msgstr "Vyžádejte si adresu URL s protokolem CORS. Povoleno pouze https."
-#: engine/core/docs/drf/views.py:112
+#: engine/core/docs/drf/views.py:119
msgid "Search between products, categories and brands"
msgstr "Vyhledávání mezi produkty, kategoriemi a značkami"
-#: engine/core/docs/drf/views.py:130
+#: engine/core/docs/drf/views.py:141
msgid "global search endpoint to query across project's tables"
msgstr ""
"Globální koncový bod vyhledávání pro dotazování napříč tabulkami projektu"
-#: engine/core/docs/drf/views.py:139
+#: engine/core/docs/drf/views.py:150
msgid "purchase an order as a business"
msgstr "Zakoupit objednávku jako firma"
-#: engine/core/docs/drf/views.py:146
+#: engine/core/docs/drf/views.py:158
msgid ""
"purchase an order as a business, using the provided `products` with "
"`product_uuid` and `attributes`."
@@ -248,268 +246,266 @@ msgstr ""
"Zakoupit objednávku jako podnik s použitím zadaných `produktů` s "
"`product_uuid` a `atributy`."
-#: engine/core/docs/drf/views.py:164
+#: engine/core/docs/drf/views.py:177
msgid "download a digital asset from purchased digital order"
msgstr "stáhnout digitální aktivum ze zakoupené digitální objednávky"
-#: engine/core/docs/drf/viewsets.py:61
+#: engine/core/docs/drf/viewsets.py:65
msgid "list all attribute groups (simple view)"
msgstr "Seznam všech skupin atributů (jednoduché zobrazení)"
-#: engine/core/docs/drf/viewsets.py:68
+#: engine/core/docs/drf/viewsets.py:75
msgid "retrieve a single attribute group (detailed view)"
msgstr "Získání jedné skupiny atributů (podrobné zobrazení)"
-#: engine/core/docs/drf/viewsets.py:75
+#: engine/core/docs/drf/viewsets.py:82
msgid "create an attribute group"
msgstr "Vytvoření skupiny atributů"
-#: engine/core/docs/drf/viewsets.py:82
+#: engine/core/docs/drf/viewsets.py:92
msgid "delete an attribute group"
msgstr "Odstranění skupiny atributů"
-#: engine/core/docs/drf/viewsets.py:89
+#: engine/core/docs/drf/viewsets.py:99
msgid "rewrite an existing attribute group saving non-editables"
msgstr ""
"Přepsání existující skupiny atributů s uložením neupravitelných položek"
-#: engine/core/docs/drf/viewsets.py:96
-msgid ""
-"rewrite some fields of an existing attribute group saving non-editables"
+#: engine/core/docs/drf/viewsets.py:107
+msgid "rewrite some fields of an existing attribute group saving non-editables"
msgstr ""
"Přepsání některých polí existující skupiny atributů s uložením "
"neupravitelných položek"
-#: engine/core/docs/drf/viewsets.py:106
+#: engine/core/docs/drf/viewsets.py:118
msgid "list all attributes (simple view)"
msgstr "Seznam všech atributů (jednoduché zobrazení)"
-#: engine/core/docs/drf/viewsets.py:113
+#: engine/core/docs/drf/viewsets.py:128
msgid "retrieve a single attribute (detailed view)"
msgstr "Získání jednoho atributu (podrobné zobrazení)"
-#: engine/core/docs/drf/viewsets.py:120
+#: engine/core/docs/drf/viewsets.py:135
msgid "create an attribute"
msgstr "Vytvoření atributu"
-#: engine/core/docs/drf/viewsets.py:127
+#: engine/core/docs/drf/viewsets.py:142
msgid "delete an attribute"
msgstr "Odstranění atributu"
-#: engine/core/docs/drf/viewsets.py:134
+#: engine/core/docs/drf/viewsets.py:149
msgid "rewrite an existing attribute saving non-editables"
msgstr "Přepsat existující atribut a uložit neupravitelné položky"
-#: engine/core/docs/drf/viewsets.py:141
+#: engine/core/docs/drf/viewsets.py:156
msgid "rewrite some fields of an existing attribute saving non-editables"
msgstr ""
"Přepsání některých polí existujícího atributu s uložením neupravitelných "
"položek"
-#: engine/core/docs/drf/viewsets.py:151
+#: engine/core/docs/drf/viewsets.py:166
msgid "list all attribute values (simple view)"
msgstr "Seznam všech hodnot atributů (jednoduché zobrazení)"
-#: engine/core/docs/drf/viewsets.py:158
+#: engine/core/docs/drf/viewsets.py:176
msgid "retrieve a single attribute value (detailed view)"
msgstr "Získání jedné hodnoty atributu (podrobné zobrazení)"
-#: engine/core/docs/drf/viewsets.py:165
+#: engine/core/docs/drf/viewsets.py:183
msgid "create an attribute value"
msgstr "Vytvoření hodnoty atributu"
-#: engine/core/docs/drf/viewsets.py:172
+#: engine/core/docs/drf/viewsets.py:193
msgid "delete an attribute value"
msgstr "Odstranění hodnoty atributu"
-#: engine/core/docs/drf/viewsets.py:179
+#: engine/core/docs/drf/viewsets.py:200
msgid "rewrite an existing attribute value saving non-editables"
msgstr "Přepsání existující hodnoty atributu uložením neupravitelných položek"
-#: engine/core/docs/drf/viewsets.py:186
-msgid ""
-"rewrite some fields of an existing attribute value saving non-editables"
+#: engine/core/docs/drf/viewsets.py:208
+msgid "rewrite some fields of an existing attribute value saving non-editables"
msgstr ""
"Přepsání některých polí existující hodnoty atributu s uložením "
"neupravitelných položek"
-#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197
+#: engine/core/docs/drf/viewsets.py:219 engine/core/docs/drf/viewsets.py:220
msgid "list all categories (simple view)"
msgstr "Seznam všech kategorií (jednoduché zobrazení)"
-#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205
+#: engine/core/docs/drf/viewsets.py:230 engine/core/docs/drf/viewsets.py:231
msgid "retrieve a single category (detailed view)"
msgstr "Vyhledání jedné kategorie (podrobné zobrazení)"
-#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258
+#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:286
msgid "Category UUID or slug"
msgstr "UUID nebo slug kategorie"
-#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221
+#: engine/core/docs/drf/viewsets.py:246 engine/core/docs/drf/viewsets.py:247
msgid "create a category"
msgstr "Vytvoření kategorie"
-#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229
+#: engine/core/docs/drf/viewsets.py:254 engine/core/docs/drf/viewsets.py:255
msgid "delete a category"
msgstr "Odstranění kategorie"
-#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237
+#: engine/core/docs/drf/viewsets.py:262 engine/core/docs/drf/viewsets.py:263
msgid "rewrite an existing category saving non-editables"
msgstr "Přepsání existující kategorie ukládající neupravitelné položky"
-#: engine/core/docs/drf/viewsets.py:244 engine/core/docs/drf/viewsets.py:245
+#: engine/core/docs/drf/viewsets.py:270 engine/core/docs/drf/viewsets.py:272
msgid "rewrite some fields of an existing category saving non-editables"
msgstr ""
"Přepsat některá pole existující kategorie a uložit neupravitelné položky"
-#: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704
-#: engine/core/docs/drf/viewsets.py:988
+#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:1046
#: engine/core/graphene/object_types.py:117
-#: engine/core/graphene/object_types.py:207
-#: engine/core/graphene/object_types.py:482
+#: engine/core/graphene/object_types.py:236
+#: engine/core/graphene/object_types.py:537
msgid "SEO Meta snapshot"
msgstr "Meta snímek SEO"
-#: engine/core/docs/drf/viewsets.py:253
+#: engine/core/docs/drf/viewsets.py:281
msgid "returns a snapshot of the category's SEO meta data"
msgstr "Vrací snímek meta dat SEO kategorie."
-#: engine/core/docs/drf/viewsets.py:274
+#: engine/core/docs/drf/viewsets.py:302
msgid "list all orders (simple view)"
msgstr "Seznam všech kategorií (jednoduché zobrazení)"
-#: engine/core/docs/drf/viewsets.py:275
+#: engine/core/docs/drf/viewsets.py:303
msgid "for non-staff users, only their own orders are returned."
msgstr ""
"Uživatelům, kteří nejsou zaměstnanci, se vracejí pouze jejich vlastní "
"objednávky."
-#: engine/core/docs/drf/viewsets.py:281
+#: engine/core/docs/drf/viewsets.py:309
msgid ""
-"Case-insensitive substring search across human_readable_id, "
-"order_products.product.name, and order_products.product.partnumber"
+"Case-insensitive substring search across human_readable_id, order_products."
+"product.name, and order_products.product.partnumber"
msgstr ""
"Vyhledávání podřetězců bez ohledu na velikost písmen v položkách "
-"human_readable_id, order_products.product.name a "
-"order_products.product.partnumber"
+"human_readable_id, order_products.product.name a order_products.product."
+"partnumber"
-#: engine/core/docs/drf/viewsets.py:288
+#: engine/core/docs/drf/viewsets.py:316
msgid "Filter orders with buy_time >= this ISO 8601 datetime"
msgstr "Filtrování příkazů s buy_time >= toto datum ISO 8601"
-#: engine/core/docs/drf/viewsets.py:293
+#: engine/core/docs/drf/viewsets.py:321
msgid "Filter orders with buy_time <= this ISO 8601 datetime"
msgstr "Filtrování objednávek s buy_time <= toto ISO 8601 datetime"
-#: engine/core/docs/drf/viewsets.py:298
+#: engine/core/docs/drf/viewsets.py:326
msgid "Filter by exact order UUID"
msgstr "Filtrování podle přesné objednávky UUID"
-#: engine/core/docs/drf/viewsets.py:303
+#: engine/core/docs/drf/viewsets.py:331
msgid "Filter by exact human-readable order ID"
msgstr "Filtrování podle přesného lidsky čitelného ID objednávky"
-#: engine/core/docs/drf/viewsets.py:308
+#: engine/core/docs/drf/viewsets.py:336
msgid "Filter by user's email (case-insensitive exact match)"
msgstr ""
"Filtrování podle e-mailu uživatele (přesná shoda bez rozlišení velkých a "
"malých písmen)"
-#: engine/core/docs/drf/viewsets.py:313
+#: engine/core/docs/drf/viewsets.py:341
msgid "Filter by user's UUID"
msgstr "Filtrování podle UUID uživatele"
-#: engine/core/docs/drf/viewsets.py:318
+#: engine/core/docs/drf/viewsets.py:347
msgid "Filter by order status (case-insensitive substring match)"
msgstr ""
"Filtrování podle stavu objednávky (shoda podřetězce bez rozlišování velkých "
"a malých písmen)"
-#: engine/core/docs/drf/viewsets.py:324
+#: engine/core/docs/drf/viewsets.py:354
msgid ""
-"Order by one of: uuid, human_readable_id, user_email, user, status, created,"
-" modified, buy_time, random. Prefix with '-' for descending (e.g. "
-"'-buy_time')."
+"Order by one of: uuid, human_readable_id, user_email, user, status, created, "
+"modified, buy_time, random. Prefix with '-' for descending (e.g. '-"
+"buy_time')."
msgstr ""
"Řazení podle jedné z následujících možností: uuid, human_readable_id, "
"user_email, user, status, created, modified, buy_time, random. Pro sestupné "
"řazení použijte předponu \"-\" (např. \"-buy_time\")."
-#: engine/core/docs/drf/viewsets.py:336
+#: engine/core/docs/drf/viewsets.py:366
msgid "retrieve a single order (detailed view)"
msgstr "Vyhledání jedné kategorie (podrobné zobrazení)"
-#: engine/core/docs/drf/viewsets.py:341
+#: engine/core/docs/drf/viewsets.py:371
msgid "Order UUID or human-readable id"
msgstr "Objednávka UUID nebo lidsky čitelné ID"
-#: engine/core/docs/drf/viewsets.py:351
+#: engine/core/docs/drf/viewsets.py:381
msgid "create an order"
msgstr "Vytvoření atributu"
-#: engine/core/docs/drf/viewsets.py:352
+#: engine/core/docs/drf/viewsets.py:382
msgid "doesn't work for non-staff users."
msgstr "Nefunguje pro uživatele, kteří nejsou zaměstnanci."
-#: engine/core/docs/drf/viewsets.py:359
+#: engine/core/docs/drf/viewsets.py:389
msgid "delete an order"
msgstr "Odstranění atributu"
-#: engine/core/docs/drf/viewsets.py:366
+#: engine/core/docs/drf/viewsets.py:396
msgid "rewrite an existing order saving non-editables"
msgstr "Přepsání existující kategorie ukládající neupravitelné položky"
-#: engine/core/docs/drf/viewsets.py:373
+#: engine/core/docs/drf/viewsets.py:403
msgid "rewrite some fields of an existing order saving non-editables"
msgstr ""
"Přepsat některá pole existující kategorie a uložit neupravitelné položky"
-#: engine/core/docs/drf/viewsets.py:380
+#: engine/core/docs/drf/viewsets.py:410
msgid "purchase an order"
msgstr "Nákupní cena v době objednávky"
-#: engine/core/docs/drf/viewsets.py:382
+#: engine/core/docs/drf/viewsets.py:412
msgid ""
"finalizes the order purchase. if `force_balance` is used, the purchase is "
"completed using the user's balance; if `force_payment` is used, a "
"transaction is initiated."
msgstr ""
-"Dokončí nákup objednávky. Pokud je použito `force_balance`, nákup se dokončí"
-" s použitím zůstatku uživatele; pokud je použito `force_payment`, zahájí se "
+"Dokončí nákup objednávky. Pokud je použito `force_balance`, nákup se dokončí "
+"s použitím zůstatku uživatele; pokud je použito `force_payment`, zahájí se "
"transakce."
-#: engine/core/docs/drf/viewsets.py:397
+#: engine/core/docs/drf/viewsets.py:427
msgid "retrieve current pending order of a user"
msgstr "načtení aktuální nevyřízené objednávky uživatele."
-#: engine/core/docs/drf/viewsets.py:398
+#: engine/core/docs/drf/viewsets.py:428
msgid "retrieves a current pending order of an authenticated user"
msgstr "načte aktuální čekající objednávku ověřeného uživatele."
-#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334
+#: engine/core/docs/drf/viewsets.py:438 engine/core/graphene/mutations.py:354
msgid "purchase an order without account creation"
msgstr "zakoupení objednávky bez vytvoření účtu"
-#: engine/core/docs/drf/viewsets.py:409
+#: engine/core/docs/drf/viewsets.py:439
msgid "finalizes the order purchase for a non-registered user."
msgstr "dokončí nákup objednávky pro neregistrovaného uživatele."
-#: engine/core/docs/drf/viewsets.py:420
+#: engine/core/docs/drf/viewsets.py:450
msgid "add product to order"
msgstr "Přidání produktu do objednávky"
-#: engine/core/docs/drf/viewsets.py:421
+#: engine/core/docs/drf/viewsets.py:452
msgid ""
"adds a product to an order using the provided `product_uuid` and "
"`attributes`."
msgstr ""
"Přidá produkt do objednávky pomocí zadaného `product_uuid` a `attributes`."
-#: engine/core/docs/drf/viewsets.py:429
+#: engine/core/docs/drf/viewsets.py:461
msgid "add a list of products to order, quantities will not count"
msgstr "Přidat seznam produktů k objednání, množství se nezapočítává."
-#: engine/core/docs/drf/viewsets.py:430
+#: engine/core/docs/drf/viewsets.py:463
msgid ""
"adds a list of products to an order using the provided `product_uuid` and "
"`attributes`."
@@ -517,22 +513,22 @@ msgstr ""
"Přidá seznam produktů do objednávky pomocí zadaného `product_uuid` a "
"`attributes`."
-#: engine/core/docs/drf/viewsets.py:438
+#: engine/core/docs/drf/viewsets.py:472
msgid "remove product from order"
msgstr "Odstranění produktu z objednávky"
-#: engine/core/docs/drf/viewsets.py:439
+#: engine/core/docs/drf/viewsets.py:474
msgid ""
"removes a product from an order using the provided `product_uuid` and "
"`attributes`."
msgstr ""
"Odebere produkt z objednávky pomocí zadaného `product_uuid` a `attributes`."
-#: engine/core/docs/drf/viewsets.py:447
+#: engine/core/docs/drf/viewsets.py:483
msgid "remove product from order, quantities will not count"
msgstr "Odstranění produktu z objednávky, množství se nezapočítává"
-#: engine/core/docs/drf/viewsets.py:448
+#: engine/core/docs/drf/viewsets.py:485
msgid ""
"removes a list of products from an order using the provided `product_uuid` "
"and `attributes`"
@@ -540,712 +536,721 @@ msgstr ""
"Odebere seznam produktů z objednávky pomocí zadaného `product_uuid` a "
"`attributes`."
-#: engine/core/docs/drf/viewsets.py:459
+#: engine/core/docs/drf/viewsets.py:497
msgid "list all wishlists (simple view)"
msgstr "Seznam všech atributů (jednoduché zobrazení)"
-#: engine/core/docs/drf/viewsets.py:460
+#: engine/core/docs/drf/viewsets.py:498
msgid "for non-staff users, only their own wishlists are returned."
msgstr ""
"Uživatelům, kteří nejsou zaměstnanci, se vrátí pouze jejich vlastní seznamy "
"přání."
-#: engine/core/docs/drf/viewsets.py:467
+#: engine/core/docs/drf/viewsets.py:508
msgid "retrieve a single wishlist (detailed view)"
msgstr "Získání jednoho atributu (podrobné zobrazení)"
-#: engine/core/docs/drf/viewsets.py:474
+#: engine/core/docs/drf/viewsets.py:515
msgid "create an wishlist"
msgstr "Vytvoření atributu"
-#: engine/core/docs/drf/viewsets.py:475
+#: engine/core/docs/drf/viewsets.py:516
msgid "Doesn't work for non-staff users."
msgstr "Nefunguje pro uživatele, kteří nejsou zaměstnanci."
-#: engine/core/docs/drf/viewsets.py:482
+#: engine/core/docs/drf/viewsets.py:523
msgid "delete an wishlist"
msgstr "Odstranění atributu"
-#: engine/core/docs/drf/viewsets.py:489
+#: engine/core/docs/drf/viewsets.py:530
msgid "rewrite an existing wishlist saving non-editables"
msgstr "Přepsat existující atribut a uložit neupravitelné položky"
-#: engine/core/docs/drf/viewsets.py:496
+#: engine/core/docs/drf/viewsets.py:537
msgid "rewrite some fields of an existing wishlist saving non-editables"
msgstr ""
"Přepsání některých polí existujícího atributu s uložením neupravitelných "
"položek"
-#: engine/core/docs/drf/viewsets.py:503
+#: engine/core/docs/drf/viewsets.py:544
msgid "retrieve current pending wishlist of a user"
msgstr "načtení aktuálního čekajícího seznamu přání uživatele"
-#: engine/core/docs/drf/viewsets.py:504
+#: engine/core/docs/drf/viewsets.py:545
msgid "retrieves a current pending wishlist of an authenticated user"
msgstr "načte aktuální čekající seznam přání ověřeného uživatele."
-#: engine/core/docs/drf/viewsets.py:514
+#: engine/core/docs/drf/viewsets.py:555
msgid "add product to wishlist"
msgstr "Přidání produktu do objednávky"
-#: engine/core/docs/drf/viewsets.py:515
+#: engine/core/docs/drf/viewsets.py:557
msgid "adds a product to an wishlist using the provided `product_uuid`"
msgstr "Přidá produkt do seznamu přání pomocí zadaného `product_uuid`."
-#: engine/core/docs/drf/viewsets.py:523
+#: engine/core/docs/drf/viewsets.py:566
msgid "remove product from wishlist"
msgstr "Odstranění produktu ze seznamu přání"
-#: engine/core/docs/drf/viewsets.py:524
+#: engine/core/docs/drf/viewsets.py:568
msgid "removes a product from an wishlist using the provided `product_uuid`"
msgstr "Odebere produkt ze seznamu přání pomocí zadaného `product_uuid`."
-#: engine/core/docs/drf/viewsets.py:532
+#: engine/core/docs/drf/viewsets.py:577
msgid "add many products to wishlist"
msgstr "Přidání mnoha produktů do seznamu přání"
-#: engine/core/docs/drf/viewsets.py:533
+#: engine/core/docs/drf/viewsets.py:579
msgid "adds many products to an wishlist using the provided `product_uuids`"
-msgstr ""
-"Přidá mnoho produktů do seznamu přání pomocí zadaných `product_uuids`."
+msgstr "Přidá mnoho produktů do seznamu přání pomocí zadaných `product_uuids`."
-#: engine/core/docs/drf/viewsets.py:541
+#: engine/core/docs/drf/viewsets.py:588
msgid "remove many products from wishlist"
msgstr "Odstranění produktu z objednávky"
-#: engine/core/docs/drf/viewsets.py:542
+#: engine/core/docs/drf/viewsets.py:590
msgid ""
"removes many products from an wishlist using the provided `product_uuids`"
msgstr ""
"Odebere mnoho produktů ze seznamu přání pomocí zadaných `product_uuids`."
-#: engine/core/docs/drf/viewsets.py:549
+#: engine/core/docs/drf/viewsets.py:598
msgid ""
"Filter by one or more attribute name/value pairs. \n"
"• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n"
-"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n"
-"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n"
+"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, "
+"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, "
+"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n"
+"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), "
+"`true`/`false` for booleans, integers, floats; otherwise treated as "
+"string. \n"
"• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n"
"Examples: \n"
-"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n"
+"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\","
+"\"bluetooth\"]`, \n"
"`b64-description=icontains-aGVhdC1jb2xk`"
msgstr ""
"Filtrování podle jedné nebo více dvojic název/hodnota atributu. \n"
"- **Syntaxe**: `attr_name=method-value[;attr2=method2-value2]...`\n"
-"- **Metody** (pokud je vynecháno, výchozí hodnota je `obsahuje`): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`\n"
-"- **Typování hodnot**: Pro booleany, celá čísla, floaty se nejprve zkouší JSON (takže můžete předávat seznamy/dicty), `true`/`false`; jinak se s nimi zachází jako s řetězci. \n"
-"- **Base64**: předpona `b64-` pro bezpečné zakódování surové hodnoty do URL base64. \n"
+"- **Metody** (pokud je vynecháno, výchozí hodnota je `obsahuje`): `iexact`, "
+"`exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, "
+"`endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`\n"
+"- **Typování hodnot**: Pro booleany, celá čísla, floaty se nejprve zkouší "
+"JSON (takže můžete předávat seznamy/dicty), `true`/`false`; jinak se s nimi "
+"zachází jako s řetězci. \n"
+"- **Base64**: předpona `b64-` pro bezpečné zakódování surové hodnoty do URL "
+"base64. \n"
"Příklady: \n"
"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\", \"bluetooth\"]`,\n"
"`b64-description=icontains-aGVhdC1jb2xk`"
-#: engine/core/docs/drf/viewsets.py:568 engine/core/docs/drf/viewsets.py:569
+#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
msgid "list all products (simple view)"
msgstr "Seznam všech produktů (jednoduché zobrazení)"
-#: engine/core/docs/drf/viewsets.py:574
+#: engine/core/docs/drf/viewsets.py:623
msgid "(exact) Product UUID"
msgstr "(přesně) UUID produktu"
-#: engine/core/docs/drf/viewsets.py:581
+#: engine/core/docs/drf/viewsets.py:630
msgid ""
-"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n"
+"Comma-separated list of fields to sort by. Prefix with `-` for "
+"descending. \n"
"**Allowed:** uuid, rating, name, slug, created, modified, price, random"
msgstr ""
-"Seznam polí oddělených čárkou, podle kterých se má třídit. Pro sestupné řazení použijte předponu `-`. \n"
+"Seznam polí oddělených čárkou, podle kterých se má třídit. Pro sestupné "
+"řazení použijte předponu `-`. \n"
"**Povolené:** uuid, rating, name, slug, created, modified, price, random"
-#: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599
+#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
msgid "retrieve a single product (detailed view)"
msgstr "Vyhledání jednoho produktu (podrobné zobrazení)"
-#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634
-#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672
-#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710
+#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683
+#: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725
+#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763
msgid "Product UUID or slug"
msgstr "Identifikátor UUID produktu nebo Slug"
-#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
+#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
#: engine/core/graphene/dashboard_mutations/product.py:80
#: engine/core/graphene/dashboard_mutations/product.py:118
#: engine/core/graphene/dashboard_mutations/product.py:166
msgid "create a product"
msgstr "Vytvoření produktu"
-#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629
+#: engine/core/docs/drf/viewsets.py:677 engine/core/docs/drf/viewsets.py:678
msgid "rewrite an existing product, preserving non-editable fields"
msgstr ""
"Přepsání existujícího produktu se zachováním polí, která nelze editovat"
-#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
+#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:700
msgid ""
"update some fields of an existing product, preserving non-editable fields"
msgstr ""
"Aktualizace některých polí existujícího produktu se zachováním polí, která "
"nelze upravovat."
-#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
+#: engine/core/docs/drf/viewsets.py:719 engine/core/docs/drf/viewsets.py:720
msgid "delete a product"
msgstr "Odstranění produktu"
-#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686
+#: engine/core/docs/drf/viewsets.py:738 engine/core/docs/drf/viewsets.py:739
msgid "lists all permitted feedbacks for a product"
msgstr "seznam všech povolených zpětných vazeb pro produkt"
-#: engine/core/docs/drf/viewsets.py:705
+#: engine/core/docs/drf/viewsets.py:758
msgid "returns a snapshot of the product's SEO meta data"
msgstr "Vrátí snímek meta dat SEO produktu."
-#: engine/core/docs/drf/viewsets.py:726
+#: engine/core/docs/drf/viewsets.py:779
msgid "list all addresses"
msgstr "Seznam všech adres"
-#: engine/core/docs/drf/viewsets.py:736
+#: engine/core/docs/drf/viewsets.py:789
msgid "retrieve a single address"
msgstr "Získání jedné adresy"
-#: engine/core/docs/drf/viewsets.py:746
+#: engine/core/docs/drf/viewsets.py:799
msgid "create a new address"
msgstr "Vytvoření nové adresy"
-#: engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:810
msgid "delete an address"
msgstr "Odstranění adresy"
-#: engine/core/docs/drf/viewsets.py:767
+#: engine/core/docs/drf/viewsets.py:820
msgid "update an entire address"
msgstr "Aktualizace celé adresy"
-#: engine/core/docs/drf/viewsets.py:778
+#: engine/core/docs/drf/viewsets.py:831
msgid "partially update an address"
msgstr "Částečná aktualizace adresy"
-#: engine/core/docs/drf/viewsets.py:789
+#: engine/core/docs/drf/viewsets.py:842
msgid "autocomplete address suggestions"
msgstr "Automatické dokončování zadávání adresy"
-#: engine/core/docs/drf/viewsets.py:794
+#: engine/core/docs/drf/viewsets.py:848
msgid "raw data query string, please append with data from geo-IP endpoint"
msgstr ""
"Řetězec dotazu na nezpracovaná data, doplňte prosím data z koncového bodu "
"geo-IP"
-#: engine/core/docs/drf/viewsets.py:800
+#: engine/core/docs/drf/viewsets.py:855
msgid "limit the results amount, 1 < limit < 10, default: 5"
msgstr "omezuje množství výsledků, 1 < limit < 10, výchozí: 5"
-#: engine/core/docs/drf/viewsets.py:816
+#: engine/core/docs/drf/viewsets.py:871
msgid "list all feedbacks (simple view)"
msgstr "seznam všech ohlasů (jednoduché zobrazení)"
-#: engine/core/docs/drf/viewsets.py:823
+#: engine/core/docs/drf/viewsets.py:881
msgid "retrieve a single feedback (detailed view)"
msgstr "načtení jedné zpětné vazby (podrobné zobrazení)."
-#: engine/core/docs/drf/viewsets.py:830
+#: engine/core/docs/drf/viewsets.py:888
msgid "create a feedback"
msgstr "vytvořit zpětnou vazbu"
-#: engine/core/docs/drf/viewsets.py:837
+#: engine/core/docs/drf/viewsets.py:895
msgid "delete a feedback"
msgstr "odstranit zpětnou vazbu"
-#: engine/core/docs/drf/viewsets.py:844
+#: engine/core/docs/drf/viewsets.py:902
msgid "rewrite an existing feedback saving non-editables"
msgstr "přepsat existující zpětnou vazbu a uložit neupravitelné položky."
-#: engine/core/docs/drf/viewsets.py:851
+#: engine/core/docs/drf/viewsets.py:909
msgid "rewrite some fields of an existing feedback saving non-editables"
msgstr ""
"Přepsat některá pole existující kategorie a uložit neupravitelné položky"
-#: engine/core/docs/drf/viewsets.py:861
+#: engine/core/docs/drf/viewsets.py:919
msgid "list all order–product relations (simple view)"
msgstr "seznam všech vztahů objednávka-produkt (jednoduché zobrazení)"
-#: engine/core/docs/drf/viewsets.py:871
+#: engine/core/docs/drf/viewsets.py:929
msgid "retrieve a single order–product relation (detailed view)"
msgstr "načtení jednoho vztahu zakázka-produkt (podrobné zobrazení)"
-#: engine/core/docs/drf/viewsets.py:881
+#: engine/core/docs/drf/viewsets.py:939
msgid "create a new order–product relation"
msgstr "vytvořit nový vztah objednávka-produkt"
-#: engine/core/docs/drf/viewsets.py:891
+#: engine/core/docs/drf/viewsets.py:949
msgid "replace an existing order–product relation"
msgstr "nahradit existující vztah objednávka-produkt"
-#: engine/core/docs/drf/viewsets.py:901
+#: engine/core/docs/drf/viewsets.py:959
msgid "partially update an existing order–product relation"
msgstr "částečně aktualizovat existující vztah objednávka-produkt"
-#: engine/core/docs/drf/viewsets.py:911
+#: engine/core/docs/drf/viewsets.py:969
msgid "delete an order–product relation"
msgstr "odstranit vztah objednávka-produkt"
-#: engine/core/docs/drf/viewsets.py:921
+#: engine/core/docs/drf/viewsets.py:979
msgid "add or remove feedback on an order–product relation"
msgstr "přidat nebo odebrat zpětnou vazbu na vztah objednávka-produkt."
-#: engine/core/docs/drf/viewsets.py:938
+#: engine/core/docs/drf/viewsets.py:996
msgid "list all brands (simple view)"
msgstr "Seznam všech značek (jednoduché zobrazení)"
-#: engine/core/docs/drf/viewsets.py:945
+#: engine/core/docs/drf/viewsets.py:1003
msgid "retrieve a single brand (detailed view)"
msgstr "Získání jedné značky (podrobné zobrazení)"
-#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993
+#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051
msgid "Brand UUID or slug"
msgstr "Značka UUID nebo slimák"
-#: engine/core/docs/drf/viewsets.py:960
+#: engine/core/docs/drf/viewsets.py:1018
msgid "create a brand"
msgstr "Vytvoření značky"
-#: engine/core/docs/drf/viewsets.py:967
+#: engine/core/docs/drf/viewsets.py:1025
msgid "delete a brand"
msgstr "Odstranění značky"
-#: engine/core/docs/drf/viewsets.py:974
+#: engine/core/docs/drf/viewsets.py:1032
msgid "rewrite an existing brand saving non-editables"
msgstr "Přepsání existující značky s uložením neupravitelných položek"
-#: engine/core/docs/drf/viewsets.py:981
+#: engine/core/docs/drf/viewsets.py:1039
msgid "rewrite some fields of an existing brand saving non-editables"
msgstr ""
"Přepsat některá pole existující kategorie a uložit neupravitelné položky"
-#: engine/core/docs/drf/viewsets.py:1006
+#: engine/core/docs/drf/viewsets.py:1064
msgid "list all vendors (simple view)"
msgstr "Seznam všech prodejců (jednoduché zobrazení)"
-#: engine/core/docs/drf/viewsets.py:1013
+#: engine/core/docs/drf/viewsets.py:1074
msgid "retrieve a single vendor (detailed view)"
msgstr "Získání jednoho prodejce (podrobné zobrazení)"
-#: engine/core/docs/drf/viewsets.py:1020
+#: engine/core/docs/drf/viewsets.py:1081
msgid "create a vendor"
msgstr "Vytvoření prodejce"
-#: engine/core/docs/drf/viewsets.py:1027
+#: engine/core/docs/drf/viewsets.py:1088
msgid "delete a vendor"
msgstr "Odstranění prodejce"
-#: engine/core/docs/drf/viewsets.py:1034
+#: engine/core/docs/drf/viewsets.py:1095
msgid "rewrite an existing vendor saving non-editables"
msgstr "Přepsání existujícího dodavatele s uložením neupravitelných položek"
-#: engine/core/docs/drf/viewsets.py:1041
+#: engine/core/docs/drf/viewsets.py:1102
msgid "rewrite some fields of an existing vendor saving non-editables"
msgstr ""
"Přepsat některá pole existující kategorie a uložit neupravitelné položky"
-#: engine/core/docs/drf/viewsets.py:1051
+#: engine/core/docs/drf/viewsets.py:1112
msgid "list all product images (simple view)"
msgstr "Seznam všech obrázků produktu (jednoduché zobrazení)"
-#: engine/core/docs/drf/viewsets.py:1058
+#: engine/core/docs/drf/viewsets.py:1122
msgid "retrieve a single product image (detailed view)"
msgstr "Získání jednoho obrázku produktu (podrobné zobrazení)"
-#: engine/core/docs/drf/viewsets.py:1065
+#: engine/core/docs/drf/viewsets.py:1129
msgid "create a product image"
msgstr "Vytvoření obrázku produktu"
-#: engine/core/docs/drf/viewsets.py:1072
+#: engine/core/docs/drf/viewsets.py:1139
msgid "delete a product image"
msgstr "Odstranění obrázku produktu"
-#: engine/core/docs/drf/viewsets.py:1079
+#: engine/core/docs/drf/viewsets.py:1146
msgid "rewrite an existing product image saving non-editables"
msgstr ""
"Přepsání existujícího obrázku produktu s uložením neupravitelných položek"
-#: engine/core/docs/drf/viewsets.py:1086
+#: engine/core/docs/drf/viewsets.py:1154
msgid "rewrite some fields of an existing product image saving non-editables"
msgstr ""
"Přepsat některá pole existující kategorie a uložit neupravitelné položky"
-#: engine/core/docs/drf/viewsets.py:1096
+#: engine/core/docs/drf/viewsets.py:1165
msgid "list all promo codes (simple view)"
msgstr "Seznam všech propagačních kódů (jednoduché zobrazení)"
-#: engine/core/docs/drf/viewsets.py:1103
+#: engine/core/docs/drf/viewsets.py:1175
msgid "retrieve a single promo code (detailed view)"
msgstr "Získání jednoho propagačního kódu (podrobné zobrazení)"
-#: engine/core/docs/drf/viewsets.py:1110
+#: engine/core/docs/drf/viewsets.py:1182
msgid "create a promo code"
msgstr "Vytvoření propagačního kódu"
-#: engine/core/docs/drf/viewsets.py:1117
+#: engine/core/docs/drf/viewsets.py:1189
msgid "delete a promo code"
msgstr "Odstranění propagačního kódu"
-#: engine/core/docs/drf/viewsets.py:1124
+#: engine/core/docs/drf/viewsets.py:1196
msgid "rewrite an existing promo code saving non-editables"
msgstr "Přepsání stávajícího propagačního kódu, který není určen k úpravám"
-#: engine/core/docs/drf/viewsets.py:1131
+#: engine/core/docs/drf/viewsets.py:1203
msgid "rewrite some fields of an existing promo code saving non-editables"
msgstr ""
"Přepsat některá pole existující kategorie a uložit neupravitelné položky"
-#: engine/core/docs/drf/viewsets.py:1141
+#: engine/core/docs/drf/viewsets.py:1213
msgid "list all promotions (simple view)"
msgstr "Seznam všech propagačních akcí (jednoduché zobrazení)"
-#: engine/core/docs/drf/viewsets.py:1148
+#: engine/core/docs/drf/viewsets.py:1223
msgid "retrieve a single promotion (detailed view)"
msgstr "Získání jednoho povýšení (podrobné zobrazení)"
-#: engine/core/docs/drf/viewsets.py:1155
+#: engine/core/docs/drf/viewsets.py:1230
msgid "create a promotion"
msgstr "Vytvořit propagaci"
-#: engine/core/docs/drf/viewsets.py:1162
+#: engine/core/docs/drf/viewsets.py:1237
msgid "delete a promotion"
msgstr "Odstranění povýšení"
-#: engine/core/docs/drf/viewsets.py:1169
+#: engine/core/docs/drf/viewsets.py:1244
msgid "rewrite an existing promotion saving non-editables"
-msgstr ""
-"Přepsání existující propagační akce s uložením neupravitelných položek"
+msgstr "Přepsání existující propagační akce s uložením neupravitelných položek"
-#: engine/core/docs/drf/viewsets.py:1176
+#: engine/core/docs/drf/viewsets.py:1251
msgid "rewrite some fields of an existing promotion saving non-editables"
msgstr ""
"Přepsat některá pole existující kategorie a uložit neupravitelné položky"
-#: engine/core/docs/drf/viewsets.py:1186
+#: engine/core/docs/drf/viewsets.py:1261
msgid "list all stocks (simple view)"
msgstr "Seznam všech zásob (jednoduché zobrazení)"
-#: engine/core/docs/drf/viewsets.py:1193
+#: engine/core/docs/drf/viewsets.py:1268
msgid "retrieve a single stock (detailed view)"
msgstr "Získání jedné zásoby (podrobné zobrazení)"
-#: engine/core/docs/drf/viewsets.py:1200
+#: engine/core/docs/drf/viewsets.py:1275
msgid "create a stock record"
msgstr "Vytvoření skladového záznamu"
-#: engine/core/docs/drf/viewsets.py:1207
+#: engine/core/docs/drf/viewsets.py:1282
msgid "delete a stock record"
msgstr "Odstranění skladového záznamu"
-#: engine/core/docs/drf/viewsets.py:1214
+#: engine/core/docs/drf/viewsets.py:1289
msgid "rewrite an existing stock record saving non-editables"
msgstr ""
"Přepsání existujícího skladového záznamu s uložením neupravitelných položek"
-#: engine/core/docs/drf/viewsets.py:1221
+#: engine/core/docs/drf/viewsets.py:1297
msgid "rewrite some fields of an existing stock record saving non-editables"
msgstr ""
"Přepsat některá pole existující kategorie a uložit neupravitelné položky"
-#: engine/core/docs/drf/viewsets.py:1231
+#: engine/core/docs/drf/viewsets.py:1308
msgid "list all product tags (simple view)"
msgstr "Seznam všech značek produktu (jednoduché zobrazení)"
-#: engine/core/docs/drf/viewsets.py:1238
+#: engine/core/docs/drf/viewsets.py:1318
msgid "retrieve a single product tag (detailed view)"
msgstr "Získání jedné značky produktu (podrobné zobrazení)"
-#: engine/core/docs/drf/viewsets.py:1245
+#: engine/core/docs/drf/viewsets.py:1325
msgid "create a product tag"
msgstr "Vytvoření značky produktu"
-#: engine/core/docs/drf/viewsets.py:1252
+#: engine/core/docs/drf/viewsets.py:1335
msgid "delete a product tag"
msgstr "Odstranění značky produktu"
-#: engine/core/docs/drf/viewsets.py:1259
+#: engine/core/docs/drf/viewsets.py:1342
msgid "rewrite an existing product tag saving non-editables"
-msgstr ""
-"Přepsání existující značky produktu s uložením neupravitelných položek"
+msgstr "Přepsání existující značky produktu s uložením neupravitelných položek"
-#: engine/core/docs/drf/viewsets.py:1266
+#: engine/core/docs/drf/viewsets.py:1350
msgid "rewrite some fields of an existing product tag saving non-editables"
msgstr ""
"Přepsat některá pole existující kategorie a uložit neupravitelné položky"
-#: engine/core/elasticsearch/__init__.py:122
-#: engine/core/elasticsearch/__init__.py:570
+#: engine/core/elasticsearch/__init__.py:127
+#: engine/core/elasticsearch/__init__.py:627
msgid "no search term provided."
msgstr "Nebyl zadán žádný vyhledávací termín."
-#: engine/core/filters.py:69 engine/core/filters.py:426
-#: engine/core/filters.py:553
+#: engine/core/filters.py:78 engine/core/filters.py:484
+#: engine/core/filters.py:625
msgid "Search"
msgstr "Vyhledávání"
-#: engine/core/filters.py:70 engine/core/filters.py:583
-#: engine/core/filters.py:612
+#: engine/core/filters.py:79 engine/core/filters.py:662
+#: engine/core/filters.py:691
msgid "UUID"
msgstr "UUID"
-#: engine/core/filters.py:71 engine/core/filters.py:428
-#: engine/core/filters.py:555
+#: engine/core/filters.py:80 engine/core/filters.py:487
+#: engine/core/filters.py:627
msgid "Name"
msgstr "Název"
-#: engine/core/filters.py:72 engine/core/filters.py:557
+#: engine/core/filters.py:82 engine/core/filters.py:630
msgid "Categories"
msgstr "Kategorie"
-#: engine/core/filters.py:74
+#: engine/core/filters.py:86
msgid "Categories Slugs"
msgstr "Kategorie Slimáci"
-#: engine/core/filters.py:75 engine/core/filters.py:436
+#: engine/core/filters.py:88 engine/core/filters.py:495
msgid "Tags"
msgstr "Štítky"
-#: engine/core/filters.py:76
+#: engine/core/filters.py:90
msgid "Min Price"
msgstr "Minimální cena"
-#: engine/core/filters.py:77
+#: engine/core/filters.py:93
msgid "Max Price"
msgstr "Max Price"
-#: engine/core/filters.py:78
+#: engine/core/filters.py:95
msgid "Is Active"
msgstr "Je aktivní"
-#: engine/core/filters.py:79
+#: engine/core/filters.py:96
msgid "Brand"
msgstr "Značka"
-#: engine/core/filters.py:80
+#: engine/core/filters.py:97
msgid "Attributes"
msgstr "Atributy"
-#: engine/core/filters.py:81
+#: engine/core/filters.py:99
msgid "Quantity"
msgstr "Množství"
-#: engine/core/filters.py:82 engine/core/filters.py:430
-#: engine/core/filters.py:556 engine/core/models.py:321
-#: engine/core/models.py:489 engine/core/models.py:644
+#: engine/core/filters.py:101 engine/core/filters.py:489
+#: engine/core/filters.py:628 engine/core/models.py:327
+#: engine/core/models.py:508 engine/core/models.py:665
msgid "Slug"
msgstr "Slug"
-#: engine/core/filters.py:83
+#: engine/core/filters.py:102
msgid "Is Digital"
msgstr "Je digitální"
-#: engine/core/filters.py:84
+#: engine/core/filters.py:104
msgid "Include sub-categories"
msgstr "Zahrnout podkategorie"
-#: engine/core/filters.py:87
+#: engine/core/filters.py:108
msgid "Include personal ordered"
msgstr "Zahrnout osobně objednané produkty"
-#: engine/core/filters.py:89 engine/core/models.py:648
+#: engine/core/filters.py:110 engine/core/models.py:669
msgid "SKU"
msgstr "SKU"
-#: engine/core/filters.py:184
+#: engine/core/filters.py:212
msgid "there must be a category_uuid to use include_subcategories flag"
msgstr ""
"Pro použití příznaku include_subcategories musí existovat category_uuid."
-#: engine/core/filters.py:353
+#: engine/core/filters.py:398
msgid "Search (ID, product name or part number)"
msgstr "Vyhledávání (ID, název produktu nebo číslo dílu)"
-#: engine/core/filters.py:356
+#: engine/core/filters.py:402
msgid "Bought after (inclusive)"
msgstr "Koupeno po (včetně)"
-#: engine/core/filters.py:357
+#: engine/core/filters.py:405
msgid "Bought before (inclusive)"
msgstr "Koupeno před (včetně)"
-#: engine/core/filters.py:360 engine/core/filters.py:407
-#: engine/core/filters.py:614
+#: engine/core/filters.py:410 engine/core/filters.py:461
+#: engine/core/filters.py:696
msgid "User email"
msgstr "E-mail uživatele"
-#: engine/core/filters.py:361 engine/core/filters.py:408
-#: engine/core/filters.py:592 engine/core/filters.py:613
+#: engine/core/filters.py:413 engine/core/filters.py:464
+#: engine/core/filters.py:671 engine/core/filters.py:693
msgid "User UUID"
msgstr "UUID uživatele"
-#: engine/core/filters.py:362
+#: engine/core/filters.py:415
msgid "Status"
msgstr "Stav"
-#: engine/core/filters.py:366
+#: engine/core/filters.py:419
msgid "Human Readable ID"
msgstr "Lidsky čitelné ID"
-#: engine/core/filters.py:429
+#: engine/core/filters.py:488
msgid "Parent"
msgstr "Rodič"
-#: engine/core/filters.py:433
+#: engine/core/filters.py:492
msgid "Whole category(has at least 1 product or not)"
msgstr "Celá kategorie (má nebo nemá alespoň 1 produkt)"
-#: engine/core/filters.py:437
+#: engine/core/filters.py:496
msgid "Level"
msgstr "Úroveň"
-#: engine/core/filters.py:587
+#: engine/core/filters.py:666
msgid "Product UUID"
msgstr "UUID produktu"
-#: engine/core/graphene/mutations.py:40
+#: engine/core/graphene/mutations.py:41
msgid "key to look for in or set into the cache"
msgstr "Klíč k vyhledání v keši nebo nastavení do keše"
-#: engine/core/graphene/mutations.py:41
+#: engine/core/graphene/mutations.py:43
msgid "data to store in cache"
msgstr "Data k uložení do mezipaměti"
-#: engine/core/graphene/mutations.py:44
+#: engine/core/graphene/mutations.py:46
msgid "timeout in seconds to set the data for into the cache"
msgstr "Časový limit v sekundách pro nastavení dat do mezipaměti"
-#: engine/core/graphene/mutations.py:47
+#: engine/core/graphene/mutations.py:49
msgid "cached data"
msgstr "Data uložená v mezipaměti"
-#: engine/core/graphene/mutations.py:62
+#: engine/core/graphene/mutations.py:64
msgid "camelized JSON data from the requested URL"
msgstr "Kamelizovaná data JSON z požadované adresy URL"
-#: engine/core/graphene/mutations.py:67 engine/core/views.py:257
+#: engine/core/graphene/mutations.py:69 engine/core/views.py:249
msgid "only URLs starting with http(s):// are allowed"
msgstr "Povoleny jsou pouze adresy URL začínající http(s)://."
-#: engine/core/graphene/mutations.py:83
+#: engine/core/graphene/mutations.py:87
msgid "add a product to the order"
msgstr "Přidání produktu do objednávky"
-#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131
-#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287
+#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139
+#: engine/core/graphene/mutations.py:255 engine/core/graphene/mutations.py:307
#, python-brace-format
msgid "order {order_uuid} not found"
msgstr "Objednávka {order_uuid} nebyla nalezena!"
-#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159
+#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167
msgid "remove a product from the order"
msgstr "Odstranění produktu z objednávky"
-#: engine/core/graphene/mutations.py:137
+#: engine/core/graphene/mutations.py:145
msgid "remove all products from the order"
msgstr "Odstranění všech produktů z objednávky"
-#: engine/core/graphene/mutations.py:182
+#: engine/core/graphene/mutations.py:190
msgid "buy an order"
msgstr "Koupit objednávku"
-#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265
+#: engine/core/graphene/mutations.py:221 engine/core/graphene/mutations.py:283
msgid "please provide either order_uuid or order_hr_id - mutually exclusive"
msgstr "Zadejte prosím order_uuid nebo order_hr_id - vzájemně se vylučují!"
-#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501
-#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712
+#: engine/core/graphene/mutations.py:250 engine/core/graphene/mutations.py:525
+#: engine/core/graphene/mutations.py:574 engine/core/viewsets.py:753
msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr "Z metody order.buy() pochází nesprávný typ: {type(instance)!s}"
-#: engine/core/graphene/mutations.py:245
+#: engine/core/graphene/mutations.py:261
msgid "perform an action on a list of products in the order"
msgstr "Provedení akce na seznamu produktů v objednávce"
-#: engine/core/graphene/mutations.py:250
+#: engine/core/graphene/mutations.py:266
msgid "remove/add"
msgstr "Odebrat/přidat"
-#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323
+#: engine/core/graphene/mutations.py:302 engine/core/graphene/mutations.py:343
msgid "action must be either add or remove"
msgstr "Akce musí být buď \"přidat\", nebo \"odebrat\"!"
-#: engine/core/graphene/mutations.py:293
+#: engine/core/graphene/mutations.py:313
msgid "perform an action on a list of products in the wishlist"
msgstr "Provedení akce na seznamu produktů v seznamu přání"
-#: engine/core/graphene/mutations.py:311
+#: engine/core/graphene/mutations.py:331
msgid "please provide wishlist_uuid value"
msgstr "Zadejte prosím hodnotu `wishlist_uuid`."
-#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404
-#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460
-#: engine/core/graphene/mutations.py:504
+#: engine/core/graphene/mutations.py:348 engine/core/graphene/mutations.py:424
+#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480
+#: engine/core/graphene/mutations.py:530
#, python-brace-format
msgid "wishlist {wishlist_uuid} not found"
msgstr "Seznam přání {wishlist_uuid} nenalezen!"
-#: engine/core/graphene/mutations.py:382
+#: engine/core/graphene/mutations.py:402
msgid "add a product to the wishlist"
msgstr "Přidání produktu do objednávky"
-#: engine/core/graphene/mutations.py:410
+#: engine/core/graphene/mutations.py:430
msgid "remove a product from the wishlist"
msgstr "Odstranění produktu z objednávky"
-#: engine/core/graphene/mutations.py:438
+#: engine/core/graphene/mutations.py:458
msgid "remove all products from the wishlist"
msgstr "Odstranění produktu z objednávky"
-#: engine/core/graphene/mutations.py:466
+#: engine/core/graphene/mutations.py:486
msgid "buy all products from the wishlist"
msgstr "Odstranění produktu z objednávky"
-#: engine/core/graphene/mutations.py:510
+#: engine/core/graphene/mutations.py:536
msgid "buy a product"
msgstr "Koupit objednávku"
-#: engine/core/graphene/mutations.py:516
+#: engine/core/graphene/mutations.py:543
msgid ""
-"please send the attributes as the string formatted like "
-"attr1=value1,attr2=value2"
+"please send the attributes as the string formatted like attr1=value1,"
+"attr2=value2"
msgstr ""
-"Prosím, pošlete atributy jako řetězec ve formátu "
-"attr1=hodnota1,attr2=hodnota2."
+"Prosím, pošlete atributy jako řetězec ve formátu attr1=hodnota1,"
+"attr2=hodnota2."
-#: engine/core/graphene/mutations.py:549
+#: engine/core/graphene/mutations.py:581
msgid "add or delete a feedback for orderproduct"
msgstr "Přidání nebo odstranění zpětné vazby pro objednávkuprodukt"
-#: engine/core/graphene/mutations.py:573
+#: engine/core/graphene/mutations.py:607
msgid "action must be either `add` or `remove`"
msgstr "Akce musí být buď `add` nebo `remove`!"
-#: engine/core/graphene/mutations.py:576
+#: engine/core/graphene/mutations.py:610
#, python-brace-format
msgid "order product {order_product_uuid} not found"
msgstr "Orderproduct {order_product_uuid} nenalezen!"
-#: engine/core/graphene/mutations.py:582
+#: engine/core/graphene/mutations.py:617
msgid "original address string provided by the user"
msgstr "Původní řetězec adresy zadaný uživatelem"
-#: engine/core/graphene/mutations.py:618 engine/core/models.py:955
-#: engine/core/models.py:968 engine/core/models.py:1383
-#: engine/core/models.py:1412 engine/core/models.py:1437
-#: engine/core/viewsets.py:715
+#: engine/core/graphene/mutations.py:654 engine/core/models.py:978
+#: engine/core/models.py:991 engine/core/models.py:1435
+#: engine/core/models.py:1466 engine/core/models.py:1497
+#: engine/core/viewsets.py:760
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr "{name} neexistuje: {uuid}!"
-#: engine/core/graphene/mutations.py:632
+#: engine/core/graphene/mutations.py:668
msgid "limit must be between 1 and 10"
msgstr "Limit musí být mezi 1 a 10"
-#: engine/core/graphene/mutations.py:681
+#: engine/core/graphene/mutations.py:717
msgid "elasticsearch - works like a charm"
msgstr "ElasticSearch - funguje jako kouzlo"
#: engine/core/graphene/object_types.py:82
-#: engine/core/graphene/object_types.py:370
-#: engine/core/graphene/object_types.py:417 engine/core/models.py:772
-#: engine/core/models.py:1250 engine/core/models.py:1897
+#: engine/core/graphene/object_types.py:417
+#: engine/core/graphene/object_types.py:468 engine/core/models.py:795
+#: engine/core/models.py:1289 engine/core/models.py:2021
msgid "attributes"
msgstr "Atributy"
@@ -1258,90 +1263,88 @@ msgid "groups of attributes"
msgstr "Skupiny atributů"
#: engine/core/graphene/object_types.py:116
-#: engine/core/graphene/object_types.py:193
-#: engine/core/graphene/object_types.py:223 engine/core/models.py:432
+#: engine/core/graphene/object_types.py:214
+#: engine/core/graphene/object_types.py:252 engine/core/models.py:451
msgid "categories"
msgstr "Kategorie"
-#: engine/core/graphene/object_types.py:124 engine/core/models.py:503
+#: engine/core/graphene/object_types.py:132 engine/core/models.py:522
msgid "brands"
msgstr "Značky"
-#: engine/core/graphene/object_types.py:195
+#: engine/core/graphene/object_types.py:216
msgid "category image url"
msgstr "Kategorie"
-#: engine/core/graphene/object_types.py:196
-#: engine/core/graphene/object_types.py:317 engine/core/models.py:283
+#: engine/core/graphene/object_types.py:217
+#: engine/core/graphene/object_types.py:362 engine/core/models.py:289
msgid "markup percentage"
msgstr "Procento přirážky"
-#: engine/core/graphene/object_types.py:199
+#: engine/core/graphene/object_types.py:221
msgid "which attributes and values can be used for filtering this category."
msgstr "Které atributy a hodnoty lze použít pro filtrování této kategorie."
-#: engine/core/graphene/object_types.py:203
-msgid ""
-"minimum and maximum prices for products in this category, if available."
+#: engine/core/graphene/object_types.py:227
+msgid "minimum and maximum prices for products in this category, if available."
msgstr ""
-"Minimální a maximální ceny produktů v této kategorii, pokud jsou k "
-"dispozici."
+"Minimální a maximální ceny produktů v této kategorii, pokud jsou k dispozici."
-#: engine/core/graphene/object_types.py:205
+#: engine/core/graphene/object_types.py:231
msgid "tags for this category"
msgstr "Štítky pro tuto kategorii"
-#: engine/core/graphene/object_types.py:206
+#: engine/core/graphene/object_types.py:234
msgid "products in this category"
msgstr "Produkty v této kategorii"
-#: engine/core/graphene/object_types.py:324 engine/core/models.py:188
+#: engine/core/graphene/object_types.py:369 engine/core/models.py:194
msgid "vendors"
msgstr "Prodejci"
-#: engine/core/graphene/object_types.py:328
+#: engine/core/graphene/object_types.py:373
msgid "Latitude (Y coordinate)"
msgstr "Zeměpisná šířka (souřadnice Y)"
-#: engine/core/graphene/object_types.py:329
+#: engine/core/graphene/object_types.py:374
msgid "Longitude (X coordinate)"
msgstr "Zeměpisná délka (souřadnice X)"
-#: engine/core/graphene/object_types.py:358
+#: engine/core/graphene/object_types.py:403
msgid "comment"
msgstr "Jak na to"
-#: engine/core/graphene/object_types.py:359
-#: engine/core/graphene/object_types.py:483
+#: engine/core/graphene/object_types.py:405
+#: engine/core/graphene/object_types.py:539
msgid "rating value from 1 to 10, inclusive, or 0 if not set."
msgstr "Hodnota hodnocení od 1 do 10 včetně nebo 0, pokud není nastaveno."
-#: engine/core/graphene/object_types.py:366
+#: engine/core/graphene/object_types.py:413
msgid "represents feedback from a user."
msgstr "Představuje zpětnou vazbu od uživatele."
-#: engine/core/graphene/object_types.py:371
-#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244
+#: engine/core/graphene/object_types.py:418
+#: engine/core/graphene/object_types.py:469 engine/core/models.py:1283
msgid "notifications"
msgstr "Oznámení"
-#: engine/core/graphene/object_types.py:372
+#: engine/core/graphene/object_types.py:420
msgid "download url for this order product if applicable"
msgstr "Stáhněte si url adresu pro tento objednaný produkt, pokud je to možné"
-#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736
+#: engine/core/graphene/object_types.py:422 engine/core/models.py:1848
msgid "feedback"
msgstr "Zpětná vazba"
-#: engine/core/graphene/object_types.py:407
+#: engine/core/graphene/object_types.py:456
msgid "a list of order products in this order"
msgstr "Seznam objednaných produktů v tomto pořadí"
-#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214
+#: engine/core/graphene/object_types.py:458 engine/core/models.py:1253
msgid "billing address"
msgstr "Fakturační adresa"
-#: engine/core/graphene/object_types.py:412
+#: engine/core/graphene/object_types.py:462
msgid ""
"shipping address for this order, leave blank if same as billing address or "
"if not applicable"
@@ -1349,53 +1352,53 @@ msgstr ""
"Dodací adresa pro tuto objednávku, pokud je stejná jako fakturační adresa "
"nebo pokud není použitelná, ponechte prázdné."
-#: engine/core/graphene/object_types.py:414
+#: engine/core/graphene/object_types.py:465
msgid "total price of this order"
msgstr "Celková cena této objednávky"
-#: engine/core/graphene/object_types.py:415
+#: engine/core/graphene/object_types.py:466
msgid "total quantity of products in order"
msgstr "Celkové množství objednaných produktů"
-#: engine/core/graphene/object_types.py:416
+#: engine/core/graphene/object_types.py:467
msgid "are all products in the order digital"
msgstr "Jsou všechny produkty v objednávce digitální"
-#: engine/core/graphene/object_types.py:419
+#: engine/core/graphene/object_types.py:471
msgid "transactions for this order"
msgstr "Transakce pro tuto objednávku"
-#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278
+#: engine/core/graphene/object_types.py:491 engine/core/models.py:1317
msgid "orders"
msgstr "Objednávky"
-#: engine/core/graphene/object_types.py:459
+#: engine/core/graphene/object_types.py:512
msgid "image url"
msgstr "Adresa URL obrázku"
-#: engine/core/graphene/object_types.py:466
+#: engine/core/graphene/object_types.py:519
msgid "product's images"
msgstr "Obrázky produktu"
-#: engine/core/graphene/object_types.py:473 engine/core/models.py:431
-#: engine/core/models.py:586
+#: engine/core/graphene/object_types.py:526 engine/core/models.py:450
+#: engine/core/models.py:607
msgid "category"
msgstr "Kategorie"
-#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737
+#: engine/core/graphene/object_types.py:528 engine/core/models.py:1849
msgid "feedbacks"
msgstr "Zpětná vazba"
-#: engine/core/graphene/object_types.py:476 engine/core/models.py:502
-#: engine/core/models.py:595
+#: engine/core/graphene/object_types.py:529 engine/core/models.py:521
+#: engine/core/models.py:616
msgid "brand"
msgstr "Značka"
-#: engine/core/graphene/object_types.py:477 engine/core/models.py:106
+#: engine/core/graphene/object_types.py:531 engine/core/models.py:106
msgid "attribute groups"
msgstr "Skupiny atributů"
-#: engine/core/graphene/object_types.py:478
+#: engine/core/graphene/object_types.py:533
#: engine/core/templates/digital_order_created_email.html:111
#: engine/core/templates/digital_order_delivered_email.html:109
#: engine/core/templates/shipped_order_created_email.html:109
@@ -1403,7 +1406,7 @@ msgstr "Skupiny atributů"
msgid "price"
msgstr "Cena"
-#: engine/core/graphene/object_types.py:479
+#: engine/core/graphene/object_types.py:534
#: engine/core/templates/digital_order_created_email.html:110
#: engine/core/templates/digital_order_delivered_email.html:108
#: engine/core/templates/shipped_order_created_email.html:108
@@ -1411,39 +1414,39 @@ msgstr "Cena"
msgid "quantity"
msgstr "Množství"
-#: engine/core/graphene/object_types.py:480
+#: engine/core/graphene/object_types.py:535
msgid "number of feedbacks"
msgstr "Počet zpětných vazeb"
-#: engine/core/graphene/object_types.py:481
+#: engine/core/graphene/object_types.py:536
msgid "only available for personal orders"
msgstr "Produkty jsou k dispozici pouze pro osobní objednávky"
-#: engine/core/graphene/object_types.py:484
+#: engine/core/graphene/object_types.py:541
msgid "discount price"
msgstr "Cena se slevou"
-#: engine/core/graphene/object_types.py:508 engine/core/models.py:658
+#: engine/core/graphene/object_types.py:565 engine/core/models.py:679
msgid "products"
msgstr "Produkty"
-#: engine/core/graphene/object_types.py:611
+#: engine/core/graphene/object_types.py:675
msgid "promocodes"
msgstr "Propagační kódy"
-#: engine/core/graphene/object_types.py:621
+#: engine/core/graphene/object_types.py:690
msgid "products on sale"
msgstr "Produkty v prodeji"
-#: engine/core/graphene/object_types.py:628 engine/core/models.py:904
+#: engine/core/graphene/object_types.py:698 engine/core/models.py:927
msgid "promotions"
msgstr "Propagační akce"
-#: engine/core/graphene/object_types.py:632 engine/core/models.py:187
+#: engine/core/graphene/object_types.py:702 engine/core/models.py:193
msgid "vendor"
msgstr "Prodejce"
-#: engine/core/graphene/object_types.py:633 engine/core/models.py:657
+#: engine/core/graphene/object_types.py:703 engine/core/models.py:678
#: engine/core/templates/digital_order_created_email.html:109
#: engine/core/templates/digital_order_delivered_email.html:107
#: engine/core/templates/shipped_order_created_email.html:107
@@ -1451,99 +1454,99 @@ msgstr "Prodejce"
msgid "product"
msgstr "Produkt"
-#: engine/core/graphene/object_types.py:644 engine/core/models.py:927
+#: engine/core/graphene/object_types.py:715 engine/core/models.py:950
msgid "wishlisted products"
msgstr "Produkty uvedené na seznamu přání"
-#: engine/core/graphene/object_types.py:650 engine/core/models.py:944
+#: engine/core/graphene/object_types.py:722 engine/core/models.py:967
msgid "wishlists"
msgstr "Seznamy přání"
-#: engine/core/graphene/object_types.py:654
+#: engine/core/graphene/object_types.py:727
msgid "tagged products"
msgstr "Produkty s příznakem"
-#: engine/core/graphene/object_types.py:661 engine/core/models.py:224
-#: engine/core/models.py:601
+#: engine/core/graphene/object_types.py:735 engine/core/models.py:230
+#: engine/core/models.py:622
msgid "product tags"
msgstr "Štítky produktu"
-#: engine/core/graphene/object_types.py:665
+#: engine/core/graphene/object_types.py:740
msgid "tagged categories"
msgstr "Kategorie s příznakem"
-#: engine/core/graphene/object_types.py:672
+#: engine/core/graphene/object_types.py:748
msgid "categories tags"
msgstr "Štítky kategorií"
-#: engine/core/graphene/object_types.py:676
+#: engine/core/graphene/object_types.py:752
msgid "project name"
msgstr "Název projektu"
-#: engine/core/graphene/object_types.py:677
+#: engine/core/graphene/object_types.py:753
msgid "company name"
msgstr "Název společnosti"
-#: engine/core/graphene/object_types.py:678
+#: engine/core/graphene/object_types.py:754
msgid "company address"
msgstr "Adresa společnosti"
-#: engine/core/graphene/object_types.py:679
+#: engine/core/graphene/object_types.py:755
msgid "company phone number"
msgstr "Telefonní číslo společnosti"
-#: engine/core/graphene/object_types.py:680
+#: engine/core/graphene/object_types.py:758
msgid "email from, sometimes it must be used instead of host user value"
msgstr ""
"'email from', někdy se musí použít místo hodnoty hostitelského uživatele."
-#: engine/core/graphene/object_types.py:681
+#: engine/core/graphene/object_types.py:761
msgid "email host user"
msgstr "Uživatel hostitelského e-mailu"
-#: engine/core/graphene/object_types.py:682
+#: engine/core/graphene/object_types.py:762
msgid "maximum amount for payment"
msgstr "Maximální částka pro platbu"
-#: engine/core/graphene/object_types.py:683
+#: engine/core/graphene/object_types.py:763
msgid "minimum amount for payment"
msgstr "Minimální částka pro platbu"
-#: engine/core/graphene/object_types.py:684
+#: engine/core/graphene/object_types.py:764
msgid "analytics data"
msgstr "Analytická data"
-#: engine/core/graphene/object_types.py:685
+#: engine/core/graphene/object_types.py:765
msgid "advertisement data"
msgstr "Reklamní údaje"
-#: engine/core/graphene/object_types.py:688
+#: engine/core/graphene/object_types.py:768
msgid "company configuration"
msgstr "Konfigurace"
-#: engine/core/graphene/object_types.py:692
+#: engine/core/graphene/object_types.py:772
msgid "language code"
msgstr "Kód jazyka"
-#: engine/core/graphene/object_types.py:693
+#: engine/core/graphene/object_types.py:773
msgid "language name"
msgstr "Název jazyka"
-#: engine/core/graphene/object_types.py:694
+#: engine/core/graphene/object_types.py:774
msgid "language flag, if exists :)"
msgstr "Příznak jazyka, pokud existuje :)"
-#: engine/core/graphene/object_types.py:697
+#: engine/core/graphene/object_types.py:777
msgid "supported languages"
msgstr "Získat seznam podporovaných jazyků"
-#: engine/core/graphene/object_types.py:728
-#: engine/core/graphene/object_types.py:729
-#: engine/core/graphene/object_types.py:730
+#: engine/core/graphene/object_types.py:809
+#: engine/core/graphene/object_types.py:812
+#: engine/core/graphene/object_types.py:815
msgid "products search results"
msgstr "Výsledky vyhledávání produktů"
-#: engine/core/graphene/object_types.py:731
+#: engine/core/graphene/object_types.py:817
msgid "posts search results"
msgstr "Výsledky vyhledávání produktů"
@@ -1572,7 +1575,7 @@ msgstr "Nadřazená skupina atributů"
msgid "attribute group's name"
msgstr "Název skupiny atributů"
-#: engine/core/models.py:105 engine/core/models.py:734
+#: engine/core/models.py:105 engine/core/models.py:755
msgid "attribute group"
msgstr "Skupina atributů"
@@ -1590,53 +1593,53 @@ msgstr ""
"dodavatelích a jejich požadavcích na interakci. Třída Vendor se používá k "
"definování a správě informací týkajících se externího dodavatele. Uchovává "
"jméno prodejce, údaje o ověření požadované pro komunikaci a procentuální "
-"přirážku použitou na produkty získané od prodejce. Tento model také uchovává"
-" další metadata a omezení, takže je vhodný pro použití v systémech, které "
+"přirážku použitou na produkty získané od prodejce. Tento model také uchovává "
+"další metadata a omezení, takže je vhodný pro použití v systémech, které "
"komunikují s prodejci třetích stran."
-#: engine/core/models.py:124
+#: engine/core/models.py:125
msgid "stores credentials and endpoints required for vendor communication"
msgstr ""
"Ukládá pověření a koncové body potřebné pro komunikaci s rozhraním API "
"dodavatele."
-#: engine/core/models.py:125
+#: engine/core/models.py:127
msgid "authentication info"
msgstr "Informace o ověřování"
-#: engine/core/models.py:130
+#: engine/core/models.py:132
msgid "define the markup for products retrieved from this vendor"
msgstr "Definice přirážky pro produkty získané od tohoto dodavatele"
-#: engine/core/models.py:131
+#: engine/core/models.py:133
msgid "vendor markup percentage"
msgstr "Procento přirážky prodejce"
-#: engine/core/models.py:135
+#: engine/core/models.py:137
msgid "name of this vendor"
msgstr "Název tohoto prodejce"
-#: engine/core/models.py:136
+#: engine/core/models.py:138
msgid "vendor name"
msgstr "Název prodejce"
-#: engine/core/models.py:147
+#: engine/core/models.py:153
msgid "response file"
msgstr "soubor s odpovědí"
-#: engine/core/models.py:148
+#: engine/core/models.py:154
msgid "vendor's last processing response"
msgstr "poslední odpověď prodejce na zpracování"
-#: engine/core/models.py:154
+#: engine/core/models.py:160
msgid "vendor's integration file path"
msgstr "Cesta k integračnímu souboru prodejce"
-#: engine/core/models.py:155
+#: engine/core/models.py:161
msgid "integration path"
msgstr "Cesta integrace"
-#: engine/core/models.py:197
+#: engine/core/models.py:203
msgid ""
"Represents a product tag used for classifying or identifying products. The "
"ProductTag class is designed to uniquely identify and classify products "
@@ -1650,27 +1653,27 @@ msgstr ""
"přívětivého zobrazovacího názvu. Podporuje operace exportované "
"prostřednictvím mixinů a poskytuje přizpůsobení metadat pro účely správy."
-#: engine/core/models.py:209 engine/core/models.py:240
+#: engine/core/models.py:215 engine/core/models.py:246
msgid "internal tag identifier for the product tag"
msgstr "Interní identifikátor značky produktu"
-#: engine/core/models.py:210 engine/core/models.py:241
+#: engine/core/models.py:216 engine/core/models.py:247
msgid "tag name"
msgstr "Název štítku"
-#: engine/core/models.py:214 engine/core/models.py:245
+#: engine/core/models.py:220 engine/core/models.py:251
msgid "user-friendly name for the product tag"
msgstr "Uživatelsky přívětivý název pro značku produktu"
-#: engine/core/models.py:215 engine/core/models.py:246
+#: engine/core/models.py:221 engine/core/models.py:252
msgid "tag display name"
msgstr "Zobrazení názvu štítku"
-#: engine/core/models.py:223
+#: engine/core/models.py:229
msgid "product tag"
msgstr "Štítek produktu"
-#: engine/core/models.py:229
+#: engine/core/models.py:235
msgid ""
"Represents a category tag used for products. This class models a category "
"tag that can be used to associate and classify products. It includes "
@@ -1681,15 +1684,15 @@ msgstr ""
"Obsahuje atributy pro interní identifikátor značky a uživatelsky přívětivý "
"zobrazovací název."
-#: engine/core/models.py:254
+#: engine/core/models.py:260
msgid "category tag"
msgstr "značka kategorie"
-#: engine/core/models.py:255 engine/core/models.py:327
+#: engine/core/models.py:261 engine/core/models.py:333
msgid "category tags"
msgstr "štítky kategorií"
-#: engine/core/models.py:260
+#: engine/core/models.py:266
msgid ""
"Represents a category entity to organize and group related items in a "
"hierarchical structure. Categories may have hierarchical relationships with "
@@ -1706,112 +1709,111 @@ msgstr ""
"jinými kategoriemi a podporovat vztahy rodič-dítě. Třída obsahuje pole pro "
"metadata a vizuální zobrazení, která slouží jako základ pro funkce "
"související s kategoriemi. Tato třída se obvykle používá k definování a "
-"správě kategorií produktů nebo jiných podobných seskupení v rámci aplikace a"
-" umožňuje uživatelům nebo správcům zadávat název, popis a hierarchii "
+"správě kategorií produktů nebo jiných podobných seskupení v rámci aplikace a "
+"umožňuje uživatelům nebo správcům zadávat název, popis a hierarchii "
"kategorií a také přiřazovat atributy, jako jsou obrázky, značky nebo "
"priorita."
-#: engine/core/models.py:274
+#: engine/core/models.py:280
msgid "upload an image representing this category"
msgstr "Nahrát obrázek reprezentující tuto kategorii"
-#: engine/core/models.py:277
+#: engine/core/models.py:283
msgid "category image"
msgstr "Obrázek kategorie"
-#: engine/core/models.py:282
+#: engine/core/models.py:288
msgid "define a markup percentage for products in this category"
msgstr "Definovat procento přirážky pro produkty v této kategorii."
-#: engine/core/models.py:291
+#: engine/core/models.py:297
msgid "parent of this category to form a hierarchical structure"
msgstr "Nadřízený této kategorie, který tvoří hierarchickou strukturu."
-#: engine/core/models.py:292
+#: engine/core/models.py:298
msgid "parent category"
msgstr "Nadřazená kategorie"
-#: engine/core/models.py:297
+#: engine/core/models.py:303
msgid "category name"
msgstr "Název kategorie"
-#: engine/core/models.py:298
+#: engine/core/models.py:304
msgid "provide a name for this category"
msgstr "Uveďte název této kategorie"
-#: engine/core/models.py:305
+#: engine/core/models.py:311
msgid "add a detailed description for this category"
msgstr "Přidejte podrobný popis této kategorie"
-#: engine/core/models.py:306
+#: engine/core/models.py:312
msgid "category description"
msgstr "Popis kategorie"
-#: engine/core/models.py:326
+#: engine/core/models.py:332
msgid "tags that help describe or group this category"
msgstr "značky, které pomáhají popsat nebo seskupit tuto kategorii"
-#: engine/core/models.py:333 engine/core/models.py:495
+#: engine/core/models.py:339 engine/core/models.py:514
msgid "priority"
msgstr "Priorita"
-#: engine/core/models.py:438
+#: engine/core/models.py:457
msgid ""
"Represents a Brand object in the system. This class handles information and "
"attributes related to a brand, including its name, logos, description, "
"associated categories, a unique slug, and priority order. It allows for the "
-"organization and representation of brand-related data within the "
-"application."
+"organization and representation of brand-related data within the application."
msgstr ""
"Reprezentuje objekt značky v systému. Tato třída zpracovává informace a "
"atributy související se značkou, včetně jejího názvu, loga, popisu, "
"přidružených kategorií, jedinečného slugu a pořadí důležitosti. Umožňuje "
"organizaci a reprezentaci dat souvisejících se značkou v rámci aplikace."
-#: engine/core/models.py:448
+#: engine/core/models.py:467
msgid "name of this brand"
msgstr "Název této značky"
-#: engine/core/models.py:449
+#: engine/core/models.py:468
msgid "brand name"
msgstr "Název značky"
-#: engine/core/models.py:456
+#: engine/core/models.py:475
msgid "upload a logo representing this brand"
msgstr "Nahrát logo reprezentující tuto značku"
-#: engine/core/models.py:458
+#: engine/core/models.py:477
msgid "brand small image"
msgstr "Malý obrázek značky"
-#: engine/core/models.py:464
+#: engine/core/models.py:483
msgid "upload a big logo representing this brand"
msgstr "Nahrát velké logo reprezentující tuto značku"
-#: engine/core/models.py:466
+#: engine/core/models.py:485
msgid "brand big image"
msgstr "Velká image značky"
-#: engine/core/models.py:471
+#: engine/core/models.py:490
msgid "add a detailed description of the brand"
msgstr "Přidejte podrobný popis značky"
-#: engine/core/models.py:472
+#: engine/core/models.py:491
msgid "brand description"
msgstr "Popis značky"
-#: engine/core/models.py:477
+#: engine/core/models.py:496
msgid "optional categories that this brand is associated with"
msgstr "Volitelné kategorie, se kterými je tato značka spojena"
-#: engine/core/models.py:478
+#: engine/core/models.py:497
msgid "associated categories"
msgstr "Kategorie"
-#: engine/core/models.py:508
+#: engine/core/models.py:527
msgid ""
-"Represents the stock of a product managed in the system. This class provides"
-" details about the relationship between vendors, products, and their stock "
+"Represents the stock of a product managed in the system. This class provides "
+"details about the relationship between vendors, products, and their stock "
"information, as well as inventory-related properties like price, purchase "
"price, quantity, SKU, and digital assets. It is part of the inventory "
"management system to allow tracking and evaluation of products available "
@@ -1824,72 +1826,72 @@ msgstr ""
"zásob, který umožňuje sledovat a vyhodnocovat produkty dostupné od různých "
"dodavatelů."
-#: engine/core/models.py:520
+#: engine/core/models.py:539
msgid "the vendor supplying this product stock"
msgstr "Prodejce dodávající tento výrobek na sklad"
-#: engine/core/models.py:521
+#: engine/core/models.py:540
msgid "associated vendor"
msgstr "Přidružený prodejce"
-#: engine/core/models.py:525
+#: engine/core/models.py:544
msgid "final price to the customer after markups"
msgstr "Konečná cena pro zákazníka po přirážkách"
-#: engine/core/models.py:526
+#: engine/core/models.py:545
msgid "selling price"
msgstr "Prodejní cena"
-#: engine/core/models.py:531
+#: engine/core/models.py:550
msgid "the product associated with this stock entry"
msgstr "Produkt spojený s touto skladovou položkou"
-#: engine/core/models.py:532 engine/core/models.py:797
-#: engine/core/models.py:843 engine/core/models.py:1792
+#: engine/core/models.py:551 engine/core/models.py:820
+#: engine/core/models.py:866 engine/core/models.py:1904
msgid "associated product"
msgstr "Související produkt"
-#: engine/core/models.py:539
+#: engine/core/models.py:558
msgid "the price paid to the vendor for this product"
msgstr "Cena zaplacená prodejci za tento výrobek"
-#: engine/core/models.py:540
+#: engine/core/models.py:559
msgid "vendor purchase price"
msgstr "Kupní cena prodejce"
-#: engine/core/models.py:544
+#: engine/core/models.py:563
msgid "available quantity of the product in stock"
msgstr "Dostupné množství produktu na skladě"
-#: engine/core/models.py:545
+#: engine/core/models.py:564
msgid "quantity in stock"
msgstr "Množství na skladě"
-#: engine/core/models.py:549
+#: engine/core/models.py:568
msgid "vendor-assigned SKU for identifying the product"
msgstr "SKU přidělený prodejcem pro identifikaci výrobku"
-#: engine/core/models.py:550
+#: engine/core/models.py:569
msgid "vendor sku"
msgstr "SKU prodejce"
-#: engine/core/models.py:556
+#: engine/core/models.py:575
msgid "digital file associated with this stock if applicable"
msgstr "Digitální soubor spojený s touto zásobou, je-li to vhodné"
-#: engine/core/models.py:557
+#: engine/core/models.py:576
msgid "digital file"
msgstr "Digitální soubor"
-#: engine/core/models.py:560
+#: engine/core/models.py:580
msgid "system attributes"
msgstr "Atributy systému"
-#: engine/core/models.py:567
+#: engine/core/models.py:588
msgid "stock entries"
msgstr "Zápisy do zásob"
-#: engine/core/models.py:572
+#: engine/core/models.py:593
msgid ""
"Represents a product with attributes such as category, brand, tags, digital "
"status, name, description, part number, and slug. Provides related utility "
@@ -1904,67 +1906,67 @@ msgstr ""
"digitální stav, název, popis, číslo dílu a přípona. Poskytuje související "
"užitečné vlastnosti pro získání hodnocení, počtu zpětných vazeb, ceny, "
"množství a celkového počtu objednávek. Určeno pro použití v systému, který "
-"zpracovává elektronické obchodování nebo správu zásob. Tato třída komunikuje"
-" se souvisejícími modely (například Category, Brand a ProductTag) a spravuje"
-" ukládání často přistupovaných vlastností do mezipaměti pro zlepšení výkonu."
-" Používá se k definování a manipulaci s údaji o produktu a souvisejícími "
+"zpracovává elektronické obchodování nebo správu zásob. Tato třída komunikuje "
+"se souvisejícími modely (například Category, Brand a ProductTag) a spravuje "
+"ukládání často přistupovaných vlastností do mezipaměti pro zlepšení výkonu. "
+"Používá se k definování a manipulaci s údaji o produktu a souvisejícími "
"informacemi v rámci aplikace."
-#: engine/core/models.py:585
+#: engine/core/models.py:606
msgid "category this product belongs to"
msgstr "Kategorie, do které tento produkt patří"
-#: engine/core/models.py:594
+#: engine/core/models.py:615
msgid "optionally associate this product with a brand"
msgstr "Volitelně přiřadit tento produkt ke značce"
-#: engine/core/models.py:600
+#: engine/core/models.py:621
msgid "tags that help describe or group this product"
msgstr "Značky, které pomáhají popsat nebo seskupit tento produkt"
-#: engine/core/models.py:605
+#: engine/core/models.py:626
msgid "indicates whether this product is digitally delivered"
msgstr "Označuje, zda je tento produkt dodáván digitálně"
-#: engine/core/models.py:606
+#: engine/core/models.py:627
msgid "is product digital"
msgstr "Je produkt digitální"
-#: engine/core/models.py:612
+#: engine/core/models.py:633
msgid "provide a clear identifying name for the product"
msgstr "Uveďte jasný identifikační název výrobku"
-#: engine/core/models.py:613
+#: engine/core/models.py:634
msgid "product name"
msgstr "Název produktu"
-#: engine/core/models.py:619 engine/core/models.py:892
+#: engine/core/models.py:640 engine/core/models.py:915
msgid "add a detailed description of the product"
msgstr "Přidejte podrobný popis produktu"
-#: engine/core/models.py:620
+#: engine/core/models.py:641
msgid "product description"
msgstr "Popis produktu"
-#: engine/core/models.py:627
+#: engine/core/models.py:648
msgid "part number for this product"
msgstr "Číslo dílu pro tento produkt"
-#: engine/core/models.py:628
+#: engine/core/models.py:649
msgid "part number"
msgstr "Číslo dílu"
-#: engine/core/models.py:647
+#: engine/core/models.py:668
msgid "stock keeping unit for this product"
msgstr "Skladová jednotka pro tento produkt"
-#: engine/core/models.py:720
+#: engine/core/models.py:741
msgid ""
"Represents an attribute in the system. This class is used to define and "
"manage attributes, which are customizable pieces of data that can be "
"associated with other entities. Attributes have associated categories, "
-"groups, value types, and names. The model supports multiple types of values,"
-" including string, integer, float, boolean, array, and object. This allows "
+"groups, value types, and names. The model supports multiple types of values, "
+"including string, integer, float, boolean, array, and object. This allows "
"for dynamic and flexible data structuring."
msgstr ""
"Reprezentuje atribut v systému. Tato třída slouží k definování a správě "
@@ -1974,179 +1976,179 @@ msgstr ""
"booleanu, pole a objektu. To umožňuje dynamické a flexibilní strukturování "
"dat."
-#: engine/core/models.py:733
+#: engine/core/models.py:754
msgid "group of this attribute"
msgstr "Skupina tohoto atributu"
-#: engine/core/models.py:739
+#: engine/core/models.py:760
msgid "string"
msgstr "Řetězec"
-#: engine/core/models.py:740
+#: engine/core/models.py:761
msgid "integer"
msgstr "Celé číslo"
-#: engine/core/models.py:741
+#: engine/core/models.py:762
msgid "float"
msgstr "Float"
-#: engine/core/models.py:742
+#: engine/core/models.py:763
msgid "boolean"
msgstr "Boolean"
-#: engine/core/models.py:743
+#: engine/core/models.py:764
msgid "array"
msgstr "Pole"
-#: engine/core/models.py:744
+#: engine/core/models.py:765
msgid "object"
msgstr "Objekt"
-#: engine/core/models.py:746
+#: engine/core/models.py:767
msgid "type of the attribute's value"
msgstr "Typ hodnoty atributu"
-#: engine/core/models.py:747
+#: engine/core/models.py:768
msgid "value type"
msgstr "Typ hodnoty"
-#: engine/core/models.py:752
+#: engine/core/models.py:773
msgid "name of this attribute"
msgstr "Název tohoto atributu"
-#: engine/core/models.py:753
+#: engine/core/models.py:774
msgid "attribute's name"
msgstr "Název atributu"
-#: engine/core/models.py:758
+#: engine/core/models.py:779
msgid "is filterable"
msgstr "je filtrovatelný"
-#: engine/core/models.py:759
+#: engine/core/models.py:781
msgid "designates whether this attribute can be used for filtering or not"
msgstr "určuje, zda lze tento atribut použít pro filtrování, nebo ne."
-#: engine/core/models.py:771 engine/core/models.py:789
+#: engine/core/models.py:794 engine/core/models.py:812
#: engine/core/templates/digital_order_delivered_email.html:134
msgid "attribute"
msgstr "Atribut"
-#: engine/core/models.py:777
+#: engine/core/models.py:800
msgid ""
-"Represents a specific value for an attribute that is linked to a product. It"
-" links the 'attribute' to a unique 'value', allowing better organization and"
-" dynamic representation of product characteristics."
+"Represents a specific value for an attribute that is linked to a product. It "
+"links the 'attribute' to a unique 'value', allowing better organization and "
+"dynamic representation of product characteristics."
msgstr ""
-"Představuje konkrétní hodnotu atributu, který je spojen s produktem. Spojuje"
-" \"atribut\" s jedinečnou \"hodnotou\", což umožňuje lepší organizaci a "
+"Představuje konkrétní hodnotu atributu, který je spojen s produktem. Spojuje "
+"\"atribut\" s jedinečnou \"hodnotou\", což umožňuje lepší organizaci a "
"dynamickou reprezentaci vlastností produktu."
-#: engine/core/models.py:788
+#: engine/core/models.py:811
msgid "attribute of this value"
msgstr "Atribut této hodnoty"
-#: engine/core/models.py:796
+#: engine/core/models.py:819
msgid "the specific product associated with this attribute's value"
msgstr "Konkrétní produkt spojený s hodnotou tohoto atributu"
-#: engine/core/models.py:802
+#: engine/core/models.py:825
msgid "the specific value for this attribute"
msgstr "Konkrétní hodnota tohoto atributu"
-#: engine/core/models.py:815
+#: engine/core/models.py:838
msgid ""
"Represents a product image associated with a product in the system. This "
-"class is designed to manage images for products, including functionality for"
-" uploading image files, associating them with specific products, and "
+"class is designed to manage images for products, including functionality for "
+"uploading image files, associating them with specific products, and "
"determining their display order. It also includes an accessibility feature "
"with alternative text for the images."
msgstr ""
"Představuje obrázek produktu spojený s produktem v systému. Tato třída je "
"určena ke správě obrázků produktů, včetně funkcí pro nahrávání souborů s "
-"obrázky, jejich přiřazování ke konkrétním produktům a určování pořadí jejich"
-" zobrazení. Obsahuje také funkci pro zpřístupnění alternativního textu pro "
+"obrázky, jejich přiřazování ke konkrétním produktům a určování pořadí jejich "
+"zobrazení. Obsahuje také funkci pro zpřístupnění alternativního textu pro "
"obrázky."
-#: engine/core/models.py:826
+#: engine/core/models.py:849
msgid "provide alternative text for the image for accessibility"
msgstr "Poskytněte alternativní text k obrázku kvůli přístupnosti."
-#: engine/core/models.py:827
+#: engine/core/models.py:850
msgid "image alt text"
msgstr "Text alt obrázku"
-#: engine/core/models.py:830
+#: engine/core/models.py:853
msgid "upload the image file for this product"
msgstr "Nahrát soubor s obrázkem tohoto produktu"
-#: engine/core/models.py:831 engine/core/models.py:862
+#: engine/core/models.py:854 engine/core/models.py:885
msgid "product image"
msgstr "Obrázek produktu"
-#: engine/core/models.py:836
+#: engine/core/models.py:859
msgid "determines the order in which images are displayed"
msgstr "Určuje pořadí, v jakém se obrázky zobrazují."
-#: engine/core/models.py:837
+#: engine/core/models.py:860
msgid "display priority"
msgstr "Priorita zobrazení"
-#: engine/core/models.py:842
+#: engine/core/models.py:865
msgid "the product that this image represents"
msgstr "Výrobek, který tento obrázek představuje"
-#: engine/core/models.py:863
+#: engine/core/models.py:886
msgid "product images"
msgstr "Obrázky produktů"
-#: engine/core/models.py:868
+#: engine/core/models.py:891
msgid ""
"Represents a promotional campaign for products with a discount. This class "
"is used to define and manage promotional campaigns that offer a percentage-"
"based discount for products. The class includes attributes for setting the "
"discount rate, providing details about the promotion, and linking it to the "
-"applicable products. It integrates with the product catalog to determine the"
-" affected items in the campaign."
+"applicable products. It integrates with the product catalog to determine the "
+"affected items in the campaign."
msgstr ""
-"Představuje propagační kampaň na produkty se slevou. Tato třída se používá k"
-" definici a správě propagačních kampaní, které nabízejí procentuální slevu "
-"na produkty. Třída obsahuje atributy pro nastavení slevové sazby, poskytnutí"
-" podrobností o akci a její propojení s příslušnými produkty. Integruje se s "
+"Představuje propagační kampaň na produkty se slevou. Tato třída se používá k "
+"definici a správě propagačních kampaní, které nabízejí procentuální slevu na "
+"produkty. Třída obsahuje atributy pro nastavení slevové sazby, poskytnutí "
+"podrobností o akci a její propojení s příslušnými produkty. Integruje se s "
"katalogem produktů, aby bylo možné určit položky, kterých se kampaň týká."
-#: engine/core/models.py:880
+#: engine/core/models.py:903
msgid "percentage discount for the selected products"
msgstr "Procentuální sleva na vybrané produkty"
-#: engine/core/models.py:881
+#: engine/core/models.py:904
msgid "discount percentage"
msgstr "Procento slevy"
-#: engine/core/models.py:886
+#: engine/core/models.py:909
msgid "provide a unique name for this promotion"
msgstr "Uveďte jedinečný název této propagační akce"
-#: engine/core/models.py:887
+#: engine/core/models.py:910
msgid "promotion name"
msgstr "Název akce"
-#: engine/core/models.py:893
+#: engine/core/models.py:916
msgid "promotion description"
msgstr "Popis propagace"
-#: engine/core/models.py:898
+#: engine/core/models.py:921
msgid "select which products are included in this promotion"
msgstr "Vyberte, které produkty jsou zahrnuty do této akce"
-#: engine/core/models.py:899
+#: engine/core/models.py:922
msgid "included products"
msgstr "Zahrnuté produkty"
-#: engine/core/models.py:903
+#: engine/core/models.py:926
msgid "promotion"
msgstr "Propagace"
-#: engine/core/models.py:914
+#: engine/core/models.py:937
msgid ""
"Represents a user's wishlist for storing and managing desired products. The "
"class provides functionality to manage a collection of products, supporting "
@@ -2158,30 +2160,30 @@ msgstr ""
"operace, jako je přidávání a odebírání produktů, a také operace pro "
"přidávání a odebírání více produktů najednou."
-#: engine/core/models.py:926
+#: engine/core/models.py:949
msgid "products that the user has marked as wanted"
msgstr "Výrobky, které uživatel označil jako požadované"
-#: engine/core/models.py:934
+#: engine/core/models.py:957
msgid "user who owns this wishlist"
msgstr "Uživatel, který vlastní tento seznam přání"
-#: engine/core/models.py:935
+#: engine/core/models.py:958
msgid "wishlist owner"
msgstr "Majitel seznamu přání"
-#: engine/core/models.py:943
+#: engine/core/models.py:966
msgid "wishlist"
msgstr "Seznam přání"
-#: engine/core/models.py:985
+#: engine/core/models.py:1008
msgid ""
"Represents a documentary record tied to a product. This class is used to "
"store information about documentaries related to specific products, "
"including file uploads and their metadata. It contains methods and "
"properties to handle the file type and storage path for the documentary "
-"files. It extends functionality from specific mixins and provides additional"
-" custom features."
+"files. It extends functionality from specific mixins and provides additional "
+"custom features."
msgstr ""
"Představuje dokumentační záznam vázaný na produkt. Tato třída se používá k "
"ukládání informací o dokumentech souvisejících s konkrétními produkty, "
@@ -2189,91 +2191,91 @@ msgstr ""
"zpracování typu souboru a cesty k uložení souborů dokumentů. Rozšiřuje "
"funkčnost konkrétních mixinů a poskytuje další vlastní funkce."
-#: engine/core/models.py:998
+#: engine/core/models.py:1023
msgid "documentary"
msgstr "Dokumentární film"
-#: engine/core/models.py:999
+#: engine/core/models.py:1024
msgid "documentaries"
msgstr "Dokumentární filmy"
-#: engine/core/models.py:1009
+#: engine/core/models.py:1034
msgid "unresolved"
msgstr "Nevyřešené"
-#: engine/core/models.py:1014
+#: engine/core/models.py:1039
msgid ""
-"Represents an address entity that includes location details and associations"
-" with a user. Provides functionality for geographic and address data "
-"storage, as well as integration with geocoding services. This class is "
-"designed to store detailed address information including components like "
-"street, city, region, country, and geolocation (longitude and latitude). It "
-"supports integration with geocoding APIs, enabling the storage of raw API "
-"responses for further processing or inspection. The class also allows "
-"associating an address with a user, facilitating personalized data handling."
+"Represents an address entity that includes location details and associations "
+"with a user. Provides functionality for geographic and address data storage, "
+"as well as integration with geocoding services. This class is designed to "
+"store detailed address information including components like street, city, "
+"region, country, and geolocation (longitude and latitude). It supports "
+"integration with geocoding APIs, enabling the storage of raw API responses "
+"for further processing or inspection. The class also allows associating an "
+"address with a user, facilitating personalized data handling."
msgstr ""
"Reprezentuje entitu adresy, která obsahuje údaje o umístění a asociace s "
"uživatelem. Poskytuje funkce pro ukládání geografických a adresních dat a "
"integraci se službami geokódování. Tato třída je určena k ukládání "
"podrobných informací o adrese včetně komponent, jako je ulice, město, "
"region, země a geolokace (zeměpisná délka a šířka). Podporuje integraci se "
-"službami API pro geokódování a umožňuje ukládání nezpracovaných odpovědí API"
-" pro další zpracování nebo kontrolu. Třída také umožňuje přiřadit adresu k "
+"službami API pro geokódování a umožňuje ukládání nezpracovaných odpovědí API "
+"pro další zpracování nebo kontrolu. Třída také umožňuje přiřadit adresu k "
"uživateli, což usnadňuje personalizované zpracování dat."
-#: engine/core/models.py:1029
+#: engine/core/models.py:1054
msgid "address line for the customer"
msgstr "Adresní řádek pro zákazníka"
-#: engine/core/models.py:1030
+#: engine/core/models.py:1055
msgid "address line"
msgstr "Adresní řádek"
-#: engine/core/models.py:1032
+#: engine/core/models.py:1057
msgid "street"
msgstr "Ulice"
-#: engine/core/models.py:1033
+#: engine/core/models.py:1058
msgid "district"
msgstr "Okres"
-#: engine/core/models.py:1034
+#: engine/core/models.py:1059
msgid "city"
msgstr "Město"
-#: engine/core/models.py:1035
+#: engine/core/models.py:1060
msgid "region"
msgstr "Region"
-#: engine/core/models.py:1036
+#: engine/core/models.py:1061
msgid "postal code"
msgstr "Poštovní směrovací číslo"
-#: engine/core/models.py:1037
+#: engine/core/models.py:1062
msgid "country"
msgstr "Země"
-#: engine/core/models.py:1044
+#: engine/core/models.py:1069
msgid "geolocation point: (longitude, latitude)"
msgstr "Geolokace Bod(Zeměpisná délka, Zeměpisná šířka)"
-#: engine/core/models.py:1047
+#: engine/core/models.py:1075
msgid "full JSON response from geocoder for this address"
msgstr "Úplná odpověď JSON z geokodéru pro tuto adresu"
-#: engine/core/models.py:1052
+#: engine/core/models.py:1081
msgid "stored JSON response from the geocoding service"
msgstr "Uložená odpověď JSON ze služby geokódování"
-#: engine/core/models.py:1060
+#: engine/core/models.py:1091
msgid "address"
msgstr "Adresa"
-#: engine/core/models.py:1061
+#: engine/core/models.py:1092
msgid "addresses"
msgstr "Adresy"
-#: engine/core/models.py:1073
+#: engine/core/models.py:1104
msgid ""
"Represents a promotional code that can be used for discounts, managing its "
"validity, type of discount, and application. The PromoCode class stores "
@@ -2289,71 +2291,71 @@ msgstr ""
"existuje) a stavu jeho použití. Obsahuje funkce pro ověření platnosti a "
"použití propagačního kódu na objednávku při zajištění splnění omezení."
-#: engine/core/models.py:1087
+#: engine/core/models.py:1118
msgid "unique code used by a user to redeem a discount"
msgstr "Jedinečný kód, který uživatel použije k uplatnění slevy."
-#: engine/core/models.py:1088
+#: engine/core/models.py:1119
msgid "promo code identifier"
msgstr "Identifikátor propagačního kódu"
-#: engine/core/models.py:1095
+#: engine/core/models.py:1126
msgid "fixed discount amount applied if percent is not used"
msgstr "Pevná výše slevy, pokud není použito procento"
-#: engine/core/models.py:1096
+#: engine/core/models.py:1127
msgid "fixed discount amount"
msgstr "Pevná výše slevy"
-#: engine/core/models.py:1102
+#: engine/core/models.py:1133
msgid "percentage discount applied if fixed amount is not used"
msgstr "Procentuální sleva uplatněná v případě nevyužití pevné částky"
-#: engine/core/models.py:1103
+#: engine/core/models.py:1134
msgid "percentage discount"
msgstr "Procentuální sleva"
-#: engine/core/models.py:1108
+#: engine/core/models.py:1139
msgid "timestamp when the promocode expires"
msgstr "Časové razítko ukončení platnosti promokódu"
-#: engine/core/models.py:1109
+#: engine/core/models.py:1140
msgid "end validity time"
msgstr "Doba ukončení platnosti"
-#: engine/core/models.py:1114
+#: engine/core/models.py:1145
msgid "timestamp from which this promocode is valid"
msgstr "Časové razítko, od kterého je tento promokód platný"
-#: engine/core/models.py:1115
+#: engine/core/models.py:1146
msgid "start validity time"
msgstr "Čas zahájení platnosti"
-#: engine/core/models.py:1120
+#: engine/core/models.py:1151
msgid "timestamp when the promocode was used, blank if not used yet"
msgstr "Časové razítko použití promokódu, prázdné, pokud ještě nebyl použit."
-#: engine/core/models.py:1121
+#: engine/core/models.py:1152
msgid "usage timestamp"
msgstr "Časové razítko použití"
-#: engine/core/models.py:1126
+#: engine/core/models.py:1157
msgid "user assigned to this promocode if applicable"
msgstr "Uživatel přiřazený k tomuto promokódu, je-li to relevantní"
-#: engine/core/models.py:1127
+#: engine/core/models.py:1158
msgid "assigned user"
msgstr "Přiřazený uživatel"
-#: engine/core/models.py:1134
+#: engine/core/models.py:1165
msgid "promo code"
msgstr "Propagační kód"
-#: engine/core/models.py:1135
+#: engine/core/models.py:1166
msgid "promo codes"
msgstr "Propagační kódy"
-#: engine/core/models.py:1150
+#: engine/core/models.py:1182
msgid ""
"only one type of discount should be defined (amount or percent), but not "
"both or neither."
@@ -2361,21 +2363,21 @@ msgstr ""
"Měl by být definován pouze jeden typ slevy (částka nebo procento), nikoli "
"však oba typy slev nebo žádný z nich."
-#: engine/core/models.py:1171
+#: engine/core/models.py:1204
msgid "promocode already used"
msgstr "Promo kód byl již použit"
-#: engine/core/models.py:1187
+#: engine/core/models.py:1226
#, python-brace-format
msgid "invalid discount type for promocode {self.uuid}"
msgstr "Neplatný typ slevy pro promokód {self.uuid}!"
-#: engine/core/models.py:1196
+#: engine/core/models.py:1235
msgid ""
"Represents an order placed by a user. This class models an order within the "
"application, including its various attributes such as billing and shipping "
-"information, status, associated user, notifications, and related operations."
-" Orders can have associated products, promotions can be applied, addresses "
+"information, status, associated user, notifications, and related operations. "
+"Orders can have associated products, promotions can be applied, addresses "
"set, and shipping or billing details updated. Equally, functionality "
"supports managing the products in the order lifecycle."
msgstr ""
@@ -2387,137 +2389,136 @@ msgstr ""
"fakturaci. Stejně tak funkce podporuje správu produktů v životním cyklu "
"objednávky."
-#: engine/core/models.py:1213
+#: engine/core/models.py:1252
msgid "the billing address used for this order"
msgstr "Fakturační adresa použitá pro tuto objednávku"
-#: engine/core/models.py:1221
+#: engine/core/models.py:1260
msgid "optional promo code applied to this order"
msgstr "Volitelný promo kód použitý na tuto objednávku"
-#: engine/core/models.py:1222
+#: engine/core/models.py:1261
msgid "applied promo code"
msgstr "Použitý promo kód"
-#: engine/core/models.py:1230
+#: engine/core/models.py:1269
msgid "the shipping address used for this order"
msgstr "Dodací adresa použitá pro tuto objednávku"
-#: engine/core/models.py:1231
+#: engine/core/models.py:1270
msgid "shipping address"
msgstr "Dodací adresa"
-#: engine/core/models.py:1237
+#: engine/core/models.py:1276
msgid "current status of the order in its lifecycle"
msgstr "Aktuální stav zakázky v jejím životním cyklu"
-#: engine/core/models.py:1238
+#: engine/core/models.py:1277
msgid "order status"
msgstr "Stav objednávky"
-#: engine/core/models.py:1243 engine/core/models.py:1769
+#: engine/core/models.py:1282 engine/core/models.py:1881
msgid "json structure of notifications to display to users"
msgstr ""
"JSON struktura oznámení pro zobrazení uživatelům, v uživatelském rozhraní "
"administrátora se používá tabulkové zobrazení."
-#: engine/core/models.py:1249
+#: engine/core/models.py:1288
msgid "json representation of order attributes for this order"
msgstr "JSON reprezentace atributů objednávky pro tuto objednávku"
-#: engine/core/models.py:1255
+#: engine/core/models.py:1294
msgid "the user who placed the order"
msgstr "Uživatel, který zadal objednávku"
-#: engine/core/models.py:1256
+#: engine/core/models.py:1295
msgid "user"
msgstr "Uživatel"
-#: engine/core/models.py:1262
+#: engine/core/models.py:1301
msgid "the timestamp when the order was finalized"
msgstr "Časové razítko, kdy byla objednávka dokončena."
-#: engine/core/models.py:1263
+#: engine/core/models.py:1302
msgid "buy time"
msgstr "Kupte si čas"
-#: engine/core/models.py:1270
+#: engine/core/models.py:1309
msgid "a human-readable identifier for the order"
msgstr "Lidsky čitelný identifikátor objednávky"
-#: engine/core/models.py:1271
+#: engine/core/models.py:1310
msgid "human readable id"
msgstr "lidsky čitelné ID"
-#: engine/core/models.py:1277
+#: engine/core/models.py:1316
msgid "order"
msgstr "Objednávka"
-#: engine/core/models.py:1319
+#: engine/core/models.py:1363
msgid "a user must have only one pending order at a time"
msgstr "Uživatel smí mít vždy pouze jednu čekající objednávku!"
-#: engine/core/models.py:1351
+#: engine/core/models.py:1396
msgid "you cannot add products to an order that is not a pending one"
-msgstr ""
-"Do objednávky, která není v procesu vyřizování, nelze přidat produkty."
+msgstr "Do objednávky, která není v procesu vyřizování, nelze přidat produkty."
-#: engine/core/models.py:1356
+#: engine/core/models.py:1402
msgid "you cannot add inactive products to order"
msgstr "Do objednávky nelze přidat neaktivní produkty"
-#: engine/core/models.py:1373
+#: engine/core/models.py:1424
msgid "you cannot add more products than available in stock"
msgstr "Nelze přidat více produktů, než je dostupné na skladě"
-#: engine/core/models.py:1395 engine/core/models.py:1420
-#: engine/core/models.py:1428
+#: engine/core/models.py:1448 engine/core/models.py:1477
+#: engine/core/models.py:1487
msgid "you cannot remove products from an order that is not a pending one"
msgstr "Nelze odebrat produkty z objednávky, která není nevyřízená."
-#: engine/core/models.py:1416
+#: engine/core/models.py:1472
#, python-brace-format
msgid "{name} does not exist with query <{query}>"
msgstr "{name} neexistuje s dotazem <{query}>!"
-#: engine/core/models.py:1448
+#: engine/core/models.py:1511
msgid "promocode does not exist"
msgstr "Promo kód neexistuje"
-#: engine/core/models.py:1454
+#: engine/core/models.py:1526
msgid "you can only buy physical products with shipping address specified"
msgstr "Fyzické produkty můžete zakoupit pouze se zadanou dodací adresou!"
-#: engine/core/models.py:1473
+#: engine/core/models.py:1547
msgid "address does not exist"
msgstr "Adresa neexistuje"
-#: engine/core/models.py:1494 engine/core/models.py:1563
+#: engine/core/models.py:1569 engine/core/models.py:1648
msgid "you can not buy at this moment, please try again in a few minutes"
msgstr ""
"V tuto chvíli nemůžete nakupovat, zkuste to prosím znovu za několik minut."
-#: engine/core/models.py:1497 engine/core/models.py:1559
+#: engine/core/models.py:1575 engine/core/models.py:1641
msgid "invalid force value"
msgstr "Neplatná hodnota síly"
-#: engine/core/models.py:1503 engine/core/models.py:1566
+#: engine/core/models.py:1581 engine/core/models.py:1652
msgid "you cannot purchase an empty order!"
msgstr "Nelze zakoupit prázdnou objednávku!"
-#: engine/core/models.py:1522
+#: engine/core/models.py:1602
msgid "you cannot buy an order without a user"
msgstr "Bez uživatele nelze objednávku zakoupit!"
-#: engine/core/models.py:1536
+#: engine/core/models.py:1616
msgid "a user without a balance cannot buy with balance"
msgstr "Uživatel bez zůstatku nemůže nakupovat se zůstatkem!"
-#: engine/core/models.py:1541
+#: engine/core/models.py:1622
msgid "insufficient funds to complete the order"
msgstr "Nedostatek finančních prostředků na dokončení objednávky"
-#: engine/core/models.py:1575
+#: engine/core/models.py:1663
msgid ""
"you cannot buy without registration, please provide the following "
"information: customer name, customer email, customer phone number"
@@ -2525,14 +2526,14 @@ msgstr ""
"bez registrace nelze nakupovat, uveďte prosím následující údaje: jméno "
"zákazníka, e-mail zákazníka, telefonní číslo zákazníka."
-#: engine/core/models.py:1584
+#: engine/core/models.py:1674
#, python-brace-format
msgid ""
"invalid payment method: {payment_method} from {available_payment_methods}"
msgstr ""
"Neplatný způsob platby: {payment_method} z {available_payment_methods}!"
-#: engine/core/models.py:1699
+#: engine/core/models.py:1805
msgid ""
"Manages user feedback for products. This class is designed to capture and "
"store user feedback for specific products that they have purchased. It "
@@ -2541,39 +2542,38 @@ msgid ""
"fields to effectively model and manage feedback data."
msgstr ""
"spravuje zpětnou vazbu uživatelů k produktům. Tato třída je určena k "
-"zachycování a ukládání zpětné vazby uživatelů ke konkrétním produktům, které"
-" si zakoupili. Obsahuje atributy pro ukládání komentářů uživatelů, odkaz na "
+"zachycování a ukládání zpětné vazby uživatelů ke konkrétním produktům, které "
+"si zakoupili. Obsahuje atributy pro ukládání komentářů uživatelů, odkaz na "
"související produkt v objednávce a hodnocení přiřazené uživatelem. Třída "
"využívá databázová pole k efektivnímu modelování a správě dat zpětné vazby."
-#: engine/core/models.py:1711
+#: engine/core/models.py:1817
msgid "user-provided comments about their experience with the product"
msgstr "Komentáře uživatelů o jejich zkušenostech s produktem"
-#: engine/core/models.py:1712
+#: engine/core/models.py:1818
msgid "feedback comments"
msgstr "Zpětná vazba"
-#: engine/core/models.py:1719
-msgid ""
-"references the specific product in an order that this feedback is about"
+#: engine/core/models.py:1826
+msgid "references the specific product in an order that this feedback is about"
msgstr ""
"Odkazuje na konkrétní produkt v objednávce, kterého se tato zpětná vazba "
"týká."
-#: engine/core/models.py:1720
+#: engine/core/models.py:1828
msgid "related order product"
msgstr "Související objednávka produktu"
-#: engine/core/models.py:1725
+#: engine/core/models.py:1833
msgid "user-assigned rating for the product"
msgstr "Hodnocení produktu přidělené uživatelem"
-#: engine/core/models.py:1726
+#: engine/core/models.py:1834
msgid "product rating"
msgstr "Hodnocení produktu"
-#: engine/core/models.py:1742
+#: engine/core/models.py:1854
msgid ""
"Represents products associated with orders and their attributes. The "
"OrderProduct model maintains information about a product that is part of an "
@@ -2595,115 +2595,115 @@ msgstr ""
"produktů. Model se integruje s modely objednávek a produktů a ukládá na ně "
"odkaz."
-#: engine/core/models.py:1757
+#: engine/core/models.py:1869
msgid "the price paid by the customer for this product at purchase time"
msgstr "Cena, kterou zákazník zaplatil za tento produkt v době nákupu."
-#: engine/core/models.py:1758
+#: engine/core/models.py:1870
msgid "purchase price at order time"
msgstr "Nákupní cena v době objednávky"
-#: engine/core/models.py:1763
+#: engine/core/models.py:1875
msgid "internal comments for admins about this ordered product"
msgstr "Interní komentáře pro administrátory k tomuto objednanému produktu"
-#: engine/core/models.py:1764
+#: engine/core/models.py:1876
msgid "internal comments"
msgstr "Interní připomínky"
-#: engine/core/models.py:1770
+#: engine/core/models.py:1882
msgid "user notifications"
msgstr "Oznámení uživatele"
-#: engine/core/models.py:1775
+#: engine/core/models.py:1887
msgid "json representation of this item's attributes"
msgstr "JSON reprezentace atributů této položky"
-#: engine/core/models.py:1776
+#: engine/core/models.py:1888
msgid "ordered product attributes"
msgstr "Objednané atributy produktu"
-#: engine/core/models.py:1781
+#: engine/core/models.py:1893
msgid "reference to the parent order that contains this product"
msgstr "Odkaz na nadřazenou objednávku, která obsahuje tento produkt"
-#: engine/core/models.py:1782
+#: engine/core/models.py:1894
msgid "parent order"
msgstr "Objednávka rodičů"
-#: engine/core/models.py:1791
+#: engine/core/models.py:1903
msgid "the specific product associated with this order line"
msgstr "Konkrétní produkt spojený s touto objednávkou"
-#: engine/core/models.py:1798
+#: engine/core/models.py:1910
msgid "quantity of this specific product in the order"
msgstr "Množství tohoto konkrétního produktu v objednávce"
-#: engine/core/models.py:1799
+#: engine/core/models.py:1911
msgid "product quantity"
msgstr "Množství produktu"
-#: engine/core/models.py:1806
+#: engine/core/models.py:1918
msgid "current status of this product in the order"
msgstr "Aktuální stav tohoto produktu v objednávce"
-#: engine/core/models.py:1807
+#: engine/core/models.py:1919
msgid "product line status"
msgstr "Stav produktové řady"
-#: engine/core/models.py:1872
+#: engine/core/models.py:1986
msgid "order product must have an order"
msgstr "Orderproduct musí mít přiřazenou objednávku!"
-#: engine/core/models.py:1874
+#: engine/core/models.py:1988
#, python-brace-format
msgid "wrong action specified for feedback: {action}"
msgstr "Špatně zadaná akce pro zpětnou vazbu: {action}!"
-#: engine/core/models.py:1888
+#: engine/core/models.py:2005
msgid "you cannot feedback an order which is not received"
msgstr "nelze poskytnout zpětnou vazbu na objednávku, která nebyla přijata"
-#: engine/core/models.py:1894
+#: engine/core/models.py:2014
msgid "name"
msgstr "Název"
-#: engine/core/models.py:1895
+#: engine/core/models.py:2016
msgid "URL of the integration"
msgstr "Adresa URL integrace"
-#: engine/core/models.py:1896
+#: engine/core/models.py:2019
msgid "authentication credentials"
msgstr "Ověřovací pověření"
-#: engine/core/models.py:1918
+#: engine/core/models.py:2042
msgid "you can only have one default CRM provider"
msgstr "Můžete mít pouze jednoho výchozího poskytovatele CRM"
-#: engine/core/models.py:1928
+#: engine/core/models.py:2052
msgid "CRM"
msgstr "CRM"
-#: engine/core/models.py:1929
+#: engine/core/models.py:2053
msgid "CRMs"
msgstr "CRM"
-#: engine/core/models.py:1941
+#: engine/core/models.py:2069
msgid "order CRM link"
msgstr "Odkaz na CRM objednávky"
-#: engine/core/models.py:1942
+#: engine/core/models.py:2070
msgid "orders CRM links"
msgstr "Odkazy CRM objednávek"
-#: engine/core/models.py:1947
+#: engine/core/models.py:2075
msgid ""
"Represents the downloading functionality for digital assets associated with "
"orders. The DigitalAssetDownload class provides the ability to manage and "
"access downloads related to order products. It maintains information about "
-"the associated order product, the number of downloads, and whether the asset"
-" is publicly visible. It includes a method to generate a URL for downloading"
-" the asset when the associated order is in a completed status."
+"the associated order product, the number of downloads, and whether the asset "
+"is publicly visible. It includes a method to generate a URL for downloading "
+"the asset when the associated order is in a completed status."
msgstr ""
"Představuje funkci stahování digitálních aktiv spojených s objednávkami. "
"Třída DigitalAssetDownload poskytuje možnost spravovat a zpřístupňovat "
@@ -2712,15 +2712,15 @@ msgstr ""
"veřejně viditelné. Obsahuje metodu pro generování adresy URL pro stažení "
"aktiva, když je přidružená objednávka ve stavu dokončena."
-#: engine/core/models.py:1961
+#: engine/core/models.py:2091
msgid "download"
msgstr "Stáhnout"
-#: engine/core/models.py:1962
+#: engine/core/models.py:2092
msgid "downloads"
msgstr "Ke stažení na"
-#: engine/core/serializers/utility.py:89
+#: engine/core/serializers/utility.py:91
msgid ""
"you must provide a comment, rating, and order product uuid to add feedback."
msgstr ""
@@ -2916,7 +2916,8 @@ msgstr "Ahoj %(order.user.first_name)s,"
#, python-format
msgid ""
"thank you for your order #%(order.pk)s! we are pleased to inform you that\n"
-" we have taken your order into work. below are the details of your\n"
+" we have taken your order into work. below are "
+"the details of your\n"
" order:"
msgstr ""
"Děkujeme vám za vaši objednávku #%(order.pk)s! S potěšením Vám oznamujeme, "
@@ -3031,7 +3032,8 @@ msgstr ""
#: engine/core/templates/shipped_order_created_email.html:101
#: engine/core/templates/shipped_order_delivered_email.html:101
msgid ""
-"thank you for your order! we are pleased to confirm your purchase. below are\n"
+"thank you for your order! we are pleased to confirm your purchase. below "
+"are\n"
" the details of your order:"
msgstr ""
"Děkujeme vám za vaši objednávku! S potěšením potvrzujeme váš nákup. Níže "
@@ -3062,11 +3064,11 @@ msgstr ""
"všechna práva\n"
" vyhrazeno"
-#: engine/core/utils/caching.py:44
+#: engine/core/utils/caching.py:48
msgid "both data and timeout are required"
msgstr "Jsou vyžadována data i časový limit"
-#: engine/core/utils/caching.py:46
+#: engine/core/utils/caching.py:51
msgid "invalid timeout value, it must be between 0 and 216000 seconds"
msgstr "Nesprávná hodnota timeoutu, musí být v rozmezí 0 až 216000 sekund."
@@ -3075,17 +3077,17 @@ msgstr "Nesprávná hodnota timeoutu, musí být v rozmezí 0 až 216000 sekund.
msgid "{settings.PROJECT_NAME} | contact us initiated"
msgstr "{settings.PROJECT_NAME} | kontaktujte nás inicioval"
-#: engine/core/utils/emailing.py:73
+#: engine/core/utils/emailing.py:81
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order confirmation"
msgstr "{settings.PROJECT_NAME} | potvrzení objednávky"
-#: engine/core/utils/emailing.py:105
+#: engine/core/utils/emailing.py:115
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order delivered"
msgstr "{settings.PROJECT_NAME} | doručená objednávka"
-#: engine/core/utils/emailing.py:188
+#: engine/core/utils/emailing.py:203
#, python-brace-format
msgid "{settings.PROJECT_NAME} | promocode granted"
msgstr "{settings.PROJECT_NAME} | promocode uděleno"
@@ -3098,13 +3100,13 @@ msgstr "K provedení této akce nemáte oprávnění."
msgid "NOMINATIM_URL must be configured."
msgstr "Parametr NOMINATIM_URL musí být nakonfigurován!"
-#: engine/core/validators.py:19
+#: engine/core/validators.py:21
#, python-brace-format
msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels"
msgstr ""
"Rozměry obrázku by neměly přesáhnout w{max_width} x h{max_height} pixelů."
-#: engine/core/views.py:91
+#: engine/core/views.py:105
msgid ""
"Handles the request for the sitemap index and returns an XML response. It "
"ensures the response includes the appropriate content type header for XML."
@@ -3112,7 +3114,7 @@ msgstr ""
"Zpracuje požadavek na index mapy stránek a vrátí odpověď XML. Zajistí, aby "
"odpověď obsahovala odpovídající hlavičku typu obsahu XML."
-#: engine/core/views.py:106
+#: engine/core/views.py:120
msgid ""
"Handles the detailed view response for a sitemap. This function processes "
"the request, fetches the appropriate sitemap detail response, and sets the "
@@ -3122,28 +3124,28 @@ msgstr ""
"požadavek, načte příslušnou podrobnou odpověď mapy stránek a nastaví "
"hlavičku Content-Type pro XML."
-#: engine/core/views.py:141
+#: engine/core/views.py:156
msgid ""
"Returns a list of supported languages and their corresponding information."
msgstr "Vrátí seznam podporovaných jazyků a odpovídajících informací."
-#: engine/core/views.py:173
+#: engine/core/views.py:183
msgid "Returns the parameters of the website as a JSON object."
msgstr "Vrátí parametry webové stránky jako objekt JSON."
-#: engine/core/views.py:192
+#: engine/core/views.py:199
msgid ""
"Handles cache operations such as reading and setting cache data with a "
"specified key and timeout."
msgstr ""
-"Zpracovává operace mezipaměti, jako je čtení a nastavování dat mezipaměti se"
-" zadaným klíčem a časovým limitem."
+"Zpracovává operace mezipaměti, jako je čtení a nastavování dat mezipaměti se "
+"zadaným klíčem a časovým limitem."
-#: engine/core/views.py:219
+#: engine/core/views.py:221
msgid "Handles `contact us` form submissions."
msgstr "Zpracovává odeslání formuláře `contact us`."
-#: engine/core/views.py:240
+#: engine/core/views.py:237
msgid ""
"Handles requests for processing and validating URLs from incoming POST "
"requests."
@@ -3151,79 +3153,87 @@ msgstr ""
"Zpracovává požadavky na zpracování a ověřování adres URL z příchozích "
"požadavků POST."
-#: engine/core/views.py:280
+#: engine/core/views.py:274
msgid "Handles global search queries."
msgstr "Zpracovává globální vyhledávací dotazy."
-#: engine/core/views.py:295
+#: engine/core/views.py:290
msgid "Handles the logic of buying as a business without registration."
msgstr "Řeší logiku nákupu jako firmy bez registrace."
-#: engine/core/views.py:332
+#: engine/core/views.py:338
msgid ""
"Handles the downloading of a digital asset associated with an order.\n"
-"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the digital asset file located in the "
+"storage directory of the project. If the file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
msgstr ""
"Zpracovává stahování digitálního aktiva spojeného s objednávkou.\n"
-"Tato funkce se pokusí obsloužit soubor digitálního aktiva umístěný v adresáři úložiště projektu. Pokud soubor není nalezen, je vyvolána chyba HTTP 404, která označuje, že zdroj není k dispozici."
+"Tato funkce se pokusí obsloužit soubor digitálního aktiva umístěný v "
+"adresáři úložiště projektu. Pokud soubor není nalezen, je vyvolána chyba "
+"HTTP 404, která označuje, že zdroj není k dispozici."
-#: engine/core/views.py:343
+#: engine/core/views.py:349
msgid "order_product_uuid is required"
msgstr "order_product_uuid je povinné"
-#: engine/core/views.py:350
+#: engine/core/views.py:356
msgid "order product does not exist"
msgstr "objednávka produktu neexistuje"
-#: engine/core/views.py:353
+#: engine/core/views.py:359
msgid "you can only download the digital asset once"
msgstr "Digitální aktivum můžete stáhnout pouze jednou"
-#: engine/core/views.py:356
+#: engine/core/views.py:363
msgid "the order must be paid before downloading the digital asset"
msgstr "objednávka musí být zaplacena před stažením digitálního aktiva."
-#: engine/core/views.py:362
+#: engine/core/views.py:370
msgid "the order product does not have a product"
msgstr "Objednaný produkt nemá produkt"
-#: engine/core/views.py:399
+#: engine/core/views.py:414
msgid "favicon not found"
msgstr "favicon nebyl nalezen"
-#: engine/core/views.py:404
+#: engine/core/views.py:419
msgid ""
"Handles requests for the favicon of a website.\n"
-"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the favicon file located in the static "
+"directory of the project. If the favicon file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
msgstr ""
"Zpracovává požadavky na favicon webové stránky.\n"
-"Tato funkce se pokusí obsloužit soubor favicon umístěný ve statickém adresáři projektu. Pokud soubor favicon není nalezen, je vyvolána chyba HTTP 404, která označuje, že zdroj není k dispozici."
+"Tato funkce se pokusí obsloužit soubor favicon umístěný ve statickém "
+"adresáři projektu. Pokud soubor favicon není nalezen, je vyvolána chyba HTTP "
+"404, která označuje, že zdroj není k dispozici."
-#: engine/core/views.py:416
+#: engine/core/views.py:431
msgid ""
-"Redirects the request to the admin index page. The function handles incoming"
-" HTTP requests and redirects them to the Django admin interface index page. "
+"Redirects the request to the admin index page. The function handles incoming "
+"HTTP requests and redirects them to the Django admin interface index page. "
"It uses Django's `redirect` function for handling the HTTP redirection."
msgstr ""
"Přesměruje požadavek na indexovou stránku správce. Funkce zpracovává "
"příchozí požadavky HTTP a přesměrovává je na indexovou stránku "
-"administrátorského rozhraní Django. Pro zpracování přesměrování HTTP používá"
-" funkci `redirect` Djanga."
+"administrátorského rozhraní Django. Pro zpracování přesměrování HTTP používá "
+"funkci `redirect` Djanga."
-#: engine/core/views.py:429
+#: engine/core/views.py:443
msgid "Returns current version of the eVibes. "
msgstr "Vrací aktuální verzi systému eVibes."
-#: engine/core/views.py:623 engine/core/views.py:636
+#: engine/core/views.py:672 engine/core/views.py:687
#, python-format
msgid "Revenue & Orders (last %(days)d)"
msgstr "Příjmy a objednávky (poslední %(days)d)"
-#: engine/core/views.py:793
+#: engine/core/views.py:868
msgid "Returns custom variables for Dashboard. "
msgstr "Vrací vlastní proměnné pro Dashboard."
-#: engine/core/viewsets.py:136
+#: engine/core/viewsets.py:139
msgid ""
"Defines a viewset for managing Evibes-related operations. The EvibesViewSet "
"class inherits from ModelViewSet and provides functionality for handling "
@@ -3234,16 +3244,14 @@ msgstr ""
"Definuje sadu pohledů pro správu operací souvisejících s Evibes. Třída "
"EvibesViewSet dědí z ModelViewSet a poskytuje funkce pro zpracování akcí a "
"operací s entitami Evibes. Zahrnuje podporu dynamických tříd serializátorů "
-"na základě aktuální akce, přizpůsobitelných oprávnění a formátů "
-"vykreslování."
+"na základě aktuální akce, přizpůsobitelných oprávnění a formátů vykreslování."
-#: engine/core/viewsets.py:156
+#: engine/core/viewsets.py:160
msgid ""
-"Represents a viewset for managing AttributeGroup objects. Handles operations"
-" related to AttributeGroup, including filtering, serialization, and "
-"retrieval of data. This class is part of the application's API layer and "
-"provides a standardized way to process requests and responses for "
-"AttributeGroup data."
+"Represents a viewset for managing AttributeGroup objects. Handles operations "
+"related to AttributeGroup, including filtering, serialization, and retrieval "
+"of data. This class is part of the application's API layer and provides a "
+"standardized way to process requests and responses for AttributeGroup data."
msgstr ""
"Představuje sadu pohledů pro správu objektů AttributeGroup. Zpracovává "
"operace související s AttributeGroup, včetně filtrování, serializace a "
@@ -3251,7 +3259,7 @@ msgstr ""
"standardizovaný způsob zpracování požadavků a odpovědí pro data "
"AttributeGroup."
-#: engine/core/viewsets.py:175
+#: engine/core/viewsets.py:179
msgid ""
"Handles operations related to Attribute objects within the application. "
"Provides a set of API endpoints to interact with Attribute data. This class "
@@ -3267,13 +3275,13 @@ msgstr ""
"konkrétních polí nebo získávání podrobných a zjednodušených informací v "
"závislosti na požadavku."
-#: engine/core/viewsets.py:194
+#: engine/core/viewsets.py:198
msgid ""
"A viewset for managing AttributeValue objects. This viewset provides "
"functionality for listing, retrieving, creating, updating, and deleting "
"AttributeValue objects. It integrates with Django REST Framework's viewset "
-"mechanisms and uses appropriate serializers for different actions. Filtering"
-" capabilities are provided through the DjangoFilterBackend."
+"mechanisms and uses appropriate serializers for different actions. Filtering "
+"capabilities are provided through the DjangoFilterBackend."
msgstr ""
"Sada pohledů pro správu objektů AttributeValue. Tato sada pohledů poskytuje "
"funkce pro výpis, načítání, vytváření, aktualizaci a mazání objektů "
@@ -3281,7 +3289,7 @@ msgstr ""
"pro různé akce používá příslušné serializátory. Možnosti filtrování jsou "
"poskytovány prostřednictvím DjangoFilterBackend."
-#: engine/core/viewsets.py:213
+#: engine/core/viewsets.py:217
msgid ""
"Manages views for Category-related operations. The CategoryViewSet class is "
"responsible for handling operations related to the Category model in the "
@@ -3295,7 +3303,7 @@ msgstr ""
"kategorie. Sada pohledů také vynucuje oprávnění, aby zajistila, že ke "
"konkrétním datům budou mít přístup pouze oprávnění uživatelé."
-#: engine/core/viewsets.py:326
+#: engine/core/viewsets.py:346
msgid ""
"Represents a viewset for managing Brand instances. This class provides "
"functionality for querying, filtering, and serializing Brand objects. It "
@@ -3307,7 +3315,7 @@ msgstr ""
"rámec ViewSet Djanga pro zjednodušení implementace koncových bodů API pro "
"objekty Brand."
-#: engine/core/viewsets.py:438
+#: engine/core/viewsets.py:458
msgid ""
"Manages operations related to the `Product` model in the system. This class "
"provides a viewset for managing products, including their filtering, "
@@ -3322,10 +3330,10 @@ msgstr ""
"serializace a operací s konkrétními instancemi. Rozšiřuje se z "
"`EvibesViewSet`, aby využívala společné funkce, a integruje se s rámcem "
"Django REST pro operace RESTful API. Obsahuje metody pro načítání "
-"podrobností o produktu, uplatňování oprávnění a přístup k související zpětné"
-" vazbě produktu."
+"podrobností o produktu, uplatňování oprávnění a přístup k související zpětné "
+"vazbě produktu."
-#: engine/core/viewsets.py:574
+#: engine/core/viewsets.py:605
msgid ""
"Represents a viewset for managing Vendor objects. This viewset allows "
"fetching, filtering, and serializing Vendor data. It defines the queryset, "
@@ -3339,13 +3347,13 @@ msgstr ""
"různých akcí. Účelem této třídy je poskytnout zjednodušený přístup ke "
"zdrojům souvisejícím s Vendorem prostřednictvím rámce Django REST."
-#: engine/core/viewsets.py:594
+#: engine/core/viewsets.py:625
msgid ""
"Representation of a view set handling Feedback objects. This class manages "
"operations related to Feedback objects, including listing, filtering, and "
"retrieving details. The purpose of this view set is to provide different "
-"serializers for different actions and implement permission-based handling of"
-" accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
+"serializers for different actions and implement permission-based handling of "
+"accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
"use of Django's filtering system for querying data."
msgstr ""
"Reprezentace sady zobrazení, která zpracovává objekty zpětné vazby. Tato "
@@ -3355,43 +3363,43 @@ msgstr ""
"objekty Zpětné vazby na základě oprávnění. Rozšiřuje základní třídu "
"`EvibesViewSet` a využívá systém filtrování Djanga pro dotazování na data."
-#: engine/core/viewsets.py:621
+#: engine/core/viewsets.py:652
msgid ""
"ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes "
"various endpoints for handling order operations such as adding or removing "
-"products, performing purchases for registered as well as unregistered users,"
-" and retrieving the current authenticated user's pending orders. The ViewSet"
-" uses multiple serializers based on the specific action being performed and "
+"products, performing purchases for registered as well as unregistered users, "
+"and retrieving the current authenticated user's pending orders. The ViewSet "
+"uses multiple serializers based on the specific action being performed and "
"enforces permissions accordingly while interacting with order data."
msgstr ""
"ViewSet pro správu objednávek a souvisejících operací. Tato třída poskytuje "
"funkce pro načítání, úpravu a správu objektů objednávek. Obsahuje různé "
"koncové body pro zpracování operací s objednávkami, jako je přidávání nebo "
"odebírání produktů, provádění nákupů pro registrované i neregistrované "
-"uživatele a načítání nevyřízených objednávek aktuálního ověřeného uživatele."
-" Sada ViewSet používá několik serializátorů podle konkrétní prováděné akce a"
-" podle toho vynucuje oprávnění při interakci s daty objednávek."
+"uživatele a načítání nevyřízených objednávek aktuálního ověřeného uživatele. "
+"Sada ViewSet používá několik serializátorů podle konkrétní prováděné akce a "
+"podle toho vynucuje oprávnění při interakci s daty objednávek."
-#: engine/core/viewsets.py:825
+#: engine/core/viewsets.py:914
msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It "
-"includes filtering, permission checks, and serializer switching based on the"
-" requested action. Additionally, it provides a detailed action for handling "
+"includes filtering, permission checks, and serializer switching based on the "
+"requested action. Additionally, it provides a detailed action for handling "
"feedback on OrderProduct instances"
msgstr ""
"Poskytuje sadu pohledů pro správu entit OrderProduct. Tato sada pohledů "
"umožňuje operace CRUD a vlastní akce specifické pro model OrderProduct. "
-"Zahrnuje filtrování, kontroly oprávnění a přepínání serializátoru na základě"
-" požadované akce. Kromě toho poskytuje podrobnou akci pro zpracování zpětné "
+"Zahrnuje filtrování, kontroly oprávnění a přepínání serializátoru na základě "
+"požadované akce. Kromě toho poskytuje podrobnou akci pro zpracování zpětné "
"vazby na instance OrderProduct"
-#: engine/core/viewsets.py:879
+#: engine/core/viewsets.py:974
msgid "Manages operations related to Product images in the application. "
msgstr "Spravuje operace související s obrázky produktů v aplikaci."
-#: engine/core/viewsets.py:892
+#: engine/core/viewsets.py:988
msgid ""
"Manages the retrieval and handling of PromoCode instances through various "
"API actions."
@@ -3399,20 +3407,20 @@ msgstr ""
"Spravuje načítání a zpracování instancí PromoCode prostřednictvím různých "
"akcí API."
-#: engine/core/viewsets.py:914
+#: engine/core/viewsets.py:1019
msgid "Represents a view set for managing promotions. "
msgstr "Představuje sadu zobrazení pro správu povýšení."
-#: engine/core/viewsets.py:927
+#: engine/core/viewsets.py:1032
msgid "Handles operations related to Stock data in the system."
msgstr "Zpracovává operace související s údaji o zásobách v systému."
-#: engine/core/viewsets.py:941
+#: engine/core/viewsets.py:1046
msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the "
-"retrieval, modification, and customization of products within the wish list."
-" This ViewSet facilitates functionality such as adding, removing, and bulk "
+"retrieval, modification, and customization of products within the wish list. "
+"This ViewSet facilitates functionality such as adding, removing, and bulk "
"actions for wishlist products. Permission checks are integrated to ensure "
"that users can only manage their own wishlists unless explicit permissions "
"are granted."
@@ -3425,7 +3433,7 @@ msgstr ""
"uživatelé mohou spravovat pouze své vlastní seznamy přání, pokud jim nejsou "
"udělena výslovná oprávnění."
-#: engine/core/viewsets.py:1056
+#: engine/core/viewsets.py:1183
msgid ""
"This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom "
@@ -3433,18 +3441,18 @@ msgid ""
"different HTTP methods, serializer overrides, and permission handling based "
"on the request context."
msgstr ""
-"Tato třída poskytuje funkce sady pohledů pro správu objektů `Address`. Třída"
-" AddressViewSet umožňuje operace CRUD, filtrování a vlastní akce související"
-" s entitami adres. Obsahuje specializované chování pro různé metody HTTP, "
+"Tato třída poskytuje funkce sady pohledů pro správu objektů `Address`. Třída "
+"AddressViewSet umožňuje operace CRUD, filtrování a vlastní akce související "
+"s entitami adres. Obsahuje specializované chování pro různé metody HTTP, "
"přepisování serializátoru a zpracování oprávnění na základě kontextu "
"požadavku."
-#: engine/core/viewsets.py:1123
+#: engine/core/viewsets.py:1254
#, python-brace-format
msgid "Geocoding error: {e}"
msgstr "Chyba v zeměpisném kódování: {e}"
-#: engine/core/viewsets.py:1131
+#: engine/core/viewsets.py:1262
msgid ""
"Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing "
@@ -3455,5 +3463,5 @@ msgstr ""
"Zpracovává operace související se značkami produktů v rámci aplikace. Tato "
"třída poskytuje funkce pro načítání, filtrování a serializaci objektů "
"Product Tag. Podporuje flexibilní filtrování podle konkrétních atributů "
-"pomocí zadaného filtru backend a dynamicky používá různé serializátory podle"
-" prováděné akce."
+"pomocí zadaného filtru backend a dynamicky používá různé serializátory podle "
+"prováděné akce."
diff --git a/engine/core/locale/da_DK/LC_MESSAGES/django.po b/engine/core/locale/da_DK/LC_MESSAGES/django.po
index 8b9c4c88..5506f6c2 100644
--- a/engine/core/locale/da_DK/LC_MESSAGES/django.po
+++ b/engine/core/locale/da_DK/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 22:12+0300\n"
+"POT-Creation-Date: 2025-12-18 19:09+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -25,113 +25,112 @@ msgstr "Unikt ID bruges til sikkert at identificere ethvert databaseobjekt"
msgid "is active"
msgstr "Er aktiv"
-#: engine/core/abstract.py:21
+#: engine/core/abstract.py:22
msgid ""
-"if set to false, this object can't be seen by users without needed "
-"permission"
+"if set to false, this object can't be seen by users without needed permission"
msgstr ""
"Hvis det er sat til false, kan dette objekt ikke ses af brugere uden den "
"nødvendige tilladelse."
-#: engine/core/abstract.py:23 engine/core/choices.py:18
+#: engine/core/abstract.py:26 engine/core/choices.py:18
msgid "created"
msgstr "Oprettet"
-#: engine/core/abstract.py:23
+#: engine/core/abstract.py:26
msgid "when the object first appeared on the database"
msgstr "Da objektet første gang dukkede op i databasen"
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "modified"
msgstr "Modificeret"
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "when the object was last modified"
msgstr "Hvornår objektet sidst blev redigeret"
-#: engine/core/admin.py:85
+#: engine/core/admin.py:94
msgid "translations"
msgstr "Oversættelser"
-#: engine/core/admin.py:89
+#: engine/core/admin.py:102
msgid "general"
msgstr "Generelt"
-#: engine/core/admin.py:91
+#: engine/core/admin.py:106
msgid "relations"
msgstr "Relationer"
-#: engine/core/admin.py:93
+#: engine/core/admin.py:111
msgid "additional info"
msgstr "Yderligere info"
-#: engine/core/admin.py:111
+#: engine/core/admin.py:133
msgid "metadata"
msgstr "Metadata"
-#: engine/core/admin.py:118
+#: engine/core/admin.py:141
msgid "timestamps"
msgstr "Tidsstempler"
-#: engine/core/admin.py:133
+#: engine/core/admin.py:157
#, python-format
msgid "activate selected %(verbose_name_plural)s"
msgstr "Aktivér valgt %(verbose_name_plural)s."
-#: engine/core/admin.py:138
+#: engine/core/admin.py:165
msgid "selected items have been activated."
msgstr "Udvalgte varer er blevet aktiveret!"
-#: engine/core/admin.py:144
+#: engine/core/admin.py:173
#, python-format
msgid "deactivate selected %(verbose_name_plural)s"
msgstr "Deaktiver valgte %(verbose_name_plural)s."
-#: engine/core/admin.py:149
+#: engine/core/admin.py:183
msgid "selected items have been deactivated."
msgstr "Udvalgte varer er blevet deaktiveret!"
-#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586
-#: engine/core/graphene/object_types.py:593 engine/core/models.py:801
-#: engine/core/models.py:809
+#: engine/core/admin.py:195 engine/core/graphene/object_types.py:650
+#: engine/core/graphene/object_types.py:657 engine/core/models.py:824
+#: engine/core/models.py:832
msgid "attribute value"
msgstr "Attributværdi"
-#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75
-#: engine/core/models.py:810
+#: engine/core/admin.py:196 engine/core/graphene/object_types.py:75
+#: engine/core/models.py:833
msgid "attribute values"
msgstr "Attributværdier"
-#: engine/core/admin.py:172
+#: engine/core/admin.py:207
msgid "image"
msgstr "Billede"
-#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474
+#: engine/core/admin.py:208 engine/core/graphene/object_types.py:527
msgid "images"
msgstr "Billeder"
-#: engine/core/admin.py:184 engine/core/models.py:566
+#: engine/core/admin.py:219 engine/core/models.py:587
msgid "stock"
msgstr "Lager"
-#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640
+#: engine/core/admin.py:220 engine/core/graphene/object_types.py:710
msgid "stocks"
msgstr "Aktier"
-#: engine/core/admin.py:196 engine/core/models.py:1818
+#: engine/core/admin.py:231 engine/core/models.py:1930
msgid "order product"
msgstr "Bestil produkt"
-#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389
-#: engine/core/models.py:1819
+#: engine/core/admin.py:232 engine/core/graphene/object_types.py:438
+#: engine/core/models.py:1931
msgid "order products"
msgstr "Bestil produkter"
-#: engine/core/admin.py:210 engine/core/admin.py:211
+#: engine/core/admin.py:250 engine/core/admin.py:251
msgid "children"
msgstr "Børn"
-#: engine/core/admin.py:977
+#: engine/core/admin.py:1059
msgid "Config"
msgstr "Konfig"
@@ -155,8 +154,7 @@ msgstr "Leveret"
msgid "canceled"
msgstr "Annulleret"
-#: engine/core/choices.py:8 engine/core/choices.py:16
-#: engine/core/choices.py:24
+#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24
msgid "failed"
msgstr "Mislykket"
@@ -184,11 +182,11 @@ msgstr "Momental"
msgid "successful"
msgstr "Succesfuld"
-#: engine/core/docs/drf/views.py:31
+#: engine/core/docs/drf/views.py:30
msgid "OpenAPI schema in selected format with selected language"
msgstr "OpenAPI-skema i valgt format med valgt sprog"
-#: engine/core/docs/drf/views.py:33
+#: engine/core/docs/drf/views.py:32
msgid ""
"OpenApi3 schema for this API. Format can be selected via content "
"negotiation. Language can be selected with Accept-Language and query "
@@ -197,47 +195,48 @@ msgstr ""
"OpenApi3-skema for denne API. Format kan vælges via indholdsforhandling. "
"Sprog kan vælges med både Accept-Language og query parameter."
-#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37
+#: engine/core/docs/drf/views.py:43 engine/core/graphene/mutations.py:37
msgid "cache I/O"
msgstr "Cache-I/O"
-#: engine/core/docs/drf/views.py:46
+#: engine/core/docs/drf/views.py:45
msgid ""
"apply only a key to read permitted data from cache.\n"
"apply key, data and timeout with authentication to write data to cache."
msgstr ""
"Anvend kun en nøgle til at læse tilladte data fra cachen.\n"
-"Anvend nøgle, data og timeout med autentificering for at skrive data til cachen."
+"Anvend nøgle, data og timeout med autentificering for at skrive data til "
+"cachen."
-#: engine/core/docs/drf/views.py:62
+#: engine/core/docs/drf/views.py:63
msgid "get a list of supported languages"
msgstr "Få en liste over understøttede sprog"
-#: engine/core/docs/drf/views.py:74
+#: engine/core/docs/drf/views.py:75
msgid "get application's exposable parameters"
msgstr "Hent applikationens eksponerbare parametre"
-#: engine/core/docs/drf/views.py:84
+#: engine/core/docs/drf/views.py:89
msgid "send a message to the support team"
msgstr "Send en besked til supportteamet"
-#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57
+#: engine/core/docs/drf/views.py:103 engine/core/graphene/mutations.py:59
msgid "request a CORSed URL"
msgstr "Anmod om en CORSed URL. Kun https er tilladt."
-#: engine/core/docs/drf/views.py:112
+#: engine/core/docs/drf/views.py:119
msgid "Search between products, categories and brands"
msgstr "Søg mellem produkter, kategorier og mærker"
-#: engine/core/docs/drf/views.py:130
+#: engine/core/docs/drf/views.py:141
msgid "global search endpoint to query across project's tables"
msgstr "Globalt søgepunkt til at søge på tværs af projektets tabeller"
-#: engine/core/docs/drf/views.py:139
+#: engine/core/docs/drf/views.py:150
msgid "purchase an order as a business"
msgstr "Køb en ordre som virksomhed"
-#: engine/core/docs/drf/views.py:146
+#: engine/core/docs/drf/views.py:158
msgid ""
"purchase an order as a business, using the provided `products` with "
"`product_uuid` and `attributes`."
@@ -245,226 +244,223 @@ msgstr ""
"Køb en ordre som en virksomhed ved hjælp af de angivne `produkter` med "
"`produkt_uuid` og `attributter`."
-#: engine/core/docs/drf/views.py:164
+#: engine/core/docs/drf/views.py:177
msgid "download a digital asset from purchased digital order"
msgstr "Download et digitalt aktiv fra en købt digital ordre"
-#: engine/core/docs/drf/viewsets.py:61
+#: engine/core/docs/drf/viewsets.py:65
msgid "list all attribute groups (simple view)"
msgstr "Liste over alle attributgrupper (simpel visning)"
-#: engine/core/docs/drf/viewsets.py:68
+#: engine/core/docs/drf/viewsets.py:75
msgid "retrieve a single attribute group (detailed view)"
msgstr "Hent en enkelt attributgruppe (detaljeret visning)"
-#: engine/core/docs/drf/viewsets.py:75
+#: engine/core/docs/drf/viewsets.py:82
msgid "create an attribute group"
msgstr "Opret en attributgruppe"
-#: engine/core/docs/drf/viewsets.py:82
+#: engine/core/docs/drf/viewsets.py:92
msgid "delete an attribute group"
msgstr "Slet en attributgruppe"
-#: engine/core/docs/drf/viewsets.py:89
+#: engine/core/docs/drf/viewsets.py:99
msgid "rewrite an existing attribute group saving non-editables"
msgstr ""
"Omskriv en eksisterende attributgruppe, der gemmer ikke-redigerbare "
"attributter"
-#: engine/core/docs/drf/viewsets.py:96
-msgid ""
-"rewrite some fields of an existing attribute group saving non-editables"
+#: engine/core/docs/drf/viewsets.py:107
+msgid "rewrite some fields of an existing attribute group saving non-editables"
msgstr ""
"Omskriv nogle felter i en eksisterende attributgruppe og gem ikke-"
"redigerbare felter"
-#: engine/core/docs/drf/viewsets.py:106
+#: engine/core/docs/drf/viewsets.py:118
msgid "list all attributes (simple view)"
msgstr "Liste over alle attributter (simpel visning)"
-#: engine/core/docs/drf/viewsets.py:113
+#: engine/core/docs/drf/viewsets.py:128
msgid "retrieve a single attribute (detailed view)"
msgstr "Hent en enkelt attribut (detaljeret visning)"
-#: engine/core/docs/drf/viewsets.py:120
+#: engine/core/docs/drf/viewsets.py:135
msgid "create an attribute"
msgstr "Opret en attribut"
-#: engine/core/docs/drf/viewsets.py:127
+#: engine/core/docs/drf/viewsets.py:142
msgid "delete an attribute"
msgstr "Slet en attribut"
-#: engine/core/docs/drf/viewsets.py:134
+#: engine/core/docs/drf/viewsets.py:149
msgid "rewrite an existing attribute saving non-editables"
msgstr "Omskriv en eksisterende attribut, der gemmer ikke-redigerbare filer"
-#: engine/core/docs/drf/viewsets.py:141
+#: engine/core/docs/drf/viewsets.py:156
msgid "rewrite some fields of an existing attribute saving non-editables"
msgstr ""
"Omskriv nogle felter i en eksisterende attribut og gem ikke-redigerbare "
"felter"
-#: engine/core/docs/drf/viewsets.py:151
+#: engine/core/docs/drf/viewsets.py:166
msgid "list all attribute values (simple view)"
msgstr "Liste over alle attributværdier (simpel visning)"
-#: engine/core/docs/drf/viewsets.py:158
+#: engine/core/docs/drf/viewsets.py:176
msgid "retrieve a single attribute value (detailed view)"
msgstr "Hent en enkelt attributværdi (detaljeret visning)"
-#: engine/core/docs/drf/viewsets.py:165
+#: engine/core/docs/drf/viewsets.py:183
msgid "create an attribute value"
msgstr "Opret en attributværdi"
-#: engine/core/docs/drf/viewsets.py:172
+#: engine/core/docs/drf/viewsets.py:193
msgid "delete an attribute value"
msgstr "Slet en attributværdi"
-#: engine/core/docs/drf/viewsets.py:179
+#: engine/core/docs/drf/viewsets.py:200
msgid "rewrite an existing attribute value saving non-editables"
msgstr ""
"Omskriv en eksisterende attributværdi, der gemmer ikke-redigerbare filer"
-#: engine/core/docs/drf/viewsets.py:186
-msgid ""
-"rewrite some fields of an existing attribute value saving non-editables"
+#: engine/core/docs/drf/viewsets.py:208
+msgid "rewrite some fields of an existing attribute value saving non-editables"
msgstr ""
-"Omskriv nogle felter i en eksisterende attributværdi og gem ikke-redigerbare"
-" felter"
+"Omskriv nogle felter i en eksisterende attributværdi og gem ikke-redigerbare "
+"felter"
-#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197
+#: engine/core/docs/drf/viewsets.py:219 engine/core/docs/drf/viewsets.py:220
msgid "list all categories (simple view)"
msgstr "Liste over alle kategorier (enkel visning)"
-#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205
+#: engine/core/docs/drf/viewsets.py:230 engine/core/docs/drf/viewsets.py:231
msgid "retrieve a single category (detailed view)"
msgstr "Hent en enkelt kategori (detaljeret visning)"
-#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258
+#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:286
msgid "Category UUID or slug"
msgstr "Kategori UUID eller slug"
-#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221
+#: engine/core/docs/drf/viewsets.py:246 engine/core/docs/drf/viewsets.py:247
msgid "create a category"
msgstr "Opret en kategori"
-#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229
+#: engine/core/docs/drf/viewsets.py:254 engine/core/docs/drf/viewsets.py:255
msgid "delete a category"
msgstr "Slet en kategori"
-#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237
+#: engine/core/docs/drf/viewsets.py:262 engine/core/docs/drf/viewsets.py:263
msgid "rewrite an existing category saving non-editables"
msgstr "Omskriv en eksisterende kategori, der gemmer ikke-redigerbare filer"
-#: engine/core/docs/drf/viewsets.py:244 engine/core/docs/drf/viewsets.py:245
+#: engine/core/docs/drf/viewsets.py:270 engine/core/docs/drf/viewsets.py:272
msgid "rewrite some fields of an existing category saving non-editables"
msgstr ""
"Omskriv nogle felter i en eksisterende kategori og gem ikke-redigerbare "
"felter"
-#: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704
-#: engine/core/docs/drf/viewsets.py:988
+#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:1046
#: engine/core/graphene/object_types.py:117
-#: engine/core/graphene/object_types.py:207
-#: engine/core/graphene/object_types.py:482
+#: engine/core/graphene/object_types.py:236
+#: engine/core/graphene/object_types.py:537
msgid "SEO Meta snapshot"
msgstr "SEO-meta-snapshot"
-#: engine/core/docs/drf/viewsets.py:253
+#: engine/core/docs/drf/viewsets.py:281
msgid "returns a snapshot of the category's SEO meta data"
msgstr "Returnerer et øjebliksbillede af kategoriens SEO-metadata"
-#: engine/core/docs/drf/viewsets.py:274
+#: engine/core/docs/drf/viewsets.py:302
msgid "list all orders (simple view)"
msgstr "Liste over alle kategorier (enkel visning)"
-#: engine/core/docs/drf/viewsets.py:275
+#: engine/core/docs/drf/viewsets.py:303
msgid "for non-staff users, only their own orders are returned."
-msgstr ""
-"For ikke-ansatte brugere er det kun deres egne ordrer, der returneres."
+msgstr "For ikke-ansatte brugere er det kun deres egne ordrer, der returneres."
-#: engine/core/docs/drf/viewsets.py:281
+#: engine/core/docs/drf/viewsets.py:309
msgid ""
-"Case-insensitive substring search across human_readable_id, "
-"order_products.product.name, and order_products.product.partnumber"
+"Case-insensitive substring search across human_readable_id, order_products."
+"product.name, and order_products.product.partnumber"
msgstr ""
"Substringsøgning uden brug af store og små bogstaver på tværs af "
-"human_readable_id, order_products.product.name og "
-"order_products.product.partnumber"
+"human_readable_id, order_products.product.name og order_products.product."
+"partnumber"
-#: engine/core/docs/drf/viewsets.py:288
+#: engine/core/docs/drf/viewsets.py:316
msgid "Filter orders with buy_time >= this ISO 8601 datetime"
msgstr "Filtrer ordrer med buy_time >= denne ISO 8601 datetime"
-#: engine/core/docs/drf/viewsets.py:293
+#: engine/core/docs/drf/viewsets.py:321
msgid "Filter orders with buy_time <= this ISO 8601 datetime"
msgstr "Filtrer ordrer med buy_time <= denne ISO 8601 datetime"
-#: engine/core/docs/drf/viewsets.py:298
+#: engine/core/docs/drf/viewsets.py:326
msgid "Filter by exact order UUID"
msgstr "Filtrer efter nøjagtig ordre-UUID"
-#: engine/core/docs/drf/viewsets.py:303
+#: engine/core/docs/drf/viewsets.py:331
msgid "Filter by exact human-readable order ID"
msgstr "Filtrer efter nøjagtigt menneskeligt læsbart ordre-ID"
-#: engine/core/docs/drf/viewsets.py:308
+#: engine/core/docs/drf/viewsets.py:336
msgid "Filter by user's email (case-insensitive exact match)"
msgstr "Filtrer efter brugerens e-mail (case-insensitive exact match)"
-#: engine/core/docs/drf/viewsets.py:313
+#: engine/core/docs/drf/viewsets.py:341
msgid "Filter by user's UUID"
msgstr "Filtrer efter brugerens UUID"
-#: engine/core/docs/drf/viewsets.py:318
+#: engine/core/docs/drf/viewsets.py:347
msgid "Filter by order status (case-insensitive substring match)"
msgstr "Filtrer efter ordrestatus (case-insensitive substring match)"
-#: engine/core/docs/drf/viewsets.py:324
+#: engine/core/docs/drf/viewsets.py:354
msgid ""
-"Order by one of: uuid, human_readable_id, user_email, user, status, created,"
-" modified, buy_time, random. Prefix with '-' for descending (e.g. "
-"'-buy_time')."
+"Order by one of: uuid, human_readable_id, user_email, user, status, created, "
+"modified, buy_time, random. Prefix with '-' for descending (e.g. '-"
+"buy_time')."
msgstr ""
"Bestil efter en af: uuid, human_readable_id, user_email, user, status, "
-"created, modified, buy_time, random. Præfiks med '-' for faldende rækkefølge"
-" (f.eks. '-buy_time')."
+"created, modified, buy_time, random. Præfiks med '-' for faldende rækkefølge "
+"(f.eks. '-buy_time')."
-#: engine/core/docs/drf/viewsets.py:336
+#: engine/core/docs/drf/viewsets.py:366
msgid "retrieve a single order (detailed view)"
msgstr "Hent en enkelt kategori (detaljeret visning)"
-#: engine/core/docs/drf/viewsets.py:341
+#: engine/core/docs/drf/viewsets.py:371
msgid "Order UUID or human-readable id"
msgstr "Bestil UUID eller menneskeligt læsbart id"
-#: engine/core/docs/drf/viewsets.py:351
+#: engine/core/docs/drf/viewsets.py:381
msgid "create an order"
msgstr "Opret en attribut"
-#: engine/core/docs/drf/viewsets.py:352
+#: engine/core/docs/drf/viewsets.py:382
msgid "doesn't work for non-staff users."
msgstr "Virker ikke for ikke-ansatte brugere."
-#: engine/core/docs/drf/viewsets.py:359
+#: engine/core/docs/drf/viewsets.py:389
msgid "delete an order"
msgstr "Slet en attribut"
-#: engine/core/docs/drf/viewsets.py:366
+#: engine/core/docs/drf/viewsets.py:396
msgid "rewrite an existing order saving non-editables"
msgstr "Omskriv en eksisterende kategori, der gemmer ikke-redigerbare filer"
-#: engine/core/docs/drf/viewsets.py:373
+#: engine/core/docs/drf/viewsets.py:403
msgid "rewrite some fields of an existing order saving non-editables"
msgstr ""
"Omskriv nogle felter i en eksisterende kategori og gem ikke-redigerbare "
"felter"
-#: engine/core/docs/drf/viewsets.py:380
+#: engine/core/docs/drf/viewsets.py:410
msgid "purchase an order"
msgstr "Købspris på bestillingstidspunktet"
-#: engine/core/docs/drf/viewsets.py:382
+#: engine/core/docs/drf/viewsets.py:412
msgid ""
"finalizes the order purchase. if `force_balance` is used, the purchase is "
"completed using the user's balance; if `force_payment` is used, a "
@@ -474,27 +470,27 @@ msgstr ""
"ved hjælp af brugerens saldo; hvis `force_payment` bruges, igangsættes en "
"transaktion."
-#: engine/core/docs/drf/viewsets.py:397
+#: engine/core/docs/drf/viewsets.py:427
msgid "retrieve current pending order of a user"
msgstr "Hent en brugers aktuelle afventende ordre"
-#: engine/core/docs/drf/viewsets.py:398
+#: engine/core/docs/drf/viewsets.py:428
msgid "retrieves a current pending order of an authenticated user"
msgstr "henter en aktuel afventende ordre fra en autentificeret bruger"
-#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334
+#: engine/core/docs/drf/viewsets.py:438 engine/core/graphene/mutations.py:354
msgid "purchase an order without account creation"
msgstr "Køb en ordre uden at oprette en konto"
-#: engine/core/docs/drf/viewsets.py:409
+#: engine/core/docs/drf/viewsets.py:439
msgid "finalizes the order purchase for a non-registered user."
msgstr "afslutter ordrekøbet for en ikke-registreret bruger."
-#: engine/core/docs/drf/viewsets.py:420
+#: engine/core/docs/drf/viewsets.py:450
msgid "add product to order"
msgstr "Tilføj et produkt til ordren"
-#: engine/core/docs/drf/viewsets.py:421
+#: engine/core/docs/drf/viewsets.py:452
msgid ""
"adds a product to an order using the provided `product_uuid` and "
"`attributes`."
@@ -502,11 +498,11 @@ msgstr ""
"Tilføjer et produkt til en ordre ved hjælp af de angivne `product_uuid` og "
"`attributes`."
-#: engine/core/docs/drf/viewsets.py:429
+#: engine/core/docs/drf/viewsets.py:461
msgid "add a list of products to order, quantities will not count"
msgstr "Tilføj en liste med produkter til bestilling, antal tæller ikke med"
-#: engine/core/docs/drf/viewsets.py:430
+#: engine/core/docs/drf/viewsets.py:463
msgid ""
"adds a list of products to an order using the provided `product_uuid` and "
"`attributes`."
@@ -514,11 +510,11 @@ msgstr ""
"Tilføjer en liste af produkter til en ordre ved hjælp af de angivne "
"`product_uuid` og `attributes`."
-#: engine/core/docs/drf/viewsets.py:438
+#: engine/core/docs/drf/viewsets.py:472
msgid "remove product from order"
msgstr "Fjern et produkt fra ordren"
-#: engine/core/docs/drf/viewsets.py:439
+#: engine/core/docs/drf/viewsets.py:474
msgid ""
"removes a product from an order using the provided `product_uuid` and "
"`attributes`."
@@ -526,11 +522,11 @@ msgstr ""
"Fjerner et produkt fra en ordre ved hjælp af de angivne `product_uuid` og "
"`attributes`."
-#: engine/core/docs/drf/viewsets.py:447
+#: engine/core/docs/drf/viewsets.py:483
msgid "remove product from order, quantities will not count"
msgstr "Fjern et produkt fra ordren, mængderne tæller ikke med"
-#: engine/core/docs/drf/viewsets.py:448
+#: engine/core/docs/drf/viewsets.py:485
msgid ""
"removes a list of products from an order using the provided `product_uuid` "
"and `attributes`"
@@ -538,719 +534,730 @@ msgstr ""
"Fjerner en liste af produkter fra en ordre ved hjælp af de angivne "
"`product_uuid` og `attributes`."
-#: engine/core/docs/drf/viewsets.py:459
+#: engine/core/docs/drf/viewsets.py:497
msgid "list all wishlists (simple view)"
msgstr "Liste over alle attributter (simpel visning)"
-#: engine/core/docs/drf/viewsets.py:460
+#: engine/core/docs/drf/viewsets.py:498
msgid "for non-staff users, only their own wishlists are returned."
msgstr ""
"For ikke-ansatte brugere er det kun deres egne ønskelister, der returneres."
-#: engine/core/docs/drf/viewsets.py:467
+#: engine/core/docs/drf/viewsets.py:508
msgid "retrieve a single wishlist (detailed view)"
msgstr "Hent en enkelt attribut (detaljeret visning)"
-#: engine/core/docs/drf/viewsets.py:474
+#: engine/core/docs/drf/viewsets.py:515
msgid "create an wishlist"
msgstr "Opret en attribut"
-#: engine/core/docs/drf/viewsets.py:475
+#: engine/core/docs/drf/viewsets.py:516
msgid "Doesn't work for non-staff users."
msgstr "Virker ikke for ikke-ansatte brugere."
-#: engine/core/docs/drf/viewsets.py:482
+#: engine/core/docs/drf/viewsets.py:523
msgid "delete an wishlist"
msgstr "Slet en attribut"
-#: engine/core/docs/drf/viewsets.py:489
+#: engine/core/docs/drf/viewsets.py:530
msgid "rewrite an existing wishlist saving non-editables"
msgstr "Omskriv en eksisterende attribut, der gemmer ikke-redigerbare filer"
-#: engine/core/docs/drf/viewsets.py:496
+#: engine/core/docs/drf/viewsets.py:537
msgid "rewrite some fields of an existing wishlist saving non-editables"
msgstr ""
"Omskriv nogle felter i en eksisterende attribut og gem ikke-redigerbare "
"felter"
-#: engine/core/docs/drf/viewsets.py:503
+#: engine/core/docs/drf/viewsets.py:544
msgid "retrieve current pending wishlist of a user"
msgstr "Hent en brugers aktuelle ventende ønskeliste"
-#: engine/core/docs/drf/viewsets.py:504
+#: engine/core/docs/drf/viewsets.py:545
msgid "retrieves a current pending wishlist of an authenticated user"
msgstr "henter en aktuel afventende ønskeliste for en autentificeret bruger"
-#: engine/core/docs/drf/viewsets.py:514
+#: engine/core/docs/drf/viewsets.py:555
msgid "add product to wishlist"
msgstr "Tilføj et produkt til ordren"
-#: engine/core/docs/drf/viewsets.py:515
+#: engine/core/docs/drf/viewsets.py:557
msgid "adds a product to an wishlist using the provided `product_uuid`"
msgstr ""
"Tilføjer et produkt til en ønskeliste ved hjælp af den angivne "
"`product_uuid`."
-#: engine/core/docs/drf/viewsets.py:523
+#: engine/core/docs/drf/viewsets.py:566
msgid "remove product from wishlist"
msgstr "Fjern et produkt fra ønskelisten"
-#: engine/core/docs/drf/viewsets.py:524
+#: engine/core/docs/drf/viewsets.py:568
msgid "removes a product from an wishlist using the provided `product_uuid`"
msgstr ""
-"Fjerner et produkt fra en ønskeliste ved hjælp af den angivne "
-"`product_uuid`."
+"Fjerner et produkt fra en ønskeliste ved hjælp af den angivne `product_uuid`."
-#: engine/core/docs/drf/viewsets.py:532
+#: engine/core/docs/drf/viewsets.py:577
msgid "add many products to wishlist"
msgstr "Tilføj mange produkter til ønskelisten"
-#: engine/core/docs/drf/viewsets.py:533
+#: engine/core/docs/drf/viewsets.py:579
msgid "adds many products to an wishlist using the provided `product_uuids`"
msgstr ""
"Tilføjer mange produkter til en ønskeliste ved hjælp af de angivne "
"`product_uuids`."
-#: engine/core/docs/drf/viewsets.py:541
+#: engine/core/docs/drf/viewsets.py:588
msgid "remove many products from wishlist"
msgstr "Fjern et produkt fra ordren"
-#: engine/core/docs/drf/viewsets.py:542
+#: engine/core/docs/drf/viewsets.py:590
msgid ""
"removes many products from an wishlist using the provided `product_uuids`"
msgstr ""
"Fjerner mange produkter fra en ønskeliste ved hjælp af de angivne "
"`product_uuids`."
-#: engine/core/docs/drf/viewsets.py:549
+#: engine/core/docs/drf/viewsets.py:598
msgid ""
"Filter by one or more attribute name/value pairs. \n"
"• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n"
-"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n"
-"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n"
+"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, "
+"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, "
+"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n"
+"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), "
+"`true`/`false` for booleans, integers, floats; otherwise treated as "
+"string. \n"
"• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n"
"Examples: \n"
-"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n"
+"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\","
+"\"bluetooth\"]`, \n"
"`b64-description=icontains-aGVhdC1jb2xk`"
msgstr ""
"Filtrer efter et eller flere attributnavn/værdipar. \n"
"- **Syntaks**: `attr_name=method-value[;attr2=method2-value2]...`.\n"
-"- **Metoder** (standard er `icontains`, hvis udeladt): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`.\n"
-"- Værdiindtastning**: JSON forsøges først (så du kan sende lister/dikter), `true`/`false` for booleans, heltal, floats; ellers behandles de som strenge. \n"
-"- **Base64**: præfiks med `b64-` for URL-sikker base64-kodning af den rå værdi. \n"
+"- **Metoder** (standard er `icontains`, hvis udeladt): `iexact`, `exact`, "
+"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, "
+"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`.\n"
+"- Værdiindtastning**: JSON forsøges først (så du kan sende lister/dikter), "
+"`true`/`false` for booleans, heltal, floats; ellers behandles de som "
+"strenge. \n"
+"- **Base64**: præfiks med `b64-` for URL-sikker base64-kodning af den rå "
+"værdi. \n"
"Eksempler på dette: \n"
"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`,\n"
"`b64-description=icontains-aGVhdC1jb2xk`."
-#: engine/core/docs/drf/viewsets.py:568 engine/core/docs/drf/viewsets.py:569
+#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
msgid "list all products (simple view)"
msgstr "Liste over alle produkter (enkel visning)"
-#: engine/core/docs/drf/viewsets.py:574
+#: engine/core/docs/drf/viewsets.py:623
msgid "(exact) Product UUID"
msgstr "(præcis) Produkt-UUID"
-#: engine/core/docs/drf/viewsets.py:581
+#: engine/core/docs/drf/viewsets.py:630
msgid ""
-"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n"
+"Comma-separated list of fields to sort by. Prefix with `-` for "
+"descending. \n"
"**Allowed:** uuid, rating, name, slug, created, modified, price, random"
msgstr ""
-"Kommasepareret liste over felter, der skal sorteres efter. Præfiks med `-` for faldende. \n"
+"Kommasepareret liste over felter, der skal sorteres efter. Præfiks med `-` "
+"for faldende. \n"
"**Tilladt:** uuid, vurdering, navn, slug, oprettet, ændret, pris, tilfældig"
-#: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599
+#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
msgid "retrieve a single product (detailed view)"
msgstr "Hent et enkelt produkt (detaljeret visning)"
-#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634
-#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672
-#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710
+#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683
+#: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725
+#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763
msgid "Product UUID or slug"
msgstr "Produkt UUID eller Slug"
-#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
+#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
#: engine/core/graphene/dashboard_mutations/product.py:80
#: engine/core/graphene/dashboard_mutations/product.py:118
#: engine/core/graphene/dashboard_mutations/product.py:166
msgid "create a product"
msgstr "Opret et produkt"
-#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629
+#: engine/core/docs/drf/viewsets.py:677 engine/core/docs/drf/viewsets.py:678
msgid "rewrite an existing product, preserving non-editable fields"
msgstr "Omskriv et eksisterende produkt og bevar ikke-redigerbare felter"
-#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
+#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:700
msgid ""
"update some fields of an existing product, preserving non-editable fields"
msgstr ""
"Opdater nogle felter i et eksisterende produkt og bevar ikke-redigerbare "
"felter"
-#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
+#: engine/core/docs/drf/viewsets.py:719 engine/core/docs/drf/viewsets.py:720
msgid "delete a product"
msgstr "Slet et produkt"
-#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686
+#: engine/core/docs/drf/viewsets.py:738 engine/core/docs/drf/viewsets.py:739
msgid "lists all permitted feedbacks for a product"
msgstr "viser alle tilladte tilbagemeldinger for et produkt"
-#: engine/core/docs/drf/viewsets.py:705
+#: engine/core/docs/drf/viewsets.py:758
msgid "returns a snapshot of the product's SEO meta data"
msgstr "Returnerer et øjebliksbillede af produktets SEO-metadata"
-#: engine/core/docs/drf/viewsets.py:726
+#: engine/core/docs/drf/viewsets.py:779
msgid "list all addresses"
msgstr "Angiv alle adresser"
-#: engine/core/docs/drf/viewsets.py:736
+#: engine/core/docs/drf/viewsets.py:789
msgid "retrieve a single address"
msgstr "Hent en enkelt adresse"
-#: engine/core/docs/drf/viewsets.py:746
+#: engine/core/docs/drf/viewsets.py:799
msgid "create a new address"
msgstr "Opret en ny adresse"
-#: engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:810
msgid "delete an address"
msgstr "Slet en adresse"
-#: engine/core/docs/drf/viewsets.py:767
+#: engine/core/docs/drf/viewsets.py:820
msgid "update an entire address"
msgstr "Opdater en hel adresse"
-#: engine/core/docs/drf/viewsets.py:778
+#: engine/core/docs/drf/viewsets.py:831
msgid "partially update an address"
msgstr "Delvis opdatering af en adresse"
-#: engine/core/docs/drf/viewsets.py:789
+#: engine/core/docs/drf/viewsets.py:842
msgid "autocomplete address suggestions"
msgstr "Automatisk udfyldning af adresseinput"
-#: engine/core/docs/drf/viewsets.py:794
+#: engine/core/docs/drf/viewsets.py:848
msgid "raw data query string, please append with data from geo-IP endpoint"
msgstr "Rå dataforespørgselsstreng, tilføj venligst data fra geo-IP-slutpunkt"
-#: engine/core/docs/drf/viewsets.py:800
+#: engine/core/docs/drf/viewsets.py:855
msgid "limit the results amount, 1 < limit < 10, default: 5"
msgstr "begrænser mængden af resultater, 1 < grænse < 10, standard: 5"
-#: engine/core/docs/drf/viewsets.py:816
+#: engine/core/docs/drf/viewsets.py:871
msgid "list all feedbacks (simple view)"
msgstr "Vis alle tilbagemeldinger (enkel visning)"
-#: engine/core/docs/drf/viewsets.py:823
+#: engine/core/docs/drf/viewsets.py:881
msgid "retrieve a single feedback (detailed view)"
msgstr "Hent en enkelt feedback (detaljeret visning)"
-#: engine/core/docs/drf/viewsets.py:830
+#: engine/core/docs/drf/viewsets.py:888
msgid "create a feedback"
msgstr "skab en feedback"
-#: engine/core/docs/drf/viewsets.py:837
+#: engine/core/docs/drf/viewsets.py:895
msgid "delete a feedback"
msgstr "Slet en tilbagemelding"
-#: engine/core/docs/drf/viewsets.py:844
+#: engine/core/docs/drf/viewsets.py:902
msgid "rewrite an existing feedback saving non-editables"
msgstr "omskriv en eksisterende feedback, der gemmer ikke-redigerbare filer"
-#: engine/core/docs/drf/viewsets.py:851
+#: engine/core/docs/drf/viewsets.py:909
msgid "rewrite some fields of an existing feedback saving non-editables"
msgstr ""
"Omskriv nogle felter i en eksisterende kategori og gem ikke-redigerbare "
"felter"
-#: engine/core/docs/drf/viewsets.py:861
+#: engine/core/docs/drf/viewsets.py:919
msgid "list all order–product relations (simple view)"
msgstr "liste alle ordre-produkt-relationer (simpel visning)"
-#: engine/core/docs/drf/viewsets.py:871
+#: engine/core/docs/drf/viewsets.py:929
msgid "retrieve a single order–product relation (detailed view)"
msgstr "Hent en enkelt ordre-produkt-relation (detaljeret visning)"
-#: engine/core/docs/drf/viewsets.py:881
+#: engine/core/docs/drf/viewsets.py:939
msgid "create a new order–product relation"
msgstr "Opret en ny ordre-produkt-relation"
-#: engine/core/docs/drf/viewsets.py:891
+#: engine/core/docs/drf/viewsets.py:949
msgid "replace an existing order–product relation"
msgstr "erstatte en eksisterende ordre-produkt-relation"
-#: engine/core/docs/drf/viewsets.py:901
+#: engine/core/docs/drf/viewsets.py:959
msgid "partially update an existing order–product relation"
msgstr "delvist opdatere en eksisterende ordre-produkt-relation"
-#: engine/core/docs/drf/viewsets.py:911
+#: engine/core/docs/drf/viewsets.py:969
msgid "delete an order–product relation"
msgstr "slette en ordre-produkt-relation"
-#: engine/core/docs/drf/viewsets.py:921
+#: engine/core/docs/drf/viewsets.py:979
msgid "add or remove feedback on an order–product relation"
msgstr "tilføje eller fjerne feedback på en ordre-produkt-relation"
-#: engine/core/docs/drf/viewsets.py:938
+#: engine/core/docs/drf/viewsets.py:996
msgid "list all brands (simple view)"
msgstr "Liste over alle mærker (enkel visning)"
-#: engine/core/docs/drf/viewsets.py:945
+#: engine/core/docs/drf/viewsets.py:1003
msgid "retrieve a single brand (detailed view)"
msgstr "Hent et enkelt mærke (detaljeret visning)"
-#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993
+#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051
msgid "Brand UUID or slug"
msgstr "Brand UUID eller slug"
-#: engine/core/docs/drf/viewsets.py:960
+#: engine/core/docs/drf/viewsets.py:1018
msgid "create a brand"
msgstr "Skab et brand"
-#: engine/core/docs/drf/viewsets.py:967
+#: engine/core/docs/drf/viewsets.py:1025
msgid "delete a brand"
msgstr "Slet et brand"
-#: engine/core/docs/drf/viewsets.py:974
+#: engine/core/docs/drf/viewsets.py:1032
msgid "rewrite an existing brand saving non-editables"
msgstr "Omskrivning af et eksisterende brand, der gemmer non-editables"
-#: engine/core/docs/drf/viewsets.py:981
+#: engine/core/docs/drf/viewsets.py:1039
msgid "rewrite some fields of an existing brand saving non-editables"
msgstr ""
"Omskriv nogle felter i en eksisterende kategori og gem ikke-redigerbare "
"felter"
-#: engine/core/docs/drf/viewsets.py:1006
+#: engine/core/docs/drf/viewsets.py:1064
msgid "list all vendors (simple view)"
msgstr "Liste over alle leverandører (enkel visning)"
-#: engine/core/docs/drf/viewsets.py:1013
+#: engine/core/docs/drf/viewsets.py:1074
msgid "retrieve a single vendor (detailed view)"
msgstr "Hent en enkelt leverandør (detaljeret visning)"
-#: engine/core/docs/drf/viewsets.py:1020
+#: engine/core/docs/drf/viewsets.py:1081
msgid "create a vendor"
msgstr "Opret en leverandør"
-#: engine/core/docs/drf/viewsets.py:1027
+#: engine/core/docs/drf/viewsets.py:1088
msgid "delete a vendor"
msgstr "Slet en leverandør"
-#: engine/core/docs/drf/viewsets.py:1034
+#: engine/core/docs/drf/viewsets.py:1095
msgid "rewrite an existing vendor saving non-editables"
msgstr "Omskriv en eksisterende leverandør, der gemmer ikke-redigerbare filer"
-#: engine/core/docs/drf/viewsets.py:1041
+#: engine/core/docs/drf/viewsets.py:1102
msgid "rewrite some fields of an existing vendor saving non-editables"
msgstr ""
"Omskriv nogle felter i en eksisterende kategori og gem ikke-redigerbare "
"felter"
-#: engine/core/docs/drf/viewsets.py:1051
+#: engine/core/docs/drf/viewsets.py:1112
msgid "list all product images (simple view)"
msgstr "Vis alle produktbilleder (enkel visning)"
-#: engine/core/docs/drf/viewsets.py:1058
+#: engine/core/docs/drf/viewsets.py:1122
msgid "retrieve a single product image (detailed view)"
msgstr "Hent et enkelt produktbillede (detaljeret visning)"
-#: engine/core/docs/drf/viewsets.py:1065
+#: engine/core/docs/drf/viewsets.py:1129
msgid "create a product image"
msgstr "Skab et produktbillede"
-#: engine/core/docs/drf/viewsets.py:1072
+#: engine/core/docs/drf/viewsets.py:1139
msgid "delete a product image"
msgstr "Slet et produktbillede"
-#: engine/core/docs/drf/viewsets.py:1079
+#: engine/core/docs/drf/viewsets.py:1146
msgid "rewrite an existing product image saving non-editables"
msgstr ""
"Omskriv et eksisterende produktbillede og gem ikke-redigerbare elementer"
-#: engine/core/docs/drf/viewsets.py:1086
+#: engine/core/docs/drf/viewsets.py:1154
msgid "rewrite some fields of an existing product image saving non-editables"
msgstr ""
"Omskriv nogle felter i en eksisterende kategori og gem ikke-redigerbare "
"felter"
-#: engine/core/docs/drf/viewsets.py:1096
+#: engine/core/docs/drf/viewsets.py:1165
msgid "list all promo codes (simple view)"
msgstr "Liste over alle kampagnekoder (enkel visning)"
-#: engine/core/docs/drf/viewsets.py:1103
+#: engine/core/docs/drf/viewsets.py:1175
msgid "retrieve a single promo code (detailed view)"
msgstr "Hent en enkelt kampagnekode (detaljeret visning)"
-#: engine/core/docs/drf/viewsets.py:1110
+#: engine/core/docs/drf/viewsets.py:1182
msgid "create a promo code"
msgstr "Opret en kampagnekode"
-#: engine/core/docs/drf/viewsets.py:1117
+#: engine/core/docs/drf/viewsets.py:1189
msgid "delete a promo code"
msgstr "Slet en kampagnekode"
-#: engine/core/docs/drf/viewsets.py:1124
+#: engine/core/docs/drf/viewsets.py:1196
msgid "rewrite an existing promo code saving non-editables"
msgstr "Omskriv en eksisterende kampagnekode og gem ikke-redigerbare koder"
-#: engine/core/docs/drf/viewsets.py:1131
+#: engine/core/docs/drf/viewsets.py:1203
msgid "rewrite some fields of an existing promo code saving non-editables"
msgstr ""
"Omskriv nogle felter i en eksisterende kategori og gem ikke-redigerbare "
"felter"
-#: engine/core/docs/drf/viewsets.py:1141
+#: engine/core/docs/drf/viewsets.py:1213
msgid "list all promotions (simple view)"
msgstr "Liste over alle kampagner (enkel visning)"
-#: engine/core/docs/drf/viewsets.py:1148
+#: engine/core/docs/drf/viewsets.py:1223
msgid "retrieve a single promotion (detailed view)"
msgstr "Hent en enkelt forfremmelse (detaljeret visning)"
-#: engine/core/docs/drf/viewsets.py:1155
+#: engine/core/docs/drf/viewsets.py:1230
msgid "create a promotion"
msgstr "Opret en kampagne"
-#: engine/core/docs/drf/viewsets.py:1162
+#: engine/core/docs/drf/viewsets.py:1237
msgid "delete a promotion"
msgstr "Slet en forfremmelse"
-#: engine/core/docs/drf/viewsets.py:1169
+#: engine/core/docs/drf/viewsets.py:1244
msgid "rewrite an existing promotion saving non-editables"
msgstr "Omskriv en eksisterende kampagne og gem ikke-redigerbare elementer"
-#: engine/core/docs/drf/viewsets.py:1176
+#: engine/core/docs/drf/viewsets.py:1251
msgid "rewrite some fields of an existing promotion saving non-editables"
msgstr ""
"Omskriv nogle felter i en eksisterende kategori og gem ikke-redigerbare "
"felter"
-#: engine/core/docs/drf/viewsets.py:1186
+#: engine/core/docs/drf/viewsets.py:1261
msgid "list all stocks (simple view)"
msgstr "Liste over alle aktier (enkel visning)"
-#: engine/core/docs/drf/viewsets.py:1193
+#: engine/core/docs/drf/viewsets.py:1268
msgid "retrieve a single stock (detailed view)"
msgstr "Hent et enkelt lager (detaljeret visning)"
-#: engine/core/docs/drf/viewsets.py:1200
+#: engine/core/docs/drf/viewsets.py:1275
msgid "create a stock record"
msgstr "Opret en lagerpost"
-#: engine/core/docs/drf/viewsets.py:1207
+#: engine/core/docs/drf/viewsets.py:1282
msgid "delete a stock record"
msgstr "Slet en lagerpost"
-#: engine/core/docs/drf/viewsets.py:1214
+#: engine/core/docs/drf/viewsets.py:1289
msgid "rewrite an existing stock record saving non-editables"
msgstr "Omskriv en eksisterende lagerpost og gem ikke-redigerbare varer"
-#: engine/core/docs/drf/viewsets.py:1221
+#: engine/core/docs/drf/viewsets.py:1297
msgid "rewrite some fields of an existing stock record saving non-editables"
msgstr ""
"Omskriv nogle felter i en eksisterende kategori og gem ikke-redigerbare "
"felter"
-#: engine/core/docs/drf/viewsets.py:1231
+#: engine/core/docs/drf/viewsets.py:1308
msgid "list all product tags (simple view)"
msgstr "Liste over alle produkttags (enkel visning)"
-#: engine/core/docs/drf/viewsets.py:1238
+#: engine/core/docs/drf/viewsets.py:1318
msgid "retrieve a single product tag (detailed view)"
msgstr "Hent et enkelt produkttag (detaljeret visning)"
-#: engine/core/docs/drf/viewsets.py:1245
+#: engine/core/docs/drf/viewsets.py:1325
msgid "create a product tag"
msgstr "Opret et produkttag"
-#: engine/core/docs/drf/viewsets.py:1252
+#: engine/core/docs/drf/viewsets.py:1335
msgid "delete a product tag"
msgstr "Slet et produkttag"
-#: engine/core/docs/drf/viewsets.py:1259
+#: engine/core/docs/drf/viewsets.py:1342
msgid "rewrite an existing product tag saving non-editables"
msgstr "Omskriv et eksisterende produkttag og gem ikke-redigerbare ting"
-#: engine/core/docs/drf/viewsets.py:1266
+#: engine/core/docs/drf/viewsets.py:1350
msgid "rewrite some fields of an existing product tag saving non-editables"
msgstr ""
"Omskriv nogle felter i en eksisterende kategori og gem ikke-redigerbare "
"felter"
-#: engine/core/elasticsearch/__init__.py:122
-#: engine/core/elasticsearch/__init__.py:570
+#: engine/core/elasticsearch/__init__.py:127
+#: engine/core/elasticsearch/__init__.py:627
msgid "no search term provided."
msgstr "Der er ikke angivet noget søgeord."
-#: engine/core/filters.py:69 engine/core/filters.py:426
-#: engine/core/filters.py:553
+#: engine/core/filters.py:78 engine/core/filters.py:484
+#: engine/core/filters.py:625
msgid "Search"
msgstr "Søg efter"
-#: engine/core/filters.py:70 engine/core/filters.py:583
-#: engine/core/filters.py:612
+#: engine/core/filters.py:79 engine/core/filters.py:662
+#: engine/core/filters.py:691
msgid "UUID"
msgstr "UUID"
-#: engine/core/filters.py:71 engine/core/filters.py:428
-#: engine/core/filters.py:555
+#: engine/core/filters.py:80 engine/core/filters.py:487
+#: engine/core/filters.py:627
msgid "Name"
msgstr "Navn"
-#: engine/core/filters.py:72 engine/core/filters.py:557
+#: engine/core/filters.py:82 engine/core/filters.py:630
msgid "Categories"
msgstr "Kategorier"
-#: engine/core/filters.py:74
+#: engine/core/filters.py:86
msgid "Categories Slugs"
msgstr "Kategorier Snegle"
-#: engine/core/filters.py:75 engine/core/filters.py:436
+#: engine/core/filters.py:88 engine/core/filters.py:495
msgid "Tags"
msgstr "Tags"
-#: engine/core/filters.py:76
+#: engine/core/filters.py:90
msgid "Min Price"
msgstr "Min. pris"
-#: engine/core/filters.py:77
+#: engine/core/filters.py:93
msgid "Max Price"
msgstr "Maks. pris"
-#: engine/core/filters.py:78
+#: engine/core/filters.py:95
msgid "Is Active"
msgstr "Er aktiv"
-#: engine/core/filters.py:79
+#: engine/core/filters.py:96
msgid "Brand"
msgstr "Brand"
-#: engine/core/filters.py:80
+#: engine/core/filters.py:97
msgid "Attributes"
msgstr "Egenskaber"
-#: engine/core/filters.py:81
+#: engine/core/filters.py:99
msgid "Quantity"
msgstr "Mængde"
-#: engine/core/filters.py:82 engine/core/filters.py:430
-#: engine/core/filters.py:556 engine/core/models.py:321
-#: engine/core/models.py:489 engine/core/models.py:644
+#: engine/core/filters.py:101 engine/core/filters.py:489
+#: engine/core/filters.py:628 engine/core/models.py:327
+#: engine/core/models.py:508 engine/core/models.py:665
msgid "Slug"
msgstr "Snegl"
-#: engine/core/filters.py:83
+#: engine/core/filters.py:102
msgid "Is Digital"
msgstr "Er digital"
-#: engine/core/filters.py:84
+#: engine/core/filters.py:104
msgid "Include sub-categories"
msgstr "Inkluder underkategorier"
-#: engine/core/filters.py:87
+#: engine/core/filters.py:108
msgid "Include personal ordered"
msgstr "Inkluder personligt bestilte produkter"
-#: engine/core/filters.py:89 engine/core/models.py:648
+#: engine/core/filters.py:110 engine/core/models.py:669
msgid "SKU"
msgstr "VARENUMMER"
-#: engine/core/filters.py:184
+#: engine/core/filters.py:212
msgid "there must be a category_uuid to use include_subcategories flag"
msgstr ""
"Der skal være en category_uuid for at bruge include_subcategories-flaget"
-#: engine/core/filters.py:353
+#: engine/core/filters.py:398
msgid "Search (ID, product name or part number)"
msgstr "Søg (ID, produktnavn eller reservedelsnummer)"
-#: engine/core/filters.py:356
+#: engine/core/filters.py:402
msgid "Bought after (inclusive)"
msgstr "Købt efter (inklusive)"
-#: engine/core/filters.py:357
+#: engine/core/filters.py:405
msgid "Bought before (inclusive)"
msgstr "Købt før (inklusive)"
-#: engine/core/filters.py:360 engine/core/filters.py:407
-#: engine/core/filters.py:614
+#: engine/core/filters.py:410 engine/core/filters.py:461
+#: engine/core/filters.py:696
msgid "User email"
msgstr "Brugerens e-mail"
-#: engine/core/filters.py:361 engine/core/filters.py:408
-#: engine/core/filters.py:592 engine/core/filters.py:613
+#: engine/core/filters.py:413 engine/core/filters.py:464
+#: engine/core/filters.py:671 engine/core/filters.py:693
msgid "User UUID"
msgstr "Bruger UUID"
-#: engine/core/filters.py:362
+#: engine/core/filters.py:415
msgid "Status"
msgstr "Status"
-#: engine/core/filters.py:366
+#: engine/core/filters.py:419
msgid "Human Readable ID"
msgstr "Menneskeligt læsbart ID"
-#: engine/core/filters.py:429
+#: engine/core/filters.py:488
msgid "Parent"
msgstr "Forælder"
-#: engine/core/filters.py:433
+#: engine/core/filters.py:492
msgid "Whole category(has at least 1 product or not)"
msgstr "Hele kategorien (har mindst 1 produkt eller ej)"
-#: engine/core/filters.py:437
+#: engine/core/filters.py:496
msgid "Level"
msgstr "Niveau"
-#: engine/core/filters.py:587
+#: engine/core/filters.py:666
msgid "Product UUID"
msgstr "Produkt UUID"
-#: engine/core/graphene/mutations.py:40
+#: engine/core/graphene/mutations.py:41
msgid "key to look for in or set into the cache"
msgstr "Nøgle til at lede efter i eller lægge i cachen"
-#: engine/core/graphene/mutations.py:41
+#: engine/core/graphene/mutations.py:43
msgid "data to store in cache"
msgstr "Data, der skal gemmes i cachen"
-#: engine/core/graphene/mutations.py:44
+#: engine/core/graphene/mutations.py:46
msgid "timeout in seconds to set the data for into the cache"
msgstr "Timeout i sekunder for at lægge data i cachen"
-#: engine/core/graphene/mutations.py:47
+#: engine/core/graphene/mutations.py:49
msgid "cached data"
msgstr "Cachelagrede data"
-#: engine/core/graphene/mutations.py:62
+#: engine/core/graphene/mutations.py:64
msgid "camelized JSON data from the requested URL"
msgstr "Cameliserede JSON-data fra den ønskede URL"
-#: engine/core/graphene/mutations.py:67 engine/core/views.py:257
+#: engine/core/graphene/mutations.py:69 engine/core/views.py:249
msgid "only URLs starting with http(s):// are allowed"
msgstr "Kun URL'er, der starter med http(s)://, er tilladt."
-#: engine/core/graphene/mutations.py:83
+#: engine/core/graphene/mutations.py:87
msgid "add a product to the order"
msgstr "Tilføj et produkt til ordren"
-#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131
-#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287
+#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139
+#: engine/core/graphene/mutations.py:255 engine/core/graphene/mutations.py:307
#, python-brace-format
msgid "order {order_uuid} not found"
msgstr "Ordre {order_uuid} ikke fundet!"
-#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159
+#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167
msgid "remove a product from the order"
msgstr "Fjern et produkt fra ordren"
-#: engine/core/graphene/mutations.py:137
+#: engine/core/graphene/mutations.py:145
msgid "remove all products from the order"
msgstr "Fjern alle produkter fra ordren"
-#: engine/core/graphene/mutations.py:182
+#: engine/core/graphene/mutations.py:190
msgid "buy an order"
msgstr "Køb en ordre"
-#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265
+#: engine/core/graphene/mutations.py:221 engine/core/graphene/mutations.py:283
msgid "please provide either order_uuid or order_hr_id - mutually exclusive"
msgstr "Angiv enten order_uuid eller order_hr_id - det udelukker hinanden!"
-#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501
-#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712
+#: engine/core/graphene/mutations.py:250 engine/core/graphene/mutations.py:525
+#: engine/core/graphene/mutations.py:574 engine/core/viewsets.py:753
msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr "Forkert type kom fra metoden order.buy(): {type(instance)!s}"
-#: engine/core/graphene/mutations.py:245
+#: engine/core/graphene/mutations.py:261
msgid "perform an action on a list of products in the order"
msgstr "Udfør en handling på en liste af produkter i ordren"
-#: engine/core/graphene/mutations.py:250
+#: engine/core/graphene/mutations.py:266
msgid "remove/add"
msgstr "Fjern/tilføj"
-#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323
+#: engine/core/graphene/mutations.py:302 engine/core/graphene/mutations.py:343
msgid "action must be either add or remove"
msgstr "Handlingen skal være enten \"tilføj\" eller \"fjern\"!"
-#: engine/core/graphene/mutations.py:293
+#: engine/core/graphene/mutations.py:313
msgid "perform an action on a list of products in the wishlist"
msgstr "Udfør en handling på en liste af produkter i ønskelisten"
-#: engine/core/graphene/mutations.py:311
+#: engine/core/graphene/mutations.py:331
msgid "please provide wishlist_uuid value"
msgstr "Angiv venligst værdien `wishlist_uuid`."
-#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404
-#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460
-#: engine/core/graphene/mutations.py:504
+#: engine/core/graphene/mutations.py:348 engine/core/graphene/mutations.py:424
+#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480
+#: engine/core/graphene/mutations.py:530
#, python-brace-format
msgid "wishlist {wishlist_uuid} not found"
msgstr "Ønskeliste {wishlist_uuid} ikke fundet!"
-#: engine/core/graphene/mutations.py:382
+#: engine/core/graphene/mutations.py:402
msgid "add a product to the wishlist"
msgstr "Tilføj et produkt til ordren"
-#: engine/core/graphene/mutations.py:410
+#: engine/core/graphene/mutations.py:430
msgid "remove a product from the wishlist"
msgstr "Fjern et produkt fra ordren"
-#: engine/core/graphene/mutations.py:438
+#: engine/core/graphene/mutations.py:458
msgid "remove all products from the wishlist"
msgstr "Fjern et produkt fra ordren"
-#: engine/core/graphene/mutations.py:466
+#: engine/core/graphene/mutations.py:486
msgid "buy all products from the wishlist"
msgstr "Fjern et produkt fra ordren"
-#: engine/core/graphene/mutations.py:510
+#: engine/core/graphene/mutations.py:536
msgid "buy a product"
msgstr "Køb en ordre"
-#: engine/core/graphene/mutations.py:516
+#: engine/core/graphene/mutations.py:543
msgid ""
-"please send the attributes as the string formatted like "
-"attr1=value1,attr2=value2"
+"please send the attributes as the string formatted like attr1=value1,"
+"attr2=value2"
msgstr ""
-"Send venligst attributterne som en streng formateret som "
-"attr1=værdi1,attr2=værdi2"
+"Send venligst attributterne som en streng formateret som attr1=værdi1,"
+"attr2=værdi2"
-#: engine/core/graphene/mutations.py:549
+#: engine/core/graphene/mutations.py:581
msgid "add or delete a feedback for orderproduct"
msgstr "Tilføj eller slet en feedback til ordreproduktet"
-#: engine/core/graphene/mutations.py:573
+#: engine/core/graphene/mutations.py:607
msgid "action must be either `add` or `remove`"
msgstr "Handlingen skal være enten `add` eller `remove`!"
-#: engine/core/graphene/mutations.py:576
+#: engine/core/graphene/mutations.py:610
#, python-brace-format
msgid "order product {order_product_uuid} not found"
msgstr "Ordreprodukt {order_product_uuid} ikke fundet!"
-#: engine/core/graphene/mutations.py:582
+#: engine/core/graphene/mutations.py:617
msgid "original address string provided by the user"
msgstr "Original adressestreng leveret af brugeren"
-#: engine/core/graphene/mutations.py:618 engine/core/models.py:955
-#: engine/core/models.py:968 engine/core/models.py:1383
-#: engine/core/models.py:1412 engine/core/models.py:1437
-#: engine/core/viewsets.py:715
+#: engine/core/graphene/mutations.py:654 engine/core/models.py:978
+#: engine/core/models.py:991 engine/core/models.py:1435
+#: engine/core/models.py:1466 engine/core/models.py:1497
+#: engine/core/viewsets.py:760
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr "{name} findes ikke: {uuid}!"
-#: engine/core/graphene/mutations.py:632
+#: engine/core/graphene/mutations.py:668
msgid "limit must be between 1 and 10"
msgstr "Grænsen skal være mellem 1 og 10"
-#: engine/core/graphene/mutations.py:681
+#: engine/core/graphene/mutations.py:717
msgid "elasticsearch - works like a charm"
msgstr "ElasticSearch - fungerer som en charme"
#: engine/core/graphene/object_types.py:82
-#: engine/core/graphene/object_types.py:370
-#: engine/core/graphene/object_types.py:417 engine/core/models.py:772
-#: engine/core/models.py:1250 engine/core/models.py:1897
+#: engine/core/graphene/object_types.py:417
+#: engine/core/graphene/object_types.py:468 engine/core/models.py:795
+#: engine/core/models.py:1289 engine/core/models.py:2021
msgid "attributes"
msgstr "Egenskaber"
@@ -1263,94 +1270,92 @@ msgid "groups of attributes"
msgstr "Grupper af attributter"
#: engine/core/graphene/object_types.py:116
-#: engine/core/graphene/object_types.py:193
-#: engine/core/graphene/object_types.py:223 engine/core/models.py:432
+#: engine/core/graphene/object_types.py:214
+#: engine/core/graphene/object_types.py:252 engine/core/models.py:451
msgid "categories"
msgstr "Kategorier"
-#: engine/core/graphene/object_types.py:124 engine/core/models.py:503
+#: engine/core/graphene/object_types.py:132 engine/core/models.py:522
msgid "brands"
msgstr "Mærker"
-#: engine/core/graphene/object_types.py:195
+#: engine/core/graphene/object_types.py:216
msgid "category image url"
msgstr "Kategorier"
-#: engine/core/graphene/object_types.py:196
-#: engine/core/graphene/object_types.py:317 engine/core/models.py:283
+#: engine/core/graphene/object_types.py:217
+#: engine/core/graphene/object_types.py:362 engine/core/models.py:289
msgid "markup percentage"
msgstr "Markup-procentdel"
-#: engine/core/graphene/object_types.py:199
+#: engine/core/graphene/object_types.py:221
msgid "which attributes and values can be used for filtering this category."
msgstr ""
-"Hvilke attributter og værdier, der kan bruges til at filtrere denne "
-"kategori."
+"Hvilke attributter og værdier, der kan bruges til at filtrere denne kategori."
-#: engine/core/graphene/object_types.py:203
-msgid ""
-"minimum and maximum prices for products in this category, if available."
+#: engine/core/graphene/object_types.py:227
+msgid "minimum and maximum prices for products in this category, if available."
msgstr ""
"Minimums- og maksimumspriser for produkter i denne kategori, hvis de er "
"tilgængelige."
-#: engine/core/graphene/object_types.py:205
+#: engine/core/graphene/object_types.py:231
msgid "tags for this category"
msgstr "Tags for denne kategori"
-#: engine/core/graphene/object_types.py:206
+#: engine/core/graphene/object_types.py:234
msgid "products in this category"
msgstr "Produkter i denne kategori"
-#: engine/core/graphene/object_types.py:324 engine/core/models.py:188
+#: engine/core/graphene/object_types.py:369 engine/core/models.py:194
msgid "vendors"
msgstr "Leverandører"
-#: engine/core/graphene/object_types.py:328
+#: engine/core/graphene/object_types.py:373
msgid "Latitude (Y coordinate)"
msgstr "Breddegrad (Y-koordinat)"
-#: engine/core/graphene/object_types.py:329
+#: engine/core/graphene/object_types.py:374
msgid "Longitude (X coordinate)"
msgstr "Længdegrad (X-koordinat)"
-#: engine/core/graphene/object_types.py:358
+#: engine/core/graphene/object_types.py:403
msgid "comment"
msgstr "Sådan gør du"
-#: engine/core/graphene/object_types.py:359
-#: engine/core/graphene/object_types.py:483
+#: engine/core/graphene/object_types.py:405
+#: engine/core/graphene/object_types.py:539
msgid "rating value from 1 to 10, inclusive, or 0 if not set."
msgstr ""
"Vurderingsværdi fra 1 til 10, inklusive, eller 0, hvis den ikke er "
"indstillet."
-#: engine/core/graphene/object_types.py:366
+#: engine/core/graphene/object_types.py:413
msgid "represents feedback from a user."
msgstr "Repræsenterer feedback fra en bruger."
-#: engine/core/graphene/object_types.py:371
-#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244
+#: engine/core/graphene/object_types.py:418
+#: engine/core/graphene/object_types.py:469 engine/core/models.py:1283
msgid "notifications"
msgstr "Meddelelser"
-#: engine/core/graphene/object_types.py:372
+#: engine/core/graphene/object_types.py:420
msgid "download url for this order product if applicable"
msgstr "Download url for dette ordreprodukt, hvis det er relevant"
-#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736
+#: engine/core/graphene/object_types.py:422 engine/core/models.py:1848
msgid "feedback"
msgstr "Feedback"
-#: engine/core/graphene/object_types.py:407
+#: engine/core/graphene/object_types.py:456
msgid "a list of order products in this order"
msgstr "En liste over bestillingsprodukter i denne ordre"
-#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214
+#: engine/core/graphene/object_types.py:458 engine/core/models.py:1253
msgid "billing address"
msgstr "Faktureringsadresse"
-#: engine/core/graphene/object_types.py:412
+#: engine/core/graphene/object_types.py:462
msgid ""
"shipping address for this order, leave blank if same as billing address or "
"if not applicable"
@@ -1358,53 +1363,53 @@ msgstr ""
"Leveringsadresse for denne ordre, lad den være tom, hvis den er den samme "
"som faktureringsadressen, eller hvis den ikke er relevant"
-#: engine/core/graphene/object_types.py:414
+#: engine/core/graphene/object_types.py:465
msgid "total price of this order"
msgstr "Samlet pris for denne ordre"
-#: engine/core/graphene/object_types.py:415
+#: engine/core/graphene/object_types.py:466
msgid "total quantity of products in order"
msgstr "Samlet antal produkter i ordren"
-#: engine/core/graphene/object_types.py:416
+#: engine/core/graphene/object_types.py:467
msgid "are all products in the order digital"
msgstr "Er alle produkterne i ordren digitale?"
-#: engine/core/graphene/object_types.py:419
+#: engine/core/graphene/object_types.py:471
msgid "transactions for this order"
msgstr "Transaktioner for denne ordre"
-#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278
+#: engine/core/graphene/object_types.py:491 engine/core/models.py:1317
msgid "orders"
msgstr "Bestillinger"
-#: engine/core/graphene/object_types.py:459
+#: engine/core/graphene/object_types.py:512
msgid "image url"
msgstr "Billed-URL"
-#: engine/core/graphene/object_types.py:466
+#: engine/core/graphene/object_types.py:519
msgid "product's images"
msgstr "Produktets billeder"
-#: engine/core/graphene/object_types.py:473 engine/core/models.py:431
-#: engine/core/models.py:586
+#: engine/core/graphene/object_types.py:526 engine/core/models.py:450
+#: engine/core/models.py:607
msgid "category"
msgstr "Kategori"
-#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737
+#: engine/core/graphene/object_types.py:528 engine/core/models.py:1849
msgid "feedbacks"
msgstr "Tilbagemeldinger"
-#: engine/core/graphene/object_types.py:476 engine/core/models.py:502
-#: engine/core/models.py:595
+#: engine/core/graphene/object_types.py:529 engine/core/models.py:521
+#: engine/core/models.py:616
msgid "brand"
msgstr "Brand"
-#: engine/core/graphene/object_types.py:477 engine/core/models.py:106
+#: engine/core/graphene/object_types.py:531 engine/core/models.py:106
msgid "attribute groups"
msgstr "Attributgrupper"
-#: engine/core/graphene/object_types.py:478
+#: engine/core/graphene/object_types.py:533
#: engine/core/templates/digital_order_created_email.html:111
#: engine/core/templates/digital_order_delivered_email.html:109
#: engine/core/templates/shipped_order_created_email.html:109
@@ -1412,7 +1417,7 @@ msgstr "Attributgrupper"
msgid "price"
msgstr "Pris"
-#: engine/core/graphene/object_types.py:479
+#: engine/core/graphene/object_types.py:534
#: engine/core/templates/digital_order_created_email.html:110
#: engine/core/templates/digital_order_delivered_email.html:108
#: engine/core/templates/shipped_order_created_email.html:108
@@ -1420,39 +1425,39 @@ msgstr "Pris"
msgid "quantity"
msgstr "Mængde"
-#: engine/core/graphene/object_types.py:480
+#: engine/core/graphene/object_types.py:535
msgid "number of feedbacks"
msgstr "Antal tilbagemeldinger"
-#: engine/core/graphene/object_types.py:481
+#: engine/core/graphene/object_types.py:536
msgid "only available for personal orders"
msgstr "Produkter kun tilgængelige for personlige bestillinger"
-#: engine/core/graphene/object_types.py:484
+#: engine/core/graphene/object_types.py:541
msgid "discount price"
msgstr "Rabatpris"
-#: engine/core/graphene/object_types.py:508 engine/core/models.py:658
+#: engine/core/graphene/object_types.py:565 engine/core/models.py:679
msgid "products"
msgstr "Produkter"
-#: engine/core/graphene/object_types.py:611
+#: engine/core/graphene/object_types.py:675
msgid "promocodes"
msgstr "Promokoder"
-#: engine/core/graphene/object_types.py:621
+#: engine/core/graphene/object_types.py:690
msgid "products on sale"
msgstr "Produkter til salg"
-#: engine/core/graphene/object_types.py:628 engine/core/models.py:904
+#: engine/core/graphene/object_types.py:698 engine/core/models.py:927
msgid "promotions"
msgstr "Kampagner"
-#: engine/core/graphene/object_types.py:632 engine/core/models.py:187
+#: engine/core/graphene/object_types.py:702 engine/core/models.py:193
msgid "vendor"
msgstr "Leverandør"
-#: engine/core/graphene/object_types.py:633 engine/core/models.py:657
+#: engine/core/graphene/object_types.py:703 engine/core/models.py:678
#: engine/core/templates/digital_order_created_email.html:109
#: engine/core/templates/digital_order_delivered_email.html:107
#: engine/core/templates/shipped_order_created_email.html:107
@@ -1460,99 +1465,99 @@ msgstr "Leverandør"
msgid "product"
msgstr "Produkt"
-#: engine/core/graphene/object_types.py:644 engine/core/models.py:927
+#: engine/core/graphene/object_types.py:715 engine/core/models.py:950
msgid "wishlisted products"
msgstr "Produkter på ønskelisten"
-#: engine/core/graphene/object_types.py:650 engine/core/models.py:944
+#: engine/core/graphene/object_types.py:722 engine/core/models.py:967
msgid "wishlists"
msgstr "Ønskelister"
-#: engine/core/graphene/object_types.py:654
+#: engine/core/graphene/object_types.py:727
msgid "tagged products"
msgstr "Mærkede produkter"
-#: engine/core/graphene/object_types.py:661 engine/core/models.py:224
-#: engine/core/models.py:601
+#: engine/core/graphene/object_types.py:735 engine/core/models.py:230
+#: engine/core/models.py:622
msgid "product tags"
msgstr "Produktmærker"
-#: engine/core/graphene/object_types.py:665
+#: engine/core/graphene/object_types.py:740
msgid "tagged categories"
msgstr "Tagged kategorier"
-#: engine/core/graphene/object_types.py:672
+#: engine/core/graphene/object_types.py:748
msgid "categories tags"
msgstr "Kategoriernes tags"
-#: engine/core/graphene/object_types.py:676
+#: engine/core/graphene/object_types.py:752
msgid "project name"
msgstr "Projektets navn"
-#: engine/core/graphene/object_types.py:677
+#: engine/core/graphene/object_types.py:753
msgid "company name"
msgstr "Virksomhedens navn"
-#: engine/core/graphene/object_types.py:678
+#: engine/core/graphene/object_types.py:754
msgid "company address"
msgstr "Virksomhedens adresse"
-#: engine/core/graphene/object_types.py:679
+#: engine/core/graphene/object_types.py:755
msgid "company phone number"
msgstr "Virksomhedens telefonnummer"
-#: engine/core/graphene/object_types.py:680
+#: engine/core/graphene/object_types.py:758
msgid "email from, sometimes it must be used instead of host user value"
msgstr ""
"'e-mail fra', nogle gange skal den bruges i stedet for værtsbrugerværdien"
-#: engine/core/graphene/object_types.py:681
+#: engine/core/graphene/object_types.py:761
msgid "email host user"
msgstr "E-mail-værtsbruger"
-#: engine/core/graphene/object_types.py:682
+#: engine/core/graphene/object_types.py:762
msgid "maximum amount for payment"
msgstr "Maksimalt beløb til betaling"
-#: engine/core/graphene/object_types.py:683
+#: engine/core/graphene/object_types.py:763
msgid "minimum amount for payment"
msgstr "Minimumsbeløb for betaling"
-#: engine/core/graphene/object_types.py:684
+#: engine/core/graphene/object_types.py:764
msgid "analytics data"
msgstr "Analytiske data"
-#: engine/core/graphene/object_types.py:685
+#: engine/core/graphene/object_types.py:765
msgid "advertisement data"
msgstr "Data om reklamer"
-#: engine/core/graphene/object_types.py:688
+#: engine/core/graphene/object_types.py:768
msgid "company configuration"
msgstr "Konfiguration"
-#: engine/core/graphene/object_types.py:692
+#: engine/core/graphene/object_types.py:772
msgid "language code"
msgstr "Sprogkode"
-#: engine/core/graphene/object_types.py:693
+#: engine/core/graphene/object_types.py:773
msgid "language name"
msgstr "Sprogets navn"
-#: engine/core/graphene/object_types.py:694
+#: engine/core/graphene/object_types.py:774
msgid "language flag, if exists :)"
msgstr "Sprogflag, hvis det findes :)"
-#: engine/core/graphene/object_types.py:697
+#: engine/core/graphene/object_types.py:777
msgid "supported languages"
msgstr "Få en liste over understøttede sprog"
-#: engine/core/graphene/object_types.py:728
-#: engine/core/graphene/object_types.py:729
-#: engine/core/graphene/object_types.py:730
+#: engine/core/graphene/object_types.py:809
+#: engine/core/graphene/object_types.py:812
+#: engine/core/graphene/object_types.py:815
msgid "products search results"
msgstr "Søgeresultater for produkter"
-#: engine/core/graphene/object_types.py:731
+#: engine/core/graphene/object_types.py:817
msgid "posts search results"
msgstr "Søgeresultater for produkter"
@@ -1581,7 +1586,7 @@ msgstr "Overordnet attributgruppe"
msgid "attribute group's name"
msgstr "Attributgruppens navn"
-#: engine/core/models.py:105 engine/core/models.py:734
+#: engine/core/models.py:105 engine/core/models.py:755
msgid "attribute group"
msgstr "Attributgruppe"
@@ -1597,56 +1602,56 @@ msgid ""
msgstr ""
"Repræsenterer en vendor-enhed, der er i stand til at lagre oplysninger om "
"eksterne leverandører og deres interaktionskrav. Vendor-klassen bruges til "
-"at definere og administrere oplysninger om en ekstern leverandør. Den gemmer"
-" leverandørens navn, godkendelsesoplysninger, der kræves til kommunikation, "
+"at definere og administrere oplysninger om en ekstern leverandør. Den gemmer "
+"leverandørens navn, godkendelsesoplysninger, der kræves til kommunikation, "
"og den procentvise markering, der anvendes på produkter, der hentes fra "
"leverandøren. Denne model vedligeholder også yderligere metadata og "
-"begrænsninger, hvilket gør den velegnet til brug i systemer, der interagerer"
-" med tredjepartsleverandører."
+"begrænsninger, hvilket gør den velegnet til brug i systemer, der interagerer "
+"med tredjepartsleverandører."
-#: engine/core/models.py:124
+#: engine/core/models.py:125
msgid "stores credentials and endpoints required for vendor communication"
msgstr ""
"Gemmer legitimationsoplysninger og slutpunkter, der er nødvendige for "
"leverandørens API-kommunikation"
-#: engine/core/models.py:125
+#: engine/core/models.py:127
msgid "authentication info"
msgstr "Oplysninger om godkendelse"
-#: engine/core/models.py:130
+#: engine/core/models.py:132
msgid "define the markup for products retrieved from this vendor"
msgstr "Definer markeringen for produkter, der hentes fra denne leverandør"
-#: engine/core/models.py:131
+#: engine/core/models.py:133
msgid "vendor markup percentage"
msgstr "Sælgerens markup-procentdel"
-#: engine/core/models.py:135
+#: engine/core/models.py:137
msgid "name of this vendor"
msgstr "Navn på denne leverandør"
-#: engine/core/models.py:136
+#: engine/core/models.py:138
msgid "vendor name"
msgstr "Leverandørens navn"
-#: engine/core/models.py:147
+#: engine/core/models.py:153
msgid "response file"
msgstr "Svarfil"
-#: engine/core/models.py:148
+#: engine/core/models.py:154
msgid "vendor's last processing response"
msgstr "leverandørens sidste behandlingssvar"
-#: engine/core/models.py:154
+#: engine/core/models.py:160
msgid "vendor's integration file path"
msgstr "Leverandørens sti til integrationsfilen"
-#: engine/core/models.py:155
+#: engine/core/models.py:161
msgid "integration path"
msgstr "Integrationsvej"
-#: engine/core/models.py:197
+#: engine/core/models.py:203
msgid ""
"Represents a product tag used for classifying or identifying products. The "
"ProductTag class is designed to uniquely identify and classify products "
@@ -1658,30 +1663,30 @@ msgstr ""
"identificere produkter. ProductTag-klassen er designet til entydigt at "
"identificere og klassificere produkter gennem en kombination af en intern "
"tag-identifikator og et brugervenligt visningsnavn. Den understøtter "
-"operationer, der eksporteres gennem mixins, og giver mulighed for tilpasning"
-" af metadata til administrative formål."
+"operationer, der eksporteres gennem mixins, og giver mulighed for tilpasning "
+"af metadata til administrative formål."
-#: engine/core/models.py:209 engine/core/models.py:240
+#: engine/core/models.py:215 engine/core/models.py:246
msgid "internal tag identifier for the product tag"
msgstr "Intern tag-identifikator for produkttagget"
-#: engine/core/models.py:210 engine/core/models.py:241
+#: engine/core/models.py:216 engine/core/models.py:247
msgid "tag name"
msgstr "Tag-navn"
-#: engine/core/models.py:214 engine/core/models.py:245
+#: engine/core/models.py:220 engine/core/models.py:251
msgid "user-friendly name for the product tag"
msgstr "Brugervenligt navn til produktmærket"
-#: engine/core/models.py:215 engine/core/models.py:246
+#: engine/core/models.py:221 engine/core/models.py:252
msgid "tag display name"
msgstr "Navn på tag-visning"
-#: engine/core/models.py:223
+#: engine/core/models.py:229
msgid "product tag"
msgstr "Produktmærke"
-#: engine/core/models.py:229
+#: engine/core/models.py:235
msgid ""
"Represents a category tag used for products. This class models a category "
"tag that can be used to associate and classify products. It includes "
@@ -1692,15 +1697,15 @@ msgstr ""
"produkter. Den indeholder attributter til en intern tag-identifikator og et "
"brugervenligt visningsnavn."
-#: engine/core/models.py:254
+#: engine/core/models.py:260
msgid "category tag"
msgstr "Kategori-tag"
-#: engine/core/models.py:255 engine/core/models.py:327
+#: engine/core/models.py:261 engine/core/models.py:333
msgid "category tags"
msgstr "Kategori-tags"
-#: engine/core/models.py:260
+#: engine/core/models.py:266
msgid ""
"Represents a category entity to organize and group related items in a "
"hierarchical structure. Categories may have hierarchical relationships with "
@@ -1718,112 +1723,111 @@ msgstr ""
"Klassen indeholder felter til metadata og visuel repræsentation, som "
"fungerer som et fundament for kategorirelaterede funktioner. Denne klasse "
"bruges typisk til at definere og administrere produktkategorier eller andre "
-"lignende grupperinger i en applikation, så brugere eller administratorer kan"
-" angive navn, beskrivelse og hierarki for kategorier samt tildele "
-"attributter som billeder, tags eller prioritet."
+"lignende grupperinger i en applikation, så brugere eller administratorer kan "
+"angive navn, beskrivelse og hierarki for kategorier samt tildele attributter "
+"som billeder, tags eller prioritet."
-#: engine/core/models.py:274
+#: engine/core/models.py:280
msgid "upload an image representing this category"
msgstr "Upload et billede, der repræsenterer denne kategori"
-#: engine/core/models.py:277
+#: engine/core/models.py:283
msgid "category image"
msgstr "Kategori billede"
-#: engine/core/models.py:282
+#: engine/core/models.py:288
msgid "define a markup percentage for products in this category"
msgstr "Definer en markup-procentdel for produkter i denne kategori"
-#: engine/core/models.py:291
+#: engine/core/models.py:297
msgid "parent of this category to form a hierarchical structure"
msgstr "Forælder til denne kategori for at danne en hierarkisk struktur"
-#: engine/core/models.py:292
+#: engine/core/models.py:298
msgid "parent category"
msgstr "Overordnet kategori"
-#: engine/core/models.py:297
+#: engine/core/models.py:303
msgid "category name"
msgstr "Navn på kategori"
-#: engine/core/models.py:298
+#: engine/core/models.py:304
msgid "provide a name for this category"
msgstr "Giv et navn til denne kategori"
-#: engine/core/models.py:305
+#: engine/core/models.py:311
msgid "add a detailed description for this category"
msgstr "Tilføj en detaljeret beskrivelse af denne kategori"
-#: engine/core/models.py:306
+#: engine/core/models.py:312
msgid "category description"
msgstr "Beskrivelse af kategori"
-#: engine/core/models.py:326
+#: engine/core/models.py:332
msgid "tags that help describe or group this category"
msgstr "tags, der hjælper med at beskrive eller gruppere denne kategori"
-#: engine/core/models.py:333 engine/core/models.py:495
+#: engine/core/models.py:339 engine/core/models.py:514
msgid "priority"
msgstr "Prioritet"
-#: engine/core/models.py:438
+#: engine/core/models.py:457
msgid ""
"Represents a Brand object in the system. This class handles information and "
"attributes related to a brand, including its name, logos, description, "
"associated categories, a unique slug, and priority order. It allows for the "
-"organization and representation of brand-related data within the "
-"application."
+"organization and representation of brand-related data within the application."
msgstr ""
-"Repræsenterer et brand-objekt i systemet. Denne klasse håndterer oplysninger"
-" og attributter relateret til et brand, herunder dets navn, logoer, "
-"beskrivelse, tilknyttede kategorier, en unik slug og prioriteret rækkefølge."
-" Den gør det muligt at organisere og repræsentere brand-relaterede data i "
+"Repræsenterer et brand-objekt i systemet. Denne klasse håndterer oplysninger "
+"og attributter relateret til et brand, herunder dets navn, logoer, "
+"beskrivelse, tilknyttede kategorier, en unik slug og prioriteret rækkefølge. "
+"Den gør det muligt at organisere og repræsentere brand-relaterede data i "
"applikationen."
-#: engine/core/models.py:448
+#: engine/core/models.py:467
msgid "name of this brand"
msgstr "Navnet på dette mærke"
-#: engine/core/models.py:449
+#: engine/core/models.py:468
msgid "brand name"
msgstr "Varemærke"
-#: engine/core/models.py:456
+#: engine/core/models.py:475
msgid "upload a logo representing this brand"
msgstr "Upload et logo, der repræsenterer dette brand"
-#: engine/core/models.py:458
+#: engine/core/models.py:477
msgid "brand small image"
msgstr "Brandets lille image"
-#: engine/core/models.py:464
+#: engine/core/models.py:483
msgid "upload a big logo representing this brand"
msgstr "Upload et stort logo, der repræsenterer dette brand"
-#: engine/core/models.py:466
+#: engine/core/models.py:485
msgid "brand big image"
msgstr "Brandets store image"
-#: engine/core/models.py:471
+#: engine/core/models.py:490
msgid "add a detailed description of the brand"
msgstr "Tilføj en detaljeret beskrivelse af brandet"
-#: engine/core/models.py:472
+#: engine/core/models.py:491
msgid "brand description"
msgstr "Varemærkebeskrivelse"
-#: engine/core/models.py:477
+#: engine/core/models.py:496
msgid "optional categories that this brand is associated with"
msgstr "Valgfrie kategorier, som dette brand er forbundet med"
-#: engine/core/models.py:478
+#: engine/core/models.py:497
msgid "associated categories"
msgstr "Kategorier"
-#: engine/core/models.py:508
+#: engine/core/models.py:527
msgid ""
-"Represents the stock of a product managed in the system. This class provides"
-" details about the relationship between vendors, products, and their stock "
+"Represents the stock of a product managed in the system. This class provides "
+"details about the relationship between vendors, products, and their stock "
"information, as well as inventory-related properties like price, purchase "
"price, quantity, SKU, and digital assets. It is part of the inventory "
"management system to allow tracking and evaluation of products available "
@@ -1831,77 +1835,77 @@ msgid ""
msgstr ""
"Repræsenterer lageret af et produkt, der administreres i systemet. Denne "
"klasse giver detaljer om forholdet mellem leverandører, produkter og deres "
-"lageroplysninger samt lagerrelaterede egenskaber som pris, købspris, mængde,"
-" SKU og digitale aktiver. Den er en del af lagerstyringssystemet for at "
+"lageroplysninger samt lagerrelaterede egenskaber som pris, købspris, mængde, "
+"SKU og digitale aktiver. Den er en del af lagerstyringssystemet for at "
"muliggøre sporing og evaluering af produkter, der er tilgængelige fra "
"forskellige leverandører."
-#: engine/core/models.py:520
+#: engine/core/models.py:539
msgid "the vendor supplying this product stock"
msgstr "Den leverandør, der leverer dette produkt, lagerfører"
-#: engine/core/models.py:521
+#: engine/core/models.py:540
msgid "associated vendor"
msgstr "Tilknyttet leverandør"
-#: engine/core/models.py:525
+#: engine/core/models.py:544
msgid "final price to the customer after markups"
msgstr "Endelig pris til kunden efter tillæg"
-#: engine/core/models.py:526
+#: engine/core/models.py:545
msgid "selling price"
msgstr "Salgspris"
-#: engine/core/models.py:531
+#: engine/core/models.py:550
msgid "the product associated with this stock entry"
msgstr "Det produkt, der er knyttet til denne lagerpost"
-#: engine/core/models.py:532 engine/core/models.py:797
-#: engine/core/models.py:843 engine/core/models.py:1792
+#: engine/core/models.py:551 engine/core/models.py:820
+#: engine/core/models.py:866 engine/core/models.py:1904
msgid "associated product"
msgstr "Tilknyttet produkt"
-#: engine/core/models.py:539
+#: engine/core/models.py:558
msgid "the price paid to the vendor for this product"
msgstr "Den pris, der er betalt til sælgeren for dette produkt"
-#: engine/core/models.py:540
+#: engine/core/models.py:559
msgid "vendor purchase price"
msgstr "Leverandørens købspris"
-#: engine/core/models.py:544
+#: engine/core/models.py:563
msgid "available quantity of the product in stock"
msgstr "Tilgængelig mængde af produktet på lager"
-#: engine/core/models.py:545
+#: engine/core/models.py:564
msgid "quantity in stock"
msgstr "Antal på lager"
-#: engine/core/models.py:549
+#: engine/core/models.py:568
msgid "vendor-assigned SKU for identifying the product"
msgstr "Leverandørtildelt SKU til identifikation af produktet"
-#: engine/core/models.py:550
+#: engine/core/models.py:569
msgid "vendor sku"
msgstr "Leverandørens SKU"
-#: engine/core/models.py:556
+#: engine/core/models.py:575
msgid "digital file associated with this stock if applicable"
msgstr "Digital fil knyttet til dette lager, hvis relevant"
-#: engine/core/models.py:557
+#: engine/core/models.py:576
msgid "digital file"
msgstr "Digital fil"
-#: engine/core/models.py:560
+#: engine/core/models.py:580
msgid "system attributes"
msgstr "Systemets egenskaber"
-#: engine/core/models.py:567
+#: engine/core/models.py:588
msgid "stock entries"
msgstr "Lagerposteringer"
-#: engine/core/models.py:572
+#: engine/core/models.py:593
msgid ""
"Represents a product with attributes such as category, brand, tags, digital "
"status, name, description, part number, and slug. Provides related utility "
@@ -1917,161 +1921,160 @@ msgstr ""
"egenskaber til at hente vurderinger, antal tilbagemeldinger, pris, antal og "
"samlede ordrer. Designet til brug i et system, der håndterer e-handel eller "
"lagerstyring. Denne klasse interagerer med relaterede modeller (såsom "
-"Category, Brand og ProductTag) og administrerer caching for hyppigt anvendte"
-" egenskaber for at forbedre ydeevnen. Den bruges til at definere og "
+"Category, Brand og ProductTag) og administrerer caching for hyppigt anvendte "
+"egenskaber for at forbedre ydeevnen. Den bruges til at definere og "
"manipulere produktdata og tilhørende oplysninger i en applikation."
-#: engine/core/models.py:585
+#: engine/core/models.py:606
msgid "category this product belongs to"
msgstr "Kategori, som dette produkt tilhører"
-#: engine/core/models.py:594
+#: engine/core/models.py:615
msgid "optionally associate this product with a brand"
msgstr "Tilknyt eventuelt dette produkt til et brand"
-#: engine/core/models.py:600
+#: engine/core/models.py:621
msgid "tags that help describe or group this product"
msgstr "Tags, der hjælper med at beskrive eller gruppere dette produkt"
-#: engine/core/models.py:605
+#: engine/core/models.py:626
msgid "indicates whether this product is digitally delivered"
msgstr "Angiver, om dette produkt leveres digitalt"
-#: engine/core/models.py:606
+#: engine/core/models.py:627
msgid "is product digital"
msgstr "Er produktet digitalt?"
-#: engine/core/models.py:612
+#: engine/core/models.py:633
msgid "provide a clear identifying name for the product"
msgstr "Giv produktet et klart identificerende navn"
-#: engine/core/models.py:613
+#: engine/core/models.py:634
msgid "product name"
msgstr "Produktets navn"
-#: engine/core/models.py:619 engine/core/models.py:892
+#: engine/core/models.py:640 engine/core/models.py:915
msgid "add a detailed description of the product"
msgstr "Tilføj en detaljeret beskrivelse af produktet"
-#: engine/core/models.py:620
+#: engine/core/models.py:641
msgid "product description"
msgstr "Produktbeskrivelse"
-#: engine/core/models.py:627
+#: engine/core/models.py:648
msgid "part number for this product"
msgstr "Reservedelsnummer for dette produkt"
-#: engine/core/models.py:628
+#: engine/core/models.py:649
msgid "part number"
msgstr "Varenummer"
-#: engine/core/models.py:647
+#: engine/core/models.py:668
msgid "stock keeping unit for this product"
msgstr "Lagerbeholdning for dette produkt"
-#: engine/core/models.py:720
+#: engine/core/models.py:741
msgid ""
"Represents an attribute in the system. This class is used to define and "
"manage attributes, which are customizable pieces of data that can be "
"associated with other entities. Attributes have associated categories, "
-"groups, value types, and names. The model supports multiple types of values,"
-" including string, integer, float, boolean, array, and object. This allows "
+"groups, value types, and names. The model supports multiple types of values, "
+"including string, integer, float, boolean, array, and object. This allows "
"for dynamic and flexible data structuring."
msgstr ""
-"Repræsenterer en attribut i systemet. Denne klasse bruges til at definere og"
-" administrere attributter, som er data, der kan tilpasses, og som kan "
-"knyttes til andre enheder. Attributter har tilknyttede kategorier, grupper, "
+"Repræsenterer en attribut i systemet. Denne klasse bruges til at definere og "
+"administrere attributter, som er data, der kan tilpasses, og som kan knyttes "
+"til andre enheder. Attributter har tilknyttede kategorier, grupper, "
"værdityper og navne. Modellen understøtter flere typer værdier, herunder "
"string, integer, float, boolean, array og object. Det giver mulighed for "
"dynamisk og fleksibel datastrukturering."
-#: engine/core/models.py:733
+#: engine/core/models.py:754
msgid "group of this attribute"
msgstr "Gruppe af denne attribut"
-#: engine/core/models.py:739
+#: engine/core/models.py:760
msgid "string"
msgstr "Streng"
-#: engine/core/models.py:740
+#: engine/core/models.py:761
msgid "integer"
msgstr "Heltal"
-#: engine/core/models.py:741
+#: engine/core/models.py:762
msgid "float"
msgstr "Flyder"
-#: engine/core/models.py:742
+#: engine/core/models.py:763
msgid "boolean"
msgstr "Boolsk"
-#: engine/core/models.py:743
+#: engine/core/models.py:764
msgid "array"
msgstr "Array"
-#: engine/core/models.py:744
+#: engine/core/models.py:765
msgid "object"
msgstr "Objekt"
-#: engine/core/models.py:746
+#: engine/core/models.py:767
msgid "type of the attribute's value"
msgstr "Type af attributtens værdi"
-#: engine/core/models.py:747
+#: engine/core/models.py:768
msgid "value type"
msgstr "Værditype"
-#: engine/core/models.py:752
+#: engine/core/models.py:773
msgid "name of this attribute"
msgstr "Navn på denne attribut"
-#: engine/core/models.py:753
+#: engine/core/models.py:774
msgid "attribute's name"
msgstr "Attributtens navn"
-#: engine/core/models.py:758
+#: engine/core/models.py:779
msgid "is filterable"
msgstr "er filtrerbar"
-#: engine/core/models.py:759
+#: engine/core/models.py:781
msgid "designates whether this attribute can be used for filtering or not"
msgstr ""
-"Hvilke attributter og værdier, der kan bruges til at filtrere denne "
-"kategori."
+"Hvilke attributter og værdier, der kan bruges til at filtrere denne kategori."
-#: engine/core/models.py:771 engine/core/models.py:789
+#: engine/core/models.py:794 engine/core/models.py:812
#: engine/core/templates/digital_order_delivered_email.html:134
msgid "attribute"
msgstr "Attribut"
-#: engine/core/models.py:777
+#: engine/core/models.py:800
msgid ""
-"Represents a specific value for an attribute that is linked to a product. It"
-" links the 'attribute' to a unique 'value', allowing better organization and"
-" dynamic representation of product characteristics."
+"Represents a specific value for an attribute that is linked to a product. It "
+"links the 'attribute' to a unique 'value', allowing better organization and "
+"dynamic representation of product characteristics."
msgstr ""
"Repræsenterer en specifik værdi for en attribut, der er knyttet til et "
"produkt. Den forbinder 'attributten' med en unik 'værdi', hvilket giver "
"mulighed for bedre organisering og dynamisk repræsentation af "
"produktegenskaber."
-#: engine/core/models.py:788
+#: engine/core/models.py:811
msgid "attribute of this value"
msgstr "Attribut for denne værdi"
-#: engine/core/models.py:796
+#: engine/core/models.py:819
msgid "the specific product associated with this attribute's value"
msgstr "Det specifikke produkt, der er knyttet til denne attributs værdi"
-#: engine/core/models.py:802
+#: engine/core/models.py:825
msgid "the specific value for this attribute"
msgstr "Den specifikke værdi for denne attribut"
-#: engine/core/models.py:815
+#: engine/core/models.py:838
msgid ""
"Represents a product image associated with a product in the system. This "
-"class is designed to manage images for products, including functionality for"
-" uploading image files, associating them with specific products, and "
+"class is designed to manage images for products, including functionality for "
+"uploading image files, associating them with specific products, and "
"determining their display order. It also includes an accessibility feature "
"with alternative text for the images."
msgstr ""
@@ -2081,46 +2084,46 @@ msgstr ""
"specifikke produkter og bestemme deres visningsrækkefølge. Den indeholder "
"også en tilgængelighedsfunktion med alternativ tekst til billederne."
-#: engine/core/models.py:826
+#: engine/core/models.py:849
msgid "provide alternative text for the image for accessibility"
msgstr "Giv alternativ tekst til billedet af hensyn til tilgængeligheden"
-#: engine/core/models.py:827
+#: engine/core/models.py:850
msgid "image alt text"
msgstr "Billedets alt-tekst"
-#: engine/core/models.py:830
+#: engine/core/models.py:853
msgid "upload the image file for this product"
msgstr "Upload billedfilen til dette produkt"
-#: engine/core/models.py:831 engine/core/models.py:862
+#: engine/core/models.py:854 engine/core/models.py:885
msgid "product image"
msgstr "Produktbillede"
-#: engine/core/models.py:836
+#: engine/core/models.py:859
msgid "determines the order in which images are displayed"
msgstr "Bestemmer den rækkefølge, billederne vises i"
-#: engine/core/models.py:837
+#: engine/core/models.py:860
msgid "display priority"
msgstr "Skærm-prioritet"
-#: engine/core/models.py:842
+#: engine/core/models.py:865
msgid "the product that this image represents"
msgstr "Det produkt, som dette billede repræsenterer"
-#: engine/core/models.py:863
+#: engine/core/models.py:886
msgid "product images"
msgstr "Produktbilleder"
-#: engine/core/models.py:868
+#: engine/core/models.py:891
msgid ""
"Represents a promotional campaign for products with a discount. This class "
"is used to define and manage promotional campaigns that offer a percentage-"
"based discount for products. The class includes attributes for setting the "
"discount rate, providing details about the promotion, and linking it to the "
-"applicable products. It integrates with the product catalog to determine the"
-" affected items in the campaign."
+"applicable products. It integrates with the product catalog to determine the "
+"affected items in the campaign."
msgstr ""
"Repræsenterer en reklamekampagne for produkter med rabat. Denne klasse "
"bruges til at definere og administrere kampagner, der tilbyder en "
@@ -2129,39 +2132,39 @@ msgstr ""
"relevante produkter. Den integreres med produktkataloget for at bestemme de "
"berørte varer i kampagnen."
-#: engine/core/models.py:880
+#: engine/core/models.py:903
msgid "percentage discount for the selected products"
msgstr "Procentvis rabat for de valgte produkter"
-#: engine/core/models.py:881
+#: engine/core/models.py:904
msgid "discount percentage"
msgstr "Rabatprocent"
-#: engine/core/models.py:886
+#: engine/core/models.py:909
msgid "provide a unique name for this promotion"
msgstr "Giv et unikt navn til denne kampagne"
-#: engine/core/models.py:887
+#: engine/core/models.py:910
msgid "promotion name"
msgstr "Navn på kampagne"
-#: engine/core/models.py:893
+#: engine/core/models.py:916
msgid "promotion description"
msgstr "Beskrivelse af kampagnen"
-#: engine/core/models.py:898
+#: engine/core/models.py:921
msgid "select which products are included in this promotion"
msgstr "Vælg, hvilke produkter der er inkluderet i denne kampagne"
-#: engine/core/models.py:899
+#: engine/core/models.py:922
msgid "included products"
msgstr "Inkluderede produkter"
-#: engine/core/models.py:903
+#: engine/core/models.py:926
msgid "promotion"
msgstr "Forfremmelse"
-#: engine/core/models.py:914
+#: engine/core/models.py:937
msgid ""
"Represents a user's wishlist for storing and managing desired products. The "
"class provides functionality to manage a collection of products, supporting "
@@ -2174,30 +2177,30 @@ msgstr ""
"produkter samt operationer til at tilføje og fjerne flere produkter på én "
"gang."
-#: engine/core/models.py:926
+#: engine/core/models.py:949
msgid "products that the user has marked as wanted"
msgstr "Produkter, som brugeren har markeret som ønskede"
-#: engine/core/models.py:934
+#: engine/core/models.py:957
msgid "user who owns this wishlist"
msgstr "Bruger, der ejer denne ønskeliste"
-#: engine/core/models.py:935
+#: engine/core/models.py:958
msgid "wishlist owner"
msgstr "Ønskelistens ejer"
-#: engine/core/models.py:943
+#: engine/core/models.py:966
msgid "wishlist"
msgstr "Ønskeliste"
-#: engine/core/models.py:985
+#: engine/core/models.py:1008
msgid ""
"Represents a documentary record tied to a product. This class is used to "
"store information about documentaries related to specific products, "
"including file uploads and their metadata. It contains methods and "
"properties to handle the file type and storage path for the documentary "
-"files. It extends functionality from specific mixins and provides additional"
-" custom features."
+"files. It extends functionality from specific mixins and provides additional "
+"custom features."
msgstr ""
"Repræsenterer en dokumentarisk post, der er knyttet til et produkt. Denne "
"klasse bruges til at gemme oplysninger om dokumentarfilm relateret til "
@@ -2206,28 +2209,28 @@ msgstr ""
"dokumentarfilerne. Den udvider funktionaliteten fra specifikke mixins og "
"giver yderligere brugerdefinerede funktioner."
-#: engine/core/models.py:998
+#: engine/core/models.py:1023
msgid "documentary"
msgstr "Dokumentarfilm"
-#: engine/core/models.py:999
+#: engine/core/models.py:1024
msgid "documentaries"
msgstr "Dokumentarfilm"
-#: engine/core/models.py:1009
+#: engine/core/models.py:1034
msgid "unresolved"
msgstr "Uafklaret"
-#: engine/core/models.py:1014
+#: engine/core/models.py:1039
msgid ""
-"Represents an address entity that includes location details and associations"
-" with a user. Provides functionality for geographic and address data "
-"storage, as well as integration with geocoding services. This class is "
-"designed to store detailed address information including components like "
-"street, city, region, country, and geolocation (longitude and latitude). It "
-"supports integration with geocoding APIs, enabling the storage of raw API "
-"responses for further processing or inspection. The class also allows "
-"associating an address with a user, facilitating personalized data handling."
+"Represents an address entity that includes location details and associations "
+"with a user. Provides functionality for geographic and address data storage, "
+"as well as integration with geocoding services. This class is designed to "
+"store detailed address information including components like street, city, "
+"region, country, and geolocation (longitude and latitude). It supports "
+"integration with geocoding APIs, enabling the storage of raw API responses "
+"for further processing or inspection. The class also allows associating an "
+"address with a user, facilitating personalized data handling."
msgstr ""
"Repræsenterer en adresseenhed, der indeholder placeringsoplysninger og "
"tilknytninger til en bruger. Indeholder funktionalitet til lagring af "
@@ -2239,59 +2242,59 @@ msgstr ""
"Klassen gør det også muligt at knytte en adresse til en bruger, hvilket "
"letter personlig datahåndtering."
-#: engine/core/models.py:1029
+#: engine/core/models.py:1054
msgid "address line for the customer"
msgstr "Adresselinje til kunden"
-#: engine/core/models.py:1030
+#: engine/core/models.py:1055
msgid "address line"
msgstr "Adresselinje"
-#: engine/core/models.py:1032
+#: engine/core/models.py:1057
msgid "street"
msgstr "Gade"
-#: engine/core/models.py:1033
+#: engine/core/models.py:1058
msgid "district"
msgstr "Distrikt"
-#: engine/core/models.py:1034
+#: engine/core/models.py:1059
msgid "city"
msgstr "By"
-#: engine/core/models.py:1035
+#: engine/core/models.py:1060
msgid "region"
msgstr "Region"
-#: engine/core/models.py:1036
+#: engine/core/models.py:1061
msgid "postal code"
msgstr "Postnummer"
-#: engine/core/models.py:1037
+#: engine/core/models.py:1062
msgid "country"
msgstr "Land"
-#: engine/core/models.py:1044
+#: engine/core/models.py:1069
msgid "geolocation point: (longitude, latitude)"
msgstr "Geolokaliseringspunkt (længdegrad, breddegrad)"
-#: engine/core/models.py:1047
+#: engine/core/models.py:1075
msgid "full JSON response from geocoder for this address"
msgstr "Fuldt JSON-svar fra geokoderen for denne adresse"
-#: engine/core/models.py:1052
+#: engine/core/models.py:1081
msgid "stored JSON response from the geocoding service"
msgstr "Gemt JSON-svar fra geokodningstjenesten"
-#: engine/core/models.py:1060
+#: engine/core/models.py:1091
msgid "address"
msgstr "Adresse"
-#: engine/core/models.py:1061
+#: engine/core/models.py:1092
msgid "addresses"
msgstr "Adresser"
-#: engine/core/models.py:1073
+#: engine/core/models.py:1104
msgid ""
"Represents a promotional code that can be used for discounts, managing its "
"validity, type of discount, and application. The PromoCode class stores "
@@ -2302,77 +2305,77 @@ msgid ""
msgstr ""
"Repræsenterer en kampagnekode, der kan bruges til rabatter, og styrer dens "
"gyldighed, rabattype og anvendelse. PromoCode-klassen gemmer oplysninger om "
-"en kampagnekode, herunder dens unikke identifikator, rabattegenskaber (beløb"
-" eller procent), gyldighedsperiode, tilknyttet bruger (hvis nogen) og status"
-" for dens brug. Den indeholder funktionalitet til at validere og anvende "
+"en kampagnekode, herunder dens unikke identifikator, rabattegenskaber (beløb "
+"eller procent), gyldighedsperiode, tilknyttet bruger (hvis nogen) og status "
+"for dens brug. Den indeholder funktionalitet til at validere og anvende "
"kampagnekoden på en ordre og samtidig sikre, at begrænsningerne er opfyldt."
-#: engine/core/models.py:1087
+#: engine/core/models.py:1118
msgid "unique code used by a user to redeem a discount"
msgstr "Unik kode, der bruges af en bruger til at indløse en rabat"
-#: engine/core/models.py:1088
+#: engine/core/models.py:1119
msgid "promo code identifier"
msgstr "Identifikator for kampagnekode"
-#: engine/core/models.py:1095
+#: engine/core/models.py:1126
msgid "fixed discount amount applied if percent is not used"
msgstr "Fast rabatbeløb anvendes, hvis procent ikke bruges"
-#: engine/core/models.py:1096
+#: engine/core/models.py:1127
msgid "fixed discount amount"
msgstr "Fast rabatbeløb"
-#: engine/core/models.py:1102
+#: engine/core/models.py:1133
msgid "percentage discount applied if fixed amount is not used"
msgstr "Procentvis rabat, hvis det faste beløb ikke bruges"
-#: engine/core/models.py:1103
+#: engine/core/models.py:1134
msgid "percentage discount"
msgstr "Procentvis rabat"
-#: engine/core/models.py:1108
+#: engine/core/models.py:1139
msgid "timestamp when the promocode expires"
msgstr "Tidsstempel, når promokoden udløber"
-#: engine/core/models.py:1109
+#: engine/core/models.py:1140
msgid "end validity time"
msgstr "Slut gyldighedstid"
-#: engine/core/models.py:1114
+#: engine/core/models.py:1145
msgid "timestamp from which this promocode is valid"
msgstr "Tidsstempel, hvorfra denne promokode er gyldig"
-#: engine/core/models.py:1115
+#: engine/core/models.py:1146
msgid "start validity time"
msgstr "Start gyldighedstid"
-#: engine/core/models.py:1120
+#: engine/core/models.py:1151
msgid "timestamp when the promocode was used, blank if not used yet"
msgstr ""
"Tidsstempel, hvor promokoden blev brugt, blank, hvis den ikke er brugt endnu"
-#: engine/core/models.py:1121
+#: engine/core/models.py:1152
msgid "usage timestamp"
msgstr "Tidsstempel for brug"
-#: engine/core/models.py:1126
+#: engine/core/models.py:1157
msgid "user assigned to this promocode if applicable"
msgstr "Bruger tildelt denne promokode, hvis relevant"
-#: engine/core/models.py:1127
+#: engine/core/models.py:1158
msgid "assigned user"
msgstr "Tildelt bruger"
-#: engine/core/models.py:1134
+#: engine/core/models.py:1165
msgid "promo code"
msgstr "Kampagnekode"
-#: engine/core/models.py:1135
+#: engine/core/models.py:1166
msgid "promo codes"
msgstr "Kampagnekoder"
-#: engine/core/models.py:1150
+#: engine/core/models.py:1182
msgid ""
"only one type of discount should be defined (amount or percent), but not "
"both or neither."
@@ -2380,21 +2383,21 @@ msgstr ""
"Der skal kun defineres én type rabat (beløb eller procent), men ikke begge "
"eller ingen af dem."
-#: engine/core/models.py:1171
+#: engine/core/models.py:1204
msgid "promocode already used"
msgstr "Promokoden er allerede blevet brugt"
-#: engine/core/models.py:1187
+#: engine/core/models.py:1226
#, python-brace-format
msgid "invalid discount type for promocode {self.uuid}"
msgstr "Ugyldig rabattype for promokode {self.uuid}!"
-#: engine/core/models.py:1196
+#: engine/core/models.py:1235
msgid ""
"Represents an order placed by a user. This class models an order within the "
"application, including its various attributes such as billing and shipping "
-"information, status, associated user, notifications, and related operations."
-" Orders can have associated products, promotions can be applied, addresses "
+"information, status, associated user, notifications, and related operations. "
+"Orders can have associated products, promotions can be applied, addresses "
"set, and shipping or billing details updated. Equally, functionality "
"supports managing the products in the order lifecycle."
msgstr ""
@@ -2402,143 +2405,141 @@ msgstr ""
"ordre i applikationen, herunder dens forskellige attributter såsom "
"fakturerings- og forsendelsesoplysninger, status, tilknyttet bruger, "
"notifikationer og relaterede operationer. Ordrer kan have tilknyttede "
-"produkter, kampagner kan anvendes, adresser kan indstilles, og forsendelses-"
-" eller faktureringsoplysninger kan opdateres. Ligeledes understøtter "
+"produkter, kampagner kan anvendes, adresser kan indstilles, og forsendelses- "
+"eller faktureringsoplysninger kan opdateres. Ligeledes understøtter "
"funktionaliteten håndtering af produkterne i ordrens livscyklus."
-#: engine/core/models.py:1213
+#: engine/core/models.py:1252
msgid "the billing address used for this order"
msgstr "Den faktureringsadresse, der bruges til denne ordre"
-#: engine/core/models.py:1221
+#: engine/core/models.py:1260
msgid "optional promo code applied to this order"
msgstr "Valgfri kampagnekode anvendt på denne ordre"
-#: engine/core/models.py:1222
+#: engine/core/models.py:1261
msgid "applied promo code"
msgstr "Anvendt kampagnekode"
-#: engine/core/models.py:1230
+#: engine/core/models.py:1269
msgid "the shipping address used for this order"
msgstr "Den leveringsadresse, der er brugt til denne ordre"
-#: engine/core/models.py:1231
+#: engine/core/models.py:1270
msgid "shipping address"
msgstr "Leveringsadresse"
-#: engine/core/models.py:1237
+#: engine/core/models.py:1276
msgid "current status of the order in its lifecycle"
msgstr "Ordrens aktuelle status i dens livscyklus"
-#: engine/core/models.py:1238
+#: engine/core/models.py:1277
msgid "order status"
msgstr "Bestillingsstatus"
-#: engine/core/models.py:1243 engine/core/models.py:1769
+#: engine/core/models.py:1282 engine/core/models.py:1881
msgid "json structure of notifications to display to users"
msgstr ""
-"JSON-struktur af meddelelser, der skal vises til brugerne, i admin UI bruges"
-" tabelvisningen"
+"JSON-struktur af meddelelser, der skal vises til brugerne, i admin UI bruges "
+"tabelvisningen"
-#: engine/core/models.py:1249
+#: engine/core/models.py:1288
msgid "json representation of order attributes for this order"
msgstr "JSON-repræsentation af ordreattributter for denne ordre"
-#: engine/core/models.py:1255
+#: engine/core/models.py:1294
msgid "the user who placed the order"
msgstr "Den bruger, der har afgivet ordren"
-#: engine/core/models.py:1256
+#: engine/core/models.py:1295
msgid "user"
msgstr "Bruger"
-#: engine/core/models.py:1262
+#: engine/core/models.py:1301
msgid "the timestamp when the order was finalized"
msgstr "Tidsstemplet for, hvornår ordren blev afsluttet"
-#: engine/core/models.py:1263
+#: engine/core/models.py:1302
msgid "buy time"
msgstr "Køb tid"
-#: engine/core/models.py:1270
+#: engine/core/models.py:1309
msgid "a human-readable identifier for the order"
msgstr "En menneskeligt læsbar identifikator for ordren"
-#: engine/core/models.py:1271
+#: engine/core/models.py:1310
msgid "human readable id"
msgstr "menneskeligt læsbart ID"
-#: engine/core/models.py:1277
+#: engine/core/models.py:1316
msgid "order"
msgstr "Bestil"
-#: engine/core/models.py:1319
+#: engine/core/models.py:1363
msgid "a user must have only one pending order at a time"
msgstr "En bruger må kun have én afventende ordre ad gangen!"
-#: engine/core/models.py:1351
+#: engine/core/models.py:1396
msgid "you cannot add products to an order that is not a pending one"
msgstr "Du kan ikke tilføje produkter til en ordre, der ikke er i gang."
-#: engine/core/models.py:1356
+#: engine/core/models.py:1402
msgid "you cannot add inactive products to order"
msgstr "Du kan ikke tilføje inaktive produkter til en ordre"
-#: engine/core/models.py:1373
+#: engine/core/models.py:1424
msgid "you cannot add more products than available in stock"
msgstr "Du kan ikke tilføje flere produkter, end der er på lager"
-#: engine/core/models.py:1395 engine/core/models.py:1420
-#: engine/core/models.py:1428
+#: engine/core/models.py:1448 engine/core/models.py:1477
+#: engine/core/models.py:1487
msgid "you cannot remove products from an order that is not a pending one"
msgstr ""
-"Du kan ikke fjerne produkter fra en ordre, der ikke er en igangværende "
-"ordre."
+"Du kan ikke fjerne produkter fra en ordre, der ikke er en igangværende ordre."
-#: engine/core/models.py:1416
+#: engine/core/models.py:1472
#, python-brace-format
msgid "{name} does not exist with query <{query}>"
msgstr "{name} findes ikke med forespørgslen <{query}>!"
-#: engine/core/models.py:1448
+#: engine/core/models.py:1511
msgid "promocode does not exist"
msgstr "Promokode findes ikke"
-#: engine/core/models.py:1454
+#: engine/core/models.py:1526
msgid "you can only buy physical products with shipping address specified"
msgstr "Du kan kun købe fysiske produkter med angivet leveringsadresse!"
-#: engine/core/models.py:1473
+#: engine/core/models.py:1547
msgid "address does not exist"
msgstr "Adressen findes ikke"
-#: engine/core/models.py:1494 engine/core/models.py:1563
+#: engine/core/models.py:1569 engine/core/models.py:1648
msgid "you can not buy at this moment, please try again in a few minutes"
msgstr "Du kan ikke købe i øjeblikket, prøv venligst igen om et par minutter."
-#: engine/core/models.py:1497 engine/core/models.py:1559
+#: engine/core/models.py:1575 engine/core/models.py:1641
msgid "invalid force value"
msgstr "Ugyldig kraftværdi"
-#: engine/core/models.py:1503 engine/core/models.py:1566
+#: engine/core/models.py:1581 engine/core/models.py:1652
msgid "you cannot purchase an empty order!"
msgstr "Du kan ikke købe en tom ordre!"
-#: engine/core/models.py:1522
+#: engine/core/models.py:1602
msgid "you cannot buy an order without a user"
msgstr ""
-"Du kan ikke fjerne produkter fra en ordre, der ikke er en igangværende "
-"ordre."
+"Du kan ikke fjerne produkter fra en ordre, der ikke er en igangværende ordre."
-#: engine/core/models.py:1536
+#: engine/core/models.py:1616
msgid "a user without a balance cannot buy with balance"
msgstr "En bruger uden saldo kan ikke købe med saldo!"
-#: engine/core/models.py:1541
+#: engine/core/models.py:1622
msgid "insufficient funds to complete the order"
msgstr "Utilstrækkelige midler til at gennemføre ordren"
-#: engine/core/models.py:1575
+#: engine/core/models.py:1663
msgid ""
"you cannot buy without registration, please provide the following "
"information: customer name, customer email, customer phone number"
@@ -2546,14 +2547,14 @@ msgstr ""
"du kan ikke købe uden registrering, angiv venligst følgende oplysninger: "
"kundens navn, kundens e-mail, kundens telefonnummer"
-#: engine/core/models.py:1584
+#: engine/core/models.py:1674
#, python-brace-format
msgid ""
"invalid payment method: {payment_method} from {available_payment_methods}"
msgstr ""
"Ugyldig betalingsmetode: {payment_method} fra {available_payment_methods}!"
-#: engine/core/models.py:1699
+#: engine/core/models.py:1805
msgid ""
"Manages user feedback for products. This class is designed to capture and "
"store user feedback for specific products that they have purchased. It "
@@ -2568,34 +2569,32 @@ msgstr ""
"bruger databasefelter til effektivt at modellere og administrere "
"feedbackdata."
-#: engine/core/models.py:1711
+#: engine/core/models.py:1817
msgid "user-provided comments about their experience with the product"
msgstr "Brugernes kommentarer om deres oplevelse med produktet"
-#: engine/core/models.py:1712
+#: engine/core/models.py:1818
msgid "feedback comments"
msgstr "Kommentarer til feedback"
-#: engine/core/models.py:1719
-msgid ""
-"references the specific product in an order that this feedback is about"
+#: engine/core/models.py:1826
+msgid "references the specific product in an order that this feedback is about"
msgstr ""
-"Henviser til det specifikke produkt i en ordre, som denne feedback handler "
-"om"
+"Henviser til det specifikke produkt i en ordre, som denne feedback handler om"
-#: engine/core/models.py:1720
+#: engine/core/models.py:1828
msgid "related order product"
msgstr "Relateret ordreprodukt"
-#: engine/core/models.py:1725
+#: engine/core/models.py:1833
msgid "user-assigned rating for the product"
msgstr "Brugertildelt vurdering af produktet"
-#: engine/core/models.py:1726
+#: engine/core/models.py:1834
msgid "product rating"
msgstr "Produktvurdering"
-#: engine/core/models.py:1742
+#: engine/core/models.py:1854
msgid ""
"Represents products associated with orders and their attributes. The "
"OrderProduct model maintains information about a product that is part of an "
@@ -2608,8 +2607,8 @@ msgid ""
"Product models and stores a reference to them."
msgstr ""
"Repræsenterer produkter forbundet med ordrer og deres attributter. "
-"OrderProduct-modellen vedligeholder oplysninger om et produkt, der er en del"
-" af en ordre, herunder detaljer som købspris, antal, produktattributter og "
+"OrderProduct-modellen vedligeholder oplysninger om et produkt, der er en del "
+"af en ordre, herunder detaljer som købspris, antal, produktattributter og "
"status. Den administrerer notifikationer til brugeren og administratorer og "
"håndterer operationer som f.eks. at returnere produktsaldoen eller tilføje "
"feedback. Modellen indeholder også metoder og egenskaber, der understøtter "
@@ -2617,117 +2616,116 @@ msgstr ""
"en download-URL for digitale produkter. Modellen integreres med Order- og "
"Product-modellerne og gemmer en reference til dem."
-#: engine/core/models.py:1757
+#: engine/core/models.py:1869
msgid "the price paid by the customer for this product at purchase time"
msgstr "Den pris, som kunden har betalt for dette produkt på købstidspunktet"
-#: engine/core/models.py:1758
+#: engine/core/models.py:1870
msgid "purchase price at order time"
msgstr "Købspris på bestillingstidspunktet"
-#: engine/core/models.py:1763
+#: engine/core/models.py:1875
msgid "internal comments for admins about this ordered product"
msgstr "Interne kommentarer til administratorer om dette bestilte produkt"
-#: engine/core/models.py:1764
+#: engine/core/models.py:1876
msgid "internal comments"
msgstr "Interne kommentarer"
-#: engine/core/models.py:1770
+#: engine/core/models.py:1882
msgid "user notifications"
msgstr "Notifikationer til brugere"
-#: engine/core/models.py:1775
+#: engine/core/models.py:1887
msgid "json representation of this item's attributes"
msgstr "JSON-repræsentation af dette elements attributter"
-#: engine/core/models.py:1776
+#: engine/core/models.py:1888
msgid "ordered product attributes"
msgstr "Bestilte produktattributter"
-#: engine/core/models.py:1781
+#: engine/core/models.py:1893
msgid "reference to the parent order that contains this product"
msgstr "Henvisning til den overordnede ordre, der indeholder dette produkt"
-#: engine/core/models.py:1782
+#: engine/core/models.py:1894
msgid "parent order"
msgstr "Forældreordre"
-#: engine/core/models.py:1791
+#: engine/core/models.py:1903
msgid "the specific product associated with this order line"
msgstr "Det specifikke produkt, der er knyttet til denne ordrelinje"
-#: engine/core/models.py:1798
+#: engine/core/models.py:1910
msgid "quantity of this specific product in the order"
msgstr "Mængde af dette specifikke produkt i ordren"
-#: engine/core/models.py:1799
+#: engine/core/models.py:1911
msgid "product quantity"
msgstr "Produktmængde"
-#: engine/core/models.py:1806
+#: engine/core/models.py:1918
msgid "current status of this product in the order"
msgstr "Aktuel status for dette produkt i bestillingen"
-#: engine/core/models.py:1807
+#: engine/core/models.py:1919
msgid "product line status"
msgstr "Status for produktlinje"
-#: engine/core/models.py:1872
+#: engine/core/models.py:1986
msgid "order product must have an order"
msgstr "Orderproduct skal have en tilknyttet ordre!"
-#: engine/core/models.py:1874
+#: engine/core/models.py:1988
#, python-brace-format
msgid "wrong action specified for feedback: {action}"
msgstr "Forkert handling angivet for feedback: {action}!"
-#: engine/core/models.py:1888
+#: engine/core/models.py:2005
msgid "you cannot feedback an order which is not received"
msgstr ""
-"Du kan ikke fjerne produkter fra en ordre, der ikke er en igangværende "
-"ordre."
+"Du kan ikke fjerne produkter fra en ordre, der ikke er en igangværende ordre."
-#: engine/core/models.py:1894
+#: engine/core/models.py:2014
msgid "name"
msgstr "Navn"
-#: engine/core/models.py:1895
+#: engine/core/models.py:2016
msgid "URL of the integration"
msgstr "URL til integrationen"
-#: engine/core/models.py:1896
+#: engine/core/models.py:2019
msgid "authentication credentials"
msgstr "Legitimationsoplysninger til godkendelse"
-#: engine/core/models.py:1918
+#: engine/core/models.py:2042
msgid "you can only have one default CRM provider"
msgstr "Du kan kun have én standard CRM-udbyder"
-#: engine/core/models.py:1928
+#: engine/core/models.py:2052
msgid "CRM"
msgstr "CRM"
-#: engine/core/models.py:1929
+#: engine/core/models.py:2053
msgid "CRMs"
msgstr "CRM'er"
-#: engine/core/models.py:1941
+#: engine/core/models.py:2069
msgid "order CRM link"
msgstr "Ordrens CRM-link"
-#: engine/core/models.py:1942
+#: engine/core/models.py:2070
msgid "orders CRM links"
msgstr "Bestillingernes CRM-links"
-#: engine/core/models.py:1947
+#: engine/core/models.py:2075
msgid ""
"Represents the downloading functionality for digital assets associated with "
"orders. The DigitalAssetDownload class provides the ability to manage and "
"access downloads related to order products. It maintains information about "
-"the associated order product, the number of downloads, and whether the asset"
-" is publicly visible. It includes a method to generate a URL for downloading"
-" the asset when the associated order is in a completed status."
+"the associated order product, the number of downloads, and whether the asset "
+"is publicly visible. It includes a method to generate a URL for downloading "
+"the asset when the associated order is in a completed status."
msgstr ""
"Repræsenterer downloadfunktionen for digitale aktiver, der er forbundet med "
"ordrer. DigitalAssetDownload-klassen giver mulighed for at administrere og "
@@ -2737,15 +2735,15 @@ msgstr ""
"URL til download af aktivet, når den tilknyttede ordre har status som "
"afsluttet."
-#: engine/core/models.py:1961
+#: engine/core/models.py:2091
msgid "download"
msgstr "Download"
-#: engine/core/models.py:1962
+#: engine/core/models.py:2092
msgid "downloads"
msgstr "Downloads"
-#: engine/core/serializers/utility.py:89
+#: engine/core/serializers/utility.py:91
msgid ""
"you must provide a comment, rating, and order product uuid to add feedback."
msgstr ""
@@ -2942,7 +2940,8 @@ msgstr "Hej %(order.user.first_name)s,"
#, python-format
msgid ""
"thank you for your order #%(order.pk)s! we are pleased to inform you that\n"
-" we have taken your order into work. below are the details of your\n"
+" we have taken your order into work. below are "
+"the details of your\n"
" order:"
msgstr ""
"Tak for din ordre #%(order.pk)s! Vi er glade for at kunne informere dig om, "
@@ -3056,7 +3055,8 @@ msgstr ""
#: engine/core/templates/shipped_order_created_email.html:101
#: engine/core/templates/shipped_order_delivered_email.html:101
msgid ""
-"thank you for your order! we are pleased to confirm your purchase. below are\n"
+"thank you for your order! we are pleased to confirm your purchase. below "
+"are\n"
" the details of your order:"
msgstr ""
"Tak for din bestilling! Vi er glade for at kunne bekræfte dit køb. Nedenfor "
@@ -3087,11 +3087,11 @@ msgstr ""
"alle rettigheder\n"
" forbeholdt"
-#: engine/core/utils/caching.py:44
+#: engine/core/utils/caching.py:48
msgid "both data and timeout are required"
msgstr "Både data og timeout er påkrævet"
-#: engine/core/utils/caching.py:46
+#: engine/core/utils/caching.py:51
msgid "invalid timeout value, it must be between 0 and 216000 seconds"
msgstr "Ugyldig timeout-værdi, den skal være mellem 0 og 216000 sekunder"
@@ -3100,17 +3100,17 @@ msgstr "Ugyldig timeout-værdi, den skal være mellem 0 og 216000 sekunder"
msgid "{settings.PROJECT_NAME} | contact us initiated"
msgstr "{settings.PROJECT_NAME} | kontakt os indledt"
-#: engine/core/utils/emailing.py:73
+#: engine/core/utils/emailing.py:81
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order confirmation"
msgstr "{settings.PROJECT_NAME} | ordrebekræftelse"
-#: engine/core/utils/emailing.py:105
+#: engine/core/utils/emailing.py:115
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order delivered"
msgstr "{settings.PROJECT_NAME} | order delivered"
-#: engine/core/utils/emailing.py:188
+#: engine/core/utils/emailing.py:203
#, python-brace-format
msgid "{settings.PROJECT_NAME} | promocode granted"
msgstr "{settings.PROJECT_NAME} | promokode givet"
@@ -3123,14 +3123,13 @@ msgstr "Du har ikke tilladelse til at udføre denne handling."
msgid "NOMINATIM_URL must be configured."
msgstr "Parameteren NOMINATIM_URL skal være konfigureret!"
-#: engine/core/validators.py:19
+#: engine/core/validators.py:21
#, python-brace-format
msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels"
msgstr ""
-"Billedets dimensioner bør ikke overstige w{max_width} x h{max_height} "
-"pixels."
+"Billedets dimensioner bør ikke overstige w{max_width} x h{max_height} pixels."
-#: engine/core/views.py:91
+#: engine/core/views.py:105
msgid ""
"Handles the request for the sitemap index and returns an XML response. It "
"ensures the response includes the appropriate content type header for XML."
@@ -3138,7 +3137,7 @@ msgstr ""
"Håndterer anmodningen om sitemap-indekset og returnerer et XML-svar. Den "
"sikrer, at svaret indeholder den passende indholdstypeheader for XML."
-#: engine/core/views.py:106
+#: engine/core/views.py:120
msgid ""
"Handles the detailed view response for a sitemap. This function processes "
"the request, fetches the appropriate sitemap detail response, and sets the "
@@ -3148,17 +3147,17 @@ msgstr ""
"behandler anmodningen, henter det relevante sitemap-detaljesvar og "
"indstiller Content-Type-headeren til XML."
-#: engine/core/views.py:141
+#: engine/core/views.py:156
msgid ""
"Returns a list of supported languages and their corresponding information."
msgstr ""
"Returnerer en liste over understøttede sprog og de tilhørende oplysninger."
-#: engine/core/views.py:173
+#: engine/core/views.py:183
msgid "Returns the parameters of the website as a JSON object."
msgstr "Returnerer hjemmesidens parametre som et JSON-objekt."
-#: engine/core/views.py:192
+#: engine/core/views.py:199
msgid ""
"Handles cache operations such as reading and setting cache data with a "
"specified key and timeout."
@@ -3166,11 +3165,11 @@ msgstr ""
"Håndterer cache-operationer som f.eks. læsning og indstilling af cachedata "
"med en specificeret nøgle og timeout."
-#: engine/core/views.py:219
+#: engine/core/views.py:221
msgid "Handles `contact us` form submissions."
msgstr "Håndterer indsendelser af `kontakt os`-formularer."
-#: engine/core/views.py:240
+#: engine/core/views.py:237
msgid ""
"Handles requests for processing and validating URLs from incoming POST "
"requests."
@@ -3178,58 +3177,66 @@ msgstr ""
"Håndterer anmodninger om behandling og validering af URL'er fra indgående "
"POST-anmodninger."
-#: engine/core/views.py:280
+#: engine/core/views.py:274
msgid "Handles global search queries."
msgstr "Håndterer globale søgeforespørgsler."
-#: engine/core/views.py:295
+#: engine/core/views.py:290
msgid "Handles the logic of buying as a business without registration."
msgstr "Håndterer logikken i at købe som en virksomhed uden registrering."
-#: engine/core/views.py:332
+#: engine/core/views.py:338
msgid ""
"Handles the downloading of a digital asset associated with an order.\n"
-"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the digital asset file located in the "
+"storage directory of the project. If the file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
msgstr ""
"Håndterer download af et digitalt aktiv, der er knyttet til en ordre.\n"
-"Denne funktion forsøger at betjene den digitale aktivfil, der ligger i projektets lagermappe. Hvis filen ikke findes, udløses en HTTP 404-fejl som tegn på, at ressourcen ikke er tilgængelig."
+"Denne funktion forsøger at betjene den digitale aktivfil, der ligger i "
+"projektets lagermappe. Hvis filen ikke findes, udløses en HTTP 404-fejl som "
+"tegn på, at ressourcen ikke er tilgængelig."
-#: engine/core/views.py:343
+#: engine/core/views.py:349
msgid "order_product_uuid is required"
msgstr "order_product_uuid er påkrævet"
-#: engine/core/views.py:350
+#: engine/core/views.py:356
msgid "order product does not exist"
msgstr "Bestil produkt findes ikke"
-#: engine/core/views.py:353
+#: engine/core/views.py:359
msgid "you can only download the digital asset once"
msgstr "Du kan kun downloade det digitale aktiv én gang"
-#: engine/core/views.py:356
+#: engine/core/views.py:363
msgid "the order must be paid before downloading the digital asset"
msgstr "Ordren skal betales, før det digitale aktiv downloades."
-#: engine/core/views.py:362
+#: engine/core/views.py:370
msgid "the order product does not have a product"
msgstr "Ordreproduktet har ikke et produkt"
-#: engine/core/views.py:399
+#: engine/core/views.py:414
msgid "favicon not found"
msgstr "Favicon ikke fundet"
-#: engine/core/views.py:404
+#: engine/core/views.py:419
msgid ""
"Handles requests for the favicon of a website.\n"
-"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the favicon file located in the static "
+"directory of the project. If the favicon file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
msgstr ""
"Håndterer anmodninger om et websteds favicon.\n"
-"Denne funktion forsøger at servere favicon-filen, der ligger i projektets statiske mappe. Hvis favicon-filen ikke findes, udløses en HTTP 404-fejl for at angive, at ressourcen ikke er tilgængelig."
+"Denne funktion forsøger at servere favicon-filen, der ligger i projektets "
+"statiske mappe. Hvis favicon-filen ikke findes, udløses en HTTP 404-fejl for "
+"at angive, at ressourcen ikke er tilgængelig."
-#: engine/core/views.py:416
+#: engine/core/views.py:431
msgid ""
-"Redirects the request to the admin index page. The function handles incoming"
-" HTTP requests and redirects them to the Django admin interface index page. "
+"Redirects the request to the admin index page. The function handles incoming "
+"HTTP requests and redirects them to the Django admin interface index page. "
"It uses Django's `redirect` function for handling the HTTP redirection."
msgstr ""
"Omdirigerer anmodningen til administratorens indeksside. Funktionen "
@@ -3237,20 +3244,20 @@ msgstr ""
"administratorinterfacets indeksside. Den bruger Djangos `redirect`-funktion "
"til at håndtere HTTP-omdirigeringen."
-#: engine/core/views.py:429
+#: engine/core/views.py:443
msgid "Returns current version of the eVibes. "
msgstr "Returnerer den aktuelle version af eVibes."
-#: engine/core/views.py:623 engine/core/views.py:636
+#: engine/core/views.py:672 engine/core/views.py:687
#, python-format
msgid "Revenue & Orders (last %(days)d)"
msgstr "Indtægter og ordrer (sidste %(days)d)"
-#: engine/core/views.py:793
+#: engine/core/views.py:868
msgid "Returns custom variables for Dashboard. "
msgstr "Returnerer brugerdefinerede variabler til Dashboard."
-#: engine/core/viewsets.py:136
+#: engine/core/viewsets.py:139
msgid ""
"Defines a viewset for managing Evibes-related operations. The EvibesViewSet "
"class inherits from ModelViewSet and provides functionality for handling "
@@ -3264,13 +3271,12 @@ msgstr ""
"understøttelse af dynamiske serializer-klasser baseret på den aktuelle "
"handling, tilladelser, der kan tilpasses, og gengivelsesformater."
-#: engine/core/viewsets.py:156
+#: engine/core/viewsets.py:160
msgid ""
-"Represents a viewset for managing AttributeGroup objects. Handles operations"
-" related to AttributeGroup, including filtering, serialization, and "
-"retrieval of data. This class is part of the application's API layer and "
-"provides a standardized way to process requests and responses for "
-"AttributeGroup data."
+"Represents a viewset for managing AttributeGroup objects. Handles operations "
+"related to AttributeGroup, including filtering, serialization, and retrieval "
+"of data. This class is part of the application's API layer and provides a "
+"standardized way to process requests and responses for AttributeGroup data."
msgstr ""
"Repræsenterer et visningssæt til håndtering af AttributeGroup-objekter. "
"Håndterer operationer relateret til AttributeGroup, herunder filtrering, "
@@ -3278,7 +3284,7 @@ msgstr ""
"API-lag og giver en standardiseret måde at behandle anmodninger og svar for "
"AttributeGroup-data på."
-#: engine/core/viewsets.py:175
+#: engine/core/viewsets.py:179
msgid ""
"Handles operations related to Attribute objects within the application. "
"Provides a set of API endpoints to interact with Attribute data. This class "
@@ -3294,21 +3300,21 @@ msgstr ""
"data, f.eks. filtrering efter specifikke felter eller hentning af "
"detaljerede eller forenklede oplysninger afhængigt af anmodningen."
-#: engine/core/viewsets.py:194
+#: engine/core/viewsets.py:198
msgid ""
"A viewset for managing AttributeValue objects. This viewset provides "
"functionality for listing, retrieving, creating, updating, and deleting "
"AttributeValue objects. It integrates with Django REST Framework's viewset "
-"mechanisms and uses appropriate serializers for different actions. Filtering"
-" capabilities are provided through the DjangoFilterBackend."
+"mechanisms and uses appropriate serializers for different actions. Filtering "
+"capabilities are provided through the DjangoFilterBackend."
msgstr ""
-"Et visningssæt til håndtering af AttributeValue-objekter. Dette viewet giver"
-" funktionalitet til at liste, hente, oprette, opdatere og slette "
+"Et visningssæt til håndtering af AttributeValue-objekter. Dette viewet giver "
+"funktionalitet til at liste, hente, oprette, opdatere og slette "
"AttributeValue-objekter. Det integreres med Django REST Framework's viewset-"
"mekanismer og bruger passende serializers til forskellige handlinger. "
"Filtreringsfunktioner leveres gennem DjangoFilterBackend."
-#: engine/core/viewsets.py:213
+#: engine/core/viewsets.py:217
msgid ""
"Manages views for Category-related operations. The CategoryViewSet class is "
"responsible for handling operations related to the Category model in the "
@@ -3322,19 +3328,19 @@ msgstr ""
"serialisering af kategoridata. ViewSet håndhæver også tilladelser for at "
"sikre, at kun autoriserede brugere kan få adgang til specifikke data."
-#: engine/core/viewsets.py:326
+#: engine/core/viewsets.py:346
msgid ""
"Represents a viewset for managing Brand instances. This class provides "
"functionality for querying, filtering, and serializing Brand objects. It "
"uses Django's ViewSet framework to simplify the implementation of API "
"endpoints for Brand objects."
msgstr ""
-"Repræsenterer et visningssæt til håndtering af Brand-instanser. Denne klasse"
-" giver funktionalitet til at forespørge, filtrere og serialisere Brand-"
+"Repræsenterer et visningssæt til håndtering af Brand-instanser. Denne klasse "
+"giver funktionalitet til at forespørge, filtrere og serialisere Brand-"
"objekter. Den bruger Djangos ViewSet-rammeværk til at forenkle "
"implementeringen af API-slutpunkter for Brand-objekter."
-#: engine/core/viewsets.py:438
+#: engine/core/viewsets.py:458
msgid ""
"Manages operations related to the `Product` model in the system. This class "
"provides a viewset for managing products, including their filtering, "
@@ -3347,12 +3353,12 @@ msgstr ""
"Håndterer operationer relateret til `Product`-modellen i systemet. Denne "
"klasse giver et visningssæt til håndtering af produkter, herunder deres "
"filtrering, serialisering og operationer på specifikke forekomster. Den "
-"udvider fra `EvibesViewSet` for at bruge fælles funktionalitet og integrerer"
-" med Django REST-frameworket til RESTful API-operationer. Indeholder metoder"
-" til at hente produktoplysninger, anvende tilladelser og få adgang til "
+"udvider fra `EvibesViewSet` for at bruge fælles funktionalitet og integrerer "
+"med Django REST-frameworket til RESTful API-operationer. Indeholder metoder "
+"til at hente produktoplysninger, anvende tilladelser og få adgang til "
"relateret feedback om et produkt."
-#: engine/core/viewsets.py:574
+#: engine/core/viewsets.py:605
msgid ""
"Represents a viewset for managing Vendor objects. This viewset allows "
"fetching, filtering, and serializing Vendor data. It defines the queryset, "
@@ -3360,69 +3366,69 @@ msgid ""
"actions. The purpose of this class is to provide streamlined access to "
"Vendor-related resources through the Django REST framework."
msgstr ""
-"Repræsenterer et visningssæt til håndtering af Vendor-objekter. Dette viewet"
-" gør det muligt at hente, filtrere og serialisere Vendor-data. Det definerer"
-" queryset, filterkonfigurationer og serializer-klasser, der bruges til at "
+"Repræsenterer et visningssæt til håndtering af Vendor-objekter. Dette viewet "
+"gør det muligt at hente, filtrere og serialisere Vendor-data. Det definerer "
+"queryset, filterkonfigurationer og serializer-klasser, der bruges til at "
"håndtere forskellige handlinger. Formålet med denne klasse er at give "
"strømlinet adgang til Vendor-relaterede ressourcer gennem Django REST-"
"frameworket."
-#: engine/core/viewsets.py:594
+#: engine/core/viewsets.py:625
msgid ""
"Representation of a view set handling Feedback objects. This class manages "
"operations related to Feedback objects, including listing, filtering, and "
"retrieving details. The purpose of this view set is to provide different "
-"serializers for different actions and implement permission-based handling of"
-" accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
+"serializers for different actions and implement permission-based handling of "
+"accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
"use of Django's filtering system for querying data."
msgstr ""
"Repræsentation af et visningssæt, der håndterer feedback-objekter. Denne "
-"klasse håndterer handlinger relateret til feedback-objekter, herunder liste,"
-" filtrering og hentning af detaljer. Formålet med dette visningssæt er at "
+"klasse håndterer handlinger relateret til feedback-objekter, herunder liste, "
+"filtrering og hentning af detaljer. Formålet med dette visningssæt er at "
"levere forskellige serializers til forskellige handlinger og implementere "
-"tilladelsesbaseret håndtering af tilgængelige feedback-objekter. Det udvider"
-" basen `EvibesViewSet` og gør brug af Djangos filtreringssystem til at "
+"tilladelsesbaseret håndtering af tilgængelige feedback-objekter. Det udvider "
+"basen `EvibesViewSet` og gør brug af Djangos filtreringssystem til at "
"forespørge på data."
-#: engine/core/viewsets.py:621
+#: engine/core/viewsets.py:652
msgid ""
"ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes "
"various endpoints for handling order operations such as adding or removing "
-"products, performing purchases for registered as well as unregistered users,"
-" and retrieving the current authenticated user's pending orders. The ViewSet"
-" uses multiple serializers based on the specific action being performed and "
+"products, performing purchases for registered as well as unregistered users, "
+"and retrieving the current authenticated user's pending orders. The ViewSet "
+"uses multiple serializers based on the specific action being performed and "
"enforces permissions accordingly while interacting with order data."
msgstr ""
"ViewSet til håndtering af ordrer og relaterede operationer. Denne klasse "
-"indeholder funktionalitet til at hente, ændre og administrere ordreobjekter."
-" Den indeholder forskellige endpoints til håndtering af ordreoperationer "
+"indeholder funktionalitet til at hente, ændre og administrere ordreobjekter. "
+"Den indeholder forskellige endpoints til håndtering af ordreoperationer "
"såsom tilføjelse eller fjernelse af produkter, udførelse af køb for "
"registrerede såvel som uregistrerede brugere og hentning af den aktuelle "
"godkendte brugers afventende ordrer. ViewSet bruger flere serializers "
"baseret på den specifikke handling, der udføres, og håndhæver tilladelser i "
"overensstemmelse hermed, mens der interageres med ordredata."
-#: engine/core/viewsets.py:825
+#: engine/core/viewsets.py:914
msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It "
-"includes filtering, permission checks, and serializer switching based on the"
-" requested action. Additionally, it provides a detailed action for handling "
+"includes filtering, permission checks, and serializer switching based on the "
+"requested action. Additionally, it provides a detailed action for handling "
"feedback on OrderProduct instances"
msgstr ""
"Indeholder et visningssæt til håndtering af OrderProduct-enheder. Dette "
-"visningssæt muliggør CRUD-operationer og brugerdefinerede handlinger, der er"
-" specifikke for OrderProduct-modellen. Det omfatter filtrering, kontrol af "
+"visningssæt muliggør CRUD-operationer og brugerdefinerede handlinger, der er "
+"specifikke for OrderProduct-modellen. Det omfatter filtrering, kontrol af "
"tilladelser og skift af serializer baseret på den ønskede handling. "
"Derudover indeholder det en detaljeret handling til håndtering af feedback "
"på OrderProduct-instanser."
-#: engine/core/viewsets.py:879
+#: engine/core/viewsets.py:974
msgid "Manages operations related to Product images in the application. "
msgstr "Håndterer operationer relateret til produktbilleder i applikationen."
-#: engine/core/viewsets.py:892
+#: engine/core/viewsets.py:988
msgid ""
"Manages the retrieval and handling of PromoCode instances through various "
"API actions."
@@ -3430,20 +3436,20 @@ msgstr ""
"Administrerer hentning og håndtering af PromoCode-instanser gennem "
"forskellige API-handlinger."
-#: engine/core/viewsets.py:914
+#: engine/core/viewsets.py:1019
msgid "Represents a view set for managing promotions. "
msgstr "Repræsenterer et visningssæt til håndtering af kampagner."
-#: engine/core/viewsets.py:927
+#: engine/core/viewsets.py:1032
msgid "Handles operations related to Stock data in the system."
msgstr "Håndterer operationer relateret til lagerdata i systemet."
-#: engine/core/viewsets.py:941
+#: engine/core/viewsets.py:1046
msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the "
-"retrieval, modification, and customization of products within the wish list."
-" This ViewSet facilitates functionality such as adding, removing, and bulk "
+"retrieval, modification, and customization of products within the wish list. "
+"This ViewSet facilitates functionality such as adding, removing, and bulk "
"actions for wishlist products. Permission checks are integrated to ensure "
"that users can only manage their own wishlists unless explicit permissions "
"are granted."
@@ -3456,7 +3462,7 @@ msgstr ""
"integreret for at sikre, at brugere kun kan administrere deres egne "
"ønskelister, medmindre der er givet eksplicitte tilladelser."
-#: engine/core/viewsets.py:1056
+#: engine/core/viewsets.py:1183
msgid ""
"This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom "
@@ -3464,18 +3470,18 @@ msgid ""
"different HTTP methods, serializer overrides, and permission handling based "
"on the request context."
msgstr ""
-"Denne klasse giver viewset-funktionalitet til håndtering af "
-"`Address`-objekter. AddressViewSet-klassen muliggør CRUD-operationer, "
-"filtrering og brugerdefinerede handlinger relateret til adresseenheder. Den "
-"omfatter specialiseret adfærd for forskellige HTTP-metoder, tilsidesættelse "
-"af serializer og håndtering af tilladelser baseret på anmodningskonteksten."
+"Denne klasse giver viewset-funktionalitet til håndtering af `Address`-"
+"objekter. AddressViewSet-klassen muliggør CRUD-operationer, filtrering og "
+"brugerdefinerede handlinger relateret til adresseenheder. Den omfatter "
+"specialiseret adfærd for forskellige HTTP-metoder, tilsidesættelse af "
+"serializer og håndtering af tilladelser baseret på anmodningskonteksten."
-#: engine/core/viewsets.py:1123
+#: engine/core/viewsets.py:1254
#, python-brace-format
msgid "Geocoding error: {e}"
msgstr "Fejl i geokodning: {e}"
-#: engine/core/viewsets.py:1131
+#: engine/core/viewsets.py:1262
msgid ""
"Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing "
diff --git a/engine/core/locale/de_DE/LC_MESSAGES/django.po b/engine/core/locale/de_DE/LC_MESSAGES/django.po
index c342b56f..b5aff5a9 100644
--- a/engine/core/locale/de_DE/LC_MESSAGES/django.po
+++ b/engine/core/locale/de_DE/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 22:12+0300\n"
+"POT-Creation-Date: 2025-12-18 19:09+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -27,113 +27,112 @@ msgstr ""
msgid "is active"
msgstr "Ist aktiv"
-#: engine/core/abstract.py:21
+#: engine/core/abstract.py:22
msgid ""
-"if set to false, this object can't be seen by users without needed "
-"permission"
+"if set to false, this object can't be seen by users without needed permission"
msgstr ""
"Wenn auf false gesetzt, kann dieses Objekt von Benutzern ohne die "
"erforderliche Berechtigung nicht gesehen werden."
-#: engine/core/abstract.py:23 engine/core/choices.py:18
+#: engine/core/abstract.py:26 engine/core/choices.py:18
msgid "created"
msgstr "Erstellt"
-#: engine/core/abstract.py:23
+#: engine/core/abstract.py:26
msgid "when the object first appeared on the database"
msgstr "Wann das Objekt zum ersten Mal in der Datenbank erschienen ist"
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "modified"
msgstr "Geändert"
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "when the object was last modified"
msgstr "Wann das Objekt zuletzt bearbeitet wurde"
-#: engine/core/admin.py:85
+#: engine/core/admin.py:94
msgid "translations"
msgstr "Übersetzungen"
-#: engine/core/admin.py:89
+#: engine/core/admin.py:102
msgid "general"
msgstr "Allgemein"
-#: engine/core/admin.py:91
+#: engine/core/admin.py:106
msgid "relations"
msgstr "Beziehungen"
-#: engine/core/admin.py:93
+#: engine/core/admin.py:111
msgid "additional info"
msgstr "Zusatzinfo"
-#: engine/core/admin.py:111
+#: engine/core/admin.py:133
msgid "metadata"
msgstr "Metadaten"
-#: engine/core/admin.py:118
+#: engine/core/admin.py:141
msgid "timestamps"
msgstr "Zeitstempel"
-#: engine/core/admin.py:133
+#: engine/core/admin.py:157
#, python-format
msgid "activate selected %(verbose_name_plural)s"
msgstr "Ausgewählte %(verbose_name_plural)s aktivieren"
-#: engine/core/admin.py:138
+#: engine/core/admin.py:165
msgid "selected items have been activated."
msgstr "Ausgewählte Artikel wurden aktiviert!"
-#: engine/core/admin.py:144
+#: engine/core/admin.py:173
#, python-format
msgid "deactivate selected %(verbose_name_plural)s"
msgstr "Ausgewählte %(verbose_name_plural)s deaktivieren"
-#: engine/core/admin.py:149
+#: engine/core/admin.py:183
msgid "selected items have been deactivated."
msgstr "Ausgewählte Artikel wurden deaktiviert!"
-#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586
-#: engine/core/graphene/object_types.py:593 engine/core/models.py:801
-#: engine/core/models.py:809
+#: engine/core/admin.py:195 engine/core/graphene/object_types.py:650
+#: engine/core/graphene/object_types.py:657 engine/core/models.py:824
+#: engine/core/models.py:832
msgid "attribute value"
msgstr "Attribut Wert"
-#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75
-#: engine/core/models.py:810
+#: engine/core/admin.py:196 engine/core/graphene/object_types.py:75
+#: engine/core/models.py:833
msgid "attribute values"
msgstr "Attribut Werte"
-#: engine/core/admin.py:172
+#: engine/core/admin.py:207
msgid "image"
msgstr "Bild"
-#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474
+#: engine/core/admin.py:208 engine/core/graphene/object_types.py:527
msgid "images"
msgstr "Bilder"
-#: engine/core/admin.py:184 engine/core/models.py:566
+#: engine/core/admin.py:219 engine/core/models.py:587
msgid "stock"
msgstr "Lagerbestand"
-#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640
+#: engine/core/admin.py:220 engine/core/graphene/object_types.py:710
msgid "stocks"
msgstr "Bestände"
-#: engine/core/admin.py:196 engine/core/models.py:1818
+#: engine/core/admin.py:231 engine/core/models.py:1930
msgid "order product"
msgstr "Produkt bestellen"
-#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389
-#: engine/core/models.py:1819
+#: engine/core/admin.py:232 engine/core/graphene/object_types.py:438
+#: engine/core/models.py:1931
msgid "order products"
msgstr "Produkte bestellen"
-#: engine/core/admin.py:210 engine/core/admin.py:211
+#: engine/core/admin.py:250 engine/core/admin.py:251
msgid "children"
msgstr "Kinder"
-#: engine/core/admin.py:977
+#: engine/core/admin.py:1059
msgid "Config"
msgstr "Konfigurieren Sie"
@@ -157,8 +156,7 @@ msgstr "Geliefert"
msgid "canceled"
msgstr "Abgesagt"
-#: engine/core/choices.py:8 engine/core/choices.py:16
-#: engine/core/choices.py:24
+#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24
msgid "failed"
msgstr "Gescheitert"
@@ -186,11 +184,11 @@ msgstr "Momente"
msgid "successful"
msgstr "Erfolgreich"
-#: engine/core/docs/drf/views.py:31
+#: engine/core/docs/drf/views.py:30
msgid "OpenAPI schema in selected format with selected language"
msgstr "OpenAPI-Schema im ausgewählten Format mit ausgewählter Sprache"
-#: engine/core/docs/drf/views.py:33
+#: engine/core/docs/drf/views.py:32
msgid ""
"OpenApi3 schema for this API. Format can be selected via content "
"negotiation. Language can be selected with Accept-Language and query "
@@ -200,47 +198,49 @@ msgstr ""
"ausgewählt werden. Die Sprache kann sowohl mit Accept-Language als auch mit "
"Query-Parameter ausgewählt werden."
-#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37
+#: engine/core/docs/drf/views.py:43 engine/core/graphene/mutations.py:37
msgid "cache I/O"
msgstr "Cache I/O"
-#: engine/core/docs/drf/views.py:46
+#: engine/core/docs/drf/views.py:45
msgid ""
"apply only a key to read permitted data from cache.\n"
"apply key, data and timeout with authentication to write data to cache."
msgstr ""
-"Wenden Sie nur einen Schlüssel an, um erlaubte Daten aus dem Cache zu lesen.\n"
-"Schlüssel, Daten und Timeout mit Authentifizierung anwenden, um Daten in den Cache zu schreiben."
+"Wenden Sie nur einen Schlüssel an, um erlaubte Daten aus dem Cache zu "
+"lesen.\n"
+"Schlüssel, Daten und Timeout mit Authentifizierung anwenden, um Daten in den "
+"Cache zu schreiben."
-#: engine/core/docs/drf/views.py:62
+#: engine/core/docs/drf/views.py:63
msgid "get a list of supported languages"
msgstr "Eine Liste der unterstützten Sprachen abrufen"
-#: engine/core/docs/drf/views.py:74
+#: engine/core/docs/drf/views.py:75
msgid "get application's exposable parameters"
msgstr "Abrufen der exponierbaren Parameter der Anwendung"
-#: engine/core/docs/drf/views.py:84
+#: engine/core/docs/drf/views.py:89
msgid "send a message to the support team"
msgstr "Senden Sie eine Nachricht an das Support-Team"
-#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57
+#: engine/core/docs/drf/views.py:103 engine/core/graphene/mutations.py:59
msgid "request a CORSed URL"
msgstr "Fordern Sie eine CORS-gesicherte URL an. Nur https erlaubt."
-#: engine/core/docs/drf/views.py:112
+#: engine/core/docs/drf/views.py:119
msgid "Search between products, categories and brands"
msgstr "Suche zwischen Produkten, Kategorien und Marken"
-#: engine/core/docs/drf/views.py:130
+#: engine/core/docs/drf/views.py:141
msgid "global search endpoint to query across project's tables"
msgstr "Globaler Suchendpunkt zur Abfrage aller Tabellen des Projekts"
-#: engine/core/docs/drf/views.py:139
+#: engine/core/docs/drf/views.py:150
msgid "purchase an order as a business"
msgstr "Eine Bestellung als Unternehmen kaufen"
-#: engine/core/docs/drf/views.py:146
+#: engine/core/docs/drf/views.py:158
msgid ""
"purchase an order as a business, using the provided `products` with "
"`product_uuid` and `attributes`."
@@ -248,236 +248,234 @@ msgstr ""
"Kauf einer Bestellung als Unternehmen unter Verwendung der angegebenen "
"\"Produkte\" mit \"product_uuid\" und \"Attributen\"."
-#: engine/core/docs/drf/views.py:164
+#: engine/core/docs/drf/views.py:177
msgid "download a digital asset from purchased digital order"
msgstr ""
"ein digitales Asset aus einer erworbenen digitalen Bestellung herunterladen"
-#: engine/core/docs/drf/viewsets.py:61
+#: engine/core/docs/drf/viewsets.py:65
msgid "list all attribute groups (simple view)"
msgstr "Alle Attributgruppen auflisten (einfache Ansicht)"
-#: engine/core/docs/drf/viewsets.py:68
+#: engine/core/docs/drf/viewsets.py:75
msgid "retrieve a single attribute group (detailed view)"
msgstr "Abrufen einer einzelnen Attributgruppe (Detailansicht)"
-#: engine/core/docs/drf/viewsets.py:75
+#: engine/core/docs/drf/viewsets.py:82
msgid "create an attribute group"
msgstr "Erstellen einer Attributgruppe"
-#: engine/core/docs/drf/viewsets.py:82
+#: engine/core/docs/drf/viewsets.py:92
msgid "delete an attribute group"
msgstr "Löschen einer Attributgruppe"
-#: engine/core/docs/drf/viewsets.py:89
+#: engine/core/docs/drf/viewsets.py:99
msgid "rewrite an existing attribute group saving non-editables"
msgstr ""
"Umschreiben einer bestehenden Attributgruppe mit Speicherung von Nicht-"
"Editierbarkeit"
-#: engine/core/docs/drf/viewsets.py:96
-msgid ""
-"rewrite some fields of an existing attribute group saving non-editables"
+#: engine/core/docs/drf/viewsets.py:107
+msgid "rewrite some fields of an existing attribute group saving non-editables"
msgstr ""
"Umschreiben einiger Felder einer bestehenden Attributgruppe, wobei nicht "
"editierbare Felder gespeichert werden"
-#: engine/core/docs/drf/viewsets.py:106
+#: engine/core/docs/drf/viewsets.py:118
msgid "list all attributes (simple view)"
msgstr "Alle Attribute auflisten (einfache Ansicht)"
-#: engine/core/docs/drf/viewsets.py:113
+#: engine/core/docs/drf/viewsets.py:128
msgid "retrieve a single attribute (detailed view)"
msgstr "Ein einzelnes Attribut abrufen (detaillierte Ansicht)"
-#: engine/core/docs/drf/viewsets.py:120
+#: engine/core/docs/drf/viewsets.py:135
msgid "create an attribute"
msgstr "Ein Attribut erstellen"
-#: engine/core/docs/drf/viewsets.py:127
+#: engine/core/docs/drf/viewsets.py:142
msgid "delete an attribute"
msgstr "Ein Attribut löschen"
-#: engine/core/docs/drf/viewsets.py:134
+#: engine/core/docs/drf/viewsets.py:149
msgid "rewrite an existing attribute saving non-editables"
msgstr ""
"Umschreiben eines vorhandenen Attributs, wobei nicht editierbare Daten "
"gespeichert werden"
-#: engine/core/docs/drf/viewsets.py:141
+#: engine/core/docs/drf/viewsets.py:156
msgid "rewrite some fields of an existing attribute saving non-editables"
msgstr ""
-"Umschreiben einiger Felder eines vorhandenen Attributs, um nicht editierbare"
-" Daten zu speichern"
+"Umschreiben einiger Felder eines vorhandenen Attributs, um nicht editierbare "
+"Daten zu speichern"
-#: engine/core/docs/drf/viewsets.py:151
+#: engine/core/docs/drf/viewsets.py:166
msgid "list all attribute values (simple view)"
msgstr "Alle Attributwerte auflisten (einfache Ansicht)"
-#: engine/core/docs/drf/viewsets.py:158
+#: engine/core/docs/drf/viewsets.py:176
msgid "retrieve a single attribute value (detailed view)"
msgstr "Abrufen eines einzelnen Attributwertes (Detailansicht)"
-#: engine/core/docs/drf/viewsets.py:165
+#: engine/core/docs/drf/viewsets.py:183
msgid "create an attribute value"
msgstr "Einen Attributwert erstellen"
-#: engine/core/docs/drf/viewsets.py:172
+#: engine/core/docs/drf/viewsets.py:193
msgid "delete an attribute value"
msgstr "Löschen eines Attributwertes"
-#: engine/core/docs/drf/viewsets.py:179
+#: engine/core/docs/drf/viewsets.py:200
msgid "rewrite an existing attribute value saving non-editables"
msgstr ""
"Umschreiben eines vorhandenen Attributwerts mit Speicherung von Nicht-"
"Editierbarkeit"
-#: engine/core/docs/drf/viewsets.py:186
-msgid ""
-"rewrite some fields of an existing attribute value saving non-editables"
+#: engine/core/docs/drf/viewsets.py:208
+msgid "rewrite some fields of an existing attribute value saving non-editables"
msgstr ""
"Umschreiben einiger Felder eines vorhandenen Attributwerts, wobei nicht "
"bearbeitbare Daten gespeichert werden"
-#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197
+#: engine/core/docs/drf/viewsets.py:219 engine/core/docs/drf/viewsets.py:220
msgid "list all categories (simple view)"
msgstr "Alle Kategorien auflisten (einfache Ansicht)"
-#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205
+#: engine/core/docs/drf/viewsets.py:230 engine/core/docs/drf/viewsets.py:231
msgid "retrieve a single category (detailed view)"
msgstr "Eine einzelne Kategorie abrufen (detaillierte Ansicht)"
-#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258
+#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:286
msgid "Category UUID or slug"
msgstr "Kategorie UUID oder Slug"
-#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221
+#: engine/core/docs/drf/viewsets.py:246 engine/core/docs/drf/viewsets.py:247
msgid "create a category"
msgstr "Eine Kategorie erstellen"
-#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229
+#: engine/core/docs/drf/viewsets.py:254 engine/core/docs/drf/viewsets.py:255
msgid "delete a category"
msgstr "Eine Kategorie löschen"
-#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237
+#: engine/core/docs/drf/viewsets.py:262 engine/core/docs/drf/viewsets.py:263
msgid "rewrite an existing category saving non-editables"
msgstr ""
"Eine bestehende Kategorie umschreiben und dabei Nicht-Editierbares speichern"
-#: engine/core/docs/drf/viewsets.py:244 engine/core/docs/drf/viewsets.py:245
+#: engine/core/docs/drf/viewsets.py:270 engine/core/docs/drf/viewsets.py:272
msgid "rewrite some fields of an existing category saving non-editables"
msgstr ""
-"Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare"
-" Daten zu speichern"
+"Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare "
+"Daten zu speichern"
-#: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704
-#: engine/core/docs/drf/viewsets.py:988
+#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:1046
#: engine/core/graphene/object_types.py:117
-#: engine/core/graphene/object_types.py:207
-#: engine/core/graphene/object_types.py:482
+#: engine/core/graphene/object_types.py:236
+#: engine/core/graphene/object_types.py:537
msgid "SEO Meta snapshot"
msgstr "SEO-Meta-Schnappschuss"
-#: engine/core/docs/drf/viewsets.py:253
+#: engine/core/docs/drf/viewsets.py:281
msgid "returns a snapshot of the category's SEO meta data"
msgstr "Gibt einen Schnappschuss der SEO-Metadaten der Kategorie zurück"
-#: engine/core/docs/drf/viewsets.py:274
+#: engine/core/docs/drf/viewsets.py:302
msgid "list all orders (simple view)"
msgstr "Alle Kategorien auflisten (einfache Ansicht)"
-#: engine/core/docs/drf/viewsets.py:275
+#: engine/core/docs/drf/viewsets.py:303
msgid "for non-staff users, only their own orders are returned."
msgstr ""
"Bei Nicht-Mitarbeitern werden nur die eigenen Bestellungen zurückgeschickt."
-#: engine/core/docs/drf/viewsets.py:281
+#: engine/core/docs/drf/viewsets.py:309
msgid ""
-"Case-insensitive substring search across human_readable_id, "
-"order_products.product.name, and order_products.product.partnumber"
+"Case-insensitive substring search across human_readable_id, order_products."
+"product.name, and order_products.product.partnumber"
msgstr ""
"Groß- und Kleinschreibung unempfindliche Teilstringsuche über "
-"human_readable_id, order_products.product.name und "
-"order_products.product.partnumber"
+"human_readable_id, order_products.product.name und order_products.product."
+"partnumber"
-#: engine/core/docs/drf/viewsets.py:288
+#: engine/core/docs/drf/viewsets.py:316
msgid "Filter orders with buy_time >= this ISO 8601 datetime"
msgstr "Aufträge mit Kaufzeitpunkt >= dieser ISO 8601-Datumszeit filtern"
-#: engine/core/docs/drf/viewsets.py:293
+#: engine/core/docs/drf/viewsets.py:321
msgid "Filter orders with buy_time <= this ISO 8601 datetime"
msgstr "Aufträge mit Kaufzeitpunkt <= dieser ISO 8601-Datumszeit filtern"
-#: engine/core/docs/drf/viewsets.py:298
+#: engine/core/docs/drf/viewsets.py:326
msgid "Filter by exact order UUID"
msgstr "Filter nach exakter UUID der Bestellung"
-#: engine/core/docs/drf/viewsets.py:303
+#: engine/core/docs/drf/viewsets.py:331
msgid "Filter by exact human-readable order ID"
msgstr "Filtern nach exakter, von Menschen lesbarer Bestell-ID"
-#: engine/core/docs/drf/viewsets.py:308
+#: engine/core/docs/drf/viewsets.py:336
msgid "Filter by user's email (case-insensitive exact match)"
msgstr ""
"Filter nach der E-Mail des Benutzers (Groß-/Kleinschreibung nicht "
"berücksichtigend, exakte Übereinstimmung)"
-#: engine/core/docs/drf/viewsets.py:313
+#: engine/core/docs/drf/viewsets.py:341
msgid "Filter by user's UUID"
msgstr "Filter nach der UUID des Benutzers"
-#: engine/core/docs/drf/viewsets.py:318
+#: engine/core/docs/drf/viewsets.py:347
msgid "Filter by order status (case-insensitive substring match)"
msgstr ""
"Filter nach Bestellstatus (Groß-/Kleinschreibung nicht berücksichtigende "
"Teilstring-Übereinstimmung)"
-#: engine/core/docs/drf/viewsets.py:324
+#: engine/core/docs/drf/viewsets.py:354
msgid ""
-"Order by one of: uuid, human_readable_id, user_email, user, status, created,"
-" modified, buy_time, random. Prefix with '-' for descending (e.g. "
-"'-buy_time')."
+"Order by one of: uuid, human_readable_id, user_email, user, status, created, "
+"modified, buy_time, random. Prefix with '-' for descending (e.g. '-"
+"buy_time')."
msgstr ""
"Sortierung nach einem von: uuid, human_readable_id, user_email, user, "
"status, created, modified, buy_time, random. Präfix mit '-' für absteigend "
"(z. B. '-buy_time')."
-#: engine/core/docs/drf/viewsets.py:336
+#: engine/core/docs/drf/viewsets.py:366
msgid "retrieve a single order (detailed view)"
msgstr "Eine einzelne Kategorie abrufen (detaillierte Ansicht)"
-#: engine/core/docs/drf/viewsets.py:341
+#: engine/core/docs/drf/viewsets.py:371
msgid "Order UUID or human-readable id"
msgstr "Auftrag UUID oder menschenlesbare ID"
-#: engine/core/docs/drf/viewsets.py:351
+#: engine/core/docs/drf/viewsets.py:381
msgid "create an order"
msgstr "Ein Attribut erstellen"
-#: engine/core/docs/drf/viewsets.py:352
+#: engine/core/docs/drf/viewsets.py:382
msgid "doesn't work for non-staff users."
msgstr "Funktioniert nicht für Benutzer, die nicht zum Personal gehören."
-#: engine/core/docs/drf/viewsets.py:359
+#: engine/core/docs/drf/viewsets.py:389
msgid "delete an order"
msgstr "Ein Attribut löschen"
-#: engine/core/docs/drf/viewsets.py:366
+#: engine/core/docs/drf/viewsets.py:396
msgid "rewrite an existing order saving non-editables"
msgstr ""
"Eine bestehende Kategorie umschreiben und dabei Nicht-Editierbares speichern"
-#: engine/core/docs/drf/viewsets.py:373
+#: engine/core/docs/drf/viewsets.py:403
msgid "rewrite some fields of an existing order saving non-editables"
msgstr ""
-"Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare"
-" Daten zu speichern"
+"Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare "
+"Daten zu speichern"
-#: engine/core/docs/drf/viewsets.py:380
+#: engine/core/docs/drf/viewsets.py:410
msgid "purchase an order"
msgstr "Einkaufspreis zum Zeitpunkt der Bestellung"
-#: engine/core/docs/drf/viewsets.py:382
+#: engine/core/docs/drf/viewsets.py:412
msgid ""
"finalizes the order purchase. if `force_balance` is used, the purchase is "
"completed using the user's balance; if `force_payment` is used, a "
@@ -487,31 +485,30 @@ msgstr ""
"wird der Kauf mit dem Guthaben des Benutzers abgeschlossen; bei Verwendung "
"von \"force_payment\" wird eine Transaktion ausgelöst."
-#: engine/core/docs/drf/viewsets.py:397
+#: engine/core/docs/drf/viewsets.py:427
msgid "retrieve current pending order of a user"
msgstr "Abruf der aktuellen offenen Bestellung eines Benutzers"
-#: engine/core/docs/drf/viewsets.py:398
+#: engine/core/docs/drf/viewsets.py:428
msgid "retrieves a current pending order of an authenticated user"
msgstr ""
"ruft eine aktuelle ausstehende Bestellung eines authentifizierten Benutzers "
"ab"
-#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334
+#: engine/core/docs/drf/viewsets.py:438 engine/core/graphene/mutations.py:354
msgid "purchase an order without account creation"
msgstr "eine Bestellung kaufen, ohne ein Konto anzulegen"
-#: engine/core/docs/drf/viewsets.py:409
+#: engine/core/docs/drf/viewsets.py:439
msgid "finalizes the order purchase for a non-registered user."
msgstr ""
-"schließt den Kauf einer Bestellung für einen nicht registrierten Benutzer "
-"ab."
+"schließt den Kauf einer Bestellung für einen nicht registrierten Benutzer ab."
-#: engine/core/docs/drf/viewsets.py:420
+#: engine/core/docs/drf/viewsets.py:450
msgid "add product to order"
msgstr "Ein Produkt zur Bestellung hinzufügen"
-#: engine/core/docs/drf/viewsets.py:421
+#: engine/core/docs/drf/viewsets.py:452
msgid ""
"adds a product to an order using the provided `product_uuid` and "
"`attributes`."
@@ -519,13 +516,13 @@ msgstr ""
"Fügt ein Produkt unter Verwendung der angegebenen `product_uuid` und "
"`attributes` zu einer Bestellung hinzu."
-#: engine/core/docs/drf/viewsets.py:429
+#: engine/core/docs/drf/viewsets.py:461
msgid "add a list of products to order, quantities will not count"
msgstr ""
-"Fügen Sie eine Liste der zu bestellenden Produkte hinzu, Mengen werden nicht"
-" gezählt"
+"Fügen Sie eine Liste der zu bestellenden Produkte hinzu, Mengen werden nicht "
+"gezählt"
-#: engine/core/docs/drf/viewsets.py:430
+#: engine/core/docs/drf/viewsets.py:463
msgid ""
"adds a list of products to an order using the provided `product_uuid` and "
"`attributes`."
@@ -533,11 +530,11 @@ msgstr ""
"Fügt einer Bestellung eine Liste von Produkten unter Verwendung der "
"angegebenen `product_uuid` und `attributes` hinzu."
-#: engine/core/docs/drf/viewsets.py:438
+#: engine/core/docs/drf/viewsets.py:472
msgid "remove product from order"
msgstr "Ein Produkt aus der Bestellung entfernen"
-#: engine/core/docs/drf/viewsets.py:439
+#: engine/core/docs/drf/viewsets.py:474
msgid ""
"removes a product from an order using the provided `product_uuid` and "
"`attributes`."
@@ -545,12 +542,12 @@ msgstr ""
"Entfernt ein Produkt aus einer Bestellung unter Verwendung der angegebenen "
"`product_uuid` und `attributes`."
-#: engine/core/docs/drf/viewsets.py:447
+#: engine/core/docs/drf/viewsets.py:483
msgid "remove product from order, quantities will not count"
msgstr ""
"Ein Produkt aus der Bestellung entfernen, die Mengen werden nicht gezählt"
-#: engine/core/docs/drf/viewsets.py:448
+#: engine/core/docs/drf/viewsets.py:485
msgid ""
"removes a list of products from an order using the provided `product_uuid` "
"and `attributes`"
@@ -558,741 +555,753 @@ msgstr ""
"Entfernt eine Liste von Produkten aus einer Bestellung unter Verwendung der "
"angegebenen `product_uuid` und `attributes`."
-#: engine/core/docs/drf/viewsets.py:459
+#: engine/core/docs/drf/viewsets.py:497
msgid "list all wishlists (simple view)"
msgstr "Alle Attribute auflisten (einfache Ansicht)"
-#: engine/core/docs/drf/viewsets.py:460
+#: engine/core/docs/drf/viewsets.py:498
msgid "for non-staff users, only their own wishlists are returned."
msgstr ""
"Bei Nicht-Mitarbeitern werden nur ihre eigenen Wunschlisten zurückgegeben."
-#: engine/core/docs/drf/viewsets.py:467
+#: engine/core/docs/drf/viewsets.py:508
msgid "retrieve a single wishlist (detailed view)"
msgstr "Ein einzelnes Attribut abrufen (detaillierte Ansicht)"
-#: engine/core/docs/drf/viewsets.py:474
+#: engine/core/docs/drf/viewsets.py:515
msgid "create an wishlist"
msgstr "Ein Attribut erstellen"
-#: engine/core/docs/drf/viewsets.py:475
+#: engine/core/docs/drf/viewsets.py:516
msgid "Doesn't work for non-staff users."
msgstr "Funktioniert nicht für Benutzer, die nicht zum Personal gehören."
-#: engine/core/docs/drf/viewsets.py:482
+#: engine/core/docs/drf/viewsets.py:523
msgid "delete an wishlist"
msgstr "Ein Attribut löschen"
-#: engine/core/docs/drf/viewsets.py:489
+#: engine/core/docs/drf/viewsets.py:530
msgid "rewrite an existing wishlist saving non-editables"
msgstr ""
"Umschreiben eines vorhandenen Attributs, wobei nicht editierbare Daten "
"gespeichert werden"
-#: engine/core/docs/drf/viewsets.py:496
+#: engine/core/docs/drf/viewsets.py:537
msgid "rewrite some fields of an existing wishlist saving non-editables"
msgstr ""
-"Umschreiben einiger Felder eines vorhandenen Attributs, um nicht editierbare"
-" Daten zu speichern"
+"Umschreiben einiger Felder eines vorhandenen Attributs, um nicht editierbare "
+"Daten zu speichern"
-#: engine/core/docs/drf/viewsets.py:503
+#: engine/core/docs/drf/viewsets.py:544
msgid "retrieve current pending wishlist of a user"
msgstr "Abruf der aktuellen Wunschliste eines Benutzers"
-#: engine/core/docs/drf/viewsets.py:504
+#: engine/core/docs/drf/viewsets.py:545
msgid "retrieves a current pending wishlist of an authenticated user"
msgstr ""
-"ruft eine aktuelle ausstehende Wunschliste eines authentifizierten Benutzers"
-" ab"
+"ruft eine aktuelle ausstehende Wunschliste eines authentifizierten Benutzers "
+"ab"
-#: engine/core/docs/drf/viewsets.py:514
+#: engine/core/docs/drf/viewsets.py:555
msgid "add product to wishlist"
msgstr "Ein Produkt zur Bestellung hinzufügen"
-#: engine/core/docs/drf/viewsets.py:515
+#: engine/core/docs/drf/viewsets.py:557
msgid "adds a product to an wishlist using the provided `product_uuid`"
msgstr ""
"Fügt ein Produkt mit der angegebenen `product_uuid` zu einer Wunschliste "
"hinzu"
-#: engine/core/docs/drf/viewsets.py:523
+#: engine/core/docs/drf/viewsets.py:566
msgid "remove product from wishlist"
msgstr "Ein Produkt von der Wunschliste entfernen"
-#: engine/core/docs/drf/viewsets.py:524
+#: engine/core/docs/drf/viewsets.py:568
msgid "removes a product from an wishlist using the provided `product_uuid`"
msgstr ""
"Entfernt ein Produkt aus einer Wunschliste unter Verwendung der angegebenen "
"`product_uuid`."
-#: engine/core/docs/drf/viewsets.py:532
+#: engine/core/docs/drf/viewsets.py:577
msgid "add many products to wishlist"
msgstr "Viele Produkte auf den Wunschzettel setzen"
-#: engine/core/docs/drf/viewsets.py:533
+#: engine/core/docs/drf/viewsets.py:579
msgid "adds many products to an wishlist using the provided `product_uuids`"
msgstr ""
"Fügt einer Wunschliste viele Produkte unter Verwendung der angegebenen "
"`product_uuids` hinzu"
-#: engine/core/docs/drf/viewsets.py:541
+#: engine/core/docs/drf/viewsets.py:588
msgid "remove many products from wishlist"
msgstr "Ein Produkt aus der Bestellung entfernen"
-#: engine/core/docs/drf/viewsets.py:542
+#: engine/core/docs/drf/viewsets.py:590
msgid ""
"removes many products from an wishlist using the provided `product_uuids`"
msgstr ""
"Entfernt viele Produkte aus einer Wunschliste unter Verwendung der "
"angegebenen `product_uuids`."
-#: engine/core/docs/drf/viewsets.py:549
+#: engine/core/docs/drf/viewsets.py:598
msgid ""
"Filter by one or more attribute name/value pairs. \n"
"• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n"
-"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n"
-"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n"
+"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, "
+"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, "
+"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n"
+"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), "
+"`true`/`false` for booleans, integers, floats; otherwise treated as "
+"string. \n"
"• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n"
"Examples: \n"
-"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n"
+"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\","
+"\"bluetooth\"]`, \n"
"`b64-description=icontains-aGVhdC1jb2xk`"
msgstr ""
"Filtern Sie nach einem oder mehreren Attributnamen/Wertpaaren. \n"
"- **Syntax**: `attr_name=Methode-Wert[;attr2=Methode2-Wert2]...`\n"
-"- **Methoden** (Standardwert ist \"icontains\", wenn nicht angegeben): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`\n"
-"- **Wert-Typisierung**: JSON wird zuerst versucht (damit man Listen/Dicts übergeben kann), `true`/`false` für Booleans, Integers, Floats; ansonsten als String behandelt. \n"
-"- Base64**: Präfix \"b64-\" für URL-sichere Base64-Kodierung des Rohwertes. \n"
+"- **Methoden** (Standardwert ist \"icontains\", wenn nicht angegeben): "
+"`iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, "
+"`istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, "
+"`gt`, `gte`, `in`\n"
+"- **Wert-Typisierung**: JSON wird zuerst versucht (damit man Listen/Dicts "
+"übergeben kann), `true`/`false` für Booleans, Integers, Floats; ansonsten "
+"als String behandelt. \n"
+"- Base64**: Präfix \"b64-\" für URL-sichere Base64-Kodierung des "
+"Rohwertes. \n"
"Beispiele: \n"
"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\", \"bluetooth\"]`,\n"
"`b64-description=icontains-aGVhdC1jb2xk`"
-#: engine/core/docs/drf/viewsets.py:568 engine/core/docs/drf/viewsets.py:569
+#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
msgid "list all products (simple view)"
msgstr "Alle Produkte auflisten (einfache Ansicht)"
-#: engine/core/docs/drf/viewsets.py:574
+#: engine/core/docs/drf/viewsets.py:623
msgid "(exact) Product UUID"
msgstr "(genaue) Produkt-UUID"
-#: engine/core/docs/drf/viewsets.py:581
+#: engine/core/docs/drf/viewsets.py:630
msgid ""
-"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n"
+"Comma-separated list of fields to sort by. Prefix with `-` for "
+"descending. \n"
"**Allowed:** uuid, rating, name, slug, created, modified, price, random"
msgstr ""
-"Durch Kommata getrennte Liste der Felder, nach denen sortiert werden soll. Präfix mit \"-\" für absteigend. \n"
+"Durch Kommata getrennte Liste der Felder, nach denen sortiert werden soll. "
+"Präfix mit \"-\" für absteigend. \n"
"**Erlaubt:** uuid, rating, name, slug, created, modified, price, random"
-#: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599
+#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
msgid "retrieve a single product (detailed view)"
msgstr "Ein einzelnes Produkt abrufen (Detailansicht)"
-#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634
-#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672
-#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710
+#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683
+#: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725
+#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763
msgid "Product UUID or slug"
msgstr "Produkt UUID oder Slug"
-#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
+#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
#: engine/core/graphene/dashboard_mutations/product.py:80
#: engine/core/graphene/dashboard_mutations/product.py:118
#: engine/core/graphene/dashboard_mutations/product.py:166
msgid "create a product"
msgstr "Ein Produkt erstellen"
-#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629
+#: engine/core/docs/drf/viewsets.py:677 engine/core/docs/drf/viewsets.py:678
msgid "rewrite an existing product, preserving non-editable fields"
msgstr ""
-"Umschreiben eines bestehenden Produkts unter Beibehaltung nicht editierbarer"
-" Felder"
+"Umschreiben eines bestehenden Produkts unter Beibehaltung nicht editierbarer "
+"Felder"
-#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
+#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:700
msgid ""
"update some fields of an existing product, preserving non-editable fields"
msgstr ""
"Einige Felder eines bestehenden Produkts aktualisieren, nicht editierbare "
"Felder beibehalten"
-#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
+#: engine/core/docs/drf/viewsets.py:719 engine/core/docs/drf/viewsets.py:720
msgid "delete a product"
msgstr "Ein Produkt löschen"
-#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686
+#: engine/core/docs/drf/viewsets.py:738 engine/core/docs/drf/viewsets.py:739
msgid "lists all permitted feedbacks for a product"
msgstr "listet alle zulässigen Rückmeldungen für ein Produkt auf"
-#: engine/core/docs/drf/viewsets.py:705
+#: engine/core/docs/drf/viewsets.py:758
msgid "returns a snapshot of the product's SEO meta data"
msgstr "Gibt einen Schnappschuss der SEO-Metadaten des Produkts zurück"
-#: engine/core/docs/drf/viewsets.py:726
+#: engine/core/docs/drf/viewsets.py:779
msgid "list all addresses"
msgstr "Alle Adressen auflisten"
-#: engine/core/docs/drf/viewsets.py:736
+#: engine/core/docs/drf/viewsets.py:789
msgid "retrieve a single address"
msgstr "Eine einzelne Adresse abrufen"
-#: engine/core/docs/drf/viewsets.py:746
+#: engine/core/docs/drf/viewsets.py:799
msgid "create a new address"
msgstr "Eine neue Adresse erstellen"
-#: engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:810
msgid "delete an address"
msgstr "Eine Adresse löschen"
-#: engine/core/docs/drf/viewsets.py:767
+#: engine/core/docs/drf/viewsets.py:820
msgid "update an entire address"
msgstr "Eine ganze Adresse aktualisieren"
-#: engine/core/docs/drf/viewsets.py:778
+#: engine/core/docs/drf/viewsets.py:831
msgid "partially update an address"
msgstr "Teilweise Aktualisierung einer Adresse"
-#: engine/core/docs/drf/viewsets.py:789
+#: engine/core/docs/drf/viewsets.py:842
msgid "autocomplete address suggestions"
msgstr "Autovervollständigung der Adresseingabe"
-#: engine/core/docs/drf/viewsets.py:794
+#: engine/core/docs/drf/viewsets.py:848
msgid "raw data query string, please append with data from geo-IP endpoint"
msgstr ""
-"docker compose exec app poetry run python manage.py deepl_translate -l en-gb"
-" -l ar-ar -l cs-cz -l da-dk -l de-de -l en-us -l es-es -l fr-fr -l hi-in -l "
-"it-it -l ja-jp -l kk-kz -l nl-nl -l pl -l pt-br -l ro-ro -l ru-ru -l zh-hans"
-" -a core -a geo -a payments -a vibes_auth -a blog"
+"docker compose exec app poetry run python manage.py deepl_translate -l en-gb "
+"-l ar-ar -l cs-cz -l da-dk -l de-de -l en-us -l es-es -l fr-fr -l hi-in -l "
+"it-it -l ja-jp -l kk-kz -l nl-nl -l pl -l pt-br -l ro-ro -l ru-ru -l zh-hans "
+"-a core -a geo -a payments -a vibes_auth -a blog"
-#: engine/core/docs/drf/viewsets.py:800
+#: engine/core/docs/drf/viewsets.py:855
msgid "limit the results amount, 1 < limit < 10, default: 5"
msgstr "begrenzt die Anzahl der Ergebnisse, 1 < Limit < 10, Standard: 5"
-#: engine/core/docs/drf/viewsets.py:816
+#: engine/core/docs/drf/viewsets.py:871
msgid "list all feedbacks (simple view)"
msgstr "alle Rückmeldungen auflisten (einfache Ansicht)"
-#: engine/core/docs/drf/viewsets.py:823
+#: engine/core/docs/drf/viewsets.py:881
msgid "retrieve a single feedback (detailed view)"
msgstr "eine einzelne Rückmeldung abrufen (detaillierte Ansicht)"
-#: engine/core/docs/drf/viewsets.py:830
+#: engine/core/docs/drf/viewsets.py:888
msgid "create a feedback"
msgstr "ein Feedback erstellen"
-#: engine/core/docs/drf/viewsets.py:837
+#: engine/core/docs/drf/viewsets.py:895
msgid "delete a feedback"
msgstr "eine Rückmeldung löschen"
-#: engine/core/docs/drf/viewsets.py:844
+#: engine/core/docs/drf/viewsets.py:902
msgid "rewrite an existing feedback saving non-editables"
msgstr ""
"Eine bestehende Kategorie umschreiben und dabei Nicht-Editierbares speichern"
-#: engine/core/docs/drf/viewsets.py:851
+#: engine/core/docs/drf/viewsets.py:909
msgid "rewrite some fields of an existing feedback saving non-editables"
msgstr ""
-"Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare"
-" Daten zu speichern"
+"Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare "
+"Daten zu speichern"
-#: engine/core/docs/drf/viewsets.py:861
+#: engine/core/docs/drf/viewsets.py:919
msgid "list all order–product relations (simple view)"
msgstr "alle Bestell-Produkt-Beziehungen auflisten (einfache Ansicht)"
-#: engine/core/docs/drf/viewsets.py:871
+#: engine/core/docs/drf/viewsets.py:929
msgid "retrieve a single order–product relation (detailed view)"
msgstr "eine einzelne Auftrag-Produkt-Relation abrufen (Detailansicht)"
-#: engine/core/docs/drf/viewsets.py:881
+#: engine/core/docs/drf/viewsets.py:939
msgid "create a new order–product relation"
msgstr "eine neue Auftrag-Produkt-Beziehung erstellen"
-#: engine/core/docs/drf/viewsets.py:891
+#: engine/core/docs/drf/viewsets.py:949
msgid "replace an existing order–product relation"
msgstr "eine bestehende Auftrag-Produkt-Relation ersetzen"
-#: engine/core/docs/drf/viewsets.py:901
+#: engine/core/docs/drf/viewsets.py:959
msgid "partially update an existing order–product relation"
msgstr "eine bestehende Auftrag-Produkt-Beziehung teilweise aktualisieren"
-#: engine/core/docs/drf/viewsets.py:911
+#: engine/core/docs/drf/viewsets.py:969
msgid "delete an order–product relation"
msgstr "eine Auftrag-Produkt-Beziehung löschen"
-#: engine/core/docs/drf/viewsets.py:921
+#: engine/core/docs/drf/viewsets.py:979
msgid "add or remove feedback on an order–product relation"
msgstr ""
"Feedback zu einer Bestellung-Produkt-Beziehung hinzufügen oder entfernen"
-#: engine/core/docs/drf/viewsets.py:938
+#: engine/core/docs/drf/viewsets.py:996
msgid "list all brands (simple view)"
msgstr "Alle Marken auflisten (einfache Ansicht)"
-#: engine/core/docs/drf/viewsets.py:945
+#: engine/core/docs/drf/viewsets.py:1003
msgid "retrieve a single brand (detailed view)"
msgstr "Abrufen einer einzelnen Marke (detaillierte Ansicht)"
-#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993
+#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051
msgid "Brand UUID or slug"
msgstr "Marke UUID oder Slug"
-#: engine/core/docs/drf/viewsets.py:960
+#: engine/core/docs/drf/viewsets.py:1018
msgid "create a brand"
msgstr "Eine Marke schaffen"
-#: engine/core/docs/drf/viewsets.py:967
+#: engine/core/docs/drf/viewsets.py:1025
msgid "delete a brand"
msgstr "Eine Marke löschen"
-#: engine/core/docs/drf/viewsets.py:974
+#: engine/core/docs/drf/viewsets.py:1032
msgid "rewrite an existing brand saving non-editables"
msgstr ""
"Eine bestehende Kategorie umschreiben und dabei Nicht-Editierbares speichern"
-#: engine/core/docs/drf/viewsets.py:981
+#: engine/core/docs/drf/viewsets.py:1039
msgid "rewrite some fields of an existing brand saving non-editables"
msgstr ""
-"Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare"
-" Daten zu speichern"
+"Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare "
+"Daten zu speichern"
-#: engine/core/docs/drf/viewsets.py:1006
+#: engine/core/docs/drf/viewsets.py:1064
msgid "list all vendors (simple view)"
msgstr "Alle Lieferanten auflisten (einfache Ansicht)"
-#: engine/core/docs/drf/viewsets.py:1013
+#: engine/core/docs/drf/viewsets.py:1074
msgid "retrieve a single vendor (detailed view)"
msgstr "Abruf eines einzelnen Lieferanten (Detailansicht)"
-#: engine/core/docs/drf/viewsets.py:1020
+#: engine/core/docs/drf/viewsets.py:1081
msgid "create a vendor"
msgstr "Einen Verkäufer erstellen"
-#: engine/core/docs/drf/viewsets.py:1027
+#: engine/core/docs/drf/viewsets.py:1088
msgid "delete a vendor"
msgstr "Einen Lieferanten löschen"
-#: engine/core/docs/drf/viewsets.py:1034
+#: engine/core/docs/drf/viewsets.py:1095
msgid "rewrite an existing vendor saving non-editables"
msgstr ""
"Eine bestehende Kategorie umschreiben und dabei Nicht-Editierbares speichern"
-#: engine/core/docs/drf/viewsets.py:1041
+#: engine/core/docs/drf/viewsets.py:1102
msgid "rewrite some fields of an existing vendor saving non-editables"
msgstr ""
-"Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare"
-" Daten zu speichern"
+"Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare "
+"Daten zu speichern"
-#: engine/core/docs/drf/viewsets.py:1051
+#: engine/core/docs/drf/viewsets.py:1112
msgid "list all product images (simple view)"
msgstr "Alle Produktbilder auflisten (einfache Ansicht)"
-#: engine/core/docs/drf/viewsets.py:1058
+#: engine/core/docs/drf/viewsets.py:1122
msgid "retrieve a single product image (detailed view)"
msgstr "Abrufen eines einzelnen Produktbildes (Detailansicht)"
-#: engine/core/docs/drf/viewsets.py:1065
+#: engine/core/docs/drf/viewsets.py:1129
msgid "create a product image"
msgstr "Ein Produktbild erstellen"
-#: engine/core/docs/drf/viewsets.py:1072
+#: engine/core/docs/drf/viewsets.py:1139
msgid "delete a product image"
msgstr "Ein Produktbild löschen"
-#: engine/core/docs/drf/viewsets.py:1079
+#: engine/core/docs/drf/viewsets.py:1146
msgid "rewrite an existing product image saving non-editables"
msgstr ""
"Eine bestehende Kategorie umschreiben und dabei Nicht-Editierbares speichern"
-#: engine/core/docs/drf/viewsets.py:1086
+#: engine/core/docs/drf/viewsets.py:1154
msgid "rewrite some fields of an existing product image saving non-editables"
msgstr ""
-"Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare"
-" Daten zu speichern"
+"Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare "
+"Daten zu speichern"
-#: engine/core/docs/drf/viewsets.py:1096
+#: engine/core/docs/drf/viewsets.py:1165
msgid "list all promo codes (simple view)"
msgstr "Alle Promo-Codes auflisten (einfache Ansicht)"
-#: engine/core/docs/drf/viewsets.py:1103
+#: engine/core/docs/drf/viewsets.py:1175
msgid "retrieve a single promo code (detailed view)"
msgstr "Einen einzelnen Promo-Code abrufen (Detailansicht)"
-#: engine/core/docs/drf/viewsets.py:1110
+#: engine/core/docs/drf/viewsets.py:1182
msgid "create a promo code"
msgstr "Einen Promo-Code erstellen"
-#: engine/core/docs/drf/viewsets.py:1117
+#: engine/core/docs/drf/viewsets.py:1189
msgid "delete a promo code"
msgstr "Einen Promo-Code löschen"
-#: engine/core/docs/drf/viewsets.py:1124
+#: engine/core/docs/drf/viewsets.py:1196
msgid "rewrite an existing promo code saving non-editables"
msgstr ""
"Eine bestehende Kategorie umschreiben und dabei Nicht-Editierbares speichern"
-#: engine/core/docs/drf/viewsets.py:1131
+#: engine/core/docs/drf/viewsets.py:1203
msgid "rewrite some fields of an existing promo code saving non-editables"
msgstr ""
-"Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare"
-" Daten zu speichern"
+"Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare "
+"Daten zu speichern"
-#: engine/core/docs/drf/viewsets.py:1141
+#: engine/core/docs/drf/viewsets.py:1213
msgid "list all promotions (simple view)"
msgstr "Alle Aktionen auflisten (einfache Ansicht)"
-#: engine/core/docs/drf/viewsets.py:1148
+#: engine/core/docs/drf/viewsets.py:1223
msgid "retrieve a single promotion (detailed view)"
msgstr "Abrufen einer einzelnen Aktion (Detailansicht)"
-#: engine/core/docs/drf/viewsets.py:1155
+#: engine/core/docs/drf/viewsets.py:1230
msgid "create a promotion"
msgstr "Eine Werbeaktion erstellen"
-#: engine/core/docs/drf/viewsets.py:1162
+#: engine/core/docs/drf/viewsets.py:1237
msgid "delete a promotion"
msgstr "Eine Aktion löschen"
-#: engine/core/docs/drf/viewsets.py:1169
+#: engine/core/docs/drf/viewsets.py:1244
msgid "rewrite an existing promotion saving non-editables"
msgstr ""
"Eine bestehende Kategorie umschreiben und dabei Nicht-Editierbares speichern"
-#: engine/core/docs/drf/viewsets.py:1176
+#: engine/core/docs/drf/viewsets.py:1251
msgid "rewrite some fields of an existing promotion saving non-editables"
msgstr ""
-"Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare"
-" Daten zu speichern"
+"Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare "
+"Daten zu speichern"
-#: engine/core/docs/drf/viewsets.py:1186
+#: engine/core/docs/drf/viewsets.py:1261
msgid "list all stocks (simple view)"
msgstr "Alle Bestände auflisten (einfache Ansicht)"
-#: engine/core/docs/drf/viewsets.py:1193
+#: engine/core/docs/drf/viewsets.py:1268
msgid "retrieve a single stock (detailed view)"
msgstr "Abruf einer einzelnen Aktie (Detailansicht)"
-#: engine/core/docs/drf/viewsets.py:1200
+#: engine/core/docs/drf/viewsets.py:1275
msgid "create a stock record"
msgstr "Einen Bestandssatz erstellen"
-#: engine/core/docs/drf/viewsets.py:1207
+#: engine/core/docs/drf/viewsets.py:1282
msgid "delete a stock record"
msgstr "Löschen eines Bestandsdatensatzes"
-#: engine/core/docs/drf/viewsets.py:1214
+#: engine/core/docs/drf/viewsets.py:1289
msgid "rewrite an existing stock record saving non-editables"
msgstr ""
"Eine bestehende Kategorie umschreiben und dabei Nicht-Editierbares speichern"
-#: engine/core/docs/drf/viewsets.py:1221
+#: engine/core/docs/drf/viewsets.py:1297
msgid "rewrite some fields of an existing stock record saving non-editables"
msgstr ""
-"Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare"
-" Daten zu speichern"
+"Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare "
+"Daten zu speichern"
-#: engine/core/docs/drf/viewsets.py:1231
+#: engine/core/docs/drf/viewsets.py:1308
msgid "list all product tags (simple view)"
msgstr "Alle Produkt-Tags auflisten (einfache Ansicht)"
-#: engine/core/docs/drf/viewsets.py:1238
+#: engine/core/docs/drf/viewsets.py:1318
msgid "retrieve a single product tag (detailed view)"
msgstr "Ein einzelnes Produkt-Tag abrufen (detaillierte Ansicht)"
-#: engine/core/docs/drf/viewsets.py:1245
+#: engine/core/docs/drf/viewsets.py:1325
msgid "create a product tag"
msgstr "Ein Produkt-Tag erstellen"
-#: engine/core/docs/drf/viewsets.py:1252
+#: engine/core/docs/drf/viewsets.py:1335
msgid "delete a product tag"
msgstr "Ein Produkt-Tag löschen"
-#: engine/core/docs/drf/viewsets.py:1259
+#: engine/core/docs/drf/viewsets.py:1342
msgid "rewrite an existing product tag saving non-editables"
msgstr ""
"Eine bestehende Kategorie umschreiben und dabei Nicht-Editierbares speichern"
-#: engine/core/docs/drf/viewsets.py:1266
+#: engine/core/docs/drf/viewsets.py:1350
msgid "rewrite some fields of an existing product tag saving non-editables"
msgstr ""
-"Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare"
-" Daten zu speichern"
+"Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare "
+"Daten zu speichern"
-#: engine/core/elasticsearch/__init__.py:122
-#: engine/core/elasticsearch/__init__.py:570
+#: engine/core/elasticsearch/__init__.py:127
+#: engine/core/elasticsearch/__init__.py:627
msgid "no search term provided."
msgstr "Kein Suchbegriff angegeben."
-#: engine/core/filters.py:69 engine/core/filters.py:426
-#: engine/core/filters.py:553
+#: engine/core/filters.py:78 engine/core/filters.py:484
+#: engine/core/filters.py:625
msgid "Search"
msgstr "Suche"
-#: engine/core/filters.py:70 engine/core/filters.py:583
-#: engine/core/filters.py:612
+#: engine/core/filters.py:79 engine/core/filters.py:662
+#: engine/core/filters.py:691
msgid "UUID"
msgstr "UUID"
-#: engine/core/filters.py:71 engine/core/filters.py:428
-#: engine/core/filters.py:555
+#: engine/core/filters.py:80 engine/core/filters.py:487
+#: engine/core/filters.py:627
msgid "Name"
msgstr "Name"
-#: engine/core/filters.py:72 engine/core/filters.py:557
+#: engine/core/filters.py:82 engine/core/filters.py:630
msgid "Categories"
msgstr "Kategorien"
-#: engine/core/filters.py:74
+#: engine/core/filters.py:86
msgid "Categories Slugs"
msgstr "Kategorien Schnecken"
-#: engine/core/filters.py:75 engine/core/filters.py:436
+#: engine/core/filters.py:88 engine/core/filters.py:495
msgid "Tags"
msgstr "Tags"
-#: engine/core/filters.py:76
+#: engine/core/filters.py:90
msgid "Min Price"
msgstr "Mindestpreis"
-#: engine/core/filters.py:77
+#: engine/core/filters.py:93
msgid "Max Price"
msgstr "Maximaler Preis"
-#: engine/core/filters.py:78
+#: engine/core/filters.py:95
msgid "Is Active"
msgstr "Ist aktiv"
-#: engine/core/filters.py:79
+#: engine/core/filters.py:96
msgid "Brand"
msgstr "Marke"
-#: engine/core/filters.py:80
+#: engine/core/filters.py:97
msgid "Attributes"
msgstr "Attribute"
-#: engine/core/filters.py:81
+#: engine/core/filters.py:99
msgid "Quantity"
msgstr "Menge"
-#: engine/core/filters.py:82 engine/core/filters.py:430
-#: engine/core/filters.py:556 engine/core/models.py:321
-#: engine/core/models.py:489 engine/core/models.py:644
+#: engine/core/filters.py:101 engine/core/filters.py:489
+#: engine/core/filters.py:628 engine/core/models.py:327
+#: engine/core/models.py:508 engine/core/models.py:665
msgid "Slug"
msgstr "Schnecke"
-#: engine/core/filters.py:83
+#: engine/core/filters.py:102
msgid "Is Digital"
msgstr "Is Digital"
-#: engine/core/filters.py:84
+#: engine/core/filters.py:104
msgid "Include sub-categories"
msgstr "Unterkategorien einbeziehen"
-#: engine/core/filters.py:87
+#: engine/core/filters.py:108
msgid "Include personal ordered"
msgstr "Persönlich bestellte Produkte einbeziehen"
-#: engine/core/filters.py:89 engine/core/models.py:648
+#: engine/core/filters.py:110 engine/core/models.py:669
msgid "SKU"
msgstr "SKU"
-#: engine/core/filters.py:184
+#: engine/core/filters.py:212
msgid "there must be a category_uuid to use include_subcategories flag"
msgstr ""
-"Es muss eine category_uuid vorhanden sein, um das Flag include_subcategories"
-" zu verwenden"
+"Es muss eine category_uuid vorhanden sein, um das Flag include_subcategories "
+"zu verwenden"
-#: engine/core/filters.py:353
+#: engine/core/filters.py:398
msgid "Search (ID, product name or part number)"
msgstr "Suche (ID, Produktname oder Teilenummer)"
-#: engine/core/filters.py:356
+#: engine/core/filters.py:402
msgid "Bought after (inclusive)"
msgstr "Gekauft nach (einschließlich)"
-#: engine/core/filters.py:357
+#: engine/core/filters.py:405
msgid "Bought before (inclusive)"
msgstr "Gekauft vor (einschließlich)"
-#: engine/core/filters.py:360 engine/core/filters.py:407
-#: engine/core/filters.py:614
+#: engine/core/filters.py:410 engine/core/filters.py:461
+#: engine/core/filters.py:696
msgid "User email"
msgstr "Benutzer-E-Mail"
-#: engine/core/filters.py:361 engine/core/filters.py:408
-#: engine/core/filters.py:592 engine/core/filters.py:613
+#: engine/core/filters.py:413 engine/core/filters.py:464
+#: engine/core/filters.py:671 engine/core/filters.py:693
msgid "User UUID"
msgstr "User UUID"
-#: engine/core/filters.py:362
+#: engine/core/filters.py:415
msgid "Status"
msgstr "Status"
-#: engine/core/filters.py:366
+#: engine/core/filters.py:419
msgid "Human Readable ID"
msgstr "Human Readable ID"
-#: engine/core/filters.py:429
+#: engine/core/filters.py:488
msgid "Parent"
msgstr "Elternteil"
-#: engine/core/filters.py:433
+#: engine/core/filters.py:492
msgid "Whole category(has at least 1 product or not)"
msgstr "Gesamte Kategorie (mit oder ohne mindestens 1 Produkt)"
-#: engine/core/filters.py:437
+#: engine/core/filters.py:496
msgid "Level"
msgstr "Ebene"
-#: engine/core/filters.py:587
+#: engine/core/filters.py:666
msgid "Product UUID"
msgstr "Produkt UUID"
-#: engine/core/graphene/mutations.py:40
+#: engine/core/graphene/mutations.py:41
msgid "key to look for in or set into the cache"
msgstr "Schlüssel, der im Cache zu suchen oder in den Cache zu legen ist"
-#: engine/core/graphene/mutations.py:41
+#: engine/core/graphene/mutations.py:43
msgid "data to store in cache"
msgstr "Im Cache zu speichernde Daten"
-#: engine/core/graphene/mutations.py:44
+#: engine/core/graphene/mutations.py:46
msgid "timeout in seconds to set the data for into the cache"
msgstr "Timeout in Sekunden, um die Daten in den Cache zu stellen"
-#: engine/core/graphene/mutations.py:47
+#: engine/core/graphene/mutations.py:49
msgid "cached data"
msgstr "Zwischengespeicherte Daten"
-#: engine/core/graphene/mutations.py:62
+#: engine/core/graphene/mutations.py:64
msgid "camelized JSON data from the requested URL"
msgstr "Camelized JSON-Daten aus der angeforderten URL"
-#: engine/core/graphene/mutations.py:67 engine/core/views.py:257
+#: engine/core/graphene/mutations.py:69 engine/core/views.py:249
msgid "only URLs starting with http(s):// are allowed"
msgstr "Nur URLs, die mit http(s):// beginnen, sind zulässig"
-#: engine/core/graphene/mutations.py:83
+#: engine/core/graphene/mutations.py:87
msgid "add a product to the order"
msgstr "Ein Produkt zur Bestellung hinzufügen"
-#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131
-#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287
+#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139
+#: engine/core/graphene/mutations.py:255 engine/core/graphene/mutations.py:307
#, python-brace-format
msgid "order {order_uuid} not found"
msgstr "Auftrag {order_uuid} nicht gefunden!"
-#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159
+#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167
msgid "remove a product from the order"
msgstr "Ein Produkt aus der Bestellung entfernen"
-#: engine/core/graphene/mutations.py:137
+#: engine/core/graphene/mutations.py:145
msgid "remove all products from the order"
msgstr "Alle Produkte aus der Bestellung entfernen"
-#: engine/core/graphene/mutations.py:182
+#: engine/core/graphene/mutations.py:190
msgid "buy an order"
msgstr "Eine Bestellung kaufen"
-#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265
+#: engine/core/graphene/mutations.py:221 engine/core/graphene/mutations.py:283
msgid "please provide either order_uuid or order_hr_id - mutually exclusive"
msgstr ""
"Bitte geben Sie entweder order_uuid oder order_hr_id an - beide schließen "
"sich gegenseitig aus!"
-#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501
-#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712
+#: engine/core/graphene/mutations.py:250 engine/core/graphene/mutations.py:525
+#: engine/core/graphene/mutations.py:574 engine/core/viewsets.py:753
msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr "Von der Methode order.buy() kam der falsche Typ: {type(instance)!s}"
-#: engine/core/graphene/mutations.py:245
+#: engine/core/graphene/mutations.py:261
msgid "perform an action on a list of products in the order"
msgstr "Eine Aktion für eine Liste von Produkten in der Bestellung ausführen"
-#: engine/core/graphene/mutations.py:250
+#: engine/core/graphene/mutations.py:266
msgid "remove/add"
msgstr "Entfernen/Hinzufügen"
-#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323
+#: engine/core/graphene/mutations.py:302 engine/core/graphene/mutations.py:343
msgid "action must be either add or remove"
msgstr "Aktion muss entweder \"Hinzufügen\" oder \"Entfernen\" sein!"
-#: engine/core/graphene/mutations.py:293
+#: engine/core/graphene/mutations.py:313
msgid "perform an action on a list of products in the wishlist"
-msgstr ""
-"Ausführen einer Aktion für eine Liste von Produkten in der Wunschliste"
+msgstr "Ausführen einer Aktion für eine Liste von Produkten in der Wunschliste"
-#: engine/core/graphene/mutations.py:311
+#: engine/core/graphene/mutations.py:331
msgid "please provide wishlist_uuid value"
msgstr "Bitte geben Sie den Wert `wishlist_uuid` an."
-#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404
-#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460
-#: engine/core/graphene/mutations.py:504
+#: engine/core/graphene/mutations.py:348 engine/core/graphene/mutations.py:424
+#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480
+#: engine/core/graphene/mutations.py:530
#, python-brace-format
msgid "wishlist {wishlist_uuid} not found"
msgstr "Wishlist {wishlist_uuid} nicht gefunden!"
-#: engine/core/graphene/mutations.py:382
+#: engine/core/graphene/mutations.py:402
msgid "add a product to the wishlist"
msgstr "Ein Produkt zur Bestellung hinzufügen"
-#: engine/core/graphene/mutations.py:410
+#: engine/core/graphene/mutations.py:430
msgid "remove a product from the wishlist"
msgstr "Ein Produkt aus der Bestellung entfernen"
-#: engine/core/graphene/mutations.py:438
+#: engine/core/graphene/mutations.py:458
msgid "remove all products from the wishlist"
msgstr "Ein Produkt aus der Bestellung entfernen"
-#: engine/core/graphene/mutations.py:466
+#: engine/core/graphene/mutations.py:486
msgid "buy all products from the wishlist"
msgstr "Ein Produkt aus der Bestellung entfernen"
-#: engine/core/graphene/mutations.py:510
+#: engine/core/graphene/mutations.py:536
msgid "buy a product"
msgstr "Eine Bestellung kaufen"
-#: engine/core/graphene/mutations.py:516
+#: engine/core/graphene/mutations.py:543
msgid ""
-"please send the attributes as the string formatted like "
-"attr1=value1,attr2=value2"
+"please send the attributes as the string formatted like attr1=value1,"
+"attr2=value2"
msgstr ""
"Bitte senden Sie die Attribute als String im Format attr1=wert1,attr2=wert2"
-#: engine/core/graphene/mutations.py:549
+#: engine/core/graphene/mutations.py:581
msgid "add or delete a feedback for orderproduct"
msgstr ""
"Feedback zu einer Bestellung-Produkt-Beziehung hinzufügen oder entfernen"
-#: engine/core/graphene/mutations.py:573
+#: engine/core/graphene/mutations.py:607
msgid "action must be either `add` or `remove`"
msgstr "Aktion muss entweder `Add` oder `remove` sein!"
-#: engine/core/graphene/mutations.py:576
+#: engine/core/graphene/mutations.py:610
#, python-brace-format
msgid "order product {order_product_uuid} not found"
msgstr "Bestellprodukt {order_product_uuid} nicht gefunden!"
-#: engine/core/graphene/mutations.py:582
+#: engine/core/graphene/mutations.py:617
msgid "original address string provided by the user"
msgstr "Vom Benutzer angegebene Originaladresse"
-#: engine/core/graphene/mutations.py:618 engine/core/models.py:955
-#: engine/core/models.py:968 engine/core/models.py:1383
-#: engine/core/models.py:1412 engine/core/models.py:1437
-#: engine/core/viewsets.py:715
+#: engine/core/graphene/mutations.py:654 engine/core/models.py:978
+#: engine/core/models.py:991 engine/core/models.py:1435
+#: engine/core/models.py:1466 engine/core/models.py:1497
+#: engine/core/viewsets.py:760
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr "{name} existiert nicht: {uuid}!"
-#: engine/core/graphene/mutations.py:632
+#: engine/core/graphene/mutations.py:668
msgid "limit must be between 1 and 10"
msgstr "Der Grenzwert muss zwischen 1 und 10 liegen."
-#: engine/core/graphene/mutations.py:681
+#: engine/core/graphene/mutations.py:717
msgid "elasticsearch - works like a charm"
msgstr "ElasticSearch - funktioniert wie ein Zauber"
#: engine/core/graphene/object_types.py:82
-#: engine/core/graphene/object_types.py:370
-#: engine/core/graphene/object_types.py:417 engine/core/models.py:772
-#: engine/core/models.py:1250 engine/core/models.py:1897
+#: engine/core/graphene/object_types.py:417
+#: engine/core/graphene/object_types.py:468 engine/core/models.py:795
+#: engine/core/models.py:1289 engine/core/models.py:2021
msgid "attributes"
msgstr "Attribute"
@@ -1305,93 +1314,91 @@ msgid "groups of attributes"
msgstr "Gruppen von Attributen"
#: engine/core/graphene/object_types.py:116
-#: engine/core/graphene/object_types.py:193
-#: engine/core/graphene/object_types.py:223 engine/core/models.py:432
+#: engine/core/graphene/object_types.py:214
+#: engine/core/graphene/object_types.py:252 engine/core/models.py:451
msgid "categories"
msgstr "Kategorien"
-#: engine/core/graphene/object_types.py:124 engine/core/models.py:503
+#: engine/core/graphene/object_types.py:132 engine/core/models.py:522
msgid "brands"
msgstr "Marken"
-#: engine/core/graphene/object_types.py:195
+#: engine/core/graphene/object_types.py:216
msgid "category image url"
msgstr "Kategorien"
-#: engine/core/graphene/object_types.py:196
-#: engine/core/graphene/object_types.py:317 engine/core/models.py:283
+#: engine/core/graphene/object_types.py:217
+#: engine/core/graphene/object_types.py:362 engine/core/models.py:289
msgid "markup percentage"
msgstr "Markup Percentage"
-#: engine/core/graphene/object_types.py:199
+#: engine/core/graphene/object_types.py:221
msgid "which attributes and values can be used for filtering this category."
msgstr ""
"Welche Attribute und Werte können für die Filterung dieser Kategorie "
"verwendet werden."
-#: engine/core/graphene/object_types.py:203
-msgid ""
-"minimum and maximum prices for products in this category, if available."
+#: engine/core/graphene/object_types.py:227
+msgid "minimum and maximum prices for products in this category, if available."
msgstr ""
-"Mindest- und Höchstpreise für Produkte in dieser Kategorie, sofern "
-"verfügbar."
+"Mindest- und Höchstpreise für Produkte in dieser Kategorie, sofern verfügbar."
-#: engine/core/graphene/object_types.py:205
+#: engine/core/graphene/object_types.py:231
msgid "tags for this category"
msgstr "Tags für diese Kategorie"
-#: engine/core/graphene/object_types.py:206
+#: engine/core/graphene/object_types.py:234
msgid "products in this category"
msgstr "Produkte in dieser Kategorie"
-#: engine/core/graphene/object_types.py:324 engine/core/models.py:188
+#: engine/core/graphene/object_types.py:369 engine/core/models.py:194
msgid "vendors"
msgstr "Anbieter"
-#: engine/core/graphene/object_types.py:328
+#: engine/core/graphene/object_types.py:373
msgid "Latitude (Y coordinate)"
msgstr "Breitengrad (Y-Koordinate)"
-#: engine/core/graphene/object_types.py:329
+#: engine/core/graphene/object_types.py:374
msgid "Longitude (X coordinate)"
msgstr "Längengrad (X-Koordinate)"
-#: engine/core/graphene/object_types.py:358
+#: engine/core/graphene/object_types.py:403
msgid "comment"
msgstr "Wie"
-#: engine/core/graphene/object_types.py:359
-#: engine/core/graphene/object_types.py:483
+#: engine/core/graphene/object_types.py:405
+#: engine/core/graphene/object_types.py:539
msgid "rating value from 1 to 10, inclusive, or 0 if not set."
msgstr ""
"Bewertungswert von 1 bis einschließlich 10 oder 0, wenn nicht festgelegt."
-#: engine/core/graphene/object_types.py:366
+#: engine/core/graphene/object_types.py:413
msgid "represents feedback from a user."
msgstr "Stellt das Feedback eines Benutzers dar."
-#: engine/core/graphene/object_types.py:371
-#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244
+#: engine/core/graphene/object_types.py:418
+#: engine/core/graphene/object_types.py:469 engine/core/models.py:1283
msgid "notifications"
msgstr "Benachrichtigungen"
-#: engine/core/graphene/object_types.py:372
+#: engine/core/graphene/object_types.py:420
msgid "download url for this order product if applicable"
msgstr "Download-Url für dieses Bestellprodukt, falls zutreffend"
-#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736
+#: engine/core/graphene/object_types.py:422 engine/core/models.py:1848
msgid "feedback"
msgstr "Rückmeldung"
-#: engine/core/graphene/object_types.py:407
+#: engine/core/graphene/object_types.py:456
msgid "a list of order products in this order"
msgstr "Eine Liste der bestellten Produkte in dieser Reihenfolge"
-#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214
+#: engine/core/graphene/object_types.py:458 engine/core/models.py:1253
msgid "billing address"
msgstr "Rechnungsadresse"
-#: engine/core/graphene/object_types.py:412
+#: engine/core/graphene/object_types.py:462
msgid ""
"shipping address for this order, leave blank if same as billing address or "
"if not applicable"
@@ -1399,53 +1406,53 @@ msgstr ""
"Lieferadresse für diese Bestellung, leer lassen, wenn sie mit der "
"Rechnungsadresse übereinstimmt oder nicht zutrifft"
-#: engine/core/graphene/object_types.py:414
+#: engine/core/graphene/object_types.py:465
msgid "total price of this order"
msgstr "Gesamtpreis für diese Bestellung"
-#: engine/core/graphene/object_types.py:415
+#: engine/core/graphene/object_types.py:466
msgid "total quantity of products in order"
msgstr "Gesamtmenge der bestellten Produkte"
-#: engine/core/graphene/object_types.py:416
+#: engine/core/graphene/object_types.py:467
msgid "are all products in the order digital"
msgstr "Sind alle Produkte in der Bestellung digital"
-#: engine/core/graphene/object_types.py:419
+#: engine/core/graphene/object_types.py:471
msgid "transactions for this order"
msgstr "Vorgänge für diesen Auftrag"
-#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278
+#: engine/core/graphene/object_types.py:491 engine/core/models.py:1317
msgid "orders"
msgstr "Bestellungen"
-#: engine/core/graphene/object_types.py:459
+#: engine/core/graphene/object_types.py:512
msgid "image url"
msgstr "Bild URL"
-#: engine/core/graphene/object_types.py:466
+#: engine/core/graphene/object_types.py:519
msgid "product's images"
msgstr "Bilder des Produkts"
-#: engine/core/graphene/object_types.py:473 engine/core/models.py:431
-#: engine/core/models.py:586
+#: engine/core/graphene/object_types.py:526 engine/core/models.py:450
+#: engine/core/models.py:607
msgid "category"
msgstr "Kategorie"
-#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737
+#: engine/core/graphene/object_types.py:528 engine/core/models.py:1849
msgid "feedbacks"
msgstr "Rückmeldungen"
-#: engine/core/graphene/object_types.py:476 engine/core/models.py:502
-#: engine/core/models.py:595
+#: engine/core/graphene/object_types.py:529 engine/core/models.py:521
+#: engine/core/models.py:616
msgid "brand"
msgstr "Marke"
-#: engine/core/graphene/object_types.py:477 engine/core/models.py:106
+#: engine/core/graphene/object_types.py:531 engine/core/models.py:106
msgid "attribute groups"
msgstr "Attribut-Gruppen"
-#: engine/core/graphene/object_types.py:478
+#: engine/core/graphene/object_types.py:533
#: engine/core/templates/digital_order_created_email.html:111
#: engine/core/templates/digital_order_delivered_email.html:109
#: engine/core/templates/shipped_order_created_email.html:109
@@ -1453,7 +1460,7 @@ msgstr "Attribut-Gruppen"
msgid "price"
msgstr "Preis"
-#: engine/core/graphene/object_types.py:479
+#: engine/core/graphene/object_types.py:534
#: engine/core/templates/digital_order_created_email.html:110
#: engine/core/templates/digital_order_delivered_email.html:108
#: engine/core/templates/shipped_order_created_email.html:108
@@ -1461,39 +1468,39 @@ msgstr "Preis"
msgid "quantity"
msgstr "Menge"
-#: engine/core/graphene/object_types.py:480
+#: engine/core/graphene/object_types.py:535
msgid "number of feedbacks"
msgstr "Anzahl der Rückmeldungen"
-#: engine/core/graphene/object_types.py:481
+#: engine/core/graphene/object_types.py:536
msgid "only available for personal orders"
msgstr "Produkte nur für persönliche Bestellungen verfügbar"
-#: engine/core/graphene/object_types.py:484
+#: engine/core/graphene/object_types.py:541
msgid "discount price"
msgstr "Rabattierter Preis"
-#: engine/core/graphene/object_types.py:508 engine/core/models.py:658
+#: engine/core/graphene/object_types.py:565 engine/core/models.py:679
msgid "products"
msgstr "Produkte"
-#: engine/core/graphene/object_types.py:611
+#: engine/core/graphene/object_types.py:675
msgid "promocodes"
msgstr "Promocodes"
-#: engine/core/graphene/object_types.py:621
+#: engine/core/graphene/object_types.py:690
msgid "products on sale"
msgstr "Zum Verkauf stehende Produkte"
-#: engine/core/graphene/object_types.py:628 engine/core/models.py:904
+#: engine/core/graphene/object_types.py:698 engine/core/models.py:927
msgid "promotions"
msgstr "Werbeaktionen"
-#: engine/core/graphene/object_types.py:632 engine/core/models.py:187
+#: engine/core/graphene/object_types.py:702 engine/core/models.py:193
msgid "vendor"
msgstr "Anbieter"
-#: engine/core/graphene/object_types.py:633 engine/core/models.py:657
+#: engine/core/graphene/object_types.py:703 engine/core/models.py:678
#: engine/core/templates/digital_order_created_email.html:109
#: engine/core/templates/digital_order_delivered_email.html:107
#: engine/core/templates/shipped_order_created_email.html:107
@@ -1501,99 +1508,99 @@ msgstr "Anbieter"
msgid "product"
msgstr "Produkt"
-#: engine/core/graphene/object_types.py:644 engine/core/models.py:927
+#: engine/core/graphene/object_types.py:715 engine/core/models.py:950
msgid "wishlisted products"
msgstr "Auf dem Wunschzettel stehende Produkte"
-#: engine/core/graphene/object_types.py:650 engine/core/models.py:944
+#: engine/core/graphene/object_types.py:722 engine/core/models.py:967
msgid "wishlists"
msgstr "Wunschzettel"
-#: engine/core/graphene/object_types.py:654
+#: engine/core/graphene/object_types.py:727
msgid "tagged products"
msgstr "Markierte Produkte"
-#: engine/core/graphene/object_types.py:661 engine/core/models.py:224
-#: engine/core/models.py:601
+#: engine/core/graphene/object_types.py:735 engine/core/models.py:230
+#: engine/core/models.py:622
msgid "product tags"
msgstr "Produkt-Tags"
-#: engine/core/graphene/object_types.py:665
+#: engine/core/graphene/object_types.py:740
msgid "tagged categories"
msgstr "Markierte Kategorien"
-#: engine/core/graphene/object_types.py:672
+#: engine/core/graphene/object_types.py:748
msgid "categories tags"
msgstr "Kategorien'-Tags"
-#: engine/core/graphene/object_types.py:676
+#: engine/core/graphene/object_types.py:752
msgid "project name"
msgstr "Name des Projekts"
-#: engine/core/graphene/object_types.py:677
+#: engine/core/graphene/object_types.py:753
msgid "company name"
msgstr "Name des Unternehmens"
-#: engine/core/graphene/object_types.py:678
+#: engine/core/graphene/object_types.py:754
msgid "company address"
msgstr "Adresse des Unternehmens"
-#: engine/core/graphene/object_types.py:679
+#: engine/core/graphene/object_types.py:755
msgid "company phone number"
msgstr "Telefonnummer des Unternehmens"
-#: engine/core/graphene/object_types.py:680
+#: engine/core/graphene/object_types.py:758
msgid "email from, sometimes it must be used instead of host user value"
msgstr ""
"E-Mail von\", muss manchmal anstelle des Host-Benutzerwerts verwendet werden"
-#: engine/core/graphene/object_types.py:681
+#: engine/core/graphene/object_types.py:761
msgid "email host user"
msgstr "E-Mail-Host-Benutzer"
-#: engine/core/graphene/object_types.py:682
+#: engine/core/graphene/object_types.py:762
msgid "maximum amount for payment"
msgstr "Höchstbetrag für die Zahlung"
-#: engine/core/graphene/object_types.py:683
+#: engine/core/graphene/object_types.py:763
msgid "minimum amount for payment"
msgstr "Mindestbetrag für die Zahlung"
-#: engine/core/graphene/object_types.py:684
+#: engine/core/graphene/object_types.py:764
msgid "analytics data"
msgstr "Analytische Daten"
-#: engine/core/graphene/object_types.py:685
+#: engine/core/graphene/object_types.py:765
msgid "advertisement data"
msgstr "Advertisement data"
-#: engine/core/graphene/object_types.py:688
+#: engine/core/graphene/object_types.py:768
msgid "company configuration"
msgstr "Konfiguration"
-#: engine/core/graphene/object_types.py:692
+#: engine/core/graphene/object_types.py:772
msgid "language code"
msgstr "Sprachcode"
-#: engine/core/graphene/object_types.py:693
+#: engine/core/graphene/object_types.py:773
msgid "language name"
msgstr "Name der Sprache"
-#: engine/core/graphene/object_types.py:694
+#: engine/core/graphene/object_types.py:774
msgid "language flag, if exists :)"
msgstr "Sprachflagge, falls vorhanden :)"
-#: engine/core/graphene/object_types.py:697
+#: engine/core/graphene/object_types.py:777
msgid "supported languages"
msgstr "Eine Liste der unterstützten Sprachen abrufen"
-#: engine/core/graphene/object_types.py:728
-#: engine/core/graphene/object_types.py:729
-#: engine/core/graphene/object_types.py:730
+#: engine/core/graphene/object_types.py:809
+#: engine/core/graphene/object_types.py:812
+#: engine/core/graphene/object_types.py:815
msgid "products search results"
msgstr "Suchergebnisse für Produkte"
-#: engine/core/graphene/object_types.py:731
+#: engine/core/graphene/object_types.py:817
msgid "posts search results"
msgstr "Suchergebnisse für Produkte"
@@ -1604,11 +1611,11 @@ msgid ""
"parent group, forming a hierarchical structure. This can be useful for "
"categorizing and managing attributes more effectively in acomplex system."
msgstr ""
-"Stellt eine Gruppe von Attributen dar, die hierarchisch aufgebaut sein kann."
-" Diese Klasse wird verwendet, um Attributgruppen zu verwalten und zu "
+"Stellt eine Gruppe von Attributen dar, die hierarchisch aufgebaut sein kann. "
+"Diese Klasse wird verwendet, um Attributgruppen zu verwalten und zu "
"organisieren. Eine Attributgruppe kann eine übergeordnete Gruppe haben, die "
-"eine hierarchische Struktur bildet. Dies kann nützlich sein, um Attribute in"
-" einem komplexen System effektiver zu kategorisieren und zu verwalten."
+"eine hierarchische Struktur bildet. Dies kann nützlich sein, um Attribute in "
+"einem komplexen System effektiver zu kategorisieren und zu verwalten."
#: engine/core/models.py:91
msgid "parent of this group"
@@ -1622,7 +1629,7 @@ msgstr "Übergeordnete Attributgruppe"
msgid "attribute group's name"
msgstr "Name der Attributgruppe"
-#: engine/core/models.py:105 engine/core/models.py:734
+#: engine/core/models.py:105 engine/core/models.py:755
msgid "attribute group"
msgstr "Attribut-Gruppe"
@@ -1638,58 +1645,58 @@ msgid ""
msgstr ""
"Stellt eine Verkäuferentität dar, die Informationen über externe Verkäufer "
"und deren Interaktionsanforderungen speichern kann. Die Klasse Vendor wird "
-"zur Definition und Verwaltung von Informationen über einen externen Anbieter"
-" verwendet. Sie speichert den Namen des Anbieters, die für die Kommunikation"
-" erforderlichen Authentifizierungsdaten und den prozentualen Aufschlag, der "
+"zur Definition und Verwaltung von Informationen über einen externen Anbieter "
+"verwendet. Sie speichert den Namen des Anbieters, die für die Kommunikation "
+"erforderlichen Authentifizierungsdaten und den prozentualen Aufschlag, der "
"auf die vom Anbieter abgerufenen Produkte angewendet wird. Dieses Modell "
"verwaltet auch zusätzliche Metadaten und Einschränkungen, wodurch es sich "
"für die Verwendung in Systemen eignet, die mit Drittanbietern interagieren."
-#: engine/core/models.py:124
+#: engine/core/models.py:125
msgid "stores credentials and endpoints required for vendor communication"
msgstr ""
"Speichert Anmeldeinformationen und Endpunkte, die für die API-Kommunikation "
"des Anbieters erforderlich sind"
-#: engine/core/models.py:125
+#: engine/core/models.py:127
msgid "authentication info"
msgstr "Informationen zur Authentifizierung"
-#: engine/core/models.py:130
+#: engine/core/models.py:132
msgid "define the markup for products retrieved from this vendor"
msgstr ""
"Definieren Sie den Aufschlag für Produkte, die von diesem Lieferanten "
"bezogen werden"
-#: engine/core/models.py:131
+#: engine/core/models.py:133
msgid "vendor markup percentage"
msgstr "Prozentualer Aufschlag des Lieferanten"
-#: engine/core/models.py:135
+#: engine/core/models.py:137
msgid "name of this vendor"
msgstr "Name dieses Anbieters"
-#: engine/core/models.py:136
+#: engine/core/models.py:138
msgid "vendor name"
msgstr "Name des Anbieters"
-#: engine/core/models.py:147
+#: engine/core/models.py:153
msgid "response file"
msgstr "Antwortdatei"
-#: engine/core/models.py:148
+#: engine/core/models.py:154
msgid "vendor's last processing response"
msgstr "die letzte Verarbeitungsantwort des Lieferanten"
-#: engine/core/models.py:154
+#: engine/core/models.py:160
msgid "vendor's integration file path"
msgstr "Pfad der Integrationsdatei des Anbieters"
-#: engine/core/models.py:155
+#: engine/core/models.py:161
msgid "integration path"
msgstr "Integrationspfad"
-#: engine/core/models.py:197
+#: engine/core/models.py:203
msgid ""
"Represents a product tag used for classifying or identifying products. The "
"ProductTag class is designed to uniquely identify and classify products "
@@ -1697,34 +1704,34 @@ msgid ""
"display name. It supports operations exported through mixins and provides "
"metadata customization for administrative purposes."
msgstr ""
-"Stellt ein Produkt-Tag dar, das zur Klassifizierung oder Identifizierung von"
-" Produkten verwendet wird. Die Klasse ProductTag dient der eindeutigen "
-"Identifizierung und Klassifizierung von Produkten durch eine Kombination aus"
-" einem internen Tag-Bezeichner und einem benutzerfreundlichen Anzeigenamen. "
+"Stellt ein Produkt-Tag dar, das zur Klassifizierung oder Identifizierung von "
+"Produkten verwendet wird. Die Klasse ProductTag dient der eindeutigen "
+"Identifizierung und Klassifizierung von Produkten durch eine Kombination aus "
+"einem internen Tag-Bezeichner und einem benutzerfreundlichen Anzeigenamen. "
"Sie unterstützt Operationen, die über Mixins exportiert werden, und "
"ermöglicht die Anpassung von Metadaten für Verwaltungszwecke."
-#: engine/core/models.py:209 engine/core/models.py:240
+#: engine/core/models.py:215 engine/core/models.py:246
msgid "internal tag identifier for the product tag"
msgstr "Interner Tag-Identifikator für das Produkt-Tag"
-#: engine/core/models.py:210 engine/core/models.py:241
+#: engine/core/models.py:216 engine/core/models.py:247
msgid "tag name"
msgstr "Tag name"
-#: engine/core/models.py:214 engine/core/models.py:245
+#: engine/core/models.py:220 engine/core/models.py:251
msgid "user-friendly name for the product tag"
msgstr "Benutzerfreundlicher Name für den Produktanhänger"
-#: engine/core/models.py:215 engine/core/models.py:246
+#: engine/core/models.py:221 engine/core/models.py:252
msgid "tag display name"
msgstr "Tag-Anzeigename"
-#: engine/core/models.py:223
+#: engine/core/models.py:229
msgid "product tag"
msgstr "Produkt-Tag"
-#: engine/core/models.py:229
+#: engine/core/models.py:235
msgid ""
"Represents a category tag used for products. This class models a category "
"tag that can be used to associate and classify products. It includes "
@@ -1735,15 +1742,15 @@ msgstr ""
"zuzuordnen und zu klassifizieren. Sie enthält Attribute für einen internen "
"Tag-Bezeichner und einen benutzerfreundlichen Anzeigenamen."
-#: engine/core/models.py:254
+#: engine/core/models.py:260
msgid "category tag"
msgstr "Kategorie-Tag"
-#: engine/core/models.py:255 engine/core/models.py:327
+#: engine/core/models.py:261 engine/core/models.py:333
msgid "category tags"
msgstr "Kategorie-Tags"
-#: engine/core/models.py:260
+#: engine/core/models.py:266
msgid ""
"Represents a category entity to organize and group related items in a "
"hierarchical structure. Categories may have hierarchical relationships with "
@@ -1761,64 +1768,63 @@ msgstr ""
"Beziehungen unterstützen. Die Klasse enthält Felder für Metadaten und "
"visuelle Darstellung, die als Grundlage für kategoriebezogene Funktionen "
"dienen. Diese Klasse wird in der Regel verwendet, um Produktkategorien oder "
-"andere ähnliche Gruppierungen innerhalb einer Anwendung zu definieren und zu"
-" verwalten. Sie ermöglicht es Benutzern oder Administratoren, den Namen, die"
-" Beschreibung und die Hierarchie von Kategorien festzulegen sowie Attribute "
+"andere ähnliche Gruppierungen innerhalb einer Anwendung zu definieren und zu "
+"verwalten. Sie ermöglicht es Benutzern oder Administratoren, den Namen, die "
+"Beschreibung und die Hierarchie von Kategorien festzulegen sowie Attribute "
"wie Bilder, Tags oder Priorität zuzuweisen."
-#: engine/core/models.py:274
+#: engine/core/models.py:280
msgid "upload an image representing this category"
msgstr "Laden Sie ein Bild hoch, das diese Kategorie repräsentiert"
-#: engine/core/models.py:277
+#: engine/core/models.py:283
msgid "category image"
msgstr "Kategorie Bild"
-#: engine/core/models.py:282
+#: engine/core/models.py:288
msgid "define a markup percentage for products in this category"
msgstr ""
"Definieren Sie einen prozentualen Aufschlag für Produkte in dieser Kategorie"
-#: engine/core/models.py:291
+#: engine/core/models.py:297
msgid "parent of this category to form a hierarchical structure"
msgstr ""
"Übergeordneter dieser Kategorie, um eine hierarchische Struktur zu bilden"
-#: engine/core/models.py:292
+#: engine/core/models.py:298
msgid "parent category"
msgstr "Übergeordnete Kategorie"
-#: engine/core/models.py:297
+#: engine/core/models.py:303
msgid "category name"
msgstr "Name der Kategorie"
-#: engine/core/models.py:298
+#: engine/core/models.py:304
msgid "provide a name for this category"
msgstr "Geben Sie einen Namen für diese Kategorie an"
-#: engine/core/models.py:305
+#: engine/core/models.py:311
msgid "add a detailed description for this category"
msgstr "Fügen Sie eine detaillierte Beschreibung für diese Kategorie hinzu"
-#: engine/core/models.py:306
+#: engine/core/models.py:312
msgid "category description"
msgstr "Beschreibung der Kategorie"
-#: engine/core/models.py:326
+#: engine/core/models.py:332
msgid "tags that help describe or group this category"
msgstr "Tags, die helfen, diese Kategorie zu beschreiben oder zu gruppieren"
-#: engine/core/models.py:333 engine/core/models.py:495
+#: engine/core/models.py:339 engine/core/models.py:514
msgid "priority"
msgstr "Priorität"
-#: engine/core/models.py:438
+#: engine/core/models.py:457
msgid ""
"Represents a Brand object in the system. This class handles information and "
"attributes related to a brand, including its name, logos, description, "
"associated categories, a unique slug, and priority order. It allows for the "
-"organization and representation of brand-related data within the "
-"application."
+"organization and representation of brand-related data within the application."
msgstr ""
"Stellt ein Markenobjekt im System dar. Diese Klasse verwaltet Informationen "
"und Attribute in Bezug auf eine Marke, einschließlich ihres Namens, Logos, "
@@ -1826,130 +1832,129 @@ msgstr ""
"der Prioritätsreihenfolge. Sie ermöglicht die Organisation und Darstellung "
"von markenbezogenen Daten innerhalb der Anwendung."
-#: engine/core/models.py:448
+#: engine/core/models.py:467
msgid "name of this brand"
msgstr "Name dieser Marke"
-#: engine/core/models.py:449
+#: engine/core/models.py:468
msgid "brand name"
msgstr "Markenname"
-#: engine/core/models.py:456
+#: engine/core/models.py:475
msgid "upload a logo representing this brand"
msgstr "Laden Sie ein Logo hoch, das diese Marke repräsentiert"
-#: engine/core/models.py:458
+#: engine/core/models.py:477
msgid "brand small image"
msgstr "Marke kleines Bild"
-#: engine/core/models.py:464
+#: engine/core/models.py:483
msgid "upload a big logo representing this brand"
msgstr "Laden Sie ein großes Logo hoch, das diese Marke repräsentiert"
-#: engine/core/models.py:466
+#: engine/core/models.py:485
msgid "brand big image"
msgstr "Großes Image der Marke"
-#: engine/core/models.py:471
+#: engine/core/models.py:490
msgid "add a detailed description of the brand"
msgstr "Fügen Sie eine detaillierte Beschreibung der Marke hinzu"
-#: engine/core/models.py:472
+#: engine/core/models.py:491
msgid "brand description"
msgstr "Beschreibung der Marke"
-#: engine/core/models.py:477
+#: engine/core/models.py:496
msgid "optional categories that this brand is associated with"
msgstr ""
"Optionale Kategorien, mit denen diese Marke in Verbindung gebracht wird"
-#: engine/core/models.py:478
+#: engine/core/models.py:497
msgid "associated categories"
msgstr "Kategorien"
-#: engine/core/models.py:508
+#: engine/core/models.py:527
msgid ""
-"Represents the stock of a product managed in the system. This class provides"
-" details about the relationship between vendors, products, and their stock "
+"Represents the stock of a product managed in the system. This class provides "
+"details about the relationship between vendors, products, and their stock "
"information, as well as inventory-related properties like price, purchase "
"price, quantity, SKU, and digital assets. It is part of the inventory "
"management system to allow tracking and evaluation of products available "
"from various vendors."
msgstr ""
"Stellt den Bestand eines im System verwalteten Produkts dar. Diese Klasse "
-"liefert Details über die Beziehung zwischen Lieferanten, Produkten und deren"
-" Bestandsinformationen sowie bestandsbezogene Eigenschaften wie Preis, "
+"liefert Details über die Beziehung zwischen Lieferanten, Produkten und deren "
+"Bestandsinformationen sowie bestandsbezogene Eigenschaften wie Preis, "
"Einkaufspreis, Menge, SKU und digitale Assets. Sie ist Teil des "
"Bestandsverwaltungssystems, um die Nachverfolgung und Bewertung der von "
"verschiedenen Anbietern verfügbaren Produkte zu ermöglichen."
-#: engine/core/models.py:520
+#: engine/core/models.py:539
msgid "the vendor supplying this product stock"
msgstr "Der Verkäufer, der dieses Produkt liefert, hat folgende Bestände"
-#: engine/core/models.py:521
+#: engine/core/models.py:540
msgid "associated vendor"
msgstr "Zugehöriger Anbieter"
-#: engine/core/models.py:525
+#: engine/core/models.py:544
msgid "final price to the customer after markups"
msgstr "Endpreis für den Kunden nach Aufschlägen"
-#: engine/core/models.py:526
+#: engine/core/models.py:545
msgid "selling price"
msgstr "Verkaufspreis"
-#: engine/core/models.py:531
+#: engine/core/models.py:550
msgid "the product associated with this stock entry"
msgstr "Das mit diesem Bestandseintrag verbundene Produkt"
-#: engine/core/models.py:532 engine/core/models.py:797
-#: engine/core/models.py:843 engine/core/models.py:1792
+#: engine/core/models.py:551 engine/core/models.py:820
+#: engine/core/models.py:866 engine/core/models.py:1904
msgid "associated product"
msgstr "Zugehöriges Produkt"
-#: engine/core/models.py:539
+#: engine/core/models.py:558
msgid "the price paid to the vendor for this product"
msgstr "Der an den Verkäufer gezahlte Preis für dieses Produkt"
-#: engine/core/models.py:540
+#: engine/core/models.py:559
msgid "vendor purchase price"
msgstr "Einkaufspreis des Verkäufers"
-#: engine/core/models.py:544
+#: engine/core/models.py:563
msgid "available quantity of the product in stock"
msgstr "Verfügbare Menge des Produkts auf Lager"
-#: engine/core/models.py:545
+#: engine/core/models.py:564
msgid "quantity in stock"
msgstr "Vorrätige Menge"
-#: engine/core/models.py:549
+#: engine/core/models.py:568
msgid "vendor-assigned SKU for identifying the product"
msgstr "Vom Hersteller zugewiesene SKU zur Identifizierung des Produkts"
-#: engine/core/models.py:550
+#: engine/core/models.py:569
msgid "vendor sku"
msgstr "SKU des Verkäufers"
-#: engine/core/models.py:556
+#: engine/core/models.py:575
msgid "digital file associated with this stock if applicable"
-msgstr ""
-"Digitale Datei, die mit diesem Bestand verbunden ist, falls zutreffend"
+msgstr "Digitale Datei, die mit diesem Bestand verbunden ist, falls zutreffend"
-#: engine/core/models.py:557
+#: engine/core/models.py:576
msgid "digital file"
msgstr "Digitale Datei"
-#: engine/core/models.py:560
+#: engine/core/models.py:580
msgid "system attributes"
msgstr "System-Attribute"
-#: engine/core/models.py:567
+#: engine/core/models.py:588
msgid "stock entries"
msgstr "Bestandseinträge"
-#: engine/core/models.py:572
+#: engine/core/models.py:593
msgid ""
"Represents a product with attributes such as category, brand, tags, digital "
"status, name, description, part number, and slug. Provides related utility "
@@ -1963,261 +1968,260 @@ msgstr ""
"Stellt ein Produkt mit Attributen wie Kategorie, Marke, Tags, digitalem "
"Status, Name, Beschreibung, Teilenummer und Slug dar. Bietet verwandte "
"Hilfseigenschaften zum Abrufen von Bewertungen, Feedback-Zahlen, Preis, "
-"Menge und Gesamtbestellungen. Konzipiert für die Verwendung in einem System,"
-" das den elektronischen Handel oder die Bestandsverwaltung verwaltet. Diese "
+"Menge und Gesamtbestellungen. Konzipiert für die Verwendung in einem System, "
+"das den elektronischen Handel oder die Bestandsverwaltung verwaltet. Diese "
"Klasse interagiert mit verwandten Modellen (wie Category, Brand und "
-"ProductTag) und verwaltet die Zwischenspeicherung von Eigenschaften, auf die"
-" häufig zugegriffen wird, um die Leistung zu verbessern. Sie wird verwendet,"
-" um Produktdaten und die damit verbundenen Informationen innerhalb einer "
+"ProductTag) und verwaltet die Zwischenspeicherung von Eigenschaften, auf die "
+"häufig zugegriffen wird, um die Leistung zu verbessern. Sie wird verwendet, "
+"um Produktdaten und die damit verbundenen Informationen innerhalb einer "
"Anwendung zu definieren und zu manipulieren."
-#: engine/core/models.py:585
+#: engine/core/models.py:606
msgid "category this product belongs to"
msgstr "Kategorie, zu der dieses Produkt gehört"
-#: engine/core/models.py:594
+#: engine/core/models.py:615
msgid "optionally associate this product with a brand"
msgstr "Optional können Sie dieses Produkt mit einer Marke verknüpfen"
-#: engine/core/models.py:600
+#: engine/core/models.py:621
msgid "tags that help describe or group this product"
msgstr "Tags, die helfen, dieses Produkt zu beschreiben oder zu gruppieren"
-#: engine/core/models.py:605
+#: engine/core/models.py:626
msgid "indicates whether this product is digitally delivered"
msgstr "Gibt an, ob dieses Produkt digital geliefert wird"
-#: engine/core/models.py:606
+#: engine/core/models.py:627
msgid "is product digital"
msgstr "Ist das Produkt digital"
-#: engine/core/models.py:612
+#: engine/core/models.py:633
msgid "provide a clear identifying name for the product"
-msgstr ""
-"Geben Sie einen eindeutigen Namen zur Identifizierung des Produkts an."
+msgstr "Geben Sie einen eindeutigen Namen zur Identifizierung des Produkts an."
-#: engine/core/models.py:613
+#: engine/core/models.py:634
msgid "product name"
msgstr "Name des Produkts"
-#: engine/core/models.py:619 engine/core/models.py:892
+#: engine/core/models.py:640 engine/core/models.py:915
msgid "add a detailed description of the product"
msgstr "Fügen Sie eine detaillierte Beschreibung des Produkts hinzu"
-#: engine/core/models.py:620
+#: engine/core/models.py:641
msgid "product description"
msgstr "Beschreibung des Produkts"
-#: engine/core/models.py:627
+#: engine/core/models.py:648
msgid "part number for this product"
msgstr "Teilenummer für dieses Produkt"
-#: engine/core/models.py:628
+#: engine/core/models.py:649
msgid "part number"
msgstr "Teilnummer"
-#: engine/core/models.py:647
+#: engine/core/models.py:668
msgid "stock keeping unit for this product"
msgstr "Lagerhaltende Einheit für dieses Produkt"
-#: engine/core/models.py:720
+#: engine/core/models.py:741
msgid ""
"Represents an attribute in the system. This class is used to define and "
"manage attributes, which are customizable pieces of data that can be "
"associated with other entities. Attributes have associated categories, "
-"groups, value types, and names. The model supports multiple types of values,"
-" including string, integer, float, boolean, array, and object. This allows "
+"groups, value types, and names. The model supports multiple types of values, "
+"including string, integer, float, boolean, array, and object. This allows "
"for dynamic and flexible data structuring."
msgstr ""
-"Stellt ein Attribut im System dar. Diese Klasse wird verwendet, um Attribute"
-" zu definieren und zu verwalten. Dabei handelt es sich um anpassbare "
+"Stellt ein Attribut im System dar. Diese Klasse wird verwendet, um Attribute "
+"zu definieren und zu verwalten. Dabei handelt es sich um anpassbare "
"Datenelemente, die mit anderen Entitäten verknüpft werden können. Attribute "
"haben zugehörige Kategorien, Gruppen, Werttypen und Namen. Das Modell "
"unterstützt mehrere Wertetypen, darunter String, Integer, Float, Boolean, "
"Array und Object. Dies ermöglicht eine dynamische und flexible "
"Datenstrukturierung."
-#: engine/core/models.py:733
+#: engine/core/models.py:754
msgid "group of this attribute"
msgstr "Gruppe dieses Attributs"
-#: engine/core/models.py:739
+#: engine/core/models.py:760
msgid "string"
msgstr "Zeichenfolge"
-#: engine/core/models.py:740
+#: engine/core/models.py:761
msgid "integer"
msgstr "Integer"
-#: engine/core/models.py:741
+#: engine/core/models.py:762
msgid "float"
msgstr "Schwimmer"
-#: engine/core/models.py:742
+#: engine/core/models.py:763
msgid "boolean"
msgstr "Boolesche"
-#: engine/core/models.py:743
+#: engine/core/models.py:764
msgid "array"
msgstr "Array"
-#: engine/core/models.py:744
+#: engine/core/models.py:765
msgid "object"
msgstr "Objekt"
-#: engine/core/models.py:746
+#: engine/core/models.py:767
msgid "type of the attribute's value"
msgstr "Typ des Attributwerts"
-#: engine/core/models.py:747
+#: engine/core/models.py:768
msgid "value type"
msgstr "Werttyp"
-#: engine/core/models.py:752
+#: engine/core/models.py:773
msgid "name of this attribute"
msgstr "Name dieses Attributs"
-#: engine/core/models.py:753
+#: engine/core/models.py:774
msgid "attribute's name"
msgstr "Name des Attributs"
-#: engine/core/models.py:758
+#: engine/core/models.py:779
msgid "is filterable"
msgstr "ist filterbar"
-#: engine/core/models.py:759
+#: engine/core/models.py:781
msgid "designates whether this attribute can be used for filtering or not"
msgstr ""
"Welche Attribute und Werte können für die Filterung dieser Kategorie "
"verwendet werden."
-#: engine/core/models.py:771 engine/core/models.py:789
+#: engine/core/models.py:794 engine/core/models.py:812
#: engine/core/templates/digital_order_delivered_email.html:134
msgid "attribute"
msgstr "Attribut"
-#: engine/core/models.py:777
+#: engine/core/models.py:800
msgid ""
-"Represents a specific value for an attribute that is linked to a product. It"
-" links the 'attribute' to a unique 'value', allowing better organization and"
-" dynamic representation of product characteristics."
+"Represents a specific value for an attribute that is linked to a product. It "
+"links the 'attribute' to a unique 'value', allowing better organization and "
+"dynamic representation of product characteristics."
msgstr ""
"Stellt einen spezifischen Wert für ein Attribut dar, das mit einem Produkt "
"verknüpft ist. Es verknüpft das \"Attribut\" mit einem eindeutigen \"Wert\" "
"und ermöglicht so eine bessere Organisation und dynamische Darstellung der "
"Produktmerkmale."
-#: engine/core/models.py:788
+#: engine/core/models.py:811
msgid "attribute of this value"
msgstr "Attribut dieses Wertes"
-#: engine/core/models.py:796
+#: engine/core/models.py:819
msgid "the specific product associated with this attribute's value"
msgstr ""
"Das spezifische Produkt, das mit dem Wert dieses Attributs verbunden ist"
-#: engine/core/models.py:802
+#: engine/core/models.py:825
msgid "the specific value for this attribute"
msgstr "Der spezifische Wert für dieses Attribut"
-#: engine/core/models.py:815
+#: engine/core/models.py:838
msgid ""
"Represents a product image associated with a product in the system. This "
-"class is designed to manage images for products, including functionality for"
-" uploading image files, associating them with specific products, and "
+"class is designed to manage images for products, including functionality for "
+"uploading image files, associating them with specific products, and "
"determining their display order. It also includes an accessibility feature "
"with alternative text for the images."
msgstr ""
"Stellt ein Produktbild dar, das mit einem Produkt im System verbunden ist. "
"Diese Klasse dient der Verwaltung von Bildern für Produkte, einschließlich "
"der Funktionen zum Hochladen von Bilddateien, der Zuordnung zu bestimmten "
-"Produkten und der Festlegung ihrer Anzeigereihenfolge. Sie enthält auch eine"
-" Funktion zur Barrierefreiheit mit alternativem Text für die Bilder."
+"Produkten und der Festlegung ihrer Anzeigereihenfolge. Sie enthält auch eine "
+"Funktion zur Barrierefreiheit mit alternativem Text für die Bilder."
-#: engine/core/models.py:826
+#: engine/core/models.py:849
msgid "provide alternative text for the image for accessibility"
msgstr ""
"Geben Sie einen alternativen Text für das Bild an, um die Barrierefreiheit "
"zu gewährleisten."
-#: engine/core/models.py:827
+#: engine/core/models.py:850
msgid "image alt text"
msgstr "Bild-Alt-Text"
-#: engine/core/models.py:830
+#: engine/core/models.py:853
msgid "upload the image file for this product"
msgstr "Laden Sie die Bilddatei für dieses Produkt hoch"
-#: engine/core/models.py:831 engine/core/models.py:862
+#: engine/core/models.py:854 engine/core/models.py:885
msgid "product image"
msgstr "Produktbild"
-#: engine/core/models.py:836
+#: engine/core/models.py:859
msgid "determines the order in which images are displayed"
msgstr "Legt die Reihenfolge fest, in der die Bilder angezeigt werden"
-#: engine/core/models.py:837
+#: engine/core/models.py:860
msgid "display priority"
msgstr "Priorität anzeigen"
-#: engine/core/models.py:842
+#: engine/core/models.py:865
msgid "the product that this image represents"
msgstr "Das Produkt, das dieses Bild darstellt"
-#: engine/core/models.py:863
+#: engine/core/models.py:886
msgid "product images"
msgstr "Produktbilder"
-#: engine/core/models.py:868
+#: engine/core/models.py:891
msgid ""
"Represents a promotional campaign for products with a discount. This class "
"is used to define and manage promotional campaigns that offer a percentage-"
"based discount for products. The class includes attributes for setting the "
"discount rate, providing details about the promotion, and linking it to the "
-"applicable products. It integrates with the product catalog to determine the"
-" affected items in the campaign."
+"applicable products. It integrates with the product catalog to determine the "
+"affected items in the campaign."
msgstr ""
-"Repräsentiert eine Werbekampagne für Produkte mit einem Rabatt. Diese Klasse"
-" wird verwendet, um Werbekampagnen zu definieren und zu verwalten, die einen"
-" prozentualen Rabatt für Produkte anbieten. Die Klasse enthält Attribute zum"
-" Festlegen des Rabattsatzes, zum Bereitstellen von Details über die "
+"Repräsentiert eine Werbekampagne für Produkte mit einem Rabatt. Diese Klasse "
+"wird verwendet, um Werbekampagnen zu definieren und zu verwalten, die einen "
+"prozentualen Rabatt für Produkte anbieten. Die Klasse enthält Attribute zum "
+"Festlegen des Rabattsatzes, zum Bereitstellen von Details über die "
"Werbeaktion und zum Verknüpfen der Aktion mit den entsprechenden Produkten. "
-"Sie ist mit dem Produktkatalog integriert, um die betroffenen Artikel in der"
-" Kampagne zu bestimmen."
+"Sie ist mit dem Produktkatalog integriert, um die betroffenen Artikel in der "
+"Kampagne zu bestimmen."
-#: engine/core/models.py:880
+#: engine/core/models.py:903
msgid "percentage discount for the selected products"
msgstr "Prozentualer Rabatt für die ausgewählten Produkte"
-#: engine/core/models.py:881
+#: engine/core/models.py:904
msgid "discount percentage"
msgstr "Prozentsatz der Ermäßigung"
-#: engine/core/models.py:886
+#: engine/core/models.py:909
msgid "provide a unique name for this promotion"
msgstr "Geben Sie einen eindeutigen Namen für diese Aktion an"
-#: engine/core/models.py:887
+#: engine/core/models.py:910
msgid "promotion name"
msgstr "Name der Aktion"
-#: engine/core/models.py:893
+#: engine/core/models.py:916
msgid "promotion description"
msgstr "Promotion description"
-#: engine/core/models.py:898
+#: engine/core/models.py:921
msgid "select which products are included in this promotion"
msgstr "Wählen Sie aus, welche Produkte in dieser Aktion enthalten sind"
-#: engine/core/models.py:899
+#: engine/core/models.py:922
msgid "included products"
msgstr "Enthaltene Produkte"
-#: engine/core/models.py:903
+#: engine/core/models.py:926
msgid "promotion"
msgstr "Förderung"
-#: engine/core/models.py:914
+#: engine/core/models.py:937
msgid ""
"Represents a user's wishlist for storing and managing desired products. The "
"class provides functionality to manage a collection of products, supporting "
@@ -2227,64 +2231,64 @@ msgstr ""
"Stellt die Wunschliste eines Benutzers zum Speichern und Verwalten "
"gewünschter Produkte dar. Die Klasse bietet Funktionen zur Verwaltung einer "
"Sammlung von Produkten und unterstützt Vorgänge wie das Hinzufügen und "
-"Entfernen von Produkten sowie das Hinzufügen und Entfernen mehrerer Produkte"
-" gleichzeitig."
+"Entfernen von Produkten sowie das Hinzufügen und Entfernen mehrerer Produkte "
+"gleichzeitig."
-#: engine/core/models.py:926
+#: engine/core/models.py:949
msgid "products that the user has marked as wanted"
msgstr "Produkte, die der Benutzer als gewünscht markiert hat"
-#: engine/core/models.py:934
+#: engine/core/models.py:957
msgid "user who owns this wishlist"
msgstr "Benutzer, dem diese Wunschliste gehört"
-#: engine/core/models.py:935
+#: engine/core/models.py:958
msgid "wishlist owner"
msgstr "Besitzer der Wishlist"
-#: engine/core/models.py:943
+#: engine/core/models.py:966
msgid "wishlist"
msgstr "Wunschzettel"
-#: engine/core/models.py:985
+#: engine/core/models.py:1008
msgid ""
"Represents a documentary record tied to a product. This class is used to "
"store information about documentaries related to specific products, "
"including file uploads and their metadata. It contains methods and "
"properties to handle the file type and storage path for the documentary "
-"files. It extends functionality from specific mixins and provides additional"
-" custom features."
+"files. It extends functionality from specific mixins and provides additional "
+"custom features."
msgstr ""
"Stellt einen dokumentarischen Datensatz dar, der an ein Produkt gebunden "
"ist. Diese Klasse wird verwendet, um Informationen über Dokumentationen zu "
"bestimmten Produkten zu speichern, einschließlich Datei-Uploads und deren "
"Metadaten. Sie enthält Methoden und Eigenschaften zur Handhabung des "
-"Dateityps und des Speicherpfads für die Dokumentationsdateien. Sie erweitert"
-" die Funktionalität von bestimmten Mixins und bietet zusätzliche "
+"Dateityps und des Speicherpfads für die Dokumentationsdateien. Sie erweitert "
+"die Funktionalität von bestimmten Mixins und bietet zusätzliche "
"benutzerdefinierte Funktionen."
-#: engine/core/models.py:998
+#: engine/core/models.py:1023
msgid "documentary"
msgstr "Dokumentarfilm"
-#: engine/core/models.py:999
+#: engine/core/models.py:1024
msgid "documentaries"
msgstr "Dokumentarfilme"
-#: engine/core/models.py:1009
+#: engine/core/models.py:1034
msgid "unresolved"
msgstr "Ungelöst"
-#: engine/core/models.py:1014
+#: engine/core/models.py:1039
msgid ""
-"Represents an address entity that includes location details and associations"
-" with a user. Provides functionality for geographic and address data "
-"storage, as well as integration with geocoding services. This class is "
-"designed to store detailed address information including components like "
-"street, city, region, country, and geolocation (longitude and latitude). It "
-"supports integration with geocoding APIs, enabling the storage of raw API "
-"responses for further processing or inspection. The class also allows "
-"associating an address with a user, facilitating personalized data handling."
+"Represents an address entity that includes location details and associations "
+"with a user. Provides functionality for geographic and address data storage, "
+"as well as integration with geocoding services. This class is designed to "
+"store detailed address information including components like street, city, "
+"region, country, and geolocation (longitude and latitude). It supports "
+"integration with geocoding APIs, enabling the storage of raw API responses "
+"for further processing or inspection. The class also allows associating an "
+"address with a user, facilitating personalized data handling."
msgstr ""
"Stellt eine Adresseinheit dar, die Standortdetails und Assoziationen mit "
"einem Benutzer enthält. Bietet Funktionen für die Speicherung von "
@@ -2297,59 +2301,59 @@ msgstr ""
"ermöglicht es auch, eine Adresse mit einem Benutzer zu verknüpfen, was die "
"personalisierte Datenverarbeitung erleichtert."
-#: engine/core/models.py:1029
+#: engine/core/models.py:1054
msgid "address line for the customer"
msgstr "Adresszeile für den Kunden"
-#: engine/core/models.py:1030
+#: engine/core/models.py:1055
msgid "address line"
msgstr "Adresszeile"
-#: engine/core/models.py:1032
+#: engine/core/models.py:1057
msgid "street"
msgstr "Straße"
-#: engine/core/models.py:1033
+#: engine/core/models.py:1058
msgid "district"
msgstr "Bezirk"
-#: engine/core/models.py:1034
+#: engine/core/models.py:1059
msgid "city"
msgstr "Stadt"
-#: engine/core/models.py:1035
+#: engine/core/models.py:1060
msgid "region"
msgstr "Region"
-#: engine/core/models.py:1036
+#: engine/core/models.py:1061
msgid "postal code"
msgstr "Postleitzahl"
-#: engine/core/models.py:1037
+#: engine/core/models.py:1062
msgid "country"
msgstr "Land"
-#: engine/core/models.py:1044
+#: engine/core/models.py:1069
msgid "geolocation point: (longitude, latitude)"
msgstr "Geolocation Point(Längengrad, Breitengrad)"
-#: engine/core/models.py:1047
+#: engine/core/models.py:1075
msgid "full JSON response from geocoder for this address"
msgstr "Vollständige JSON-Antwort vom Geocoder für diese Adresse"
-#: engine/core/models.py:1052
+#: engine/core/models.py:1081
msgid "stored JSON response from the geocoding service"
msgstr "Gespeicherte JSON-Antwort vom Geokodierungsdienst"
-#: engine/core/models.py:1060
+#: engine/core/models.py:1091
msgid "address"
msgstr "Adresse"
-#: engine/core/models.py:1061
+#: engine/core/models.py:1092
msgid "addresses"
msgstr "Adressen"
-#: engine/core/models.py:1073
+#: engine/core/models.py:1104
msgid ""
"Represents a promotional code that can be used for discounts, managing its "
"validity, type of discount, and application. The PromoCode class stores "
@@ -2367,76 +2371,75 @@ msgstr ""
"Validierung und Anwendung des Promo-Codes auf eine Bestellung, wobei "
"sichergestellt wird, dass die Einschränkungen eingehalten werden."
-#: engine/core/models.py:1087
+#: engine/core/models.py:1118
msgid "unique code used by a user to redeem a discount"
msgstr ""
"Einzigartiger Code, den ein Nutzer zum Einlösen eines Rabatts verwendet"
-#: engine/core/models.py:1088
+#: engine/core/models.py:1119
msgid "promo code identifier"
msgstr "Kennung des Promo-Codes"
-#: engine/core/models.py:1095
+#: engine/core/models.py:1126
msgid "fixed discount amount applied if percent is not used"
msgstr ""
-"Fester Rabattbetrag, der angewandt wird, wenn kein Prozentsatz verwendet "
-"wird"
+"Fester Rabattbetrag, der angewandt wird, wenn kein Prozentsatz verwendet wird"
-#: engine/core/models.py:1096
+#: engine/core/models.py:1127
msgid "fixed discount amount"
msgstr "Fester Rabattbetrag"
-#: engine/core/models.py:1102
+#: engine/core/models.py:1133
msgid "percentage discount applied if fixed amount is not used"
msgstr "Prozentualer Rabatt, wenn der Festbetrag nicht verwendet wird"
-#: engine/core/models.py:1103
+#: engine/core/models.py:1134
msgid "percentage discount"
msgstr "Prozentualer Rabatt"
-#: engine/core/models.py:1108
+#: engine/core/models.py:1139
msgid "timestamp when the promocode expires"
msgstr "Zeitstempel, wann der Promocode abläuft"
-#: engine/core/models.py:1109
+#: engine/core/models.py:1140
msgid "end validity time"
msgstr "Ende der Gültigkeitsdauer"
-#: engine/core/models.py:1114
+#: engine/core/models.py:1145
msgid "timestamp from which this promocode is valid"
msgstr "Zeitstempel, ab dem dieser Promocode gültig ist"
-#: engine/core/models.py:1115
+#: engine/core/models.py:1146
msgid "start validity time"
msgstr "Beginn der Gültigkeitsdauer"
-#: engine/core/models.py:1120
+#: engine/core/models.py:1151
msgid "timestamp when the promocode was used, blank if not used yet"
msgstr ""
"Zeitstempel, wann der Promocode verwendet wurde, leer, wenn noch nicht "
"verwendet"
-#: engine/core/models.py:1121
+#: engine/core/models.py:1152
msgid "usage timestamp"
msgstr "Zeitstempel der Verwendung"
-#: engine/core/models.py:1126
+#: engine/core/models.py:1157
msgid "user assigned to this promocode if applicable"
msgstr "Diesem Promocode zugewiesener Benutzer, falls zutreffend"
-#: engine/core/models.py:1127
+#: engine/core/models.py:1158
msgid "assigned user"
msgstr "Zugewiesener Benutzer"
-#: engine/core/models.py:1134
+#: engine/core/models.py:1165
msgid "promo code"
msgstr "Promo-Code"
-#: engine/core/models.py:1135
+#: engine/core/models.py:1166
msgid "promo codes"
msgstr "Promo-Codes"
-#: engine/core/models.py:1150
+#: engine/core/models.py:1182
msgid ""
"only one type of discount should be defined (amount or percent), but not "
"both or neither."
@@ -2444,21 +2447,21 @@ msgstr ""
"Es sollte nur eine Art von Rabatt definiert werden (Betrag oder "
"Prozentsatz), aber nicht beides oder keines von beiden."
-#: engine/core/models.py:1171
+#: engine/core/models.py:1204
msgid "promocode already used"
msgstr "Promocode wurde bereits verwendet"
-#: engine/core/models.py:1187
+#: engine/core/models.py:1226
#, python-brace-format
msgid "invalid discount type for promocode {self.uuid}"
msgstr "Ungültiger Rabatttyp für den Promocode {self.uuid}!"
-#: engine/core/models.py:1196
+#: engine/core/models.py:1235
msgid ""
"Represents an order placed by a user. This class models an order within the "
"application, including its various attributes such as billing and shipping "
-"information, status, associated user, notifications, and related operations."
-" Orders can have associated products, promotions can be applied, addresses "
+"information, status, associated user, notifications, and related operations. "
+"Orders can have associated products, promotions can be applied, addresses "
"set, and shipping or billing details updated. Equally, functionality "
"supports managing the products in the order lifecycle."
msgstr ""
@@ -2471,144 +2474,144 @@ msgstr ""
"aktualisiert werden. Ebenso unterstützt die Funktionalität die Verwaltung "
"der Produkte im Lebenszyklus der Bestellung."
-#: engine/core/models.py:1213
+#: engine/core/models.py:1252
msgid "the billing address used for this order"
msgstr "Die für diese Bestellung verwendete Rechnungsadresse"
-#: engine/core/models.py:1221
+#: engine/core/models.py:1260
msgid "optional promo code applied to this order"
msgstr "Optionaler Promo-Code für diese Bestellung"
-#: engine/core/models.py:1222
+#: engine/core/models.py:1261
msgid "applied promo code"
msgstr "Angewandter Promo-Code"
-#: engine/core/models.py:1230
+#: engine/core/models.py:1269
msgid "the shipping address used for this order"
msgstr "Die für diese Bestellung verwendete Lieferadresse"
-#: engine/core/models.py:1231
+#: engine/core/models.py:1270
msgid "shipping address"
msgstr "Lieferadresse"
-#: engine/core/models.py:1237
+#: engine/core/models.py:1276
msgid "current status of the order in its lifecycle"
msgstr "Aktueller Status des Auftrags in seinem Lebenszyklus"
-#: engine/core/models.py:1238
+#: engine/core/models.py:1277
msgid "order status"
msgstr "Status der Bestellung"
-#: engine/core/models.py:1243 engine/core/models.py:1769
+#: engine/core/models.py:1282 engine/core/models.py:1881
msgid "json structure of notifications to display to users"
msgstr ""
"JSON-Struktur der Benachrichtigungen, die den Benutzern angezeigt werden "
"sollen; in der Admin-UI wird die Tabellenansicht verwendet"
-#: engine/core/models.py:1249
+#: engine/core/models.py:1288
msgid "json representation of order attributes for this order"
msgstr "JSON-Darstellung der Auftragsattribute für diesen Auftrag"
-#: engine/core/models.py:1255
+#: engine/core/models.py:1294
msgid "the user who placed the order"
msgstr "Der Benutzer, der die Bestellung aufgegeben hat"
-#: engine/core/models.py:1256
+#: engine/core/models.py:1295
msgid "user"
msgstr "Benutzer"
-#: engine/core/models.py:1262
+#: engine/core/models.py:1301
msgid "the timestamp when the order was finalized"
msgstr "Der Zeitstempel, zu dem der Auftrag abgeschlossen wurde"
-#: engine/core/models.py:1263
+#: engine/core/models.py:1302
msgid "buy time"
msgstr "Zeit kaufen"
-#: engine/core/models.py:1270
+#: engine/core/models.py:1309
msgid "a human-readable identifier for the order"
msgstr "Ein von Menschen lesbarer Identifikator für den Auftrag"
-#: engine/core/models.py:1271
+#: engine/core/models.py:1310
msgid "human readable id"
msgstr "menschenlesbare ID"
-#: engine/core/models.py:1277
+#: engine/core/models.py:1316
msgid "order"
msgstr "Bestellung"
-#: engine/core/models.py:1319
+#: engine/core/models.py:1363
msgid "a user must have only one pending order at a time"
msgstr "Ein Benutzer darf immer nur einen schwebenden Auftrag haben!"
-#: engine/core/models.py:1351
+#: engine/core/models.py:1396
msgid "you cannot add products to an order that is not a pending one"
msgstr ""
"Sie können keine Produkte zu einem Auftrag hinzufügen, der nicht in "
"Bearbeitung ist."
-#: engine/core/models.py:1356
+#: engine/core/models.py:1402
msgid "you cannot add inactive products to order"
msgstr "Sie können keine inaktiven Produkte zur Bestellung hinzufügen"
-#: engine/core/models.py:1373
+#: engine/core/models.py:1424
msgid "you cannot add more products than available in stock"
msgstr "Sie können nicht mehr Produkte hinzufügen, als auf Lager sind"
-#: engine/core/models.py:1395 engine/core/models.py:1420
-#: engine/core/models.py:1428
+#: engine/core/models.py:1448 engine/core/models.py:1477
+#: engine/core/models.py:1487
msgid "you cannot remove products from an order that is not a pending one"
msgstr ""
"Sie können keine Produkte aus einer Bestellung entfernen, die nicht in "
"Bearbeitung ist."
-#: engine/core/models.py:1416
+#: engine/core/models.py:1472
#, python-brace-format
msgid "{name} does not exist with query <{query}>"
msgstr "{name} existiert nicht mit Abfrage <{query}>!"
-#: engine/core/models.py:1448
+#: engine/core/models.py:1511
msgid "promocode does not exist"
msgstr "Promocode existiert nicht"
-#: engine/core/models.py:1454
+#: engine/core/models.py:1526
msgid "you can only buy physical products with shipping address specified"
msgstr ""
"Sie können nur physische Produkte mit angegebener Lieferadresse kaufen!"
-#: engine/core/models.py:1473
+#: engine/core/models.py:1547
msgid "address does not exist"
msgstr "Adresse ist nicht vorhanden"
-#: engine/core/models.py:1494 engine/core/models.py:1563
+#: engine/core/models.py:1569 engine/core/models.py:1648
msgid "you can not buy at this moment, please try again in a few minutes"
msgstr ""
"Sie können im Moment nicht kaufen, bitte versuchen Sie es in ein paar "
"Minuten erneut."
-#: engine/core/models.py:1497 engine/core/models.py:1559
+#: engine/core/models.py:1575 engine/core/models.py:1641
msgid "invalid force value"
msgstr "Ungültiger Force-Wert"
-#: engine/core/models.py:1503 engine/core/models.py:1566
+#: engine/core/models.py:1581 engine/core/models.py:1652
msgid "you cannot purchase an empty order!"
msgstr "Sie können keine leere Bestellung kaufen!"
-#: engine/core/models.py:1522
+#: engine/core/models.py:1602
msgid "you cannot buy an order without a user"
msgstr ""
"Sie können keine Produkte aus einer Bestellung entfernen, die nicht in "
"Bearbeitung ist."
-#: engine/core/models.py:1536
+#: engine/core/models.py:1616
msgid "a user without a balance cannot buy with balance"
msgstr "Ein Benutzer ohne Guthaben kann nicht mit Guthaben kaufen!"
-#: engine/core/models.py:1541
+#: engine/core/models.py:1622
msgid "insufficient funds to complete the order"
msgstr "Unzureichende Mittel für die Ausführung des Auftrags"
-#: engine/core/models.py:1575
+#: engine/core/models.py:1663
msgid ""
"you cannot buy without registration, please provide the following "
"information: customer name, customer email, customer phone number"
@@ -2616,14 +2619,14 @@ msgstr ""
"Sie können nicht ohne Registrierung kaufen, bitte geben Sie die folgenden "
"Informationen an: Kundenname, Kunden-E-Mail, Kunden-Telefonnummer"
-#: engine/core/models.py:1584
+#: engine/core/models.py:1674
#, python-brace-format
msgid ""
"invalid payment method: {payment_method} from {available_payment_methods}"
msgstr ""
"Ungültige Zahlungsmethode: {payment_method} von {available_payment_methods}!"
-#: engine/core/models.py:1699
+#: engine/core/models.py:1805
msgid ""
"Manages user feedback for products. This class is designed to capture and "
"store user feedback for specific products that they have purchased. It "
@@ -2632,40 +2635,39 @@ msgid ""
"fields to effectively model and manage feedback data."
msgstr ""
"Verwaltet Benutzerfeedback für Produkte. Diese Klasse dient der Erfassung "
-"und Speicherung von Benutzerfeedback für bestimmte Produkte, die sie gekauft"
-" haben. Sie enthält Attribute zum Speichern von Benutzerkommentaren, einen "
+"und Speicherung von Benutzerfeedback für bestimmte Produkte, die sie gekauft "
+"haben. Sie enthält Attribute zum Speichern von Benutzerkommentaren, einen "
"Verweis auf das entsprechende Produkt in der Bestellung und eine vom "
"Benutzer zugewiesene Bewertung. Die Klasse verwendet Datenbankfelder, um "
"Feedbackdaten effektiv zu modellieren und zu verwalten."
-#: engine/core/models.py:1711
+#: engine/core/models.py:1817
msgid "user-provided comments about their experience with the product"
msgstr "Kommentare der Nutzer über ihre Erfahrungen mit dem Produkt"
-#: engine/core/models.py:1712
+#: engine/core/models.py:1818
msgid "feedback comments"
msgstr "Kommentare zum Feedback"
-#: engine/core/models.py:1719
-msgid ""
-"references the specific product in an order that this feedback is about"
+#: engine/core/models.py:1826
+msgid "references the specific product in an order that this feedback is about"
msgstr ""
-"Verweist auf das spezifische Produkt in einer Bestellung, auf das sich diese"
-" Rückmeldung bezieht"
+"Verweist auf das spezifische Produkt in einer Bestellung, auf das sich diese "
+"Rückmeldung bezieht"
-#: engine/core/models.py:1720
+#: engine/core/models.py:1828
msgid "related order product"
msgstr "Produkt zur Bestellung"
-#: engine/core/models.py:1725
+#: engine/core/models.py:1833
msgid "user-assigned rating for the product"
msgstr "Vom Benutzer zugewiesene Bewertung für das Produkt"
-#: engine/core/models.py:1726
+#: engine/core/models.py:1834
msgid "product rating"
msgstr "Produktbewertung"
-#: engine/core/models.py:1742
+#: engine/core/models.py:1854
msgid ""
"Represents products associated with orders and their attributes. The "
"OrderProduct model maintains information about a product that is part of an "
@@ -2677,148 +2679,148 @@ msgid ""
"download URL for digital products. The model integrates with the Order and "
"Product models and stores a reference to them."
msgstr ""
-"Stellt die mit Bestellungen verbundenen Produkte und ihre Attribute dar. Das"
-" OrderProduct-Modell verwaltet Informationen über ein Produkt, das Teil "
-"einer Bestellung ist, einschließlich Details wie Kaufpreis, Menge, "
+"Stellt die mit Bestellungen verbundenen Produkte und ihre Attribute dar. Das "
+"OrderProduct-Modell verwaltet Informationen über ein Produkt, das Teil einer "
+"Bestellung ist, einschließlich Details wie Kaufpreis, Menge, "
"Produktattribute und Status. Es verwaltet Benachrichtigungen für Benutzer "
"und Administratoren und führt Vorgänge wie die Rückgabe des Produktsaldos "
"oder das Hinzufügen von Feedback durch. Dieses Modell bietet auch Methoden "
-"und Eigenschaften, die die Geschäftslogik unterstützen, z. B. die Berechnung"
-" des Gesamtpreises oder die Generierung einer Download-URL für digitale "
+"und Eigenschaften, die die Geschäftslogik unterstützen, z. B. die Berechnung "
+"des Gesamtpreises oder die Generierung einer Download-URL für digitale "
"Produkte. Das Modell ist mit den Modellen \"Order\" und \"Product\" "
"integriert und speichert einen Verweis auf diese."
-#: engine/core/models.py:1757
+#: engine/core/models.py:1869
msgid "the price paid by the customer for this product at purchase time"
msgstr ""
"Der Preis, den der Kunde zum Zeitpunkt des Kaufs für dieses Produkt bezahlt "
"hat"
-#: engine/core/models.py:1758
+#: engine/core/models.py:1870
msgid "purchase price at order time"
msgstr "Einkaufspreis zum Zeitpunkt der Bestellung"
-#: engine/core/models.py:1763
+#: engine/core/models.py:1875
msgid "internal comments for admins about this ordered product"
msgstr "Interne Kommentare für Administratoren zu diesem bestellten Produkt"
-#: engine/core/models.py:1764
+#: engine/core/models.py:1876
msgid "internal comments"
msgstr "Interne Kommentare"
-#: engine/core/models.py:1770
+#: engine/core/models.py:1882
msgid "user notifications"
msgstr "Benutzerbenachrichtigungen"
-#: engine/core/models.py:1775
+#: engine/core/models.py:1887
msgid "json representation of this item's attributes"
msgstr "JSON-Darstellung der Attribute dieses Artikels"
-#: engine/core/models.py:1776
+#: engine/core/models.py:1888
msgid "ordered product attributes"
msgstr "Bestellte Produktattribute"
-#: engine/core/models.py:1781
+#: engine/core/models.py:1893
msgid "reference to the parent order that contains this product"
msgstr "Verweis auf den übergeordneten Auftrag, der dieses Produkt enthält"
-#: engine/core/models.py:1782
+#: engine/core/models.py:1894
msgid "parent order"
msgstr "Übergeordneter Auftrag"
-#: engine/core/models.py:1791
+#: engine/core/models.py:1903
msgid "the specific product associated with this order line"
msgstr "Das spezifische Produkt, das mit dieser Auftragszeile verbunden ist"
-#: engine/core/models.py:1798
+#: engine/core/models.py:1910
msgid "quantity of this specific product in the order"
msgstr "Menge dieses spezifischen Produkts in der Bestellung"
-#: engine/core/models.py:1799
+#: engine/core/models.py:1911
msgid "product quantity"
msgstr "Produktmenge"
-#: engine/core/models.py:1806
+#: engine/core/models.py:1918
msgid "current status of this product in the order"
msgstr "Aktueller Status dieses Produkts im Auftrag"
-#: engine/core/models.py:1807
+#: engine/core/models.py:1919
msgid "product line status"
msgstr "Status der Produktlinie"
-#: engine/core/models.py:1872
+#: engine/core/models.py:1986
msgid "order product must have an order"
msgstr "Das Bestellprodukt muss eine zugehörige Bestellung haben!"
-#: engine/core/models.py:1874
+#: engine/core/models.py:1988
#, python-brace-format
msgid "wrong action specified for feedback: {action}"
msgstr "Falsche Aktion für Feedback angegeben: {action}!"
-#: engine/core/models.py:1888
+#: engine/core/models.py:2005
msgid "you cannot feedback an order which is not received"
msgstr ""
"Sie können keine Produkte aus einer Bestellung entfernen, die nicht in "
"Bearbeitung ist."
-#: engine/core/models.py:1894
+#: engine/core/models.py:2014
msgid "name"
msgstr "Name"
-#: engine/core/models.py:1895
+#: engine/core/models.py:2016
msgid "URL of the integration"
msgstr "URL der Integration"
-#: engine/core/models.py:1896
+#: engine/core/models.py:2019
msgid "authentication credentials"
msgstr "Anmeldeinformationen zur Authentifizierung"
-#: engine/core/models.py:1918
+#: engine/core/models.py:2042
msgid "you can only have one default CRM provider"
msgstr "Sie können nur einen Standard-CRM-Anbieter haben"
-#: engine/core/models.py:1928
+#: engine/core/models.py:2052
msgid "CRM"
msgstr "CRM"
-#: engine/core/models.py:1929
+#: engine/core/models.py:2053
msgid "CRMs"
msgstr "CRMs"
-#: engine/core/models.py:1941
+#: engine/core/models.py:2069
msgid "order CRM link"
msgstr "CRM-Link der Bestellung"
-#: engine/core/models.py:1942
+#: engine/core/models.py:2070
msgid "orders CRM links"
msgstr "CRM-Links der Bestellungen"
-#: engine/core/models.py:1947
+#: engine/core/models.py:2075
msgid ""
"Represents the downloading functionality for digital assets associated with "
"orders. The DigitalAssetDownload class provides the ability to manage and "
"access downloads related to order products. It maintains information about "
-"the associated order product, the number of downloads, and whether the asset"
-" is publicly visible. It includes a method to generate a URL for downloading"
-" the asset when the associated order is in a completed status."
+"the associated order product, the number of downloads, and whether the asset "
+"is publicly visible. It includes a method to generate a URL for downloading "
+"the asset when the associated order is in a completed status."
msgstr ""
"Stellt die Download-Funktionalität für digitale Assets in Verbindung mit "
"Bestellungen dar. Die Klasse DigitalAssetDownload ermöglicht die Verwaltung "
"und den Zugriff auf Downloads im Zusammenhang mit Auftragsprodukten. Sie "
"verwaltet Informationen über das zugehörige Auftragsprodukt, die Anzahl der "
-"Downloads und ob das Asset öffentlich sichtbar ist. Sie enthält eine Methode"
-" zur Generierung einer URL für das Herunterladen des Assets, wenn sich die "
+"Downloads und ob das Asset öffentlich sichtbar ist. Sie enthält eine Methode "
+"zur Generierung einer URL für das Herunterladen des Assets, wenn sich die "
"zugehörige Bestellung in einem abgeschlossenen Status befindet."
-#: engine/core/models.py:1961
+#: engine/core/models.py:2091
msgid "download"
msgstr "Herunterladen"
-#: engine/core/models.py:1962
+#: engine/core/models.py:2092
msgid "downloads"
msgstr "Herunterladen"
-#: engine/core/serializers/utility.py:89
+#: engine/core/serializers/utility.py:91
msgid ""
"you must provide a comment, rating, and order product uuid to add feedback."
msgstr ""
@@ -3015,7 +3017,8 @@ msgstr "Hallo %(order.user.first_name)s,"
#, python-format
msgid ""
"thank you for your order #%(order.pk)s! we are pleased to inform you that\n"
-" we have taken your order into work. below are the details of your\n"
+" we have taken your order into work. below are "
+"the details of your\n"
" order:"
msgstr ""
"Vielen Dank für Ihre Bestellung #%(order.pk)s! Wir freuen uns, Ihnen "
@@ -3130,7 +3133,8 @@ msgstr ""
#: engine/core/templates/shipped_order_created_email.html:101
#: engine/core/templates/shipped_order_delivered_email.html:101
msgid ""
-"thank you for your order! we are pleased to confirm your purchase. below are\n"
+"thank you for your order! we are pleased to confirm your purchase. below "
+"are\n"
" the details of your order:"
msgstr ""
"Vielen Dank für Ihre Bestellung! Wir freuen uns, Ihren Kauf zu bestätigen. "
@@ -3161,31 +3165,30 @@ msgstr ""
"alle Rechte\n"
" vorbehalten"
-#: engine/core/utils/caching.py:44
+#: engine/core/utils/caching.py:48
msgid "both data and timeout are required"
msgstr "Sowohl Daten als auch Timeout sind erforderlich"
-#: engine/core/utils/caching.py:46
+#: engine/core/utils/caching.py:51
msgid "invalid timeout value, it must be between 0 and 216000 seconds"
-msgstr ""
-"Ungültiger Timeout-Wert, er muss zwischen 0 und 216000 Sekunden liegen"
+msgstr "Ungültiger Timeout-Wert, er muss zwischen 0 und 216000 Sekunden liegen"
#: engine/core/utils/emailing.py:27
#, python-brace-format
msgid "{settings.PROJECT_NAME} | contact us initiated"
msgstr "{settings.PROJECT_NAME} | Kontakt eingeleitet"
-#: engine/core/utils/emailing.py:73
+#: engine/core/utils/emailing.py:81
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order confirmation"
msgstr "{settings.PROJECT_NAME} | Auftragsbestätigung"
-#: engine/core/utils/emailing.py:105
+#: engine/core/utils/emailing.py:115
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order delivered"
msgstr "{settings.PROJECT_NAME} | Bestellung geliefert"
-#: engine/core/utils/emailing.py:188
+#: engine/core/utils/emailing.py:203
#, python-brace-format
msgid "{settings.PROJECT_NAME} | promocode granted"
msgstr "{settings.PROJECT_NAME} | Promocode gewährt"
@@ -3198,14 +3201,14 @@ msgstr "Sie haben nicht die Erlaubnis, diese Aktion durchzuführen."
msgid "NOMINATIM_URL must be configured."
msgstr "Der Parameter NOMINATIM_URL muss konfiguriert werden!"
-#: engine/core/validators.py:19
+#: engine/core/validators.py:21
#, python-brace-format
msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels"
msgstr ""
"Die Bildabmessungen sollten w{max_width} x h{max_height} Pixel nicht "
"überschreiten"
-#: engine/core/views.py:91
+#: engine/core/views.py:105
msgid ""
"Handles the request for the sitemap index and returns an XML response. It "
"ensures the response includes the appropriate content type header for XML."
@@ -3214,7 +3217,7 @@ msgstr ""
"zurück. Sie stellt sicher, dass die Antwort den entsprechenden Content-Type-"
"Header für XML enthält."
-#: engine/core/views.py:106
+#: engine/core/views.py:120
msgid ""
"Handles the detailed view response for a sitemap. This function processes "
"the request, fetches the appropriate sitemap detail response, and sets the "
@@ -3224,18 +3227,18 @@ msgstr ""
"Funktion verarbeitet die Anfrage, holt die entsprechende Sitemap-"
"Detailantwort ab und setzt den Content-Type-Header für XML."
-#: engine/core/views.py:141
+#: engine/core/views.py:156
msgid ""
"Returns a list of supported languages and their corresponding information."
msgstr ""
"Gibt eine Liste der unterstützten Sprachen und der entsprechenden "
"Informationen zurück."
-#: engine/core/views.py:173
+#: engine/core/views.py:183
msgid "Returns the parameters of the website as a JSON object."
msgstr "Gibt die Parameter der Website als JSON-Objekt zurück."
-#: engine/core/views.py:192
+#: engine/core/views.py:199
msgid ""
"Handles cache operations such as reading and setting cache data with a "
"specified key and timeout."
@@ -3243,11 +3246,11 @@ msgstr ""
"Erledigt Cache-Operationen wie das Lesen und Setzen von Cache-Daten mit "
"einem bestimmten Schlüssel und Timeout."
-#: engine/core/views.py:219
+#: engine/core/views.py:221
msgid "Handles `contact us` form submissions."
msgstr "Verarbeitet Übermittlungen des Formulars \"Kontaktieren Sie uns\"."
-#: engine/core/views.py:240
+#: engine/core/views.py:237
msgid ""
"Handles requests for processing and validating URLs from incoming POST "
"requests."
@@ -3255,60 +3258,70 @@ msgstr ""
"Bearbeitet Anfragen zur Verarbeitung und Validierung von URLs aus "
"eingehenden POST-Anfragen."
-#: engine/core/views.py:280
+#: engine/core/views.py:274
msgid "Handles global search queries."
msgstr "Bearbeitet globale Suchanfragen."
-#: engine/core/views.py:295
+#: engine/core/views.py:290
msgid "Handles the logic of buying as a business without registration."
msgstr "Behandelt die Logik des Kaufs als Unternehmen ohne Registrierung."
-#: engine/core/views.py:332
+#: engine/core/views.py:338
msgid ""
"Handles the downloading of a digital asset associated with an order.\n"
-"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the digital asset file located in the "
+"storage directory of the project. If the file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
msgstr ""
-"Bearbeitet das Herunterladen eines digitalen Assets, das mit einem Auftrag verbunden ist.\n"
-"Diese Funktion versucht, die Datei des digitalen Assets, die sich im Speicherverzeichnis des Projekts befindet, bereitzustellen. Wenn die Datei nicht gefunden wird, wird ein HTTP 404-Fehler ausgelöst, um anzuzeigen, dass die Ressource nicht verfügbar ist."
+"Bearbeitet das Herunterladen eines digitalen Assets, das mit einem Auftrag "
+"verbunden ist.\n"
+"Diese Funktion versucht, die Datei des digitalen Assets, die sich im "
+"Speicherverzeichnis des Projekts befindet, bereitzustellen. Wenn die Datei "
+"nicht gefunden wird, wird ein HTTP 404-Fehler ausgelöst, um anzuzeigen, dass "
+"die Ressource nicht verfügbar ist."
-#: engine/core/views.py:343
+#: engine/core/views.py:349
msgid "order_product_uuid is required"
msgstr "order_product_uuid ist erforderlich"
-#: engine/core/views.py:350
+#: engine/core/views.py:356
msgid "order product does not exist"
msgstr "Produkt bestellen existiert nicht"
-#: engine/core/views.py:353
+#: engine/core/views.py:359
msgid "you can only download the digital asset once"
msgstr "Sie können das digitale Asset nur einmal herunterladen"
-#: engine/core/views.py:356
+#: engine/core/views.py:363
msgid "the order must be paid before downloading the digital asset"
msgstr ""
-"die Bestellung muss vor dem Herunterladen des digitalen Assets bezahlt "
-"werden"
+"die Bestellung muss vor dem Herunterladen des digitalen Assets bezahlt werden"
-#: engine/core/views.py:362
+#: engine/core/views.py:370
msgid "the order product does not have a product"
msgstr "Das Bestellprodukt hat kein Produkt"
-#: engine/core/views.py:399
+#: engine/core/views.py:414
msgid "favicon not found"
msgstr "Favicon nicht gefunden"
-#: engine/core/views.py:404
+#: engine/core/views.py:419
msgid ""
"Handles requests for the favicon of a website.\n"
-"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the favicon file located in the static "
+"directory of the project. If the favicon file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
msgstr ""
"Bearbeitet Anfragen nach dem Favicon einer Website.\n"
-"Diese Funktion versucht, die Favicon-Datei, die sich im statischen Verzeichnis des Projekts befindet, bereitzustellen. Wenn die Favicon-Datei nicht gefunden wird, wird ein HTTP 404-Fehler ausgegeben, um anzuzeigen, dass die Ressource nicht verfügbar ist."
+"Diese Funktion versucht, die Favicon-Datei, die sich im statischen "
+"Verzeichnis des Projekts befindet, bereitzustellen. Wenn die Favicon-Datei "
+"nicht gefunden wird, wird ein HTTP 404-Fehler ausgegeben, um anzuzeigen, "
+"dass die Ressource nicht verfügbar ist."
-#: engine/core/views.py:416
+#: engine/core/views.py:431
msgid ""
-"Redirects the request to the admin index page. The function handles incoming"
-" HTTP requests and redirects them to the Django admin interface index page. "
+"Redirects the request to the admin index page. The function handles incoming "
+"HTTP requests and redirects them to the Django admin interface index page. "
"It uses Django's `redirect` function for handling the HTTP redirection."
msgstr ""
"Leitet die Anfrage auf die Admin-Indexseite um. Die Funktion verarbeitet "
@@ -3316,20 +3329,20 @@ msgstr ""
"Administrationsoberfläche um. Sie verwendet die Funktion `redirect` von "
"Django für die Bearbeitung der HTTP-Umleitung."
-#: engine/core/views.py:429
+#: engine/core/views.py:443
msgid "Returns current version of the eVibes. "
msgstr "Gibt die aktuelle Version von eVibes zurück."
-#: engine/core/views.py:623 engine/core/views.py:636
+#: engine/core/views.py:672 engine/core/views.py:687
#, python-format
msgid "Revenue & Orders (last %(days)d)"
msgstr "Einnahmen und Aufträge (zuletzt %(days)d)"
-#: engine/core/views.py:793
+#: engine/core/views.py:868
msgid "Returns custom variables for Dashboard. "
msgstr "Gibt benutzerdefinierte Variablen für das Dashboard zurück."
-#: engine/core/viewsets.py:136
+#: engine/core/viewsets.py:139
msgid ""
"Defines a viewset for managing Evibes-related operations. The EvibesViewSet "
"class inherits from ModelViewSet and provides functionality for handling "
@@ -3338,26 +3351,25 @@ msgid ""
"and rendering formats."
msgstr ""
"Definiert ein Viewset für die Verwaltung von Evibes-bezogenen Operationen. "
-"Die Klasse EvibesViewSet erbt von ModelViewSet und bietet Funktionalität für"
-" die Handhabung von Aktionen und Operationen auf Evibes-Entitäten. Sie "
+"Die Klasse EvibesViewSet erbt von ModelViewSet und bietet Funktionalität für "
+"die Handhabung von Aktionen und Operationen auf Evibes-Entitäten. Sie "
"enthält Unterstützung für dynamische Serialisiererklassen auf der Grundlage "
"der aktuellen Aktion, anpassbare Berechtigungen und Rendering-Formate."
-#: engine/core/viewsets.py:156
+#: engine/core/viewsets.py:160
msgid ""
-"Represents a viewset for managing AttributeGroup objects. Handles operations"
-" related to AttributeGroup, including filtering, serialization, and "
-"retrieval of data. This class is part of the application's API layer and "
-"provides a standardized way to process requests and responses for "
-"AttributeGroup data."
+"Represents a viewset for managing AttributeGroup objects. Handles operations "
+"related to AttributeGroup, including filtering, serialization, and retrieval "
+"of data. This class is part of the application's API layer and provides a "
+"standardized way to process requests and responses for AttributeGroup data."
msgstr ""
"Stellt ein Viewset für die Verwaltung von AttributeGroup-Objekten dar. "
"Bearbeitet Vorgänge im Zusammenhang mit AttributeGroup, einschließlich "
-"Filterung, Serialisierung und Abruf von Daten. Diese Klasse ist Teil der "
-"API-Schicht der Anwendung und bietet eine standardisierte Methode zur "
+"Filterung, Serialisierung und Abruf von Daten. Diese Klasse ist Teil der API-"
+"Schicht der Anwendung und bietet eine standardisierte Methode zur "
"Verarbeitung von Anfragen und Antworten für AttributeGroup-Daten."
-#: engine/core/viewsets.py:175
+#: engine/core/viewsets.py:179
msgid ""
"Handles operations related to Attribute objects within the application. "
"Provides a set of API endpoints to interact with Attribute data. This class "
@@ -3374,22 +3386,22 @@ msgstr ""
"oder das Abrufen detaillierter bzw. vereinfachter Informationen je nach "
"Anfrage."
-#: engine/core/viewsets.py:194
+#: engine/core/viewsets.py:198
msgid ""
"A viewset for managing AttributeValue objects. This viewset provides "
"functionality for listing, retrieving, creating, updating, and deleting "
"AttributeValue objects. It integrates with Django REST Framework's viewset "
-"mechanisms and uses appropriate serializers for different actions. Filtering"
-" capabilities are provided through the DjangoFilterBackend."
+"mechanisms and uses appropriate serializers for different actions. Filtering "
+"capabilities are provided through the DjangoFilterBackend."
msgstr ""
"Ein Viewset für die Verwaltung von AttributeValue-Objekten. Dieses Viewset "
"bietet Funktionen zum Auflisten, Abrufen, Erstellen, Aktualisieren und "
"Löschen von AttributeValue-Objekten. Es integriert sich in die Viewset-"
-"Mechanismen des Django REST Frameworks und verwendet geeignete Serialisierer"
-" für verschiedene Aktionen. Filterfunktionen werden über das "
+"Mechanismen des Django REST Frameworks und verwendet geeignete Serialisierer "
+"für verschiedene Aktionen. Filterfunktionen werden über das "
"DjangoFilterBackend bereitgestellt."
-#: engine/core/viewsets.py:213
+#: engine/core/viewsets.py:217
msgid ""
"Manages views for Category-related operations. The CategoryViewSet class is "
"responsible for handling operations related to the Category model in the "
@@ -3398,13 +3410,13 @@ msgid ""
"can access specific data."
msgstr ""
"Verwaltet Ansichten für kategoriebezogene Operationen. Die Klasse "
-"CategoryViewSet ist für die Handhabung von Vorgängen im Zusammenhang mit dem"
-" Kategoriemodell im System verantwortlich. Sie unterstützt das Abrufen, "
+"CategoryViewSet ist für die Handhabung von Vorgängen im Zusammenhang mit dem "
+"Kategoriemodell im System verantwortlich. Sie unterstützt das Abrufen, "
"Filtern und Serialisieren von Kategoriedaten. Das Viewset erzwingt auch "
"Berechtigungen, um sicherzustellen, dass nur autorisierte Benutzer auf "
"bestimmte Daten zugreifen können."
-#: engine/core/viewsets.py:326
+#: engine/core/viewsets.py:346
msgid ""
"Represents a viewset for managing Brand instances. This class provides "
"functionality for querying, filtering, and serializing Brand objects. It "
@@ -3416,7 +3428,7 @@ msgstr ""
"Objekten. Sie verwendet das ViewSet-Framework von Django, um die "
"Implementierung von API-Endpunkten für Brand-Objekte zu vereinfachen."
-#: engine/core/viewsets.py:438
+#: engine/core/viewsets.py:458
msgid ""
"Manages operations related to the `Product` model in the system. This class "
"provides a viewset for managing products, including their filtering, "
@@ -3428,14 +3440,14 @@ msgid ""
msgstr ""
"Verwaltet Vorgänge im Zusammenhang mit dem Modell \"Produkt\" im System. "
"Diese Klasse bietet ein Viewset für die Verwaltung von Produkten, "
-"einschließlich ihrer Filterung, Serialisierung und Operationen für bestimmte"
-" Instanzen. Sie ist eine Erweiterung von `EvibesViewSet`, um gemeinsame "
+"einschließlich ihrer Filterung, Serialisierung und Operationen für bestimmte "
+"Instanzen. Sie ist eine Erweiterung von `EvibesViewSet`, um gemeinsame "
"Funktionen zu nutzen und integriert sich in das Django REST Framework für "
"RESTful API Operationen. Enthält Methoden zum Abrufen von Produktdetails, "
"zur Anwendung von Berechtigungen und zum Zugriff auf zugehörige "
"Rückmeldungen zu einem Produkt."
-#: engine/core/viewsets.py:574
+#: engine/core/viewsets.py:605
msgid ""
"Represents a viewset for managing Vendor objects. This viewset allows "
"fetching, filtering, and serializing Vendor data. It defines the queryset, "
@@ -3450,64 +3462,64 @@ msgstr ""
"dieser Klasse ist die Bereitstellung eines optimierten Zugriffs auf Vendor-"
"Ressourcen über das Django REST-Framework."
-#: engine/core/viewsets.py:594
+#: engine/core/viewsets.py:625
msgid ""
"Representation of a view set handling Feedback objects. This class manages "
"operations related to Feedback objects, including listing, filtering, and "
"retrieving details. The purpose of this view set is to provide different "
-"serializers for different actions and implement permission-based handling of"
-" accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
+"serializers for different actions and implement permission-based handling of "
+"accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
"use of Django's filtering system for querying data."
msgstr ""
"Darstellung eines View-Sets, das Feedback-Objekte behandelt. Diese Klasse "
"verwaltet Vorgänge im Zusammenhang mit Feedback-Objekten, einschließlich "
"Auflistung, Filterung und Abruf von Details. Der Zweck dieses ViewSets ist "
-"es, verschiedene Serialisierer für verschiedene Aktionen bereitzustellen und"
-" eine erlaubnisbasierte Handhabung von zugänglichen Feedback-Objekten zu "
+"es, verschiedene Serialisierer für verschiedene Aktionen bereitzustellen und "
+"eine erlaubnisbasierte Handhabung von zugänglichen Feedback-Objekten zu "
"implementieren. Es erweitert das Basis `EvibesViewSet` und nutzt das "
"Filtersystem von Django zur Abfrage von Daten."
-#: engine/core/viewsets.py:621
+#: engine/core/viewsets.py:652
msgid ""
"ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes "
"various endpoints for handling order operations such as adding or removing "
-"products, performing purchases for registered as well as unregistered users,"
-" and retrieving the current authenticated user's pending orders. The ViewSet"
-" uses multiple serializers based on the specific action being performed and "
+"products, performing purchases for registered as well as unregistered users, "
+"and retrieving the current authenticated user's pending orders. The ViewSet "
+"uses multiple serializers based on the specific action being performed and "
"enforces permissions accordingly while interacting with order data."
msgstr ""
-"ViewSet zur Verwaltung von Aufträgen und zugehörigen Vorgängen. Diese Klasse"
-" bietet Funktionen zum Abrufen, Ändern und Verwalten von Bestellobjekten. "
-"Sie enthält verschiedene Endpunkte für die Handhabung von Bestellvorgängen "
-"wie das Hinzufügen oder Entfernen von Produkten, die Durchführung von Käufen"
-" für registrierte und nicht registrierte Benutzer und das Abrufen der "
+"ViewSet zur Verwaltung von Aufträgen und zugehörigen Vorgängen. Diese Klasse "
+"bietet Funktionen zum Abrufen, Ändern und Verwalten von Bestellobjekten. Sie "
+"enthält verschiedene Endpunkte für die Handhabung von Bestellvorgängen wie "
+"das Hinzufügen oder Entfernen von Produkten, die Durchführung von Käufen für "
+"registrierte und nicht registrierte Benutzer und das Abrufen der "
"ausstehenden Bestellungen des aktuell authentifizierten Benutzers. Das "
"ViewSet verwendet mehrere Serialisierer, die auf der spezifischen Aktion "
"basieren, die durchgeführt wird, und erzwingt die entsprechenden "
"Berechtigungen, während es mit den Bestelldaten interagiert."
-#: engine/core/viewsets.py:825
+#: engine/core/viewsets.py:914
msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It "
-"includes filtering, permission checks, and serializer switching based on the"
-" requested action. Additionally, it provides a detailed action for handling "
+"includes filtering, permission checks, and serializer switching based on the "
+"requested action. Additionally, it provides a detailed action for handling "
"feedback on OrderProduct instances"
msgstr ""
"Bietet ein Viewset für die Verwaltung von OrderProduct-Entitäten. Dieses "
"Viewset ermöglicht CRUD-Vorgänge und benutzerdefinierte Aktionen speziell "
"für das OrderProduct-Modell. Es umfasst Filterung, Berechtigungsprüfungen "
"und Serializer-Umschaltung auf der Grundlage der angeforderten Aktion. "
-"Außerdem bietet es eine detaillierte Aktion für die Bearbeitung von Feedback"
-" zu OrderProduct-Instanzen"
+"Außerdem bietet es eine detaillierte Aktion für die Bearbeitung von Feedback "
+"zu OrderProduct-Instanzen"
-#: engine/core/viewsets.py:879
+#: engine/core/viewsets.py:974
msgid "Manages operations related to Product images in the application. "
msgstr ""
"Verwaltet Vorgänge im Zusammenhang mit Produktbildern in der Anwendung."
-#: engine/core/viewsets.py:892
+#: engine/core/viewsets.py:988
msgid ""
"Manages the retrieval and handling of PromoCode instances through various "
"API actions."
@@ -3515,34 +3527,34 @@ msgstr ""
"Verwaltet den Abruf und die Handhabung von PromoCode-Instanzen durch "
"verschiedene API-Aktionen."
-#: engine/core/viewsets.py:914
+#: engine/core/viewsets.py:1019
msgid "Represents a view set for managing promotions. "
msgstr "Stellt ein Ansichtsset für die Verwaltung von Werbeaktionen dar."
-#: engine/core/viewsets.py:927
+#: engine/core/viewsets.py:1032
msgid "Handles operations related to Stock data in the system."
msgstr "Erledigt Vorgänge im Zusammenhang mit Bestandsdaten im System."
-#: engine/core/viewsets.py:941
+#: engine/core/viewsets.py:1046
msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the "
-"retrieval, modification, and customization of products within the wish list."
-" This ViewSet facilitates functionality such as adding, removing, and bulk "
+"retrieval, modification, and customization of products within the wish list. "
+"This ViewSet facilitates functionality such as adding, removing, and bulk "
"actions for wishlist products. Permission checks are integrated to ensure "
"that users can only manage their own wishlists unless explicit permissions "
"are granted."
msgstr ""
"ViewSet für die Verwaltung von Wishlist-Vorgängen. Das WishlistViewSet "
-"bietet Endpunkte für die Interaktion mit der Wunschliste eines Benutzers und"
-" ermöglicht das Abrufen, Ändern und Anpassen von Produkten innerhalb der "
+"bietet Endpunkte für die Interaktion mit der Wunschliste eines Benutzers und "
+"ermöglicht das Abrufen, Ändern und Anpassen von Produkten innerhalb der "
"Wunschliste. Dieses ViewSet erleichtert Funktionen wie das Hinzufügen, "
"Entfernen und Massenaktionen für Produkte auf der Wunschliste. "
"Berechtigungsprüfungen sind integriert, um sicherzustellen, dass Benutzer "
"nur ihre eigenen Wunschlisten verwalten können, sofern keine expliziten "
"Berechtigungen erteilt wurden."
-#: engine/core/viewsets.py:1056
+#: engine/core/viewsets.py:1183
msgid ""
"This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom "
@@ -3551,18 +3563,18 @@ msgid ""
"on the request context."
msgstr ""
"Diese Klasse bietet Viewset-Funktionalität für die Verwaltung von "
-"\"Address\"-Objekten. Die Klasse AddressViewSet ermöglicht CRUD-Operationen,"
-" Filterung und benutzerdefinierte Aktionen im Zusammenhang mit "
+"\"Address\"-Objekten. Die Klasse AddressViewSet ermöglicht CRUD-Operationen, "
+"Filterung und benutzerdefinierte Aktionen im Zusammenhang mit "
"Adressentitäten. Sie umfasst spezielle Verhaltensweisen für verschiedene "
"HTTP-Methoden, Serialisierungsüberschreibungen und die Behandlung von "
"Berechtigungen auf der Grundlage des Anfragekontexts."
-#: engine/core/viewsets.py:1123
+#: engine/core/viewsets.py:1254
#, python-brace-format
msgid "Geocoding error: {e}"
msgstr "Geocodierungsfehler: {e}"
-#: engine/core/viewsets.py:1131
+#: engine/core/viewsets.py:1262
msgid ""
"Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing "
@@ -3573,6 +3585,6 @@ msgstr ""
"Bearbeitet Vorgänge im Zusammenhang mit Produkt-Tags innerhalb der "
"Anwendung. Diese Klasse bietet Funktionen zum Abrufen, Filtern und "
"Serialisieren von Produkt-Tag-Objekten. Sie unterstützt die flexible "
-"Filterung nach bestimmten Attributen unter Verwendung des angegebenen "
-"Filter-Backends und verwendet dynamisch verschiedene Serialisierer auf der "
+"Filterung nach bestimmten Attributen unter Verwendung des angegebenen Filter-"
+"Backends und verwendet dynamisch verschiedene Serialisierer auf der "
"Grundlage der durchgeführten Aktion."
diff --git a/engine/core/locale/en_GB/LC_MESSAGES/django.po b/engine/core/locale/en_GB/LC_MESSAGES/django.po
index d2ec929c..e00f3476 100644
--- a/engine/core/locale/en_GB/LC_MESSAGES/django.po
+++ b/engine/core/locale/en_GB/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 22:12+0300\n"
+"POT-Creation-Date: 2025-12-18 19:09+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -29,113 +29,111 @@ msgstr "Unique ID is used to surely identify any database object"
msgid "is active"
msgstr "Is Active"
-#: engine/core/abstract.py:21
+#: engine/core/abstract.py:22
msgid ""
-"if set to false, this object can't be seen by users without needed "
-"permission"
+"if set to false, this object can't be seen by users without needed permission"
msgstr ""
-"If set to false, this object can't be seen by users without needed "
-"permission"
+"If set to false, this object can't be seen by users without needed permission"
-#: engine/core/abstract.py:23 engine/core/choices.py:18
+#: engine/core/abstract.py:26 engine/core/choices.py:18
msgid "created"
msgstr "Created"
-#: engine/core/abstract.py:23
+#: engine/core/abstract.py:26
msgid "when the object first appeared on the database"
msgstr "When the object first appeared on the database"
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "modified"
msgstr "Modified"
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "when the object was last modified"
msgstr "When the object was last edited"
-#: engine/core/admin.py:85
+#: engine/core/admin.py:94
msgid "translations"
msgstr "Translations"
-#: engine/core/admin.py:89
+#: engine/core/admin.py:102
msgid "general"
msgstr "General"
-#: engine/core/admin.py:91
+#: engine/core/admin.py:106
msgid "relations"
msgstr "Relations"
-#: engine/core/admin.py:93
+#: engine/core/admin.py:111
msgid "additional info"
msgstr "additional info"
-#: engine/core/admin.py:111
+#: engine/core/admin.py:133
msgid "metadata"
msgstr "Metadata"
-#: engine/core/admin.py:118
+#: engine/core/admin.py:141
msgid "timestamps"
msgstr "Timestamps"
-#: engine/core/admin.py:133
+#: engine/core/admin.py:157
#, python-format
msgid "activate selected %(verbose_name_plural)s"
msgstr "Activate selected %(verbose_name_plural)s"
-#: engine/core/admin.py:138
+#: engine/core/admin.py:165
msgid "selected items have been activated."
msgstr "Selected items have been activated!"
-#: engine/core/admin.py:144
+#: engine/core/admin.py:173
#, python-format
msgid "deactivate selected %(verbose_name_plural)s"
msgstr "Deactivate selected %(verbose_name_plural)s"
-#: engine/core/admin.py:149
+#: engine/core/admin.py:183
msgid "selected items have been deactivated."
msgstr "Selected items have been deactivated!"
-#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586
-#: engine/core/graphene/object_types.py:593 engine/core/models.py:801
-#: engine/core/models.py:809
+#: engine/core/admin.py:195 engine/core/graphene/object_types.py:650
+#: engine/core/graphene/object_types.py:657 engine/core/models.py:824
+#: engine/core/models.py:832
msgid "attribute value"
msgstr "Attribute Value"
-#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75
-#: engine/core/models.py:810
+#: engine/core/admin.py:196 engine/core/graphene/object_types.py:75
+#: engine/core/models.py:833
msgid "attribute values"
msgstr "Attribute Values"
-#: engine/core/admin.py:172
+#: engine/core/admin.py:207
msgid "image"
msgstr "Image"
-#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474
+#: engine/core/admin.py:208 engine/core/graphene/object_types.py:527
msgid "images"
msgstr "Images"
-#: engine/core/admin.py:184 engine/core/models.py:566
+#: engine/core/admin.py:219 engine/core/models.py:587
msgid "stock"
msgstr "Stock"
-#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640
+#: engine/core/admin.py:220 engine/core/graphene/object_types.py:710
msgid "stocks"
msgstr "Stocks"
-#: engine/core/admin.py:196 engine/core/models.py:1818
+#: engine/core/admin.py:231 engine/core/models.py:1930
msgid "order product"
msgstr "Order Product"
-#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389
-#: engine/core/models.py:1819
+#: engine/core/admin.py:232 engine/core/graphene/object_types.py:438
+#: engine/core/models.py:1931
msgid "order products"
msgstr "Order Products"
-#: engine/core/admin.py:210 engine/core/admin.py:211
+#: engine/core/admin.py:250 engine/core/admin.py:251
msgid "children"
msgstr "Children"
-#: engine/core/admin.py:977
+#: engine/core/admin.py:1059
msgid "Config"
msgstr "Config"
@@ -159,8 +157,7 @@ msgstr "Delivered"
msgid "canceled"
msgstr "Canceled"
-#: engine/core/choices.py:8 engine/core/choices.py:16
-#: engine/core/choices.py:24
+#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24
msgid "failed"
msgstr "Failed"
@@ -188,11 +185,11 @@ msgstr "Momental"
msgid "successful"
msgstr "Successful"
-#: engine/core/docs/drf/views.py:31
+#: engine/core/docs/drf/views.py:30
msgid "OpenAPI schema in selected format with selected language"
msgstr "OpenAPI schema in selected format with selected language"
-#: engine/core/docs/drf/views.py:33
+#: engine/core/docs/drf/views.py:32
msgid ""
"OpenApi3 schema for this API. Format can be selected via content "
"negotiation. Language can be selected with Accept-Language and query "
@@ -202,11 +199,11 @@ msgstr ""
"negotiation. Language can be selected with Accept-Language and query "
"parameter both."
-#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37
+#: engine/core/docs/drf/views.py:43 engine/core/graphene/mutations.py:37
msgid "cache I/O"
msgstr "Cache I/O"
-#: engine/core/docs/drf/views.py:46
+#: engine/core/docs/drf/views.py:45
msgid ""
"apply only a key to read permitted data from cache.\n"
"apply key, data and timeout with authentication to write data to cache."
@@ -214,35 +211,35 @@ msgstr ""
"Apply only a key to read permitted data from cache.\n"
"Apply key, data and timeout with authentication to write data to cache."
-#: engine/core/docs/drf/views.py:62
+#: engine/core/docs/drf/views.py:63
msgid "get a list of supported languages"
msgstr "Get a list of supported languages"
-#: engine/core/docs/drf/views.py:74
+#: engine/core/docs/drf/views.py:75
msgid "get application's exposable parameters"
msgstr "Get application's exposable parameters"
-#: engine/core/docs/drf/views.py:84
+#: engine/core/docs/drf/views.py:89
msgid "send a message to the support team"
msgstr "Send a message to the support team"
-#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57
+#: engine/core/docs/drf/views.py:103 engine/core/graphene/mutations.py:59
msgid "request a CORSed URL"
msgstr "Request a CORSed URL. Only https allowed."
-#: engine/core/docs/drf/views.py:112
+#: engine/core/docs/drf/views.py:119
msgid "Search between products, categories and brands"
msgstr "Search between products, categories and brands"
-#: engine/core/docs/drf/views.py:130
+#: engine/core/docs/drf/views.py:141
msgid "global search endpoint to query across project's tables"
msgstr "Global search endpoint to query across project's tables"
-#: engine/core/docs/drf/views.py:139
+#: engine/core/docs/drf/views.py:150
msgid "purchase an order as a business"
msgstr "Purchase an order as a Business"
-#: engine/core/docs/drf/views.py:146
+#: engine/core/docs/drf/views.py:158
msgid ""
"purchase an order as a business, using the provided `products` with "
"`product_uuid` and `attributes`."
@@ -250,213 +247,211 @@ msgstr ""
"Purchase an order as a business, using the provided `products` with "
"`product_uuid` and `attributes`."
-#: engine/core/docs/drf/views.py:164
+#: engine/core/docs/drf/views.py:177
msgid "download a digital asset from purchased digital order"
msgstr "download a digital asset from purchased digital order"
-#: engine/core/docs/drf/viewsets.py:61
+#: engine/core/docs/drf/viewsets.py:65
msgid "list all attribute groups (simple view)"
msgstr "List all attribute groups (simple view)"
-#: engine/core/docs/drf/viewsets.py:68
+#: engine/core/docs/drf/viewsets.py:75
msgid "retrieve a single attribute group (detailed view)"
msgstr "Retrieve a single attribute group (detailed view)"
-#: engine/core/docs/drf/viewsets.py:75
+#: engine/core/docs/drf/viewsets.py:82
msgid "create an attribute group"
msgstr "Create an attribute group"
-#: engine/core/docs/drf/viewsets.py:82
+#: engine/core/docs/drf/viewsets.py:92
msgid "delete an attribute group"
msgstr "Delete an attribute group"
-#: engine/core/docs/drf/viewsets.py:89
+#: engine/core/docs/drf/viewsets.py:99
msgid "rewrite an existing attribute group saving non-editables"
msgstr "Rewrite an existing attribute group saving non-editables"
-#: engine/core/docs/drf/viewsets.py:96
-msgid ""
-"rewrite some fields of an existing attribute group saving non-editables"
+#: engine/core/docs/drf/viewsets.py:107
+msgid "rewrite some fields of an existing attribute group saving non-editables"
msgstr ""
"Rewrite some fields of an existing attribute group saving non-editables"
-#: engine/core/docs/drf/viewsets.py:106
+#: engine/core/docs/drf/viewsets.py:118
msgid "list all attributes (simple view)"
msgstr "List all attributes (simple view)"
-#: engine/core/docs/drf/viewsets.py:113
+#: engine/core/docs/drf/viewsets.py:128
msgid "retrieve a single attribute (detailed view)"
msgstr "Retrieve a single attribute (detailed view)"
-#: engine/core/docs/drf/viewsets.py:120
+#: engine/core/docs/drf/viewsets.py:135
msgid "create an attribute"
msgstr "Create an attribute"
-#: engine/core/docs/drf/viewsets.py:127
+#: engine/core/docs/drf/viewsets.py:142
msgid "delete an attribute"
msgstr "Delete an attribute"
-#: engine/core/docs/drf/viewsets.py:134
+#: engine/core/docs/drf/viewsets.py:149
msgid "rewrite an existing attribute saving non-editables"
msgstr "Rewrite an existing attribute saving non-editables"
-#: engine/core/docs/drf/viewsets.py:141
+#: engine/core/docs/drf/viewsets.py:156
msgid "rewrite some fields of an existing attribute saving non-editables"
msgstr "Rewrite some fields of an existing attribute saving non-editables"
-#: engine/core/docs/drf/viewsets.py:151
+#: engine/core/docs/drf/viewsets.py:166
msgid "list all attribute values (simple view)"
msgstr "List all attribute values (simple view)"
-#: engine/core/docs/drf/viewsets.py:158
+#: engine/core/docs/drf/viewsets.py:176
msgid "retrieve a single attribute value (detailed view)"
msgstr "Retrieve a single attribute value (detailed view)"
-#: engine/core/docs/drf/viewsets.py:165
+#: engine/core/docs/drf/viewsets.py:183
msgid "create an attribute value"
msgstr "Create an attribute value"
-#: engine/core/docs/drf/viewsets.py:172
+#: engine/core/docs/drf/viewsets.py:193
msgid "delete an attribute value"
msgstr "Delete an attribute value"
-#: engine/core/docs/drf/viewsets.py:179
+#: engine/core/docs/drf/viewsets.py:200
msgid "rewrite an existing attribute value saving non-editables"
msgstr "Rewrite an existing attribute value saving non-editables"
-#: engine/core/docs/drf/viewsets.py:186
-msgid ""
-"rewrite some fields of an existing attribute value saving non-editables"
+#: engine/core/docs/drf/viewsets.py:208
+msgid "rewrite some fields of an existing attribute value saving non-editables"
msgstr ""
"Rewrite some fields of an existing attribute value saving non-editables"
-#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197
+#: engine/core/docs/drf/viewsets.py:219 engine/core/docs/drf/viewsets.py:220
msgid "list all categories (simple view)"
msgstr "List all categories (simple view)"
-#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205
+#: engine/core/docs/drf/viewsets.py:230 engine/core/docs/drf/viewsets.py:231
msgid "retrieve a single category (detailed view)"
msgstr "Retrieve a single category (detailed view)"
-#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258
+#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:286
msgid "Category UUID or slug"
msgstr "Category UUID or slug"
-#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221
+#: engine/core/docs/drf/viewsets.py:246 engine/core/docs/drf/viewsets.py:247
msgid "create a category"
msgstr "Create a category"
-#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229
+#: engine/core/docs/drf/viewsets.py:254 engine/core/docs/drf/viewsets.py:255
msgid "delete a category"
msgstr "Delete a category"
-#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237
+#: engine/core/docs/drf/viewsets.py:262 engine/core/docs/drf/viewsets.py:263
msgid "rewrite an existing category saving non-editables"
msgstr "Rewrite an existing category saving non-editables"
-#: engine/core/docs/drf/viewsets.py:244 engine/core/docs/drf/viewsets.py:245
+#: engine/core/docs/drf/viewsets.py:270 engine/core/docs/drf/viewsets.py:272
msgid "rewrite some fields of an existing category saving non-editables"
msgstr "Rewrite some fields of an existing category saving non-editables"
-#: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704
-#: engine/core/docs/drf/viewsets.py:988
+#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:1046
#: engine/core/graphene/object_types.py:117
-#: engine/core/graphene/object_types.py:207
-#: engine/core/graphene/object_types.py:482
+#: engine/core/graphene/object_types.py:236
+#: engine/core/graphene/object_types.py:537
msgid "SEO Meta snapshot"
msgstr "SEO Meta snapshot"
-#: engine/core/docs/drf/viewsets.py:253
+#: engine/core/docs/drf/viewsets.py:281
msgid "returns a snapshot of the category's SEO meta data"
msgstr "Returns a snapshot of the category's SEO meta data"
-#: engine/core/docs/drf/viewsets.py:274
+#: engine/core/docs/drf/viewsets.py:302
msgid "list all orders (simple view)"
msgstr "List all categories (simple view)"
-#: engine/core/docs/drf/viewsets.py:275
+#: engine/core/docs/drf/viewsets.py:303
msgid "for non-staff users, only their own orders are returned."
msgstr "For non-staff users, only their own orders are returned."
-#: engine/core/docs/drf/viewsets.py:281
+#: engine/core/docs/drf/viewsets.py:309
msgid ""
-"Case-insensitive substring search across human_readable_id, "
-"order_products.product.name, and order_products.product.partnumber"
+"Case-insensitive substring search across human_readable_id, order_products."
+"product.name, and order_products.product.partnumber"
msgstr ""
-"Case-insensitive substring search across human_readable_id, "
-"order_products.product.name, and order_products.product.partnumber"
+"Case-insensitive substring search across human_readable_id, order_products."
+"product.name, and order_products.product.partnumber"
-#: engine/core/docs/drf/viewsets.py:288
+#: engine/core/docs/drf/viewsets.py:316
msgid "Filter orders with buy_time >= this ISO 8601 datetime"
msgstr "Filter orders with buy_time >= this ISO 8601 datetime"
-#: engine/core/docs/drf/viewsets.py:293
+#: engine/core/docs/drf/viewsets.py:321
msgid "Filter orders with buy_time <= this ISO 8601 datetime"
msgstr "Filter orders with buy_time <= this ISO 8601 datetime"
-#: engine/core/docs/drf/viewsets.py:298
+#: engine/core/docs/drf/viewsets.py:326
msgid "Filter by exact order UUID"
msgstr "Filter by exact order UUID"
-#: engine/core/docs/drf/viewsets.py:303
+#: engine/core/docs/drf/viewsets.py:331
msgid "Filter by exact human-readable order ID"
msgstr "Filter by exact human-readable order ID"
-#: engine/core/docs/drf/viewsets.py:308
+#: engine/core/docs/drf/viewsets.py:336
msgid "Filter by user's email (case-insensitive exact match)"
msgstr "Filter by user's email (case-insensitive exact match)"
-#: engine/core/docs/drf/viewsets.py:313
+#: engine/core/docs/drf/viewsets.py:341
msgid "Filter by user's UUID"
msgstr "Filter by user's UUID"
-#: engine/core/docs/drf/viewsets.py:318
+#: engine/core/docs/drf/viewsets.py:347
msgid "Filter by order status (case-insensitive substring match)"
msgstr "Filter by order status (case-insensitive substring match)"
-#: engine/core/docs/drf/viewsets.py:324
+#: engine/core/docs/drf/viewsets.py:354
msgid ""
-"Order by one of: uuid, human_readable_id, user_email, user, status, created,"
-" modified, buy_time, random. Prefix with '-' for descending (e.g. "
-"'-buy_time')."
+"Order by one of: uuid, human_readable_id, user_email, user, status, created, "
+"modified, buy_time, random. Prefix with '-' for descending (e.g. '-"
+"buy_time')."
msgstr ""
-"Order by one of: uuid, human_readable_id, user_email, user, status, created,"
-" modified, buy_time, random. Prefix with '-' for descending (e.g. "
-"'-buy_time')."
+"Order by one of: uuid, human_readable_id, user_email, user, status, created, "
+"modified, buy_time, random. Prefix with '-' for descending (e.g. '-"
+"buy_time')."
-#: engine/core/docs/drf/viewsets.py:336
+#: engine/core/docs/drf/viewsets.py:366
msgid "retrieve a single order (detailed view)"
msgstr "Retrieve a single category (detailed view)"
-#: engine/core/docs/drf/viewsets.py:341
+#: engine/core/docs/drf/viewsets.py:371
msgid "Order UUID or human-readable id"
msgstr "Order UUID or human-readable id"
-#: engine/core/docs/drf/viewsets.py:351
+#: engine/core/docs/drf/viewsets.py:381
msgid "create an order"
msgstr "Create an attribute"
-#: engine/core/docs/drf/viewsets.py:352
+#: engine/core/docs/drf/viewsets.py:382
msgid "doesn't work for non-staff users."
msgstr "Doesn't work for non-staff users."
-#: engine/core/docs/drf/viewsets.py:359
+#: engine/core/docs/drf/viewsets.py:389
msgid "delete an order"
msgstr "Delete an attribute"
-#: engine/core/docs/drf/viewsets.py:366
+#: engine/core/docs/drf/viewsets.py:396
msgid "rewrite an existing order saving non-editables"
msgstr "Rewrite an existing category saving non-editables"
-#: engine/core/docs/drf/viewsets.py:373
+#: engine/core/docs/drf/viewsets.py:403
msgid "rewrite some fields of an existing order saving non-editables"
msgstr "Rewrite some fields of an existing category saving non-editables"
-#: engine/core/docs/drf/viewsets.py:380
+#: engine/core/docs/drf/viewsets.py:410
msgid "purchase an order"
msgstr "Purchase price at order time"
-#: engine/core/docs/drf/viewsets.py:382
+#: engine/core/docs/drf/viewsets.py:412
msgid ""
"finalizes the order purchase. if `force_balance` is used, the purchase is "
"completed using the user's balance; if `force_payment` is used, a "
@@ -466,27 +461,27 @@ msgstr ""
"completed using the user's balance; If `force_payment` is used, a "
"transaction is initiated."
-#: engine/core/docs/drf/viewsets.py:397
+#: engine/core/docs/drf/viewsets.py:427
msgid "retrieve current pending order of a user"
msgstr "retrieve current pending order of a user"
-#: engine/core/docs/drf/viewsets.py:398
+#: engine/core/docs/drf/viewsets.py:428
msgid "retrieves a current pending order of an authenticated user"
msgstr "retrieves a current pending order of an authenticated user"
-#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334
+#: engine/core/docs/drf/viewsets.py:438 engine/core/graphene/mutations.py:354
msgid "purchase an order without account creation"
msgstr "purchase an order without account creation"
-#: engine/core/docs/drf/viewsets.py:409
+#: engine/core/docs/drf/viewsets.py:439
msgid "finalizes the order purchase for a non-registered user."
msgstr "finalizes the order purchase for a non-registered user."
-#: engine/core/docs/drf/viewsets.py:420
+#: engine/core/docs/drf/viewsets.py:450
msgid "add product to order"
msgstr "Add a product to the order"
-#: engine/core/docs/drf/viewsets.py:421
+#: engine/core/docs/drf/viewsets.py:452
msgid ""
"adds a product to an order using the provided `product_uuid` and "
"`attributes`."
@@ -494,11 +489,11 @@ msgstr ""
"Adds a product to an order using the provided `product_uuid` and "
"`attributes`."
-#: engine/core/docs/drf/viewsets.py:429
+#: engine/core/docs/drf/viewsets.py:461
msgid "add a list of products to order, quantities will not count"
msgstr "Add a list of products to order, quantities will not count"
-#: engine/core/docs/drf/viewsets.py:430
+#: engine/core/docs/drf/viewsets.py:463
msgid ""
"adds a list of products to an order using the provided `product_uuid` and "
"`attributes`."
@@ -506,11 +501,11 @@ msgstr ""
"Adds a list of products to an order using the provided `product_uuid` and "
"`attributes`."
-#: engine/core/docs/drf/viewsets.py:438
+#: engine/core/docs/drf/viewsets.py:472
msgid "remove product from order"
msgstr "Remove a product from the order"
-#: engine/core/docs/drf/viewsets.py:439
+#: engine/core/docs/drf/viewsets.py:474
msgid ""
"removes a product from an order using the provided `product_uuid` and "
"`attributes`."
@@ -518,11 +513,11 @@ msgstr ""
"Removes a product from an order using the provided `product_uuid` and "
"`attributes`."
-#: engine/core/docs/drf/viewsets.py:447
+#: engine/core/docs/drf/viewsets.py:483
msgid "remove product from order, quantities will not count"
msgstr "Remove a product from order, quantities will not count"
-#: engine/core/docs/drf/viewsets.py:448
+#: engine/core/docs/drf/viewsets.py:485
msgid ""
"removes a list of products from an order using the provided `product_uuid` "
"and `attributes`"
@@ -530,690 +525,702 @@ msgstr ""
"Removes a list of products from an order using the provided `product_uuid` "
"and `attributes`."
-#: engine/core/docs/drf/viewsets.py:459
+#: engine/core/docs/drf/viewsets.py:497
msgid "list all wishlists (simple view)"
msgstr "List all attributes (simple view)"
-#: engine/core/docs/drf/viewsets.py:460
+#: engine/core/docs/drf/viewsets.py:498
msgid "for non-staff users, only their own wishlists are returned."
msgstr "For non-staff users, only their own wishlists are returned."
-#: engine/core/docs/drf/viewsets.py:467
+#: engine/core/docs/drf/viewsets.py:508
msgid "retrieve a single wishlist (detailed view)"
msgstr "Retrieve a single attribute (detailed view)"
-#: engine/core/docs/drf/viewsets.py:474
+#: engine/core/docs/drf/viewsets.py:515
msgid "create an wishlist"
msgstr "Create an attribute"
-#: engine/core/docs/drf/viewsets.py:475
+#: engine/core/docs/drf/viewsets.py:516
msgid "Doesn't work for non-staff users."
msgstr "Doesn't work for non-staff users."
-#: engine/core/docs/drf/viewsets.py:482
+#: engine/core/docs/drf/viewsets.py:523
msgid "delete an wishlist"
msgstr "Delete an attribute"
-#: engine/core/docs/drf/viewsets.py:489
+#: engine/core/docs/drf/viewsets.py:530
msgid "rewrite an existing wishlist saving non-editables"
msgstr "Rewrite an existing attribute saving non-editables"
-#: engine/core/docs/drf/viewsets.py:496
+#: engine/core/docs/drf/viewsets.py:537
msgid "rewrite some fields of an existing wishlist saving non-editables"
msgstr "Rewrite some fields of an existing attribute saving non-editables"
-#: engine/core/docs/drf/viewsets.py:503
+#: engine/core/docs/drf/viewsets.py:544
msgid "retrieve current pending wishlist of a user"
msgstr "retrieve current pending wishlist of a user"
-#: engine/core/docs/drf/viewsets.py:504
+#: engine/core/docs/drf/viewsets.py:545
msgid "retrieves a current pending wishlist of an authenticated user"
msgstr "retrieves a current pending wishlist of an authenticated user"
-#: engine/core/docs/drf/viewsets.py:514
+#: engine/core/docs/drf/viewsets.py:555
msgid "add product to wishlist"
msgstr "Add a product to the order"
-#: engine/core/docs/drf/viewsets.py:515
+#: engine/core/docs/drf/viewsets.py:557
msgid "adds a product to an wishlist using the provided `product_uuid`"
msgstr "Adds a product to an wishlist using the provided `product_uuid`"
-#: engine/core/docs/drf/viewsets.py:523
+#: engine/core/docs/drf/viewsets.py:566
msgid "remove product from wishlist"
msgstr "Remove a product from the wishlist"
-#: engine/core/docs/drf/viewsets.py:524
+#: engine/core/docs/drf/viewsets.py:568
msgid "removes a product from an wishlist using the provided `product_uuid`"
msgstr "Removes a product from an wishlist using the provided `product_uuid`"
-#: engine/core/docs/drf/viewsets.py:532
+#: engine/core/docs/drf/viewsets.py:577
msgid "add many products to wishlist"
msgstr "Add many products to the wishlist"
-#: engine/core/docs/drf/viewsets.py:533
+#: engine/core/docs/drf/viewsets.py:579
msgid "adds many products to an wishlist using the provided `product_uuids`"
msgstr "Adds many products to an wishlist using the provided `product_uuids`"
-#: engine/core/docs/drf/viewsets.py:541
+#: engine/core/docs/drf/viewsets.py:588
msgid "remove many products from wishlist"
msgstr "Remove a product from the order"
-#: engine/core/docs/drf/viewsets.py:542
+#: engine/core/docs/drf/viewsets.py:590
msgid ""
"removes many products from an wishlist using the provided `product_uuids`"
msgstr ""
"Removes many products from an wishlist using the provided `product_uuids`"
-#: engine/core/docs/drf/viewsets.py:549
+#: engine/core/docs/drf/viewsets.py:598
msgid ""
"Filter by one or more attribute name/value pairs. \n"
"• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n"
-"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n"
-"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n"
+"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, "
+"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, "
+"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n"
+"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), "
+"`true`/`false` for booleans, integers, floats; otherwise treated as "
+"string. \n"
"• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n"
"Examples: \n"
-"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n"
+"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\","
+"\"bluetooth\"]`, \n"
"`b64-description=icontains-aGVhdC1jb2xk`"
msgstr ""
"Filter by one or more attribute name/value pairs. \n"
"• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n"
-"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n"
-"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n"
+"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, "
+"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, "
+"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n"
+"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), "
+"`true`/`false` for booleans, integers, floats; otherwise treated as "
+"string. \n"
"• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n"
"Examples: \n"
-"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n"
+"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\","
+"\"bluetooth\"]`, \n"
"`b64-description=icontains-aGVhdC1jb2xk`"
-#: engine/core/docs/drf/viewsets.py:568 engine/core/docs/drf/viewsets.py:569
+#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
msgid "list all products (simple view)"
msgstr "List all products (simple view)"
-#: engine/core/docs/drf/viewsets.py:574
+#: engine/core/docs/drf/viewsets.py:623
msgid "(exact) Product UUID"
msgstr "(exact) Product UUID"
-#: engine/core/docs/drf/viewsets.py:581
+#: engine/core/docs/drf/viewsets.py:630
msgid ""
-"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n"
+"Comma-separated list of fields to sort by. Prefix with `-` for "
+"descending. \n"
"**Allowed:** uuid, rating, name, slug, created, modified, price, random"
msgstr ""
-"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n"
+"Comma-separated list of fields to sort by. Prefix with `-` for "
+"descending. \n"
"**Allowed:** uuid, rating, name, slug, created, modified, price, random"
-#: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599
+#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
msgid "retrieve a single product (detailed view)"
msgstr "Retrieve a single product (detailed view)"
-#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634
-#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672
-#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710
+#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683
+#: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725
+#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763
msgid "Product UUID or slug"
msgstr "Product UUID or Slug"
-#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
+#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
#: engine/core/graphene/dashboard_mutations/product.py:80
#: engine/core/graphene/dashboard_mutations/product.py:118
#: engine/core/graphene/dashboard_mutations/product.py:166
msgid "create a product"
msgstr "Create a product"
-#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629
+#: engine/core/docs/drf/viewsets.py:677 engine/core/docs/drf/viewsets.py:678
msgid "rewrite an existing product, preserving non-editable fields"
msgstr "Rewrite an existing product, preserving non-editable fields"
-#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
+#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:700
msgid ""
"update some fields of an existing product, preserving non-editable fields"
msgstr ""
"Update some fields of an existing product, preserving non-editable fields"
-#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
+#: engine/core/docs/drf/viewsets.py:719 engine/core/docs/drf/viewsets.py:720
msgid "delete a product"
msgstr "Delete a product"
-#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686
+#: engine/core/docs/drf/viewsets.py:738 engine/core/docs/drf/viewsets.py:739
msgid "lists all permitted feedbacks for a product"
msgstr "lists all permitted feedbacks for a product"
-#: engine/core/docs/drf/viewsets.py:705
+#: engine/core/docs/drf/viewsets.py:758
msgid "returns a snapshot of the product's SEO meta data"
msgstr "Returns a snapshot of the product's SEO meta data"
-#: engine/core/docs/drf/viewsets.py:726
+#: engine/core/docs/drf/viewsets.py:779
msgid "list all addresses"
msgstr "List all addresses"
-#: engine/core/docs/drf/viewsets.py:736
+#: engine/core/docs/drf/viewsets.py:789
msgid "retrieve a single address"
msgstr "Retrieve a single address"
-#: engine/core/docs/drf/viewsets.py:746
+#: engine/core/docs/drf/viewsets.py:799
msgid "create a new address"
msgstr "Create a new address"
-#: engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:810
msgid "delete an address"
msgstr "Delete an address"
-#: engine/core/docs/drf/viewsets.py:767
+#: engine/core/docs/drf/viewsets.py:820
msgid "update an entire address"
msgstr "Update an entire address"
-#: engine/core/docs/drf/viewsets.py:778
+#: engine/core/docs/drf/viewsets.py:831
msgid "partially update an address"
msgstr "Partially update an address"
-#: engine/core/docs/drf/viewsets.py:789
+#: engine/core/docs/drf/viewsets.py:842
msgid "autocomplete address suggestions"
msgstr "Autocomplete address input"
-#: engine/core/docs/drf/viewsets.py:794
+#: engine/core/docs/drf/viewsets.py:848
msgid "raw data query string, please append with data from geo-IP endpoint"
msgstr "Raw data query string, please append with data from geo-IP endpoint"
-#: engine/core/docs/drf/viewsets.py:800
+#: engine/core/docs/drf/viewsets.py:855
msgid "limit the results amount, 1 < limit < 10, default: 5"
msgstr "limits the results amount, 1 < limit < 10, default: 5"
-#: engine/core/docs/drf/viewsets.py:816
+#: engine/core/docs/drf/viewsets.py:871
msgid "list all feedbacks (simple view)"
msgstr "list all feedbacks (simple view)"
-#: engine/core/docs/drf/viewsets.py:823
+#: engine/core/docs/drf/viewsets.py:881
msgid "retrieve a single feedback (detailed view)"
msgstr "retrieve a single feedback (detailed view)"
-#: engine/core/docs/drf/viewsets.py:830
+#: engine/core/docs/drf/viewsets.py:888
msgid "create a feedback"
msgstr "create a feedback"
-#: engine/core/docs/drf/viewsets.py:837
+#: engine/core/docs/drf/viewsets.py:895
msgid "delete a feedback"
msgstr "delete a feedback"
-#: engine/core/docs/drf/viewsets.py:844
+#: engine/core/docs/drf/viewsets.py:902
msgid "rewrite an existing feedback saving non-editables"
msgstr "rewrite an existing feedback saving non-editables"
-#: engine/core/docs/drf/viewsets.py:851
+#: engine/core/docs/drf/viewsets.py:909
msgid "rewrite some fields of an existing feedback saving non-editables"
msgstr "rewrite some fields of an existing feedback saving non-editables"
-#: engine/core/docs/drf/viewsets.py:861
+#: engine/core/docs/drf/viewsets.py:919
msgid "list all order–product relations (simple view)"
msgstr "list all order–product relations (simple view)"
-#: engine/core/docs/drf/viewsets.py:871
+#: engine/core/docs/drf/viewsets.py:929
msgid "retrieve a single order–product relation (detailed view)"
msgstr "retrieve a single order–product relation (detailed view)"
-#: engine/core/docs/drf/viewsets.py:881
+#: engine/core/docs/drf/viewsets.py:939
msgid "create a new order–product relation"
msgstr "create a new order–product relation"
-#: engine/core/docs/drf/viewsets.py:891
+#: engine/core/docs/drf/viewsets.py:949
msgid "replace an existing order–product relation"
msgstr "replace an existing order–product relation"
-#: engine/core/docs/drf/viewsets.py:901
+#: engine/core/docs/drf/viewsets.py:959
msgid "partially update an existing order–product relation"
msgstr "partially update an existing order–product relation"
-#: engine/core/docs/drf/viewsets.py:911
+#: engine/core/docs/drf/viewsets.py:969
msgid "delete an order–product relation"
msgstr "delete an order–product relation"
-#: engine/core/docs/drf/viewsets.py:921
+#: engine/core/docs/drf/viewsets.py:979
msgid "add or remove feedback on an order–product relation"
msgstr "add or remove feedback on an order–product relation"
-#: engine/core/docs/drf/viewsets.py:938
+#: engine/core/docs/drf/viewsets.py:996
msgid "list all brands (simple view)"
msgstr "List all brands (simple view)"
-#: engine/core/docs/drf/viewsets.py:945
+#: engine/core/docs/drf/viewsets.py:1003
msgid "retrieve a single brand (detailed view)"
msgstr "Retrieve a single brand (detailed view)"
-#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993
+#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051
msgid "Brand UUID or slug"
msgstr "Brand UUID or slug"
-#: engine/core/docs/drf/viewsets.py:960
+#: engine/core/docs/drf/viewsets.py:1018
msgid "create a brand"
msgstr "Create a brand"
-#: engine/core/docs/drf/viewsets.py:967
+#: engine/core/docs/drf/viewsets.py:1025
msgid "delete a brand"
msgstr "Delete a brand"
-#: engine/core/docs/drf/viewsets.py:974
+#: engine/core/docs/drf/viewsets.py:1032
msgid "rewrite an existing brand saving non-editables"
msgstr "Rewrite an existing brand saving non-editables"
-#: engine/core/docs/drf/viewsets.py:981
+#: engine/core/docs/drf/viewsets.py:1039
msgid "rewrite some fields of an existing brand saving non-editables"
msgstr "Rewrite some fields of an existing brand saving non-editables"
-#: engine/core/docs/drf/viewsets.py:1006
+#: engine/core/docs/drf/viewsets.py:1064
msgid "list all vendors (simple view)"
msgstr "List all vendors (simple view)"
-#: engine/core/docs/drf/viewsets.py:1013
+#: engine/core/docs/drf/viewsets.py:1074
msgid "retrieve a single vendor (detailed view)"
msgstr "Retrieve a single vendor (detailed view)"
-#: engine/core/docs/drf/viewsets.py:1020
+#: engine/core/docs/drf/viewsets.py:1081
msgid "create a vendor"
msgstr "Create a vendor"
-#: engine/core/docs/drf/viewsets.py:1027
+#: engine/core/docs/drf/viewsets.py:1088
msgid "delete a vendor"
msgstr "Delete a vendor"
-#: engine/core/docs/drf/viewsets.py:1034
+#: engine/core/docs/drf/viewsets.py:1095
msgid "rewrite an existing vendor saving non-editables"
msgstr "Rewrite an existing vendor saving non-editables"
-#: engine/core/docs/drf/viewsets.py:1041
+#: engine/core/docs/drf/viewsets.py:1102
msgid "rewrite some fields of an existing vendor saving non-editables"
msgstr "Rewrite some fields of an existing vendor saving non-editables"
-#: engine/core/docs/drf/viewsets.py:1051
+#: engine/core/docs/drf/viewsets.py:1112
msgid "list all product images (simple view)"
msgstr "List all product images (simple view)"
-#: engine/core/docs/drf/viewsets.py:1058
+#: engine/core/docs/drf/viewsets.py:1122
msgid "retrieve a single product image (detailed view)"
msgstr "Retrieve a single product image (detailed view)"
-#: engine/core/docs/drf/viewsets.py:1065
+#: engine/core/docs/drf/viewsets.py:1129
msgid "create a product image"
msgstr "Create a product image"
-#: engine/core/docs/drf/viewsets.py:1072
+#: engine/core/docs/drf/viewsets.py:1139
msgid "delete a product image"
msgstr "Delete a product image"
-#: engine/core/docs/drf/viewsets.py:1079
+#: engine/core/docs/drf/viewsets.py:1146
msgid "rewrite an existing product image saving non-editables"
msgstr "Rewrite an existing product image saving non-editables"
-#: engine/core/docs/drf/viewsets.py:1086
+#: engine/core/docs/drf/viewsets.py:1154
msgid "rewrite some fields of an existing product image saving non-editables"
msgstr "Rewrite some fields of an existing product image saving non-editables"
-#: engine/core/docs/drf/viewsets.py:1096
+#: engine/core/docs/drf/viewsets.py:1165
msgid "list all promo codes (simple view)"
msgstr "List all promo codes (simple view)"
-#: engine/core/docs/drf/viewsets.py:1103
+#: engine/core/docs/drf/viewsets.py:1175
msgid "retrieve a single promo code (detailed view)"
msgstr "Retrieve a single promo code (detailed view)"
-#: engine/core/docs/drf/viewsets.py:1110
+#: engine/core/docs/drf/viewsets.py:1182
msgid "create a promo code"
msgstr "Create a promo code"
-#: engine/core/docs/drf/viewsets.py:1117
+#: engine/core/docs/drf/viewsets.py:1189
msgid "delete a promo code"
msgstr "Delete a promo code"
-#: engine/core/docs/drf/viewsets.py:1124
+#: engine/core/docs/drf/viewsets.py:1196
msgid "rewrite an existing promo code saving non-editables"
msgstr "Rewrite an existing promo code saving non-editables"
-#: engine/core/docs/drf/viewsets.py:1131
+#: engine/core/docs/drf/viewsets.py:1203
msgid "rewrite some fields of an existing promo code saving non-editables"
msgstr "Rewrite some fields of an existing promo code saving non-editables"
-#: engine/core/docs/drf/viewsets.py:1141
+#: engine/core/docs/drf/viewsets.py:1213
msgid "list all promotions (simple view)"
msgstr "List all promotions (simple view)"
-#: engine/core/docs/drf/viewsets.py:1148
+#: engine/core/docs/drf/viewsets.py:1223
msgid "retrieve a single promotion (detailed view)"
msgstr "Retrieve a single promotion (detailed view)"
-#: engine/core/docs/drf/viewsets.py:1155
+#: engine/core/docs/drf/viewsets.py:1230
msgid "create a promotion"
msgstr "Create a promotion"
-#: engine/core/docs/drf/viewsets.py:1162
+#: engine/core/docs/drf/viewsets.py:1237
msgid "delete a promotion"
msgstr "Delete a promotion"
-#: engine/core/docs/drf/viewsets.py:1169
+#: engine/core/docs/drf/viewsets.py:1244
msgid "rewrite an existing promotion saving non-editables"
msgstr "Rewrite an existing promotion saving non-editables"
-#: engine/core/docs/drf/viewsets.py:1176
+#: engine/core/docs/drf/viewsets.py:1251
msgid "rewrite some fields of an existing promotion saving non-editables"
msgstr "Rewrite some fields of an existing promotion saving non-editables"
-#: engine/core/docs/drf/viewsets.py:1186
+#: engine/core/docs/drf/viewsets.py:1261
msgid "list all stocks (simple view)"
msgstr "List all stocks (simple view)"
-#: engine/core/docs/drf/viewsets.py:1193
+#: engine/core/docs/drf/viewsets.py:1268
msgid "retrieve a single stock (detailed view)"
msgstr "Retrieve a single stock (detailed view)"
-#: engine/core/docs/drf/viewsets.py:1200
+#: engine/core/docs/drf/viewsets.py:1275
msgid "create a stock record"
msgstr "Create a stock record"
-#: engine/core/docs/drf/viewsets.py:1207
+#: engine/core/docs/drf/viewsets.py:1282
msgid "delete a stock record"
msgstr "Delete a stock record"
-#: engine/core/docs/drf/viewsets.py:1214
+#: engine/core/docs/drf/viewsets.py:1289
msgid "rewrite an existing stock record saving non-editables"
msgstr "Rewrite an existing stock record saving non-editables"
-#: engine/core/docs/drf/viewsets.py:1221
+#: engine/core/docs/drf/viewsets.py:1297
msgid "rewrite some fields of an existing stock record saving non-editables"
msgstr "Rewrite some fields of an existing stock record saving non-editables"
-#: engine/core/docs/drf/viewsets.py:1231
+#: engine/core/docs/drf/viewsets.py:1308
msgid "list all product tags (simple view)"
msgstr "List all product tags (simple view)"
-#: engine/core/docs/drf/viewsets.py:1238
+#: engine/core/docs/drf/viewsets.py:1318
msgid "retrieve a single product tag (detailed view)"
msgstr "Retrieve a single product tag (detailed view)"
-#: engine/core/docs/drf/viewsets.py:1245
+#: engine/core/docs/drf/viewsets.py:1325
msgid "create a product tag"
msgstr "Create a product tag"
-#: engine/core/docs/drf/viewsets.py:1252
+#: engine/core/docs/drf/viewsets.py:1335
msgid "delete a product tag"
msgstr "Delete a product tag"
-#: engine/core/docs/drf/viewsets.py:1259
+#: engine/core/docs/drf/viewsets.py:1342
msgid "rewrite an existing product tag saving non-editables"
msgstr "Rewrite an existing product tag saving non-editables"
-#: engine/core/docs/drf/viewsets.py:1266
+#: engine/core/docs/drf/viewsets.py:1350
msgid "rewrite some fields of an existing product tag saving non-editables"
msgstr "Rewrite some fields of an existing product tag saving non-editables"
-#: engine/core/elasticsearch/__init__.py:122
-#: engine/core/elasticsearch/__init__.py:570
+#: engine/core/elasticsearch/__init__.py:127
+#: engine/core/elasticsearch/__init__.py:627
msgid "no search term provided."
msgstr "No search term provided."
-#: engine/core/filters.py:69 engine/core/filters.py:426
-#: engine/core/filters.py:553
+#: engine/core/filters.py:78 engine/core/filters.py:484
+#: engine/core/filters.py:625
msgid "Search"
msgstr "Search"
-#: engine/core/filters.py:70 engine/core/filters.py:583
-#: engine/core/filters.py:612
+#: engine/core/filters.py:79 engine/core/filters.py:662
+#: engine/core/filters.py:691
msgid "UUID"
msgstr "UUID"
-#: engine/core/filters.py:71 engine/core/filters.py:428
-#: engine/core/filters.py:555
+#: engine/core/filters.py:80 engine/core/filters.py:487
+#: engine/core/filters.py:627
msgid "Name"
msgstr "Name"
-#: engine/core/filters.py:72 engine/core/filters.py:557
+#: engine/core/filters.py:82 engine/core/filters.py:630
msgid "Categories"
msgstr "Categories"
-#: engine/core/filters.py:74
+#: engine/core/filters.py:86
msgid "Categories Slugs"
msgstr "Categories Slugs"
-#: engine/core/filters.py:75 engine/core/filters.py:436
+#: engine/core/filters.py:88 engine/core/filters.py:495
msgid "Tags"
msgstr "Tags"
-#: engine/core/filters.py:76
+#: engine/core/filters.py:90
msgid "Min Price"
msgstr "Min Price"
-#: engine/core/filters.py:77
+#: engine/core/filters.py:93
msgid "Max Price"
msgstr "Max Price"
-#: engine/core/filters.py:78
+#: engine/core/filters.py:95
msgid "Is Active"
msgstr "Is Active"
-#: engine/core/filters.py:79
+#: engine/core/filters.py:96
msgid "Brand"
msgstr "Brand"
-#: engine/core/filters.py:80
+#: engine/core/filters.py:97
msgid "Attributes"
msgstr "Attributes"
-#: engine/core/filters.py:81
+#: engine/core/filters.py:99
msgid "Quantity"
msgstr "Quantity"
-#: engine/core/filters.py:82 engine/core/filters.py:430
-#: engine/core/filters.py:556 engine/core/models.py:321
-#: engine/core/models.py:489 engine/core/models.py:644
+#: engine/core/filters.py:101 engine/core/filters.py:489
+#: engine/core/filters.py:628 engine/core/models.py:327
+#: engine/core/models.py:508 engine/core/models.py:665
msgid "Slug"
msgstr "Slug"
-#: engine/core/filters.py:83
+#: engine/core/filters.py:102
msgid "Is Digital"
msgstr "Is Digital"
-#: engine/core/filters.py:84
+#: engine/core/filters.py:104
msgid "Include sub-categories"
msgstr "Include sub-categories"
-#: engine/core/filters.py:87
+#: engine/core/filters.py:108
msgid "Include personal ordered"
msgstr "Include personal ordered products"
-#: engine/core/filters.py:89 engine/core/models.py:648
+#: engine/core/filters.py:110 engine/core/models.py:669
msgid "SKU"
msgstr "SKU"
-#: engine/core/filters.py:184
+#: engine/core/filters.py:212
msgid "there must be a category_uuid to use include_subcategories flag"
msgstr "There must be a category_uuid to use include_subcategories flag"
-#: engine/core/filters.py:353
+#: engine/core/filters.py:398
msgid "Search (ID, product name or part number)"
msgstr "Search (ID, product name or part number)"
-#: engine/core/filters.py:356
+#: engine/core/filters.py:402
msgid "Bought after (inclusive)"
msgstr "Bought after (inclusive)"
-#: engine/core/filters.py:357
+#: engine/core/filters.py:405
msgid "Bought before (inclusive)"
msgstr "Bought before (inclusive)"
-#: engine/core/filters.py:360 engine/core/filters.py:407
-#: engine/core/filters.py:614
+#: engine/core/filters.py:410 engine/core/filters.py:461
+#: engine/core/filters.py:696
msgid "User email"
msgstr "User email"
-#: engine/core/filters.py:361 engine/core/filters.py:408
-#: engine/core/filters.py:592 engine/core/filters.py:613
+#: engine/core/filters.py:413 engine/core/filters.py:464
+#: engine/core/filters.py:671 engine/core/filters.py:693
msgid "User UUID"
msgstr "User UUID"
-#: engine/core/filters.py:362
+#: engine/core/filters.py:415
msgid "Status"
msgstr "Status"
-#: engine/core/filters.py:366
+#: engine/core/filters.py:419
msgid "Human Readable ID"
msgstr "Human Readable ID"
-#: engine/core/filters.py:429
+#: engine/core/filters.py:488
msgid "Parent"
msgstr "Parent"
-#: engine/core/filters.py:433
+#: engine/core/filters.py:492
msgid "Whole category(has at least 1 product or not)"
msgstr "Whole category(has at least 1 product or not)"
-#: engine/core/filters.py:437
+#: engine/core/filters.py:496
msgid "Level"
msgstr "Level"
-#: engine/core/filters.py:587
+#: engine/core/filters.py:666
msgid "Product UUID"
msgstr "Product UUID"
-#: engine/core/graphene/mutations.py:40
+#: engine/core/graphene/mutations.py:41
msgid "key to look for in or set into the cache"
msgstr "Key to look for in or set into the cache"
-#: engine/core/graphene/mutations.py:41
+#: engine/core/graphene/mutations.py:43
msgid "data to store in cache"
msgstr "Data to store in cache"
-#: engine/core/graphene/mutations.py:44
+#: engine/core/graphene/mutations.py:46
msgid "timeout in seconds to set the data for into the cache"
msgstr "Timeout in seconds to set the data for into the cache"
-#: engine/core/graphene/mutations.py:47
+#: engine/core/graphene/mutations.py:49
msgid "cached data"
msgstr "Cached data"
-#: engine/core/graphene/mutations.py:62
+#: engine/core/graphene/mutations.py:64
msgid "camelized JSON data from the requested URL"
msgstr "Camelized JSON data from the requested URL"
-#: engine/core/graphene/mutations.py:67 engine/core/views.py:257
+#: engine/core/graphene/mutations.py:69 engine/core/views.py:249
msgid "only URLs starting with http(s):// are allowed"
msgstr "Only URLs starting with http(s):// are allowed"
-#: engine/core/graphene/mutations.py:83
+#: engine/core/graphene/mutations.py:87
msgid "add a product to the order"
msgstr "Add a product to the order"
-#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131
-#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287
+#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139
+#: engine/core/graphene/mutations.py:255 engine/core/graphene/mutations.py:307
#, python-brace-format
msgid "order {order_uuid} not found"
msgstr "Order {order_uuid} not found!"
-#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159
+#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167
msgid "remove a product from the order"
msgstr "Remove a product from the order"
-#: engine/core/graphene/mutations.py:137
+#: engine/core/graphene/mutations.py:145
msgid "remove all products from the order"
msgstr "Remove all products from the order"
-#: engine/core/graphene/mutations.py:182
+#: engine/core/graphene/mutations.py:190
msgid "buy an order"
msgstr "Buy an order"
-#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265
+#: engine/core/graphene/mutations.py:221 engine/core/graphene/mutations.py:283
msgid "please provide either order_uuid or order_hr_id - mutually exclusive"
msgstr "Please provide either order_uuid or order_hr_id - mutually exclusive!"
-#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501
-#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712
+#: engine/core/graphene/mutations.py:250 engine/core/graphene/mutations.py:525
+#: engine/core/graphene/mutations.py:574 engine/core/viewsets.py:753
msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr "Wrong type came from order.buy() method: {type(instance)!s}"
-#: engine/core/graphene/mutations.py:245
+#: engine/core/graphene/mutations.py:261
msgid "perform an action on a list of products in the order"
msgstr "Perform an action on a list of products in the order"
-#: engine/core/graphene/mutations.py:250
+#: engine/core/graphene/mutations.py:266
msgid "remove/add"
msgstr "Remove/Add"
-#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323
+#: engine/core/graphene/mutations.py:302 engine/core/graphene/mutations.py:343
msgid "action must be either add or remove"
msgstr "Action must be either \"add\" or \"remove\"!"
-#: engine/core/graphene/mutations.py:293
+#: engine/core/graphene/mutations.py:313
msgid "perform an action on a list of products in the wishlist"
msgstr "Perform an action on a list of products in the wishlist"
-#: engine/core/graphene/mutations.py:311
+#: engine/core/graphene/mutations.py:331
msgid "please provide wishlist_uuid value"
msgstr "Please provide `wishlist_uuid` value."
-#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404
-#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460
-#: engine/core/graphene/mutations.py:504
+#: engine/core/graphene/mutations.py:348 engine/core/graphene/mutations.py:424
+#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480
+#: engine/core/graphene/mutations.py:530
#, python-brace-format
msgid "wishlist {wishlist_uuid} not found"
msgstr "Wishlist {wishlist_uuid} not found!"
-#: engine/core/graphene/mutations.py:382
+#: engine/core/graphene/mutations.py:402
msgid "add a product to the wishlist"
msgstr "Add a product to the order"
-#: engine/core/graphene/mutations.py:410
+#: engine/core/graphene/mutations.py:430
msgid "remove a product from the wishlist"
msgstr "Remove a product from the order"
-#: engine/core/graphene/mutations.py:438
+#: engine/core/graphene/mutations.py:458
msgid "remove all products from the wishlist"
msgstr "Remove a product from the order"
-#: engine/core/graphene/mutations.py:466
+#: engine/core/graphene/mutations.py:486
msgid "buy all products from the wishlist"
msgstr "Remove a product from the order"
-#: engine/core/graphene/mutations.py:510
+#: engine/core/graphene/mutations.py:536
msgid "buy a product"
msgstr "Buy an order"
-#: engine/core/graphene/mutations.py:516
+#: engine/core/graphene/mutations.py:543
msgid ""
-"please send the attributes as the string formatted like "
-"attr1=value1,attr2=value2"
+"please send the attributes as the string formatted like attr1=value1,"
+"attr2=value2"
msgstr ""
-"Please send the attributes as the string formatted like "
-"attr1=value1,attr2=value2"
+"Please send the attributes as the string formatted like attr1=value1,"
+"attr2=value2"
-#: engine/core/graphene/mutations.py:549
+#: engine/core/graphene/mutations.py:581
msgid "add or delete a feedback for orderproduct"
msgstr "Add or delete a feedback for the orderproduct"
-#: engine/core/graphene/mutations.py:573
+#: engine/core/graphene/mutations.py:607
msgid "action must be either `add` or `remove`"
msgstr "Action must be either `add` or `remove`!"
-#: engine/core/graphene/mutations.py:576
+#: engine/core/graphene/mutations.py:610
#, python-brace-format
msgid "order product {order_product_uuid} not found"
msgstr "Orderproduct {order_product_uuid} not found!"
-#: engine/core/graphene/mutations.py:582
+#: engine/core/graphene/mutations.py:617
msgid "original address string provided by the user"
msgstr "Original address string provided by the user"
-#: engine/core/graphene/mutations.py:618 engine/core/models.py:955
-#: engine/core/models.py:968 engine/core/models.py:1383
-#: engine/core/models.py:1412 engine/core/models.py:1437
-#: engine/core/viewsets.py:715
+#: engine/core/graphene/mutations.py:654 engine/core/models.py:978
+#: engine/core/models.py:991 engine/core/models.py:1435
+#: engine/core/models.py:1466 engine/core/models.py:1497
+#: engine/core/viewsets.py:760
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr "{name} does not exist: {uuid}!"
-#: engine/core/graphene/mutations.py:632
+#: engine/core/graphene/mutations.py:668
msgid "limit must be between 1 and 10"
msgstr "Limit must be between 1 and 10"
-#: engine/core/graphene/mutations.py:681
+#: engine/core/graphene/mutations.py:717
msgid "elasticsearch - works like a charm"
msgstr "ElasticSearch - works like a charm"
#: engine/core/graphene/object_types.py:82
-#: engine/core/graphene/object_types.py:370
-#: engine/core/graphene/object_types.py:417 engine/core/models.py:772
-#: engine/core/models.py:1250 engine/core/models.py:1897
+#: engine/core/graphene/object_types.py:417
+#: engine/core/graphene/object_types.py:468 engine/core/models.py:795
+#: engine/core/models.py:1289 engine/core/models.py:2021
msgid "attributes"
msgstr "Attributes"
@@ -1226,89 +1233,88 @@ msgid "groups of attributes"
msgstr "Groups of attributes"
#: engine/core/graphene/object_types.py:116
-#: engine/core/graphene/object_types.py:193
-#: engine/core/graphene/object_types.py:223 engine/core/models.py:432
+#: engine/core/graphene/object_types.py:214
+#: engine/core/graphene/object_types.py:252 engine/core/models.py:451
msgid "categories"
msgstr "Categories"
-#: engine/core/graphene/object_types.py:124 engine/core/models.py:503
+#: engine/core/graphene/object_types.py:132 engine/core/models.py:522
msgid "brands"
msgstr "Brands"
-#: engine/core/graphene/object_types.py:195
+#: engine/core/graphene/object_types.py:216
msgid "category image url"
msgstr "Categories"
-#: engine/core/graphene/object_types.py:196
-#: engine/core/graphene/object_types.py:317 engine/core/models.py:283
+#: engine/core/graphene/object_types.py:217
+#: engine/core/graphene/object_types.py:362 engine/core/models.py:289
msgid "markup percentage"
msgstr "Markup Percentage"
-#: engine/core/graphene/object_types.py:199
+#: engine/core/graphene/object_types.py:221
msgid "which attributes and values can be used for filtering this category."
msgstr "Which attributes and values can be used for filtering this category."
-#: engine/core/graphene/object_types.py:203
-msgid ""
-"minimum and maximum prices for products in this category, if available."
+#: engine/core/graphene/object_types.py:227
+msgid "minimum and maximum prices for products in this category, if available."
msgstr ""
"Minimum and maximum prices for products in this category, if available."
-#: engine/core/graphene/object_types.py:205
+#: engine/core/graphene/object_types.py:231
msgid "tags for this category"
msgstr "Tags for this category"
-#: engine/core/graphene/object_types.py:206
+#: engine/core/graphene/object_types.py:234
msgid "products in this category"
msgstr "Products in this category"
-#: engine/core/graphene/object_types.py:324 engine/core/models.py:188
+#: engine/core/graphene/object_types.py:369 engine/core/models.py:194
msgid "vendors"
msgstr "Vendors"
-#: engine/core/graphene/object_types.py:328
+#: engine/core/graphene/object_types.py:373
msgid "Latitude (Y coordinate)"
msgstr "Latitude (Y coordinate)"
-#: engine/core/graphene/object_types.py:329
+#: engine/core/graphene/object_types.py:374
msgid "Longitude (X coordinate)"
msgstr "Longitude (X coordinate)"
-#: engine/core/graphene/object_types.py:358
+#: engine/core/graphene/object_types.py:403
msgid "comment"
msgstr "Comment"
-#: engine/core/graphene/object_types.py:359
-#: engine/core/graphene/object_types.py:483
+#: engine/core/graphene/object_types.py:405
+#: engine/core/graphene/object_types.py:539
msgid "rating value from 1 to 10, inclusive, or 0 if not set."
msgstr "Rating value from 1 to 10, inclusive, or 0 if not set."
-#: engine/core/graphene/object_types.py:366
+#: engine/core/graphene/object_types.py:413
msgid "represents feedback from a user."
msgstr "Represents feedback from a user."
-#: engine/core/graphene/object_types.py:371
-#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244
+#: engine/core/graphene/object_types.py:418
+#: engine/core/graphene/object_types.py:469 engine/core/models.py:1283
msgid "notifications"
msgstr "Notifications"
-#: engine/core/graphene/object_types.py:372
+#: engine/core/graphene/object_types.py:420
msgid "download url for this order product if applicable"
msgstr "Download url for this order product if applicable"
-#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736
+#: engine/core/graphene/object_types.py:422 engine/core/models.py:1848
msgid "feedback"
msgstr "Feedback"
-#: engine/core/graphene/object_types.py:407
+#: engine/core/graphene/object_types.py:456
msgid "a list of order products in this order"
msgstr "A list of order products in this order"
-#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214
+#: engine/core/graphene/object_types.py:458 engine/core/models.py:1253
msgid "billing address"
msgstr "Billing address"
-#: engine/core/graphene/object_types.py:412
+#: engine/core/graphene/object_types.py:462
msgid ""
"shipping address for this order, leave blank if same as billing address or "
"if not applicable"
@@ -1316,53 +1322,53 @@ msgstr ""
"Shipping address for this order, leave blank if same as billing address or "
"if not applicable"
-#: engine/core/graphene/object_types.py:414
+#: engine/core/graphene/object_types.py:465
msgid "total price of this order"
msgstr "Total price of this order"
-#: engine/core/graphene/object_types.py:415
+#: engine/core/graphene/object_types.py:466
msgid "total quantity of products in order"
msgstr "Total quantity of products in order"
-#: engine/core/graphene/object_types.py:416
+#: engine/core/graphene/object_types.py:467
msgid "are all products in the order digital"
msgstr "Are all of the products in the order digital"
-#: engine/core/graphene/object_types.py:419
+#: engine/core/graphene/object_types.py:471
msgid "transactions for this order"
msgstr "Transactions for this order"
-#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278
+#: engine/core/graphene/object_types.py:491 engine/core/models.py:1317
msgid "orders"
msgstr "Orders"
-#: engine/core/graphene/object_types.py:459
+#: engine/core/graphene/object_types.py:512
msgid "image url"
msgstr "Image URL"
-#: engine/core/graphene/object_types.py:466
+#: engine/core/graphene/object_types.py:519
msgid "product's images"
msgstr "Product's images"
-#: engine/core/graphene/object_types.py:473 engine/core/models.py:431
-#: engine/core/models.py:586
+#: engine/core/graphene/object_types.py:526 engine/core/models.py:450
+#: engine/core/models.py:607
msgid "category"
msgstr "Category"
-#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737
+#: engine/core/graphene/object_types.py:528 engine/core/models.py:1849
msgid "feedbacks"
msgstr "Feedbacks"
-#: engine/core/graphene/object_types.py:476 engine/core/models.py:502
-#: engine/core/models.py:595
+#: engine/core/graphene/object_types.py:529 engine/core/models.py:521
+#: engine/core/models.py:616
msgid "brand"
msgstr "Brand"
-#: engine/core/graphene/object_types.py:477 engine/core/models.py:106
+#: engine/core/graphene/object_types.py:531 engine/core/models.py:106
msgid "attribute groups"
msgstr "Attribute groups"
-#: engine/core/graphene/object_types.py:478
+#: engine/core/graphene/object_types.py:533
#: engine/core/templates/digital_order_created_email.html:111
#: engine/core/templates/digital_order_delivered_email.html:109
#: engine/core/templates/shipped_order_created_email.html:109
@@ -1370,7 +1376,7 @@ msgstr "Attribute groups"
msgid "price"
msgstr "Price"
-#: engine/core/graphene/object_types.py:479
+#: engine/core/graphene/object_types.py:534
#: engine/core/templates/digital_order_created_email.html:110
#: engine/core/templates/digital_order_delivered_email.html:108
#: engine/core/templates/shipped_order_created_email.html:108
@@ -1378,39 +1384,39 @@ msgstr "Price"
msgid "quantity"
msgstr "Quantity"
-#: engine/core/graphene/object_types.py:480
+#: engine/core/graphene/object_types.py:535
msgid "number of feedbacks"
msgstr "Number of feedbacks"
-#: engine/core/graphene/object_types.py:481
+#: engine/core/graphene/object_types.py:536
msgid "only available for personal orders"
msgstr "Products only available for personal orders"
-#: engine/core/graphene/object_types.py:484
+#: engine/core/graphene/object_types.py:541
msgid "discount price"
msgstr "Discount price"
-#: engine/core/graphene/object_types.py:508 engine/core/models.py:658
+#: engine/core/graphene/object_types.py:565 engine/core/models.py:679
msgid "products"
msgstr "Products"
-#: engine/core/graphene/object_types.py:611
+#: engine/core/graphene/object_types.py:675
msgid "promocodes"
msgstr "Promocodes"
-#: engine/core/graphene/object_types.py:621
+#: engine/core/graphene/object_types.py:690
msgid "products on sale"
msgstr "Products on sale"
-#: engine/core/graphene/object_types.py:628 engine/core/models.py:904
+#: engine/core/graphene/object_types.py:698 engine/core/models.py:927
msgid "promotions"
msgstr "Promotions"
-#: engine/core/graphene/object_types.py:632 engine/core/models.py:187
+#: engine/core/graphene/object_types.py:702 engine/core/models.py:193
msgid "vendor"
msgstr "Vendor"
-#: engine/core/graphene/object_types.py:633 engine/core/models.py:657
+#: engine/core/graphene/object_types.py:703 engine/core/models.py:678
#: engine/core/templates/digital_order_created_email.html:109
#: engine/core/templates/digital_order_delivered_email.html:107
#: engine/core/templates/shipped_order_created_email.html:107
@@ -1418,98 +1424,98 @@ msgstr "Vendor"
msgid "product"
msgstr "Product"
-#: engine/core/graphene/object_types.py:644 engine/core/models.py:927
+#: engine/core/graphene/object_types.py:715 engine/core/models.py:950
msgid "wishlisted products"
msgstr "Wishlisted products"
-#: engine/core/graphene/object_types.py:650 engine/core/models.py:944
+#: engine/core/graphene/object_types.py:722 engine/core/models.py:967
msgid "wishlists"
msgstr "Wishlists"
-#: engine/core/graphene/object_types.py:654
+#: engine/core/graphene/object_types.py:727
msgid "tagged products"
msgstr "Tagged products"
-#: engine/core/graphene/object_types.py:661 engine/core/models.py:224
-#: engine/core/models.py:601
+#: engine/core/graphene/object_types.py:735 engine/core/models.py:230
+#: engine/core/models.py:622
msgid "product tags"
msgstr "Product tags"
-#: engine/core/graphene/object_types.py:665
+#: engine/core/graphene/object_types.py:740
msgid "tagged categories"
msgstr "Tagged categories"
-#: engine/core/graphene/object_types.py:672
+#: engine/core/graphene/object_types.py:748
msgid "categories tags"
msgstr "Categories' tags"
-#: engine/core/graphene/object_types.py:676
+#: engine/core/graphene/object_types.py:752
msgid "project name"
msgstr "Project name"
-#: engine/core/graphene/object_types.py:677
+#: engine/core/graphene/object_types.py:753
msgid "company name"
msgstr "Company Name"
-#: engine/core/graphene/object_types.py:678
+#: engine/core/graphene/object_types.py:754
msgid "company address"
msgstr "Company Address"
-#: engine/core/graphene/object_types.py:679
+#: engine/core/graphene/object_types.py:755
msgid "company phone number"
msgstr "Company Phone Number"
-#: engine/core/graphene/object_types.py:680
+#: engine/core/graphene/object_types.py:758
msgid "email from, sometimes it must be used instead of host user value"
msgstr "'email from', sometimes it must be used instead of host user value"
-#: engine/core/graphene/object_types.py:681
+#: engine/core/graphene/object_types.py:761
msgid "email host user"
msgstr "Email host user"
-#: engine/core/graphene/object_types.py:682
+#: engine/core/graphene/object_types.py:762
msgid "maximum amount for payment"
msgstr "Maximum amount for payment"
-#: engine/core/graphene/object_types.py:683
+#: engine/core/graphene/object_types.py:763
msgid "minimum amount for payment"
msgstr "Minimum amount for payment"
-#: engine/core/graphene/object_types.py:684
+#: engine/core/graphene/object_types.py:764
msgid "analytics data"
msgstr "Analytics data"
-#: engine/core/graphene/object_types.py:685
+#: engine/core/graphene/object_types.py:765
msgid "advertisement data"
msgstr "Advertisement data"
-#: engine/core/graphene/object_types.py:688
+#: engine/core/graphene/object_types.py:768
msgid "company configuration"
msgstr "Configuration"
-#: engine/core/graphene/object_types.py:692
+#: engine/core/graphene/object_types.py:772
msgid "language code"
msgstr "Language code"
-#: engine/core/graphene/object_types.py:693
+#: engine/core/graphene/object_types.py:773
msgid "language name"
msgstr "Language name"
-#: engine/core/graphene/object_types.py:694
+#: engine/core/graphene/object_types.py:774
msgid "language flag, if exists :)"
msgstr "Language flag, if exists :)"
-#: engine/core/graphene/object_types.py:697
+#: engine/core/graphene/object_types.py:777
msgid "supported languages"
msgstr "Get a list of supported languages"
-#: engine/core/graphene/object_types.py:728
-#: engine/core/graphene/object_types.py:729
-#: engine/core/graphene/object_types.py:730
+#: engine/core/graphene/object_types.py:809
+#: engine/core/graphene/object_types.py:812
+#: engine/core/graphene/object_types.py:815
msgid "products search results"
msgstr "Products search results"
-#: engine/core/graphene/object_types.py:731
+#: engine/core/graphene/object_types.py:817
msgid "posts search results"
msgstr "Products search results"
@@ -1537,7 +1543,7 @@ msgstr "Parent attribute group"
msgid "attribute group's name"
msgstr "Attribute group's name"
-#: engine/core/models.py:105 engine/core/models.py:734
+#: engine/core/models.py:105 engine/core/models.py:755
msgid "attribute group"
msgstr "Attribute group"
@@ -1559,48 +1565,48 @@ msgstr ""
"also maintains additional metadata and constraints, making it suitable for "
"use in systems that interact with third-party vendors."
-#: engine/core/models.py:124
+#: engine/core/models.py:125
msgid "stores credentials and endpoints required for vendor communication"
msgstr ""
"Stores credentials and endpoints required for vendor's API communication"
-#: engine/core/models.py:125
+#: engine/core/models.py:127
msgid "authentication info"
msgstr "Authentication info"
-#: engine/core/models.py:130
+#: engine/core/models.py:132
msgid "define the markup for products retrieved from this vendor"
msgstr "Define the markup for products retrieved from this vendor"
-#: engine/core/models.py:131
+#: engine/core/models.py:133
msgid "vendor markup percentage"
msgstr "Vendor markup percentage"
-#: engine/core/models.py:135
+#: engine/core/models.py:137
msgid "name of this vendor"
msgstr "Name of this vendor"
-#: engine/core/models.py:136
+#: engine/core/models.py:138
msgid "vendor name"
msgstr "Vendor name"
-#: engine/core/models.py:147
+#: engine/core/models.py:153
msgid "response file"
msgstr "response file"
-#: engine/core/models.py:148
+#: engine/core/models.py:154
msgid "vendor's last processing response"
msgstr "vendor's last processing response"
-#: engine/core/models.py:154
+#: engine/core/models.py:160
msgid "vendor's integration file path"
msgstr "Vendor's integration file path"
-#: engine/core/models.py:155
+#: engine/core/models.py:161
msgid "integration path"
msgstr "Integration path"
-#: engine/core/models.py:197
+#: engine/core/models.py:203
msgid ""
"Represents a product tag used for classifying or identifying products. The "
"ProductTag class is designed to uniquely identify and classify products "
@@ -1614,27 +1620,27 @@ msgstr ""
"display name. It supports operations exported through mixins and provides "
"metadata customization for administrative purposes."
-#: engine/core/models.py:209 engine/core/models.py:240
+#: engine/core/models.py:215 engine/core/models.py:246
msgid "internal tag identifier for the product tag"
msgstr "Internal tag identifier for the product tag"
-#: engine/core/models.py:210 engine/core/models.py:241
+#: engine/core/models.py:216 engine/core/models.py:247
msgid "tag name"
msgstr "Tag name"
-#: engine/core/models.py:214 engine/core/models.py:245
+#: engine/core/models.py:220 engine/core/models.py:251
msgid "user-friendly name for the product tag"
msgstr "User-friendly name for the product tag"
-#: engine/core/models.py:215 engine/core/models.py:246
+#: engine/core/models.py:221 engine/core/models.py:252
msgid "tag display name"
msgstr "Tag display name"
-#: engine/core/models.py:223
+#: engine/core/models.py:229
msgid "product tag"
msgstr "Product tag"
-#: engine/core/models.py:229
+#: engine/core/models.py:235
msgid ""
"Represents a category tag used for products. This class models a category "
"tag that can be used to associate and classify products. It includes "
@@ -1644,15 +1650,15 @@ msgstr ""
"tag that can be used to associate and classify products. It includes "
"attributes for an internal tag identifier and a user-friendly display name."
-#: engine/core/models.py:254
+#: engine/core/models.py:260
msgid "category tag"
msgstr "category tag"
-#: engine/core/models.py:255 engine/core/models.py:327
+#: engine/core/models.py:261 engine/core/models.py:333
msgid "category tags"
msgstr "category tags"
-#: engine/core/models.py:260
+#: engine/core/models.py:266
msgid ""
"Represents a category entity to organize and group related items in a "
"hierarchical structure. Categories may have hierarchical relationships with "
@@ -1674,186 +1680,184 @@ msgstr ""
"hierarchy of categories, as well as assign attributes like images, tags, or "
"priority."
-#: engine/core/models.py:274
+#: engine/core/models.py:280
msgid "upload an image representing this category"
msgstr "Upload an image representing this category"
-#: engine/core/models.py:277
+#: engine/core/models.py:283
msgid "category image"
msgstr "Category image"
-#: engine/core/models.py:282
+#: engine/core/models.py:288
msgid "define a markup percentage for products in this category"
msgstr "Define a markup percentage for products in this category"
-#: engine/core/models.py:291
+#: engine/core/models.py:297
msgid "parent of this category to form a hierarchical structure"
msgstr "Parent of this category to form a hierarchical structure"
-#: engine/core/models.py:292
+#: engine/core/models.py:298
msgid "parent category"
msgstr "Parent category"
-#: engine/core/models.py:297
+#: engine/core/models.py:303
msgid "category name"
msgstr "Category name"
-#: engine/core/models.py:298
+#: engine/core/models.py:304
msgid "provide a name for this category"
msgstr "Provide a name for this category"
-#: engine/core/models.py:305
+#: engine/core/models.py:311
msgid "add a detailed description for this category"
msgstr "Add a detailed description for this category"
-#: engine/core/models.py:306
+#: engine/core/models.py:312
msgid "category description"
msgstr "Category description"
-#: engine/core/models.py:326
+#: engine/core/models.py:332
msgid "tags that help describe or group this category"
msgstr "tags that help describe or group this category"
-#: engine/core/models.py:333 engine/core/models.py:495
+#: engine/core/models.py:339 engine/core/models.py:514
msgid "priority"
msgstr "Priority"
-#: engine/core/models.py:438
+#: engine/core/models.py:457
msgid ""
"Represents a Brand object in the system. This class handles information and "
"attributes related to a brand, including its name, logos, description, "
"associated categories, a unique slug, and priority order. It allows for the "
-"organization and representation of brand-related data within the "
-"application."
+"organization and representation of brand-related data within the application."
msgstr ""
"Represents a Brand object in the system. This class handles information and "
"attributes related to a brand, including its name, logos, description, "
"associated categories, a unique slug, and priority order. It allows for the "
-"organization and representation of brand-related data within the "
-"application."
+"organization and representation of brand-related data within the application."
-#: engine/core/models.py:448
+#: engine/core/models.py:467
msgid "name of this brand"
msgstr "Name of this brand"
-#: engine/core/models.py:449
+#: engine/core/models.py:468
msgid "brand name"
msgstr "Brand name"
-#: engine/core/models.py:456
+#: engine/core/models.py:475
msgid "upload a logo representing this brand"
msgstr "Upload a logo representing this brand"
-#: engine/core/models.py:458
+#: engine/core/models.py:477
msgid "brand small image"
msgstr "Brand small image"
-#: engine/core/models.py:464
+#: engine/core/models.py:483
msgid "upload a big logo representing this brand"
msgstr "Upload a big logo representing this brand"
-#: engine/core/models.py:466
+#: engine/core/models.py:485
msgid "brand big image"
msgstr "Brand big image"
-#: engine/core/models.py:471
+#: engine/core/models.py:490
msgid "add a detailed description of the brand"
msgstr "Add a detailed description of the brand"
-#: engine/core/models.py:472
+#: engine/core/models.py:491
msgid "brand description"
msgstr "Brand description"
-#: engine/core/models.py:477
+#: engine/core/models.py:496
msgid "optional categories that this brand is associated with"
msgstr "Optional categories that this brand is associated with"
-#: engine/core/models.py:478
+#: engine/core/models.py:497
msgid "associated categories"
msgstr "Categories"
-#: engine/core/models.py:508
+#: engine/core/models.py:527
msgid ""
-"Represents the stock of a product managed in the system. This class provides"
-" details about the relationship between vendors, products, and their stock "
+"Represents the stock of a product managed in the system. This class provides "
+"details about the relationship between vendors, products, and their stock "
"information, as well as inventory-related properties like price, purchase "
"price, quantity, SKU, and digital assets. It is part of the inventory "
"management system to allow tracking and evaluation of products available "
"from various vendors."
msgstr ""
-"Represents the stock of a product managed in the system. This class provides"
-" details about the relationship between vendors, products, and their stock "
+"Represents the stock of a product managed in the system. This class provides "
+"details about the relationship between vendors, products, and their stock "
"information, as well as inventory-related properties like price, purchase "
"price, quantity, SKU, and digital assets. It is part of the inventory "
"management system to allow tracking and evaluation of products available "
"from various vendors."
-#: engine/core/models.py:520
+#: engine/core/models.py:539
msgid "the vendor supplying this product stock"
msgstr "The vendor supplying this product stock"
-#: engine/core/models.py:521
+#: engine/core/models.py:540
msgid "associated vendor"
msgstr "Associated vendor"
-#: engine/core/models.py:525
+#: engine/core/models.py:544
msgid "final price to the customer after markups"
msgstr "Final price to the customer after markups"
-#: engine/core/models.py:526
+#: engine/core/models.py:545
msgid "selling price"
msgstr "Selling price"
-#: engine/core/models.py:531
+#: engine/core/models.py:550
msgid "the product associated with this stock entry"
msgstr "The product associated with this stock entry"
-#: engine/core/models.py:532 engine/core/models.py:797
-#: engine/core/models.py:843 engine/core/models.py:1792
+#: engine/core/models.py:551 engine/core/models.py:820
+#: engine/core/models.py:866 engine/core/models.py:1904
msgid "associated product"
msgstr "Associated product"
-#: engine/core/models.py:539
+#: engine/core/models.py:558
msgid "the price paid to the vendor for this product"
msgstr "The price paid to the vendor for this product"
-#: engine/core/models.py:540
+#: engine/core/models.py:559
msgid "vendor purchase price"
msgstr "Vendor purchase price"
-#: engine/core/models.py:544
+#: engine/core/models.py:563
msgid "available quantity of the product in stock"
msgstr "Available quantity of the product in stock"
-#: engine/core/models.py:545
+#: engine/core/models.py:564
msgid "quantity in stock"
msgstr "Quantity in stock"
-#: engine/core/models.py:549
+#: engine/core/models.py:568
msgid "vendor-assigned SKU for identifying the product"
msgstr "Vendor-assigned SKU for identifying the product"
-#: engine/core/models.py:550
+#: engine/core/models.py:569
msgid "vendor sku"
msgstr "Vendor's SKU"
-#: engine/core/models.py:556
+#: engine/core/models.py:575
msgid "digital file associated with this stock if applicable"
msgstr "Digital file associated with this stock if applicable"
-#: engine/core/models.py:557
+#: engine/core/models.py:576
msgid "digital file"
msgstr "Digital file"
-#: engine/core/models.py:560
+#: engine/core/models.py:580
msgid "system attributes"
msgstr "System attributes"
-#: engine/core/models.py:567
+#: engine/core/models.py:588
msgid "stock entries"
msgstr "Stock entries"
-#: engine/core/models.py:572
+#: engine/core/models.py:593
msgid ""
"Represents a product with attributes such as category, brand, tags, digital "
"status, name, description, part number, and slug. Provides related utility "
@@ -1873,244 +1877,244 @@ msgstr ""
"properties to improve performance. It is used to define and manipulate "
"product data and its associated information within an application."
-#: engine/core/models.py:585
+#: engine/core/models.py:606
msgid "category this product belongs to"
msgstr "Category this product belongs to"
-#: engine/core/models.py:594
+#: engine/core/models.py:615
msgid "optionally associate this product with a brand"
msgstr "Optionally associate this product with a brand"
-#: engine/core/models.py:600
+#: engine/core/models.py:621
msgid "tags that help describe or group this product"
msgstr "Tags that help describe or group this product"
-#: engine/core/models.py:605
+#: engine/core/models.py:626
msgid "indicates whether this product is digitally delivered"
msgstr "Indicates whether this product is digitally delivered"
-#: engine/core/models.py:606
+#: engine/core/models.py:627
msgid "is product digital"
msgstr "Is product digital"
-#: engine/core/models.py:612
+#: engine/core/models.py:633
msgid "provide a clear identifying name for the product"
msgstr "Provide a clear identifying name for the product"
-#: engine/core/models.py:613
+#: engine/core/models.py:634
msgid "product name"
msgstr "Product name"
-#: engine/core/models.py:619 engine/core/models.py:892
+#: engine/core/models.py:640 engine/core/models.py:915
msgid "add a detailed description of the product"
msgstr "Add a detailed description of the product"
-#: engine/core/models.py:620
+#: engine/core/models.py:641
msgid "product description"
msgstr "Product description"
-#: engine/core/models.py:627
+#: engine/core/models.py:648
msgid "part number for this product"
msgstr "Part number for this product"
-#: engine/core/models.py:628
+#: engine/core/models.py:649
msgid "part number"
msgstr "Part number"
-#: engine/core/models.py:647
+#: engine/core/models.py:668
msgid "stock keeping unit for this product"
msgstr "Stock Keeping Unit for this product"
-#: engine/core/models.py:720
+#: engine/core/models.py:741
msgid ""
"Represents an attribute in the system. This class is used to define and "
"manage attributes, which are customizable pieces of data that can be "
"associated with other entities. Attributes have associated categories, "
-"groups, value types, and names. The model supports multiple types of values,"
-" including string, integer, float, boolean, array, and object. This allows "
+"groups, value types, and names. The model supports multiple types of values, "
+"including string, integer, float, boolean, array, and object. This allows "
"for dynamic and flexible data structuring."
msgstr ""
"Represents an attribute in the system. This class is used to define and "
"manage attributes, which are customizable pieces of data that can be "
"associated with other entities. Attributes have associated categories, "
-"groups, value types, and names. The model supports multiple types of values,"
-" including string, integer, float, boolean, array, and object. This allows "
+"groups, value types, and names. The model supports multiple types of values, "
+"including string, integer, float, boolean, array, and object. This allows "
"for dynamic and flexible data structuring."
-#: engine/core/models.py:733
+#: engine/core/models.py:754
msgid "group of this attribute"
msgstr "Group of this attribute"
-#: engine/core/models.py:739
+#: engine/core/models.py:760
msgid "string"
msgstr "String"
-#: engine/core/models.py:740
+#: engine/core/models.py:761
msgid "integer"
msgstr "Integer"
-#: engine/core/models.py:741
+#: engine/core/models.py:762
msgid "float"
msgstr "Float"
-#: engine/core/models.py:742
+#: engine/core/models.py:763
msgid "boolean"
msgstr "Boolean"
-#: engine/core/models.py:743
+#: engine/core/models.py:764
msgid "array"
msgstr "Array"
-#: engine/core/models.py:744
+#: engine/core/models.py:765
msgid "object"
msgstr "Object"
-#: engine/core/models.py:746
+#: engine/core/models.py:767
msgid "type of the attribute's value"
msgstr "Type of the attribute's value"
-#: engine/core/models.py:747
+#: engine/core/models.py:768
msgid "value type"
msgstr "Value type"
-#: engine/core/models.py:752
+#: engine/core/models.py:773
msgid "name of this attribute"
msgstr "Name of this attribute"
-#: engine/core/models.py:753
+#: engine/core/models.py:774
msgid "attribute's name"
msgstr "Attribute's name"
-#: engine/core/models.py:758
+#: engine/core/models.py:779
msgid "is filterable"
msgstr "is filterable"
-#: engine/core/models.py:759
+#: engine/core/models.py:781
msgid "designates whether this attribute can be used for filtering or not"
msgstr "designates whether this attribute can be used for filtering or not"
-#: engine/core/models.py:771 engine/core/models.py:789
+#: engine/core/models.py:794 engine/core/models.py:812
#: engine/core/templates/digital_order_delivered_email.html:134
msgid "attribute"
msgstr "Attribute"
-#: engine/core/models.py:777
+#: engine/core/models.py:800
msgid ""
-"Represents a specific value for an attribute that is linked to a product. It"
-" links the 'attribute' to a unique 'value', allowing better organization and"
-" dynamic representation of product characteristics."
+"Represents a specific value for an attribute that is linked to a product. It "
+"links the 'attribute' to a unique 'value', allowing better organization and "
+"dynamic representation of product characteristics."
msgstr ""
-"Represents a specific value for an attribute that is linked to a product. It"
-" links the 'attribute' to a unique 'value', allowing better organization and"
-" dynamic representation of product characteristics."
+"Represents a specific value for an attribute that is linked to a product. It "
+"links the 'attribute' to a unique 'value', allowing better organization and "
+"dynamic representation of product characteristics."
-#: engine/core/models.py:788
+#: engine/core/models.py:811
msgid "attribute of this value"
msgstr "Attribute of this value"
-#: engine/core/models.py:796
+#: engine/core/models.py:819
msgid "the specific product associated with this attribute's value"
msgstr "The specific product associated with this attribute's value"
-#: engine/core/models.py:802
+#: engine/core/models.py:825
msgid "the specific value for this attribute"
msgstr "The specific value for this attribute"
-#: engine/core/models.py:815
+#: engine/core/models.py:838
msgid ""
"Represents a product image associated with a product in the system. This "
-"class is designed to manage images for products, including functionality for"
-" uploading image files, associating them with specific products, and "
+"class is designed to manage images for products, including functionality for "
+"uploading image files, associating them with specific products, and "
"determining their display order. It also includes an accessibility feature "
"with alternative text for the images."
msgstr ""
"Represents a product image associated with a product in the system. This "
-"class is designed to manage images for products, including functionality for"
-" uploading image files, associating them with specific products, and "
+"class is designed to manage images for products, including functionality for "
+"uploading image files, associating them with specific products, and "
"determining their display order. It also includes an accessibility feature "
"with alternative text for the images."
-#: engine/core/models.py:826
+#: engine/core/models.py:849
msgid "provide alternative text for the image for accessibility"
msgstr "Provide alternative text for the image for accessibility"
-#: engine/core/models.py:827
+#: engine/core/models.py:850
msgid "image alt text"
msgstr "Image alt text"
-#: engine/core/models.py:830
+#: engine/core/models.py:853
msgid "upload the image file for this product"
msgstr "Upload the image file for this product"
-#: engine/core/models.py:831 engine/core/models.py:862
+#: engine/core/models.py:854 engine/core/models.py:885
msgid "product image"
msgstr "Product image"
-#: engine/core/models.py:836
+#: engine/core/models.py:859
msgid "determines the order in which images are displayed"
msgstr "Determines the order in which images are displayed"
-#: engine/core/models.py:837
+#: engine/core/models.py:860
msgid "display priority"
msgstr "Display priority"
-#: engine/core/models.py:842
+#: engine/core/models.py:865
msgid "the product that this image represents"
msgstr "The product that this image represents"
-#: engine/core/models.py:863
+#: engine/core/models.py:886
msgid "product images"
msgstr "Product images"
-#: engine/core/models.py:868
+#: engine/core/models.py:891
msgid ""
"Represents a promotional campaign for products with a discount. This class "
"is used to define and manage promotional campaigns that offer a percentage-"
"based discount for products. The class includes attributes for setting the "
"discount rate, providing details about the promotion, and linking it to the "
-"applicable products. It integrates with the product catalog to determine the"
-" affected items in the campaign."
+"applicable products. It integrates with the product catalog to determine the "
+"affected items in the campaign."
msgstr ""
"Represents a promotional campaign for products with a discount. This class "
"is used to define and manage promotional campaigns that offer a percentage-"
"based discount for products. The class includes attributes for setting the "
"discount rate, providing details about the promotion, and linking it to the "
-"applicable products. It integrates with the product catalog to determine the"
-" affected items in the campaign."
+"applicable products. It integrates with the product catalog to determine the "
+"affected items in the campaign."
-#: engine/core/models.py:880
+#: engine/core/models.py:903
msgid "percentage discount for the selected products"
msgstr "Percentage discount for the selected products"
-#: engine/core/models.py:881
+#: engine/core/models.py:904
msgid "discount percentage"
msgstr "Discount percentage"
-#: engine/core/models.py:886
+#: engine/core/models.py:909
msgid "provide a unique name for this promotion"
msgstr "Provide a unique name for this promotion"
-#: engine/core/models.py:887
+#: engine/core/models.py:910
msgid "promotion name"
msgstr "Promotion name"
-#: engine/core/models.py:893
+#: engine/core/models.py:916
msgid "promotion description"
msgstr "Promotion description"
-#: engine/core/models.py:898
+#: engine/core/models.py:921
msgid "select which products are included in this promotion"
msgstr "Select which products are included in this promotion"
-#: engine/core/models.py:899
+#: engine/core/models.py:922
msgid "included products"
msgstr "Included products"
-#: engine/core/models.py:903
+#: engine/core/models.py:926
msgid "promotion"
msgstr "Promotion"
-#: engine/core/models.py:914
+#: engine/core/models.py:937
msgid ""
"Represents a user's wishlist for storing and managing desired products. The "
"class provides functionality to manage a collection of products, supporting "
@@ -2122,123 +2126,123 @@ msgstr ""
"operations such as adding and removing products, as well as supporting "
"operations for adding and removing multiple products at once."
-#: engine/core/models.py:926
+#: engine/core/models.py:949
msgid "products that the user has marked as wanted"
msgstr "Products that the user has marked as wanted"
-#: engine/core/models.py:934
+#: engine/core/models.py:957
msgid "user who owns this wishlist"
msgstr "User who owns this wishlist"
-#: engine/core/models.py:935
+#: engine/core/models.py:958
msgid "wishlist owner"
msgstr "Wishlist's Owner"
-#: engine/core/models.py:943
+#: engine/core/models.py:966
msgid "wishlist"
msgstr "Wishlist"
-#: engine/core/models.py:985
+#: engine/core/models.py:1008
msgid ""
"Represents a documentary record tied to a product. This class is used to "
"store information about documentaries related to specific products, "
"including file uploads and their metadata. It contains methods and "
"properties to handle the file type and storage path for the documentary "
-"files. It extends functionality from specific mixins and provides additional"
-" custom features."
+"files. It extends functionality from specific mixins and provides additional "
+"custom features."
msgstr ""
"Represents a documentary record tied to a product. This class is used to "
"store information about documentaries related to specific products, "
"including file uploads and their metadata. It contains methods and "
"properties to handle the file type and storage path for the documentary "
-"files. It extends functionality from specific mixins and provides additional"
-" custom features."
+"files. It extends functionality from specific mixins and provides additional "
+"custom features."
-#: engine/core/models.py:998
+#: engine/core/models.py:1023
msgid "documentary"
msgstr "Documentary"
-#: engine/core/models.py:999
+#: engine/core/models.py:1024
msgid "documentaries"
msgstr "Documentaries"
-#: engine/core/models.py:1009
+#: engine/core/models.py:1034
msgid "unresolved"
msgstr "Unresolved"
-#: engine/core/models.py:1014
+#: engine/core/models.py:1039
msgid ""
-"Represents an address entity that includes location details and associations"
-" with a user. Provides functionality for geographic and address data "
-"storage, as well as integration with geocoding services. This class is "
-"designed to store detailed address information including components like "
-"street, city, region, country, and geolocation (longitude and latitude). It "
-"supports integration with geocoding APIs, enabling the storage of raw API "
-"responses for further processing or inspection. The class also allows "
-"associating an address with a user, facilitating personalized data handling."
+"Represents an address entity that includes location details and associations "
+"with a user. Provides functionality for geographic and address data storage, "
+"as well as integration with geocoding services. This class is designed to "
+"store detailed address information including components like street, city, "
+"region, country, and geolocation (longitude and latitude). It supports "
+"integration with geocoding APIs, enabling the storage of raw API responses "
+"for further processing or inspection. The class also allows associating an "
+"address with a user, facilitating personalized data handling."
msgstr ""
-"Represents an address entity that includes location details and associations"
-" with a user. Provides functionality for geographic and address data "
-"storage, as well as integration with geocoding services. This class is "
-"designed to store detailed address information including components like "
-"street, city, region, country, and geolocation (longitude and latitude). It "
-"supports integration with geocoding APIs, enabling the storage of raw API "
-"responses for further processing or inspection. The class also allows "
-"associating an address with a user, facilitating personalized data handling."
+"Represents an address entity that includes location details and associations "
+"with a user. Provides functionality for geographic and address data storage, "
+"as well as integration with geocoding services. This class is designed to "
+"store detailed address information including components like street, city, "
+"region, country, and geolocation (longitude and latitude). It supports "
+"integration with geocoding APIs, enabling the storage of raw API responses "
+"for further processing or inspection. The class also allows associating an "
+"address with a user, facilitating personalized data handling."
-#: engine/core/models.py:1029
+#: engine/core/models.py:1054
msgid "address line for the customer"
msgstr "Address line for the customer"
-#: engine/core/models.py:1030
+#: engine/core/models.py:1055
msgid "address line"
msgstr "Address line"
-#: engine/core/models.py:1032
+#: engine/core/models.py:1057
msgid "street"
msgstr "Street"
-#: engine/core/models.py:1033
+#: engine/core/models.py:1058
msgid "district"
msgstr "District"
-#: engine/core/models.py:1034
+#: engine/core/models.py:1059
msgid "city"
msgstr "City"
-#: engine/core/models.py:1035
+#: engine/core/models.py:1060
msgid "region"
msgstr "Region"
-#: engine/core/models.py:1036
+#: engine/core/models.py:1061
msgid "postal code"
msgstr "Postal code"
-#: engine/core/models.py:1037
+#: engine/core/models.py:1062
msgid "country"
msgstr "Country"
-#: engine/core/models.py:1044
+#: engine/core/models.py:1069
msgid "geolocation point: (longitude, latitude)"
msgstr "Geolocation Point(Longitude, Latitude)"
-#: engine/core/models.py:1047
+#: engine/core/models.py:1075
msgid "full JSON response from geocoder for this address"
msgstr "Full JSON response from geocoder for this address"
-#: engine/core/models.py:1052
+#: engine/core/models.py:1081
msgid "stored JSON response from the geocoding service"
msgstr "Stored JSON response from the geocoding service"
-#: engine/core/models.py:1060
+#: engine/core/models.py:1091
msgid "address"
msgstr "Address"
-#: engine/core/models.py:1061
+#: engine/core/models.py:1092
msgid "addresses"
msgstr "Adresses"
-#: engine/core/models.py:1073
+#: engine/core/models.py:1104
msgid ""
"Represents a promotional code that can be used for discounts, managing its "
"validity, type of discount, and application. The PromoCode class stores "
@@ -2254,71 +2258,71 @@ msgstr ""
"any), and status of its usage. It includes functionality to validate and "
"apply the promo code to an order while ensuring constraints are met."
-#: engine/core/models.py:1087
+#: engine/core/models.py:1118
msgid "unique code used by a user to redeem a discount"
msgstr "Unique code used by a user to redeem a discount"
-#: engine/core/models.py:1088
+#: engine/core/models.py:1119
msgid "promo code identifier"
msgstr "Promo code identifier"
-#: engine/core/models.py:1095
+#: engine/core/models.py:1126
msgid "fixed discount amount applied if percent is not used"
msgstr "Fixed discount amount applied if percent is not used"
-#: engine/core/models.py:1096
+#: engine/core/models.py:1127
msgid "fixed discount amount"
msgstr "Fixed discount amount"
-#: engine/core/models.py:1102
+#: engine/core/models.py:1133
msgid "percentage discount applied if fixed amount is not used"
msgstr "Percentage discount applied if fixed amount is not used"
-#: engine/core/models.py:1103
+#: engine/core/models.py:1134
msgid "percentage discount"
msgstr "Percentage discount"
-#: engine/core/models.py:1108
+#: engine/core/models.py:1139
msgid "timestamp when the promocode expires"
msgstr "Timestamp when the promocode expires"
-#: engine/core/models.py:1109
+#: engine/core/models.py:1140
msgid "end validity time"
msgstr "End validity time"
-#: engine/core/models.py:1114
+#: engine/core/models.py:1145
msgid "timestamp from which this promocode is valid"
msgstr "Timestamp from which this promocode is valid"
-#: engine/core/models.py:1115
+#: engine/core/models.py:1146
msgid "start validity time"
msgstr "Start validity time"
-#: engine/core/models.py:1120
+#: engine/core/models.py:1151
msgid "timestamp when the promocode was used, blank if not used yet"
msgstr "Timestamp when the promocode was used, blank if not used yet"
-#: engine/core/models.py:1121
+#: engine/core/models.py:1152
msgid "usage timestamp"
msgstr "Usage timestamp"
-#: engine/core/models.py:1126
+#: engine/core/models.py:1157
msgid "user assigned to this promocode if applicable"
msgstr "User assigned to this promocode if applicable"
-#: engine/core/models.py:1127
+#: engine/core/models.py:1158
msgid "assigned user"
msgstr "Assigned user"
-#: engine/core/models.py:1134
+#: engine/core/models.py:1165
msgid "promo code"
msgstr "Promo code"
-#: engine/core/models.py:1135
+#: engine/core/models.py:1166
msgid "promo codes"
msgstr "Promo codes"
-#: engine/core/models.py:1150
+#: engine/core/models.py:1182
msgid ""
"only one type of discount should be defined (amount or percent), but not "
"both or neither."
@@ -2326,161 +2330,161 @@ msgstr ""
"Only one type of discount should be defined (amount or percent), but not "
"both or neither."
-#: engine/core/models.py:1171
+#: engine/core/models.py:1204
msgid "promocode already used"
msgstr "Promocode has been used already"
-#: engine/core/models.py:1187
+#: engine/core/models.py:1226
#, python-brace-format
msgid "invalid discount type for promocode {self.uuid}"
msgstr "Invalid discount type for promocode {self.uuid}!"
-#: engine/core/models.py:1196
+#: engine/core/models.py:1235
msgid ""
"Represents an order placed by a user. This class models an order within the "
"application, including its various attributes such as billing and shipping "
-"information, status, associated user, notifications, and related operations."
-" Orders can have associated products, promotions can be applied, addresses "
+"information, status, associated user, notifications, and related operations. "
+"Orders can have associated products, promotions can be applied, addresses "
"set, and shipping or billing details updated. Equally, functionality "
"supports managing the products in the order lifecycle."
msgstr ""
"Represents an order placed by a user. This class models an order within the "
"application, including its various attributes such as billing and shipping "
-"information, status, associated user, notifications, and related operations."
-" Orders can have associated products, promotions can be applied, addresses "
+"information, status, associated user, notifications, and related operations. "
+"Orders can have associated products, promotions can be applied, addresses "
"set, and shipping or billing details updated. Equally, functionality "
"supports managing the products in the order lifecycle."
-#: engine/core/models.py:1213
+#: engine/core/models.py:1252
msgid "the billing address used for this order"
msgstr "The billing address used for this order"
-#: engine/core/models.py:1221
+#: engine/core/models.py:1260
msgid "optional promo code applied to this order"
msgstr "Optional promo code applied to this order"
-#: engine/core/models.py:1222
+#: engine/core/models.py:1261
msgid "applied promo code"
msgstr "Applied promo code"
-#: engine/core/models.py:1230
+#: engine/core/models.py:1269
msgid "the shipping address used for this order"
msgstr "The shipping address used for this order"
-#: engine/core/models.py:1231
+#: engine/core/models.py:1270
msgid "shipping address"
msgstr "Shipping address"
-#: engine/core/models.py:1237
+#: engine/core/models.py:1276
msgid "current status of the order in its lifecycle"
msgstr "Current status of the order in its lifecycle"
-#: engine/core/models.py:1238
+#: engine/core/models.py:1277
msgid "order status"
msgstr "Order status"
-#: engine/core/models.py:1243 engine/core/models.py:1769
+#: engine/core/models.py:1282 engine/core/models.py:1881
msgid "json structure of notifications to display to users"
msgstr ""
"JSON structure of notifications to display to users, in admin UI the table-"
"view is used"
-#: engine/core/models.py:1249
+#: engine/core/models.py:1288
msgid "json representation of order attributes for this order"
msgstr "JSON representation of order attributes for this order"
-#: engine/core/models.py:1255
+#: engine/core/models.py:1294
msgid "the user who placed the order"
msgstr "The user who placed the order"
-#: engine/core/models.py:1256
+#: engine/core/models.py:1295
msgid "user"
msgstr "User"
-#: engine/core/models.py:1262
+#: engine/core/models.py:1301
msgid "the timestamp when the order was finalized"
msgstr "The timestamp when the order was finalized"
-#: engine/core/models.py:1263
+#: engine/core/models.py:1302
msgid "buy time"
msgstr "Buy time"
-#: engine/core/models.py:1270
+#: engine/core/models.py:1309
msgid "a human-readable identifier for the order"
msgstr "A human-readable identifier for the order"
-#: engine/core/models.py:1271
+#: engine/core/models.py:1310
msgid "human readable id"
msgstr "human-readable ID"
-#: engine/core/models.py:1277
+#: engine/core/models.py:1316
msgid "order"
msgstr "Order"
-#: engine/core/models.py:1319
+#: engine/core/models.py:1363
msgid "a user must have only one pending order at a time"
msgstr "A user must have only one pending order at a time!"
-#: engine/core/models.py:1351
+#: engine/core/models.py:1396
msgid "you cannot add products to an order that is not a pending one"
msgstr "You cannot add products to an order that is not a pending one"
-#: engine/core/models.py:1356
+#: engine/core/models.py:1402
msgid "you cannot add inactive products to order"
msgstr "You cannot add inactive products to order"
-#: engine/core/models.py:1373
+#: engine/core/models.py:1424
msgid "you cannot add more products than available in stock"
msgstr "You cannot add more products than available in stock"
-#: engine/core/models.py:1395 engine/core/models.py:1420
-#: engine/core/models.py:1428
+#: engine/core/models.py:1448 engine/core/models.py:1477
+#: engine/core/models.py:1487
msgid "you cannot remove products from an order that is not a pending one"
msgstr "You cannot remove products from an order that is not a pending one"
-#: engine/core/models.py:1416
+#: engine/core/models.py:1472
#, python-brace-format
msgid "{name} does not exist with query <{query}>"
msgstr "{name} does not exist with query <{query}>!"
-#: engine/core/models.py:1448
+#: engine/core/models.py:1511
msgid "promocode does not exist"
msgstr "Promocode does not exist"
-#: engine/core/models.py:1454
+#: engine/core/models.py:1526
msgid "you can only buy physical products with shipping address specified"
msgstr "You can only buy physical products with shipping address specified!"
-#: engine/core/models.py:1473
+#: engine/core/models.py:1547
msgid "address does not exist"
msgstr "Address does not exist"
-#: engine/core/models.py:1494 engine/core/models.py:1563
+#: engine/core/models.py:1569 engine/core/models.py:1648
msgid "you can not buy at this moment, please try again in a few minutes"
msgstr ""
"You can not purchase at this moment, please try again in a few minutes."
-#: engine/core/models.py:1497 engine/core/models.py:1559
+#: engine/core/models.py:1575 engine/core/models.py:1641
msgid "invalid force value"
msgstr "Invalid force value"
-#: engine/core/models.py:1503 engine/core/models.py:1566
+#: engine/core/models.py:1581 engine/core/models.py:1652
msgid "you cannot purchase an empty order!"
msgstr "You cannot purchase an empty order!"
-#: engine/core/models.py:1522
+#: engine/core/models.py:1602
msgid "you cannot buy an order without a user"
msgstr "You cannot buy an order without a user!"
-#: engine/core/models.py:1536
+#: engine/core/models.py:1616
msgid "a user without a balance cannot buy with balance"
msgstr "A user without a balance cannot buy with balance!"
-#: engine/core/models.py:1541
+#: engine/core/models.py:1622
msgid "insufficient funds to complete the order"
msgstr "Insufficient funds to complete the order"
-#: engine/core/models.py:1575
+#: engine/core/models.py:1663
msgid ""
"you cannot buy without registration, please provide the following "
"information: customer name, customer email, customer phone number"
@@ -2488,14 +2492,14 @@ msgstr ""
"you cannot buy without registration, please provide the following "
"information: customer name, customer email, customer phone number"
-#: engine/core/models.py:1584
+#: engine/core/models.py:1674
#, python-brace-format
msgid ""
"invalid payment method: {payment_method} from {available_payment_methods}"
msgstr ""
"Invalid payment method: {payment_method} from {available_payment_methods}!"
-#: engine/core/models.py:1699
+#: engine/core/models.py:1805
msgid ""
"Manages user feedback for products. This class is designed to capture and "
"store user feedback for specific products that they have purchased. It "
@@ -2509,33 +2513,32 @@ msgstr ""
"product in the order, and a user-assigned rating. The class uses database "
"fields to effectively model and manage feedback data."
-#: engine/core/models.py:1711
+#: engine/core/models.py:1817
msgid "user-provided comments about their experience with the product"
msgstr "User-provided comments about their experience with the product"
-#: engine/core/models.py:1712
+#: engine/core/models.py:1818
msgid "feedback comments"
msgstr "Feedback comments"
-#: engine/core/models.py:1719
-msgid ""
-"references the specific product in an order that this feedback is about"
+#: engine/core/models.py:1826
+msgid "references the specific product in an order that this feedback is about"
msgstr ""
"References the specific product in an order that this feedback is about"
-#: engine/core/models.py:1720
+#: engine/core/models.py:1828
msgid "related order product"
msgstr "Related order product"
-#: engine/core/models.py:1725
+#: engine/core/models.py:1833
msgid "user-assigned rating for the product"
msgstr "User-assigned rating for the product"
-#: engine/core/models.py:1726
+#: engine/core/models.py:1834
msgid "product rating"
msgstr "Product rating"
-#: engine/core/models.py:1742
+#: engine/core/models.py:1854
msgid ""
"Represents products associated with orders and their attributes. The "
"OrderProduct model maintains information about a product that is part of an "
@@ -2557,132 +2560,132 @@ msgstr ""
"download URL for digital products. The model integrates with the Order and "
"Product models and stores a reference to them."
-#: engine/core/models.py:1757
+#: engine/core/models.py:1869
msgid "the price paid by the customer for this product at purchase time"
msgstr "The price paid by the customer for this product at purchase time"
-#: engine/core/models.py:1758
+#: engine/core/models.py:1870
msgid "purchase price at order time"
msgstr "Purchase price at order time"
-#: engine/core/models.py:1763
+#: engine/core/models.py:1875
msgid "internal comments for admins about this ordered product"
msgstr "Internal comments for admins about this ordered product"
-#: engine/core/models.py:1764
+#: engine/core/models.py:1876
msgid "internal comments"
msgstr "Internal comments"
-#: engine/core/models.py:1770
+#: engine/core/models.py:1882
msgid "user notifications"
msgstr "User notifications"
-#: engine/core/models.py:1775
+#: engine/core/models.py:1887
msgid "json representation of this item's attributes"
msgstr "JSON representation of this item's attributes"
-#: engine/core/models.py:1776
+#: engine/core/models.py:1888
msgid "ordered product attributes"
msgstr "Ordered product attributes"
-#: engine/core/models.py:1781
+#: engine/core/models.py:1893
msgid "reference to the parent order that contains this product"
msgstr "Reference to the parent order that contains this product"
-#: engine/core/models.py:1782
+#: engine/core/models.py:1894
msgid "parent order"
msgstr "Parent order"
-#: engine/core/models.py:1791
+#: engine/core/models.py:1903
msgid "the specific product associated with this order line"
msgstr "The specific product associated with this order line"
-#: engine/core/models.py:1798
+#: engine/core/models.py:1910
msgid "quantity of this specific product in the order"
msgstr "Quantity of this specific product in the order"
-#: engine/core/models.py:1799
+#: engine/core/models.py:1911
msgid "product quantity"
msgstr "Product quantity"
-#: engine/core/models.py:1806
+#: engine/core/models.py:1918
msgid "current status of this product in the order"
msgstr "Current status of this product in the order"
-#: engine/core/models.py:1807
+#: engine/core/models.py:1919
msgid "product line status"
msgstr "Product line status"
-#: engine/core/models.py:1872
+#: engine/core/models.py:1986
msgid "order product must have an order"
msgstr "Orderproduct must have an associated order!"
-#: engine/core/models.py:1874
+#: engine/core/models.py:1988
#, python-brace-format
msgid "wrong action specified for feedback: {action}"
msgstr "Wrong action specified for feedback: {action}!"
-#: engine/core/models.py:1888
+#: engine/core/models.py:2005
msgid "you cannot feedback an order which is not received"
msgstr "you cannot feedback an order which is not received"
-#: engine/core/models.py:1894
+#: engine/core/models.py:2014
msgid "name"
msgstr "Name"
-#: engine/core/models.py:1895
+#: engine/core/models.py:2016
msgid "URL of the integration"
msgstr "URL of the integration"
-#: engine/core/models.py:1896
+#: engine/core/models.py:2019
msgid "authentication credentials"
msgstr "Authentication credentials"
-#: engine/core/models.py:1918
+#: engine/core/models.py:2042
msgid "you can only have one default CRM provider"
msgstr "You can only have one default CRM provider"
-#: engine/core/models.py:1928
+#: engine/core/models.py:2052
msgid "CRM"
msgstr "CRM"
-#: engine/core/models.py:1929
+#: engine/core/models.py:2053
msgid "CRMs"
msgstr "CRMs"
-#: engine/core/models.py:1941
+#: engine/core/models.py:2069
msgid "order CRM link"
msgstr "Order's CRM link"
-#: engine/core/models.py:1942
+#: engine/core/models.py:2070
msgid "orders CRM links"
msgstr "Orders' CRM links"
-#: engine/core/models.py:1947
+#: engine/core/models.py:2075
msgid ""
"Represents the downloading functionality for digital assets associated with "
"orders. The DigitalAssetDownload class provides the ability to manage and "
"access downloads related to order products. It maintains information about "
-"the associated order product, the number of downloads, and whether the asset"
-" is publicly visible. It includes a method to generate a URL for downloading"
-" the asset when the associated order is in a completed status."
+"the associated order product, the number of downloads, and whether the asset "
+"is publicly visible. It includes a method to generate a URL for downloading "
+"the asset when the associated order is in a completed status."
msgstr ""
"Represents the downloading functionality for digital assets associated with "
"orders. The DigitalAssetDownload class provides the ability to manage and "
"access downloads related to order products. It maintains information about "
-"the associated order product, the number of downloads, and whether the asset"
-" is publicly visible. It includes a method to generate a URL for downloading"
-" the asset when the associated order is in a completed status."
+"the associated order product, the number of downloads, and whether the asset "
+"is publicly visible. It includes a method to generate a URL for downloading "
+"the asset when the associated order is in a completed status."
-#: engine/core/models.py:1961
+#: engine/core/models.py:2091
msgid "download"
msgstr "Download"
-#: engine/core/models.py:1962
+#: engine/core/models.py:2092
msgid "downloads"
msgstr "Downloads"
-#: engine/core/serializers/utility.py:89
+#: engine/core/serializers/utility.py:91
msgid ""
"you must provide a comment, rating, and order product uuid to add feedback."
msgstr ""
@@ -2878,11 +2881,12 @@ msgstr "Hello %(order.user.first_name)s,"
#, python-format
msgid ""
"thank you for your order #%(order.pk)s! we are pleased to inform you that\n"
-" we have taken your order into work. below are the details of your\n"
+" we have taken your order into work. below are "
+"the details of your\n"
" order:"
msgstr ""
-"Thank you for your order #%(order.pk)s! We are pleased to inform you that we"
-" have taken your order into work. Below are the details of your order:"
+"Thank you for your order #%(order.pk)s! We are pleased to inform you that we "
+"have taken your order into work. Below are the details of your order:"
#: engine/core/templates/digital_order_created_email.html:112
#: engine/core/templates/digital_order_delivered_email.html:110
@@ -2992,11 +2996,12 @@ msgstr ""
#: engine/core/templates/shipped_order_created_email.html:101
#: engine/core/templates/shipped_order_delivered_email.html:101
msgid ""
-"thank you for your order! we are pleased to confirm your purchase. below are\n"
+"thank you for your order! we are pleased to confirm your purchase. below "
+"are\n"
" the details of your order:"
msgstr ""
-"Thank you for your order! We are pleased to confirm your purchase. Below are"
-" the details of your order:"
+"Thank you for your order! We are pleased to confirm your purchase. Below are "
+"the details of your order:"
#: engine/core/templates/shipped_order_created_email.html:123
#: engine/core/templates/shipped_order_delivered_email.html:123
@@ -3023,11 +3028,11 @@ msgstr ""
"All rights\n"
" reserved"
-#: engine/core/utils/caching.py:44
+#: engine/core/utils/caching.py:48
msgid "both data and timeout are required"
msgstr "Both data and timeout are required"
-#: engine/core/utils/caching.py:46
+#: engine/core/utils/caching.py:51
msgid "invalid timeout value, it must be between 0 and 216000 seconds"
msgstr "Invalid timeout value, it must be between 0 and 216000 seconds"
@@ -3036,17 +3041,17 @@ msgstr "Invalid timeout value, it must be between 0 and 216000 seconds"
msgid "{settings.PROJECT_NAME} | contact us initiated"
msgstr "{settings.PROJECT_NAME} | contact us initiated"
-#: engine/core/utils/emailing.py:73
+#: engine/core/utils/emailing.py:81
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order confirmation"
msgstr "{settings.PROJECT_NAME} | order confirmation"
-#: engine/core/utils/emailing.py:105
+#: engine/core/utils/emailing.py:115
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order delivered"
msgstr "{settings.PROJECT_NAME} | order delivered"
-#: engine/core/utils/emailing.py:188
+#: engine/core/utils/emailing.py:203
#, python-brace-format
msgid "{settings.PROJECT_NAME} | promocode granted"
msgstr "{settings.PROJECT_NAME} | promocode granted"
@@ -3059,13 +3064,13 @@ msgstr "You do not have permission to perform this action."
msgid "NOMINATIM_URL must be configured."
msgstr "NOMINATIM_URL parameter must be configured!"
-#: engine/core/validators.py:19
+#: engine/core/validators.py:21
#, python-brace-format
msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels"
msgstr ""
"Image dimensions should not exceed w{max_width} x h{max_height} pixels!"
-#: engine/core/views.py:91
+#: engine/core/views.py:105
msgid ""
"Handles the request for the sitemap index and returns an XML response. It "
"ensures the response includes the appropriate content type header for XML."
@@ -3073,7 +3078,7 @@ msgstr ""
"Handles the request for the sitemap index and returns an XML response. It "
"ensures the response includes the appropriate content type header for XML."
-#: engine/core/views.py:106
+#: engine/core/views.py:120
msgid ""
"Handles the detailed view response for a sitemap. This function processes "
"the request, fetches the appropriate sitemap detail response, and sets the "
@@ -3083,17 +3088,17 @@ msgstr ""
"the request, fetches the appropriate sitemap detail response, and sets the "
"Content-Type header for XML."
-#: engine/core/views.py:141
+#: engine/core/views.py:156
msgid ""
"Returns a list of supported languages and their corresponding information."
msgstr ""
"Returns a list of supported languages and their corresponding information."
-#: engine/core/views.py:173
+#: engine/core/views.py:183
msgid "Returns the parameters of the website as a JSON object."
msgstr "Returns the parameters of the website as a JSON object."
-#: engine/core/views.py:192
+#: engine/core/views.py:199
msgid ""
"Handles cache operations such as reading and setting cache data with a "
"specified key and timeout."
@@ -3101,11 +3106,11 @@ msgstr ""
"Handles cache operations such as reading and setting cache data with a "
"specified key and timeout."
-#: engine/core/views.py:219
+#: engine/core/views.py:221
msgid "Handles `contact us` form submissions."
msgstr "Handles `contact us` form submissions."
-#: engine/core/views.py:240
+#: engine/core/views.py:237
msgid ""
"Handles requests for processing and validating URLs from incoming POST "
"requests."
@@ -3113,78 +3118,86 @@ msgstr ""
"Handles requests for processing and validating URLs from incoming POST "
"requests."
-#: engine/core/views.py:280
+#: engine/core/views.py:274
msgid "Handles global search queries."
msgstr "Handles global search queries."
-#: engine/core/views.py:295
+#: engine/core/views.py:290
msgid "Handles the logic of buying as a business without registration."
msgstr "Handles the logic of buying as a business without registration."
-#: engine/core/views.py:332
+#: engine/core/views.py:338
msgid ""
"Handles the downloading of a digital asset associated with an order.\n"
-"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the digital asset file located in the "
+"storage directory of the project. If the file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
msgstr ""
"Handles the downloading of a digital asset associated with an order.\n"
-"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the digital asset file located in the "
+"storage directory of the project. If the file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
-#: engine/core/views.py:343
+#: engine/core/views.py:349
msgid "order_product_uuid is required"
msgstr "order_product_uuid is required"
-#: engine/core/views.py:350
+#: engine/core/views.py:356
msgid "order product does not exist"
msgstr "order product does not exist"
-#: engine/core/views.py:353
+#: engine/core/views.py:359
msgid "you can only download the digital asset once"
msgstr "You can only download the digital asset once"
-#: engine/core/views.py:356
+#: engine/core/views.py:363
msgid "the order must be paid before downloading the digital asset"
msgstr "the order must be paid before downloading the digital asset"
-#: engine/core/views.py:362
+#: engine/core/views.py:370
msgid "the order product does not have a product"
msgstr "The order product does not have a product"
-#: engine/core/views.py:399
+#: engine/core/views.py:414
msgid "favicon not found"
msgstr "favicon not found"
-#: engine/core/views.py:404
+#: engine/core/views.py:419
msgid ""
"Handles requests for the favicon of a website.\n"
-"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the favicon file located in the static "
+"directory of the project. If the favicon file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
msgstr ""
"Handles requests for the favicon of a website.\n"
-"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the favicon file located in the static "
+"directory of the project. If the favicon file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
-#: engine/core/views.py:416
+#: engine/core/views.py:431
msgid ""
-"Redirects the request to the admin index page. The function handles incoming"
-" HTTP requests and redirects them to the Django admin interface index page. "
+"Redirects the request to the admin index page. The function handles incoming "
+"HTTP requests and redirects them to the Django admin interface index page. "
"It uses Django's `redirect` function for handling the HTTP redirection."
msgstr ""
-"Redirects the request to the admin index page. The function handles incoming"
-" HTTP requests and redirects them to the Django admin interface index page. "
+"Redirects the request to the admin index page. The function handles incoming "
+"HTTP requests and redirects them to the Django admin interface index page. "
"It uses Django's `redirect` function for handling the HTTP redirection."
-#: engine/core/views.py:429
+#: engine/core/views.py:443
msgid "Returns current version of the eVibes. "
msgstr "Returns current version of the eVibes."
-#: engine/core/views.py:623 engine/core/views.py:636
+#: engine/core/views.py:672 engine/core/views.py:687
#, python-format
msgid "Revenue & Orders (last %(days)d)"
msgstr "Revenue & Orders (last %(days)d)"
-#: engine/core/views.py:793
+#: engine/core/views.py:868
msgid "Returns custom variables for Dashboard. "
msgstr "Returns custom variables for Dashboard."
-#: engine/core/viewsets.py:136
+#: engine/core/viewsets.py:139
msgid ""
"Defines a viewset for managing Evibes-related operations. The EvibesViewSet "
"class inherits from ModelViewSet and provides functionality for handling "
@@ -3198,21 +3211,19 @@ msgstr ""
"serializer classes based on the current action, customizable permissions, "
"and rendering formats."
-#: engine/core/viewsets.py:156
+#: engine/core/viewsets.py:160
msgid ""
-"Represents a viewset for managing AttributeGroup objects. Handles operations"
-" related to AttributeGroup, including filtering, serialization, and "
-"retrieval of data. This class is part of the application's API layer and "
-"provides a standardized way to process requests and responses for "
-"AttributeGroup data."
+"Represents a viewset for managing AttributeGroup objects. Handles operations "
+"related to AttributeGroup, including filtering, serialization, and retrieval "
+"of data. This class is part of the application's API layer and provides a "
+"standardized way to process requests and responses for AttributeGroup data."
msgstr ""
-"Represents a viewset for managing AttributeGroup objects. Handles operations"
-" related to AttributeGroup, including filtering, serialization, and "
-"retrieval of data. This class is part of the application's API layer and "
-"provides a standardized way to process requests and responses for "
-"AttributeGroup data."
+"Represents a viewset for managing AttributeGroup objects. Handles operations "
+"related to AttributeGroup, including filtering, serialization, and retrieval "
+"of data. This class is part of the application's API layer and provides a "
+"standardized way to process requests and responses for AttributeGroup data."
-#: engine/core/viewsets.py:175
+#: engine/core/viewsets.py:179
msgid ""
"Handles operations related to Attribute objects within the application. "
"Provides a set of API endpoints to interact with Attribute data. This class "
@@ -3228,21 +3239,21 @@ msgstr ""
"specific fields or retrieving detailed versus simplified information "
"depending on the request."
-#: engine/core/viewsets.py:194
+#: engine/core/viewsets.py:198
msgid ""
"A viewset for managing AttributeValue objects. This viewset provides "
"functionality for listing, retrieving, creating, updating, and deleting "
"AttributeValue objects. It integrates with Django REST Framework's viewset "
-"mechanisms and uses appropriate serializers for different actions. Filtering"
-" capabilities are provided through the DjangoFilterBackend."
+"mechanisms and uses appropriate serializers for different actions. Filtering "
+"capabilities are provided through the DjangoFilterBackend."
msgstr ""
"A viewset for managing AttributeValue objects. This viewset provides "
"functionality for listing, retrieving, creating, updating, and deleting "
"AttributeValue objects. It integrates with Django REST Framework's viewset "
-"mechanisms and uses appropriate serializers for different actions. Filtering"
-" capabilities are provided through the DjangoFilterBackend."
+"mechanisms and uses appropriate serializers for different actions. Filtering "
+"capabilities are provided through the DjangoFilterBackend."
-#: engine/core/viewsets.py:213
+#: engine/core/viewsets.py:217
msgid ""
"Manages views for Category-related operations. The CategoryViewSet class is "
"responsible for handling operations related to the Category model in the "
@@ -3256,7 +3267,7 @@ msgstr ""
"The viewset also enforces permissions to ensure that only authorized users "
"can access specific data."
-#: engine/core/viewsets.py:326
+#: engine/core/viewsets.py:346
msgid ""
"Represents a viewset for managing Brand instances. This class provides "
"functionality for querying, filtering, and serializing Brand objects. It "
@@ -3268,7 +3279,7 @@ msgstr ""
"uses Django's ViewSet framework to simplify the implementation of API "
"endpoints for Brand objects."
-#: engine/core/viewsets.py:438
+#: engine/core/viewsets.py:458
msgid ""
"Manages operations related to the `Product` model in the system. This class "
"provides a viewset for managing products, including their filtering, "
@@ -3286,7 +3297,7 @@ msgstr ""
"product details, applying permissions, and accessing related feedback of a "
"product."
-#: engine/core/viewsets.py:574
+#: engine/core/viewsets.py:605
msgid ""
"Represents a viewset for managing Vendor objects. This viewset allows "
"fetching, filtering, and serializing Vendor data. It defines the queryset, "
@@ -3300,59 +3311,59 @@ msgstr ""
"actions. The purpose of this class is to provide streamlined access to "
"Vendor-related resources through the Django REST framework."
-#: engine/core/viewsets.py:594
+#: engine/core/viewsets.py:625
msgid ""
"Representation of a view set handling Feedback objects. This class manages "
"operations related to Feedback objects, including listing, filtering, and "
"retrieving details. The purpose of this view set is to provide different "
-"serializers for different actions and implement permission-based handling of"
-" accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
+"serializers for different actions and implement permission-based handling of "
+"accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
"use of Django's filtering system for querying data."
msgstr ""
"Representation of a view set handling Feedback objects. This class manages "
"operations related to Feedback objects, including listing, filtering, and "
"retrieving details. The purpose of this view set is to provide different "
-"serializers for different actions and implement permission-based handling of"
-" accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
+"serializers for different actions and implement permission-based handling of "
+"accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
"use of Django's filtering system for querying data."
-#: engine/core/viewsets.py:621
+#: engine/core/viewsets.py:652
msgid ""
"ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes "
"various endpoints for handling order operations such as adding or removing "
-"products, performing purchases for registered as well as unregistered users,"
-" and retrieving the current authenticated user's pending orders. The ViewSet"
-" uses multiple serializers based on the specific action being performed and "
+"products, performing purchases for registered as well as unregistered users, "
+"and retrieving the current authenticated user's pending orders. The ViewSet "
+"uses multiple serializers based on the specific action being performed and "
"enforces permissions accordingly while interacting with order data."
msgstr ""
"ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes "
"various endpoints for handling order operations such as adding or removing "
-"products, performing purchases for registered as well as unregistered users,"
-" and retrieving the current authenticated user's pending orders. The ViewSet"
-" uses multiple serializers based on the specific action being performed and "
+"products, performing purchases for registered as well as unregistered users, "
+"and retrieving the current authenticated user's pending orders. The ViewSet "
+"uses multiple serializers based on the specific action being performed and "
"enforces permissions accordingly while interacting with order data."
-#: engine/core/viewsets.py:825
+#: engine/core/viewsets.py:914
msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It "
-"includes filtering, permission checks, and serializer switching based on the"
-" requested action. Additionally, it provides a detailed action for handling "
+"includes filtering, permission checks, and serializer switching based on the "
+"requested action. Additionally, it provides a detailed action for handling "
"feedback on OrderProduct instances"
msgstr ""
"Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It "
-"includes filtering, permission checks, and serializer switching based on the"
-" requested action. Additionally, it provides a detailed action for handling "
+"includes filtering, permission checks, and serializer switching based on the "
+"requested action. Additionally, it provides a detailed action for handling "
"feedback on OrderProduct instances"
-#: engine/core/viewsets.py:879
+#: engine/core/viewsets.py:974
msgid "Manages operations related to Product images in the application. "
msgstr "Manages operations related to Product images in the application."
-#: engine/core/viewsets.py:892
+#: engine/core/viewsets.py:988
msgid ""
"Manages the retrieval and handling of PromoCode instances through various "
"API actions."
@@ -3360,33 +3371,33 @@ msgstr ""
"Manages the retrieval and handling of PromoCode instances through various "
"API actions."
-#: engine/core/viewsets.py:914
+#: engine/core/viewsets.py:1019
msgid "Represents a view set for managing promotions. "
msgstr "Represents a view set for managing promotions."
-#: engine/core/viewsets.py:927
+#: engine/core/viewsets.py:1032
msgid "Handles operations related to Stock data in the system."
msgstr "Handles operations related to Stock data in the system."
-#: engine/core/viewsets.py:941
+#: engine/core/viewsets.py:1046
msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the "
-"retrieval, modification, and customization of products within the wish list."
-" This ViewSet facilitates functionality such as adding, removing, and bulk "
+"retrieval, modification, and customization of products within the wish list. "
+"This ViewSet facilitates functionality such as adding, removing, and bulk "
"actions for wishlist products. Permission checks are integrated to ensure "
"that users can only manage their own wishlists unless explicit permissions "
"are granted."
msgstr ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the "
-"retrieval, modification, and customization of products within the wish list."
-" This ViewSet facilitates functionality such as adding, removing, and bulk "
+"retrieval, modification, and customization of products within the wish list. "
+"This ViewSet facilitates functionality such as adding, removing, and bulk "
"actions for wishlist products. Permission checks are integrated to ensure "
"that users can only manage their own wishlists unless explicit permissions "
"are granted."
-#: engine/core/viewsets.py:1056
+#: engine/core/viewsets.py:1183
msgid ""
"This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom "
@@ -3400,12 +3411,12 @@ msgstr ""
"different HTTP methods, serializer overrides, and permission handling based "
"on the request context."
-#: engine/core/viewsets.py:1123
+#: engine/core/viewsets.py:1254
#, python-brace-format
msgid "Geocoding error: {e}"
msgstr "Geocoding error: {e}"
-#: engine/core/viewsets.py:1131
+#: engine/core/viewsets.py:1262
msgid ""
"Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing "
diff --git a/engine/core/locale/en_US/LC_MESSAGES/django.po b/engine/core/locale/en_US/LC_MESSAGES/django.po
index 8c77408e..07915633 100644
--- a/engine/core/locale/en_US/LC_MESSAGES/django.po
+++ b/engine/core/locale/en_US/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 22:12+0300\n"
+"POT-Creation-Date: 2025-12-18 19:09+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -25,113 +25,111 @@ msgstr "Unique ID is used to surely identify any database object"
msgid "is active"
msgstr "Is Active"
-#: engine/core/abstract.py:21
+#: engine/core/abstract.py:22
msgid ""
-"if set to false, this object can't be seen by users without needed "
-"permission"
+"if set to false, this object can't be seen by users without needed permission"
msgstr ""
-"If set to false, this object can't be seen by users without needed "
-"permission"
+"If set to false, this object can't be seen by users without needed permission"
-#: engine/core/abstract.py:23 engine/core/choices.py:18
+#: engine/core/abstract.py:26 engine/core/choices.py:18
msgid "created"
msgstr "Created"
-#: engine/core/abstract.py:23
+#: engine/core/abstract.py:26
msgid "when the object first appeared on the database"
msgstr "When the object first appeared on the database"
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "modified"
msgstr "Modified"
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "when the object was last modified"
msgstr "When the object was last edited"
-#: engine/core/admin.py:85
+#: engine/core/admin.py:94
msgid "translations"
msgstr "Translations"
-#: engine/core/admin.py:89
+#: engine/core/admin.py:102
msgid "general"
msgstr "General"
-#: engine/core/admin.py:91
+#: engine/core/admin.py:106
msgid "relations"
msgstr "Relations"
-#: engine/core/admin.py:93
+#: engine/core/admin.py:111
msgid "additional info"
msgstr "additional info"
-#: engine/core/admin.py:111
+#: engine/core/admin.py:133
msgid "metadata"
msgstr "Metadata"
-#: engine/core/admin.py:118
+#: engine/core/admin.py:141
msgid "timestamps"
msgstr "Timestamps"
-#: engine/core/admin.py:133
+#: engine/core/admin.py:157
#, python-format
msgid "activate selected %(verbose_name_plural)s"
msgstr "Activate selected %(verbose_name_plural)s"
-#: engine/core/admin.py:138
+#: engine/core/admin.py:165
msgid "selected items have been activated."
msgstr "Selected items have been activated!"
-#: engine/core/admin.py:144
+#: engine/core/admin.py:173
#, python-format
msgid "deactivate selected %(verbose_name_plural)s"
msgstr "Deactivate selected %(verbose_name_plural)s"
-#: engine/core/admin.py:149
+#: engine/core/admin.py:183
msgid "selected items have been deactivated."
msgstr "Selected items have been deactivated!"
-#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586
-#: engine/core/graphene/object_types.py:593 engine/core/models.py:801
-#: engine/core/models.py:809
+#: engine/core/admin.py:195 engine/core/graphene/object_types.py:650
+#: engine/core/graphene/object_types.py:657 engine/core/models.py:824
+#: engine/core/models.py:832
msgid "attribute value"
msgstr "Attribute Value"
-#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75
-#: engine/core/models.py:810
+#: engine/core/admin.py:196 engine/core/graphene/object_types.py:75
+#: engine/core/models.py:833
msgid "attribute values"
msgstr "Attribute Values"
-#: engine/core/admin.py:172
+#: engine/core/admin.py:207
msgid "image"
msgstr "Image"
-#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474
+#: engine/core/admin.py:208 engine/core/graphene/object_types.py:527
msgid "images"
msgstr "Images"
-#: engine/core/admin.py:184 engine/core/models.py:566
+#: engine/core/admin.py:219 engine/core/models.py:587
msgid "stock"
msgstr "Stock"
-#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640
+#: engine/core/admin.py:220 engine/core/graphene/object_types.py:710
msgid "stocks"
msgstr "Stocks"
-#: engine/core/admin.py:196 engine/core/models.py:1818
+#: engine/core/admin.py:231 engine/core/models.py:1930
msgid "order product"
msgstr "Order Product"
-#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389
-#: engine/core/models.py:1819
+#: engine/core/admin.py:232 engine/core/graphene/object_types.py:438
+#: engine/core/models.py:1931
msgid "order products"
msgstr "Order Products"
-#: engine/core/admin.py:210 engine/core/admin.py:211
+#: engine/core/admin.py:250 engine/core/admin.py:251
msgid "children"
msgstr "Children"
-#: engine/core/admin.py:977
+#: engine/core/admin.py:1059
msgid "Config"
msgstr "Config"
@@ -155,8 +153,7 @@ msgstr "Delivered"
msgid "canceled"
msgstr "Canceled"
-#: engine/core/choices.py:8 engine/core/choices.py:16
-#: engine/core/choices.py:24
+#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24
msgid "failed"
msgstr "Failed"
@@ -184,11 +181,11 @@ msgstr "Momental"
msgid "successful"
msgstr "Successful"
-#: engine/core/docs/drf/views.py:31
+#: engine/core/docs/drf/views.py:30
msgid "OpenAPI schema in selected format with selected language"
msgstr "OpenAPI schema in selected format with selected language"
-#: engine/core/docs/drf/views.py:33
+#: engine/core/docs/drf/views.py:32
msgid ""
"OpenApi3 schema for this API. Format can be selected via content "
"negotiation. Language can be selected with Accept-Language and query "
@@ -198,11 +195,11 @@ msgstr ""
"negotiation. Language can be selected with Accept-Language and query "
"parameter both."
-#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37
+#: engine/core/docs/drf/views.py:43 engine/core/graphene/mutations.py:37
msgid "cache I/O"
msgstr "Cache I/O"
-#: engine/core/docs/drf/views.py:46
+#: engine/core/docs/drf/views.py:45
msgid ""
"apply only a key to read permitted data from cache.\n"
"apply key, data and timeout with authentication to write data to cache."
@@ -210,35 +207,35 @@ msgstr ""
"Apply only a key to read permitted data from cache.\n"
"Apply key, data and timeout with authentication to write data to cache."
-#: engine/core/docs/drf/views.py:62
+#: engine/core/docs/drf/views.py:63
msgid "get a list of supported languages"
msgstr "Get a list of supported languages"
-#: engine/core/docs/drf/views.py:74
+#: engine/core/docs/drf/views.py:75
msgid "get application's exposable parameters"
msgstr "Get application's exposable parameters"
-#: engine/core/docs/drf/views.py:84
+#: engine/core/docs/drf/views.py:89
msgid "send a message to the support team"
msgstr "Send a message to the support team"
-#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57
+#: engine/core/docs/drf/views.py:103 engine/core/graphene/mutations.py:59
msgid "request a CORSed URL"
msgstr "Request a CORSed URL. Only https allowed."
-#: engine/core/docs/drf/views.py:112
+#: engine/core/docs/drf/views.py:119
msgid "Search between products, categories and brands"
msgstr "Search between products, categories and brands"
-#: engine/core/docs/drf/views.py:130
+#: engine/core/docs/drf/views.py:141
msgid "global search endpoint to query across project's tables"
msgstr "Global search endpoint to query across project's tables"
-#: engine/core/docs/drf/views.py:139
+#: engine/core/docs/drf/views.py:150
msgid "purchase an order as a business"
msgstr "Purchase an order as a Business"
-#: engine/core/docs/drf/views.py:146
+#: engine/core/docs/drf/views.py:158
msgid ""
"purchase an order as a business, using the provided `products` with "
"`product_uuid` and `attributes`."
@@ -246,213 +243,211 @@ msgstr ""
"Purchase an order as a business, using the provided `products` with "
"`product_uuid` and `attributes`."
-#: engine/core/docs/drf/views.py:164
+#: engine/core/docs/drf/views.py:177
msgid "download a digital asset from purchased digital order"
msgstr "download a digital asset from purchased digital order"
-#: engine/core/docs/drf/viewsets.py:61
+#: engine/core/docs/drf/viewsets.py:65
msgid "list all attribute groups (simple view)"
msgstr "List all attribute groups (simple view)"
-#: engine/core/docs/drf/viewsets.py:68
+#: engine/core/docs/drf/viewsets.py:75
msgid "retrieve a single attribute group (detailed view)"
msgstr "Retrieve a single attribute group (detailed view)"
-#: engine/core/docs/drf/viewsets.py:75
+#: engine/core/docs/drf/viewsets.py:82
msgid "create an attribute group"
msgstr "Create an attribute group"
-#: engine/core/docs/drf/viewsets.py:82
+#: engine/core/docs/drf/viewsets.py:92
msgid "delete an attribute group"
msgstr "Delete an attribute group"
-#: engine/core/docs/drf/viewsets.py:89
+#: engine/core/docs/drf/viewsets.py:99
msgid "rewrite an existing attribute group saving non-editables"
msgstr "Rewrite an existing attribute group saving non-editables"
-#: engine/core/docs/drf/viewsets.py:96
-msgid ""
-"rewrite some fields of an existing attribute group saving non-editables"
+#: engine/core/docs/drf/viewsets.py:107
+msgid "rewrite some fields of an existing attribute group saving non-editables"
msgstr ""
"Rewrite some fields of an existing attribute group saving non-editables"
-#: engine/core/docs/drf/viewsets.py:106
+#: engine/core/docs/drf/viewsets.py:118
msgid "list all attributes (simple view)"
msgstr "List all attributes (simple view)"
-#: engine/core/docs/drf/viewsets.py:113
+#: engine/core/docs/drf/viewsets.py:128
msgid "retrieve a single attribute (detailed view)"
msgstr "Retrieve a single attribute (detailed view)"
-#: engine/core/docs/drf/viewsets.py:120
+#: engine/core/docs/drf/viewsets.py:135
msgid "create an attribute"
msgstr "Create an attribute"
-#: engine/core/docs/drf/viewsets.py:127
+#: engine/core/docs/drf/viewsets.py:142
msgid "delete an attribute"
msgstr "Delete an attribute"
-#: engine/core/docs/drf/viewsets.py:134
+#: engine/core/docs/drf/viewsets.py:149
msgid "rewrite an existing attribute saving non-editables"
msgstr "Rewrite an existing attribute saving non-editables"
-#: engine/core/docs/drf/viewsets.py:141
+#: engine/core/docs/drf/viewsets.py:156
msgid "rewrite some fields of an existing attribute saving non-editables"
msgstr "Rewrite some fields of an existing attribute saving non-editables"
-#: engine/core/docs/drf/viewsets.py:151
+#: engine/core/docs/drf/viewsets.py:166
msgid "list all attribute values (simple view)"
msgstr "List all attribute values (simple view)"
-#: engine/core/docs/drf/viewsets.py:158
+#: engine/core/docs/drf/viewsets.py:176
msgid "retrieve a single attribute value (detailed view)"
msgstr "Retrieve a single attribute value (detailed view)"
-#: engine/core/docs/drf/viewsets.py:165
+#: engine/core/docs/drf/viewsets.py:183
msgid "create an attribute value"
msgstr "Create an attribute value"
-#: engine/core/docs/drf/viewsets.py:172
+#: engine/core/docs/drf/viewsets.py:193
msgid "delete an attribute value"
msgstr "Delete an attribute value"
-#: engine/core/docs/drf/viewsets.py:179
+#: engine/core/docs/drf/viewsets.py:200
msgid "rewrite an existing attribute value saving non-editables"
msgstr "Rewrite an existing attribute value saving non-editables"
-#: engine/core/docs/drf/viewsets.py:186
-msgid ""
-"rewrite some fields of an existing attribute value saving non-editables"
+#: engine/core/docs/drf/viewsets.py:208
+msgid "rewrite some fields of an existing attribute value saving non-editables"
msgstr ""
"Rewrite some fields of an existing attribute value saving non-editables"
-#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197
+#: engine/core/docs/drf/viewsets.py:219 engine/core/docs/drf/viewsets.py:220
msgid "list all categories (simple view)"
msgstr "List all categories (simple view)"
-#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205
+#: engine/core/docs/drf/viewsets.py:230 engine/core/docs/drf/viewsets.py:231
msgid "retrieve a single category (detailed view)"
msgstr "Retrieve a single category (detailed view)"
-#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258
+#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:286
msgid "Category UUID or slug"
msgstr "Category UUID or slug"
-#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221
+#: engine/core/docs/drf/viewsets.py:246 engine/core/docs/drf/viewsets.py:247
msgid "create a category"
msgstr "Create a category"
-#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229
+#: engine/core/docs/drf/viewsets.py:254 engine/core/docs/drf/viewsets.py:255
msgid "delete a category"
msgstr "Delete a category"
-#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237
+#: engine/core/docs/drf/viewsets.py:262 engine/core/docs/drf/viewsets.py:263
msgid "rewrite an existing category saving non-editables"
msgstr "Rewrite an existing category saving non-editables"
-#: engine/core/docs/drf/viewsets.py:244 engine/core/docs/drf/viewsets.py:245
+#: engine/core/docs/drf/viewsets.py:270 engine/core/docs/drf/viewsets.py:272
msgid "rewrite some fields of an existing category saving non-editables"
msgstr "Rewrite some fields of an existing category saving non-editables"
-#: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704
-#: engine/core/docs/drf/viewsets.py:988
+#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:1046
#: engine/core/graphene/object_types.py:117
-#: engine/core/graphene/object_types.py:207
-#: engine/core/graphene/object_types.py:482
+#: engine/core/graphene/object_types.py:236
+#: engine/core/graphene/object_types.py:537
msgid "SEO Meta snapshot"
msgstr "SEO Meta snapshot"
-#: engine/core/docs/drf/viewsets.py:253
+#: engine/core/docs/drf/viewsets.py:281
msgid "returns a snapshot of the category's SEO meta data"
msgstr "Returns a snapshot of the category's SEO meta data"
-#: engine/core/docs/drf/viewsets.py:274
+#: engine/core/docs/drf/viewsets.py:302
msgid "list all orders (simple view)"
msgstr "List all categories (simple view)"
-#: engine/core/docs/drf/viewsets.py:275
+#: engine/core/docs/drf/viewsets.py:303
msgid "for non-staff users, only their own orders are returned."
msgstr "For non-staff users, only their own orders are returned."
-#: engine/core/docs/drf/viewsets.py:281
+#: engine/core/docs/drf/viewsets.py:309
msgid ""
-"Case-insensitive substring search across human_readable_id, "
-"order_products.product.name, and order_products.product.partnumber"
+"Case-insensitive substring search across human_readable_id, order_products."
+"product.name, and order_products.product.partnumber"
msgstr ""
-"Case-insensitive substring search across human_readable_id, "
-"order_products.product.name, and order_products.product.partnumber"
+"Case-insensitive substring search across human_readable_id, order_products."
+"product.name, and order_products.product.partnumber"
-#: engine/core/docs/drf/viewsets.py:288
+#: engine/core/docs/drf/viewsets.py:316
msgid "Filter orders with buy_time >= this ISO 8601 datetime"
msgstr "Filter orders with buy_time >= this ISO 8601 datetime"
-#: engine/core/docs/drf/viewsets.py:293
+#: engine/core/docs/drf/viewsets.py:321
msgid "Filter orders with buy_time <= this ISO 8601 datetime"
msgstr "Filter orders with buy_time <= this ISO 8601 datetime"
-#: engine/core/docs/drf/viewsets.py:298
+#: engine/core/docs/drf/viewsets.py:326
msgid "Filter by exact order UUID"
msgstr "Filter by exact order UUID"
-#: engine/core/docs/drf/viewsets.py:303
+#: engine/core/docs/drf/viewsets.py:331
msgid "Filter by exact human-readable order ID"
msgstr "Filter by exact human-readable order ID"
-#: engine/core/docs/drf/viewsets.py:308
+#: engine/core/docs/drf/viewsets.py:336
msgid "Filter by user's email (case-insensitive exact match)"
msgstr "Filter by user's email (case-insensitive exact match)"
-#: engine/core/docs/drf/viewsets.py:313
+#: engine/core/docs/drf/viewsets.py:341
msgid "Filter by user's UUID"
msgstr "Filter by user's UUID"
-#: engine/core/docs/drf/viewsets.py:318
+#: engine/core/docs/drf/viewsets.py:347
msgid "Filter by order status (case-insensitive substring match)"
msgstr "Filter by order status (case-insensitive substring match)"
-#: engine/core/docs/drf/viewsets.py:324
+#: engine/core/docs/drf/viewsets.py:354
msgid ""
-"Order by one of: uuid, human_readable_id, user_email, user, status, created,"
-" modified, buy_time, random. Prefix with '-' for descending (e.g. "
-"'-buy_time')."
+"Order by one of: uuid, human_readable_id, user_email, user, status, created, "
+"modified, buy_time, random. Prefix with '-' for descending (e.g. '-"
+"buy_time')."
msgstr ""
-"Order by one of: uuid, human_readable_id, user_email, user, status, created,"
-" modified, buy_time, random. Prefix with '-' for descending (e.g. "
-"'-buy_time')."
+"Order by one of: uuid, human_readable_id, user_email, user, status, created, "
+"modified, buy_time, random. Prefix with '-' for descending (e.g. '-"
+"buy_time')."
-#: engine/core/docs/drf/viewsets.py:336
+#: engine/core/docs/drf/viewsets.py:366
msgid "retrieve a single order (detailed view)"
msgstr "Retrieve a single category (detailed view)"
-#: engine/core/docs/drf/viewsets.py:341
+#: engine/core/docs/drf/viewsets.py:371
msgid "Order UUID or human-readable id"
msgstr "Order UUID or human-readable id"
-#: engine/core/docs/drf/viewsets.py:351
+#: engine/core/docs/drf/viewsets.py:381
msgid "create an order"
msgstr "Create an attribute"
-#: engine/core/docs/drf/viewsets.py:352
+#: engine/core/docs/drf/viewsets.py:382
msgid "doesn't work for non-staff users."
msgstr "Doesn't work for non-staff users."
-#: engine/core/docs/drf/viewsets.py:359
+#: engine/core/docs/drf/viewsets.py:389
msgid "delete an order"
msgstr "Delete an attribute"
-#: engine/core/docs/drf/viewsets.py:366
+#: engine/core/docs/drf/viewsets.py:396
msgid "rewrite an existing order saving non-editables"
msgstr "Rewrite an existing category saving non-editables"
-#: engine/core/docs/drf/viewsets.py:373
+#: engine/core/docs/drf/viewsets.py:403
msgid "rewrite some fields of an existing order saving non-editables"
msgstr "Rewrite some fields of an existing category saving non-editables"
-#: engine/core/docs/drf/viewsets.py:380
+#: engine/core/docs/drf/viewsets.py:410
msgid "purchase an order"
msgstr "Purchase price at order time"
-#: engine/core/docs/drf/viewsets.py:382
+#: engine/core/docs/drf/viewsets.py:412
msgid ""
"finalizes the order purchase. if `force_balance` is used, the purchase is "
"completed using the user's balance; if `force_payment` is used, a "
@@ -462,27 +457,27 @@ msgstr ""
"completed using the user's balance; If `force_payment` is used, a "
"transaction is initiated."
-#: engine/core/docs/drf/viewsets.py:397
+#: engine/core/docs/drf/viewsets.py:427
msgid "retrieve current pending order of a user"
msgstr "retrieve current pending order of a user"
-#: engine/core/docs/drf/viewsets.py:398
+#: engine/core/docs/drf/viewsets.py:428
msgid "retrieves a current pending order of an authenticated user"
msgstr "retrieves a current pending order of an authenticated user"
-#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334
+#: engine/core/docs/drf/viewsets.py:438 engine/core/graphene/mutations.py:354
msgid "purchase an order without account creation"
msgstr "purchase an order without account creation"
-#: engine/core/docs/drf/viewsets.py:409
+#: engine/core/docs/drf/viewsets.py:439
msgid "finalizes the order purchase for a non-registered user."
msgstr "finalizes the order purchase for a non-registered user."
-#: engine/core/docs/drf/viewsets.py:420
+#: engine/core/docs/drf/viewsets.py:450
msgid "add product to order"
msgstr "Add a product to the order"
-#: engine/core/docs/drf/viewsets.py:421
+#: engine/core/docs/drf/viewsets.py:452
msgid ""
"adds a product to an order using the provided `product_uuid` and "
"`attributes`."
@@ -490,11 +485,11 @@ msgstr ""
"Adds a product to an order using the provided `product_uuid` and "
"`attributes`."
-#: engine/core/docs/drf/viewsets.py:429
+#: engine/core/docs/drf/viewsets.py:461
msgid "add a list of products to order, quantities will not count"
msgstr "Add a list of products to order, quantities will not count"
-#: engine/core/docs/drf/viewsets.py:430
+#: engine/core/docs/drf/viewsets.py:463
msgid ""
"adds a list of products to an order using the provided `product_uuid` and "
"`attributes`."
@@ -502,11 +497,11 @@ msgstr ""
"Adds a list of products to an order using the provided `product_uuid` and "
"`attributes`."
-#: engine/core/docs/drf/viewsets.py:438
+#: engine/core/docs/drf/viewsets.py:472
msgid "remove product from order"
msgstr "Remove a product from the order"
-#: engine/core/docs/drf/viewsets.py:439
+#: engine/core/docs/drf/viewsets.py:474
msgid ""
"removes a product from an order using the provided `product_uuid` and "
"`attributes`."
@@ -514,11 +509,11 @@ msgstr ""
"Removes a product from an order using the provided `product_uuid` and "
"`attributes`."
-#: engine/core/docs/drf/viewsets.py:447
+#: engine/core/docs/drf/viewsets.py:483
msgid "remove product from order, quantities will not count"
msgstr "Remove a product from order, quantities will not count"
-#: engine/core/docs/drf/viewsets.py:448
+#: engine/core/docs/drf/viewsets.py:485
msgid ""
"removes a list of products from an order using the provided `product_uuid` "
"and `attributes`"
@@ -526,690 +521,701 @@ msgstr ""
"Removes a list of products from an order using the provided `product_uuid` "
"and `attributes`."
-#: engine/core/docs/drf/viewsets.py:459
+#: engine/core/docs/drf/viewsets.py:497
msgid "list all wishlists (simple view)"
msgstr "List all attributes (simple view)"
-#: engine/core/docs/drf/viewsets.py:460
+#: engine/core/docs/drf/viewsets.py:498
msgid "for non-staff users, only their own wishlists are returned."
msgstr "For non-staff users, only their own wishlists are returned."
-#: engine/core/docs/drf/viewsets.py:467
+#: engine/core/docs/drf/viewsets.py:508
msgid "retrieve a single wishlist (detailed view)"
msgstr "Retrieve a single attribute (detailed view)"
-#: engine/core/docs/drf/viewsets.py:474
+#: engine/core/docs/drf/viewsets.py:515
msgid "create an wishlist"
msgstr "Create an attribute"
-#: engine/core/docs/drf/viewsets.py:475
+#: engine/core/docs/drf/viewsets.py:516
msgid "Doesn't work for non-staff users."
msgstr "Doesn't work for non-staff users."
-#: engine/core/docs/drf/viewsets.py:482
+#: engine/core/docs/drf/viewsets.py:523
msgid "delete an wishlist"
msgstr "Delete an attribute"
-#: engine/core/docs/drf/viewsets.py:489
+#: engine/core/docs/drf/viewsets.py:530
msgid "rewrite an existing wishlist saving non-editables"
msgstr "Rewrite an existing attribute saving non-editables"
-#: engine/core/docs/drf/viewsets.py:496
+#: engine/core/docs/drf/viewsets.py:537
msgid "rewrite some fields of an existing wishlist saving non-editables"
msgstr "Rewrite some fields of an existing attribute saving non-editables"
-#: engine/core/docs/drf/viewsets.py:503
+#: engine/core/docs/drf/viewsets.py:544
msgid "retrieve current pending wishlist of a user"
msgstr "retrieve current pending wishlist of a user"
-#: engine/core/docs/drf/viewsets.py:504
+#: engine/core/docs/drf/viewsets.py:545
msgid "retrieves a current pending wishlist of an authenticated user"
msgstr "retrieves a current pending wishlist of an authenticated user"
-#: engine/core/docs/drf/viewsets.py:514
+#: engine/core/docs/drf/viewsets.py:555
msgid "add product to wishlist"
msgstr "Add a product to the order"
-#: engine/core/docs/drf/viewsets.py:515
+#: engine/core/docs/drf/viewsets.py:557
msgid "adds a product to an wishlist using the provided `product_uuid`"
msgstr "Adds a product to an wishlist using the provided `product_uuid`"
-#: engine/core/docs/drf/viewsets.py:523
+#: engine/core/docs/drf/viewsets.py:566
msgid "remove product from wishlist"
msgstr "Remove a product from the wishlist"
-#: engine/core/docs/drf/viewsets.py:524
+#: engine/core/docs/drf/viewsets.py:568
msgid "removes a product from an wishlist using the provided `product_uuid`"
msgstr "Removes a product from an wishlist using the provided `product_uuid`"
-#: engine/core/docs/drf/viewsets.py:532
+#: engine/core/docs/drf/viewsets.py:577
msgid "add many products to wishlist"
msgstr "Add many products to the wishlist"
-#: engine/core/docs/drf/viewsets.py:533
+#: engine/core/docs/drf/viewsets.py:579
msgid "adds many products to an wishlist using the provided `product_uuids`"
msgstr "Adds many products to an wishlist using the provided `product_uuids`"
-#: engine/core/docs/drf/viewsets.py:541
+#: engine/core/docs/drf/viewsets.py:588
msgid "remove many products from wishlist"
msgstr "Remove a product from the order"
-#: engine/core/docs/drf/viewsets.py:542
+#: engine/core/docs/drf/viewsets.py:590
msgid ""
"removes many products from an wishlist using the provided `product_uuids`"
msgstr ""
"Removes many products from an wishlist using the provided `product_uuids`"
-#: engine/core/docs/drf/viewsets.py:549
+#: engine/core/docs/drf/viewsets.py:598
msgid ""
"Filter by one or more attribute name/value pairs. \n"
"• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n"
-"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n"
-"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n"
+"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, "
+"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, "
+"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n"
+"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), "
+"`true`/`false` for booleans, integers, floats; otherwise treated as "
+"string. \n"
"• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n"
"Examples: \n"
-"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n"
+"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\","
+"\"bluetooth\"]`, \n"
"`b64-description=icontains-aGVhdC1jb2xk`"
msgstr ""
"Filter by one or more attribute name/value pairs. \n"
"• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…`\n"
-"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`\n"
-"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n"
+"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, "
+"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, "
+"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`\n"
+"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), "
+"`true`/`false` for booleans, integers, floats; otherwise treated as "
+"string. \n"
"• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n"
"Examples: \n"
"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`,\n"
"`b64-description=icontains-aGVhdC1jb2xk`"
-#: engine/core/docs/drf/viewsets.py:568 engine/core/docs/drf/viewsets.py:569
+#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
msgid "list all products (simple view)"
msgstr "List all products (simple view)"
-#: engine/core/docs/drf/viewsets.py:574
+#: engine/core/docs/drf/viewsets.py:623
msgid "(exact) Product UUID"
msgstr "(exact) Product UUID"
-#: engine/core/docs/drf/viewsets.py:581
+#: engine/core/docs/drf/viewsets.py:630
msgid ""
-"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n"
+"Comma-separated list of fields to sort by. Prefix with `-` for "
+"descending. \n"
"**Allowed:** uuid, rating, name, slug, created, modified, price, random"
msgstr ""
-"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n"
+"Comma-separated list of fields to sort by. Prefix with `-` for "
+"descending. \n"
"**Allowed:** uuid, rating, name, slug, created, modified, price, random"
-#: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599
+#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
msgid "retrieve a single product (detailed view)"
msgstr "Retrieve a single product (detailed view)"
-#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634
-#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672
-#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710
+#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683
+#: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725
+#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763
msgid "Product UUID or slug"
msgstr "Product UUID or Slug"
-#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
+#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
#: engine/core/graphene/dashboard_mutations/product.py:80
#: engine/core/graphene/dashboard_mutations/product.py:118
#: engine/core/graphene/dashboard_mutations/product.py:166
msgid "create a product"
msgstr "Create a product"
-#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629
+#: engine/core/docs/drf/viewsets.py:677 engine/core/docs/drf/viewsets.py:678
msgid "rewrite an existing product, preserving non-editable fields"
msgstr "Rewrite an existing product, preserving non-editable fields"
-#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
+#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:700
msgid ""
"update some fields of an existing product, preserving non-editable fields"
msgstr ""
"Update some fields of an existing product, preserving non-editable fields"
-#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
+#: engine/core/docs/drf/viewsets.py:719 engine/core/docs/drf/viewsets.py:720
msgid "delete a product"
msgstr "Delete a product"
-#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686
+#: engine/core/docs/drf/viewsets.py:738 engine/core/docs/drf/viewsets.py:739
msgid "lists all permitted feedbacks for a product"
msgstr "lists all permitted feedbacks for a product"
-#: engine/core/docs/drf/viewsets.py:705
+#: engine/core/docs/drf/viewsets.py:758
msgid "returns a snapshot of the product's SEO meta data"
msgstr "Returns a snapshot of the product's SEO meta data"
-#: engine/core/docs/drf/viewsets.py:726
+#: engine/core/docs/drf/viewsets.py:779
msgid "list all addresses"
msgstr "List all addresses"
-#: engine/core/docs/drf/viewsets.py:736
+#: engine/core/docs/drf/viewsets.py:789
msgid "retrieve a single address"
msgstr "Retrieve a single address"
-#: engine/core/docs/drf/viewsets.py:746
+#: engine/core/docs/drf/viewsets.py:799
msgid "create a new address"
msgstr "Create a new address"
-#: engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:810
msgid "delete an address"
msgstr "Delete an address"
-#: engine/core/docs/drf/viewsets.py:767
+#: engine/core/docs/drf/viewsets.py:820
msgid "update an entire address"
msgstr "Update an entire address"
-#: engine/core/docs/drf/viewsets.py:778
+#: engine/core/docs/drf/viewsets.py:831
msgid "partially update an address"
msgstr "Partially update an address"
-#: engine/core/docs/drf/viewsets.py:789
+#: engine/core/docs/drf/viewsets.py:842
msgid "autocomplete address suggestions"
msgstr "Autocomplete address input"
-#: engine/core/docs/drf/viewsets.py:794
+#: engine/core/docs/drf/viewsets.py:848
msgid "raw data query string, please append with data from geo-IP endpoint"
msgstr "Raw data query string, please append with data from geo-IP endpoint"
-#: engine/core/docs/drf/viewsets.py:800
+#: engine/core/docs/drf/viewsets.py:855
msgid "limit the results amount, 1 < limit < 10, default: 5"
msgstr "limits the results amount, 1 < limit < 10, default: 5"
-#: engine/core/docs/drf/viewsets.py:816
+#: engine/core/docs/drf/viewsets.py:871
msgid "list all feedbacks (simple view)"
msgstr "list all feedbacks (simple view)"
-#: engine/core/docs/drf/viewsets.py:823
+#: engine/core/docs/drf/viewsets.py:881
msgid "retrieve a single feedback (detailed view)"
msgstr "retrieve a single feedback (detailed view)"
-#: engine/core/docs/drf/viewsets.py:830
+#: engine/core/docs/drf/viewsets.py:888
msgid "create a feedback"
msgstr "create a feedback"
-#: engine/core/docs/drf/viewsets.py:837
+#: engine/core/docs/drf/viewsets.py:895
msgid "delete a feedback"
msgstr "delete a feedback"
-#: engine/core/docs/drf/viewsets.py:844
+#: engine/core/docs/drf/viewsets.py:902
msgid "rewrite an existing feedback saving non-editables"
msgstr "rewrite an existing feedback saving non-editables"
-#: engine/core/docs/drf/viewsets.py:851
+#: engine/core/docs/drf/viewsets.py:909
msgid "rewrite some fields of an existing feedback saving non-editables"
msgstr "rewrite some fields of an existing feedback saving non-editables"
-#: engine/core/docs/drf/viewsets.py:861
+#: engine/core/docs/drf/viewsets.py:919
msgid "list all order–product relations (simple view)"
msgstr "list all order–product relations (simple view)"
-#: engine/core/docs/drf/viewsets.py:871
+#: engine/core/docs/drf/viewsets.py:929
msgid "retrieve a single order–product relation (detailed view)"
msgstr "retrieve a single order–product relation (detailed view)"
-#: engine/core/docs/drf/viewsets.py:881
+#: engine/core/docs/drf/viewsets.py:939
msgid "create a new order–product relation"
msgstr "create a new order–product relation"
-#: engine/core/docs/drf/viewsets.py:891
+#: engine/core/docs/drf/viewsets.py:949
msgid "replace an existing order–product relation"
msgstr "replace an existing order–product relation"
-#: engine/core/docs/drf/viewsets.py:901
+#: engine/core/docs/drf/viewsets.py:959
msgid "partially update an existing order–product relation"
msgstr "partially update an existing order–product relation"
-#: engine/core/docs/drf/viewsets.py:911
+#: engine/core/docs/drf/viewsets.py:969
msgid "delete an order–product relation"
msgstr "delete an order–product relation"
-#: engine/core/docs/drf/viewsets.py:921
+#: engine/core/docs/drf/viewsets.py:979
msgid "add or remove feedback on an order–product relation"
msgstr "add or remove feedback on an order–product relation"
-#: engine/core/docs/drf/viewsets.py:938
+#: engine/core/docs/drf/viewsets.py:996
msgid "list all brands (simple view)"
msgstr "List all brands (simple view)"
-#: engine/core/docs/drf/viewsets.py:945
+#: engine/core/docs/drf/viewsets.py:1003
msgid "retrieve a single brand (detailed view)"
msgstr "Retrieve a single brand (detailed view)"
-#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993
+#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051
msgid "Brand UUID or slug"
msgstr "Brand UUID or slug"
-#: engine/core/docs/drf/viewsets.py:960
+#: engine/core/docs/drf/viewsets.py:1018
msgid "create a brand"
msgstr "Create a brand"
-#: engine/core/docs/drf/viewsets.py:967
+#: engine/core/docs/drf/viewsets.py:1025
msgid "delete a brand"
msgstr "Delete a brand"
-#: engine/core/docs/drf/viewsets.py:974
+#: engine/core/docs/drf/viewsets.py:1032
msgid "rewrite an existing brand saving non-editables"
msgstr "Rewrite an existing brand saving non-editables"
-#: engine/core/docs/drf/viewsets.py:981
+#: engine/core/docs/drf/viewsets.py:1039
msgid "rewrite some fields of an existing brand saving non-editables"
msgstr "Rewrite some fields of an existing brand saving non-editables"
-#: engine/core/docs/drf/viewsets.py:1006
+#: engine/core/docs/drf/viewsets.py:1064
msgid "list all vendors (simple view)"
msgstr "List all vendors (simple view)"
-#: engine/core/docs/drf/viewsets.py:1013
+#: engine/core/docs/drf/viewsets.py:1074
msgid "retrieve a single vendor (detailed view)"
msgstr "Retrieve a single vendor (detailed view)"
-#: engine/core/docs/drf/viewsets.py:1020
+#: engine/core/docs/drf/viewsets.py:1081
msgid "create a vendor"
msgstr "Create a vendor"
-#: engine/core/docs/drf/viewsets.py:1027
+#: engine/core/docs/drf/viewsets.py:1088
msgid "delete a vendor"
msgstr "Delete a vendor"
-#: engine/core/docs/drf/viewsets.py:1034
+#: engine/core/docs/drf/viewsets.py:1095
msgid "rewrite an existing vendor saving non-editables"
msgstr "Rewrite an existing vendor saving non-editables"
-#: engine/core/docs/drf/viewsets.py:1041
+#: engine/core/docs/drf/viewsets.py:1102
msgid "rewrite some fields of an existing vendor saving non-editables"
msgstr "Rewrite some fields of an existing vendor saving non-editables"
-#: engine/core/docs/drf/viewsets.py:1051
+#: engine/core/docs/drf/viewsets.py:1112
msgid "list all product images (simple view)"
msgstr "List all product images (simple view)"
-#: engine/core/docs/drf/viewsets.py:1058
+#: engine/core/docs/drf/viewsets.py:1122
msgid "retrieve a single product image (detailed view)"
msgstr "Retrieve a single product image (detailed view)"
-#: engine/core/docs/drf/viewsets.py:1065
+#: engine/core/docs/drf/viewsets.py:1129
msgid "create a product image"
msgstr "Create a product image"
-#: engine/core/docs/drf/viewsets.py:1072
+#: engine/core/docs/drf/viewsets.py:1139
msgid "delete a product image"
msgstr "Delete a product image"
-#: engine/core/docs/drf/viewsets.py:1079
+#: engine/core/docs/drf/viewsets.py:1146
msgid "rewrite an existing product image saving non-editables"
msgstr "Rewrite an existing product image saving non-editables"
-#: engine/core/docs/drf/viewsets.py:1086
+#: engine/core/docs/drf/viewsets.py:1154
msgid "rewrite some fields of an existing product image saving non-editables"
msgstr "Rewrite some fields of an existing product image saving non-editables"
-#: engine/core/docs/drf/viewsets.py:1096
+#: engine/core/docs/drf/viewsets.py:1165
msgid "list all promo codes (simple view)"
msgstr "List all promo codes (simple view)"
-#: engine/core/docs/drf/viewsets.py:1103
+#: engine/core/docs/drf/viewsets.py:1175
msgid "retrieve a single promo code (detailed view)"
msgstr "Retrieve a single promo code (detailed view)"
-#: engine/core/docs/drf/viewsets.py:1110
+#: engine/core/docs/drf/viewsets.py:1182
msgid "create a promo code"
msgstr "Create a promo code"
-#: engine/core/docs/drf/viewsets.py:1117
+#: engine/core/docs/drf/viewsets.py:1189
msgid "delete a promo code"
msgstr "Delete a promo code"
-#: engine/core/docs/drf/viewsets.py:1124
+#: engine/core/docs/drf/viewsets.py:1196
msgid "rewrite an existing promo code saving non-editables"
msgstr "Rewrite an existing promo code saving non-editables"
-#: engine/core/docs/drf/viewsets.py:1131
+#: engine/core/docs/drf/viewsets.py:1203
msgid "rewrite some fields of an existing promo code saving non-editables"
msgstr "Rewrite some fields of an existing promo code saving non-editables"
-#: engine/core/docs/drf/viewsets.py:1141
+#: engine/core/docs/drf/viewsets.py:1213
msgid "list all promotions (simple view)"
msgstr "List all promotions (simple view)"
-#: engine/core/docs/drf/viewsets.py:1148
+#: engine/core/docs/drf/viewsets.py:1223
msgid "retrieve a single promotion (detailed view)"
msgstr "Retrieve a single promotion (detailed view)"
-#: engine/core/docs/drf/viewsets.py:1155
+#: engine/core/docs/drf/viewsets.py:1230
msgid "create a promotion"
msgstr "Create a promotion"
-#: engine/core/docs/drf/viewsets.py:1162
+#: engine/core/docs/drf/viewsets.py:1237
msgid "delete a promotion"
msgstr "Delete a promotion"
-#: engine/core/docs/drf/viewsets.py:1169
+#: engine/core/docs/drf/viewsets.py:1244
msgid "rewrite an existing promotion saving non-editables"
msgstr "Rewrite an existing promotion saving non-editables"
-#: engine/core/docs/drf/viewsets.py:1176
+#: engine/core/docs/drf/viewsets.py:1251
msgid "rewrite some fields of an existing promotion saving non-editables"
msgstr "Rewrite some fields of an existing promotion saving non-editables"
-#: engine/core/docs/drf/viewsets.py:1186
+#: engine/core/docs/drf/viewsets.py:1261
msgid "list all stocks (simple view)"
msgstr "List all stocks (simple view)"
-#: engine/core/docs/drf/viewsets.py:1193
+#: engine/core/docs/drf/viewsets.py:1268
msgid "retrieve a single stock (detailed view)"
msgstr "Retrieve a single stock (detailed view)"
-#: engine/core/docs/drf/viewsets.py:1200
+#: engine/core/docs/drf/viewsets.py:1275
msgid "create a stock record"
msgstr "Create a stock record"
-#: engine/core/docs/drf/viewsets.py:1207
+#: engine/core/docs/drf/viewsets.py:1282
msgid "delete a stock record"
msgstr "Delete a stock record"
-#: engine/core/docs/drf/viewsets.py:1214
+#: engine/core/docs/drf/viewsets.py:1289
msgid "rewrite an existing stock record saving non-editables"
msgstr "Rewrite an existing stock record saving non-editables"
-#: engine/core/docs/drf/viewsets.py:1221
+#: engine/core/docs/drf/viewsets.py:1297
msgid "rewrite some fields of an existing stock record saving non-editables"
msgstr "Rewrite some fields of an existing stock record saving non-editables"
-#: engine/core/docs/drf/viewsets.py:1231
+#: engine/core/docs/drf/viewsets.py:1308
msgid "list all product tags (simple view)"
msgstr "List all product tags (simple view)"
-#: engine/core/docs/drf/viewsets.py:1238
+#: engine/core/docs/drf/viewsets.py:1318
msgid "retrieve a single product tag (detailed view)"
msgstr "Retrieve a single product tag (detailed view)"
-#: engine/core/docs/drf/viewsets.py:1245
+#: engine/core/docs/drf/viewsets.py:1325
msgid "create a product tag"
msgstr "Create a product tag"
-#: engine/core/docs/drf/viewsets.py:1252
+#: engine/core/docs/drf/viewsets.py:1335
msgid "delete a product tag"
msgstr "Delete a product tag"
-#: engine/core/docs/drf/viewsets.py:1259
+#: engine/core/docs/drf/viewsets.py:1342
msgid "rewrite an existing product tag saving non-editables"
msgstr "Rewrite an existing product tag saving non-editables"
-#: engine/core/docs/drf/viewsets.py:1266
+#: engine/core/docs/drf/viewsets.py:1350
msgid "rewrite some fields of an existing product tag saving non-editables"
msgstr "Rewrite some fields of an existing product tag saving non-editables"
-#: engine/core/elasticsearch/__init__.py:122
-#: engine/core/elasticsearch/__init__.py:570
+#: engine/core/elasticsearch/__init__.py:127
+#: engine/core/elasticsearch/__init__.py:627
msgid "no search term provided."
msgstr "No search term provided."
-#: engine/core/filters.py:69 engine/core/filters.py:426
-#: engine/core/filters.py:553
+#: engine/core/filters.py:78 engine/core/filters.py:484
+#: engine/core/filters.py:625
msgid "Search"
msgstr "Search"
-#: engine/core/filters.py:70 engine/core/filters.py:583
-#: engine/core/filters.py:612
+#: engine/core/filters.py:79 engine/core/filters.py:662
+#: engine/core/filters.py:691
msgid "UUID"
msgstr "UUID"
-#: engine/core/filters.py:71 engine/core/filters.py:428
-#: engine/core/filters.py:555
+#: engine/core/filters.py:80 engine/core/filters.py:487
+#: engine/core/filters.py:627
msgid "Name"
msgstr "Name"
-#: engine/core/filters.py:72 engine/core/filters.py:557
+#: engine/core/filters.py:82 engine/core/filters.py:630
msgid "Categories"
msgstr "Categories"
-#: engine/core/filters.py:74
+#: engine/core/filters.py:86
msgid "Categories Slugs"
msgstr "Categories Slugs"
-#: engine/core/filters.py:75 engine/core/filters.py:436
+#: engine/core/filters.py:88 engine/core/filters.py:495
msgid "Tags"
msgstr "Tags"
-#: engine/core/filters.py:76
+#: engine/core/filters.py:90
msgid "Min Price"
msgstr "Min Price"
-#: engine/core/filters.py:77
+#: engine/core/filters.py:93
msgid "Max Price"
msgstr "Max Price"
-#: engine/core/filters.py:78
+#: engine/core/filters.py:95
msgid "Is Active"
msgstr "Is Active"
-#: engine/core/filters.py:79
+#: engine/core/filters.py:96
msgid "Brand"
msgstr "Brand"
-#: engine/core/filters.py:80
+#: engine/core/filters.py:97
msgid "Attributes"
msgstr "Attributes"
-#: engine/core/filters.py:81
+#: engine/core/filters.py:99
msgid "Quantity"
msgstr "Quantity"
-#: engine/core/filters.py:82 engine/core/filters.py:430
-#: engine/core/filters.py:556 engine/core/models.py:321
-#: engine/core/models.py:489 engine/core/models.py:644
+#: engine/core/filters.py:101 engine/core/filters.py:489
+#: engine/core/filters.py:628 engine/core/models.py:327
+#: engine/core/models.py:508 engine/core/models.py:665
msgid "Slug"
msgstr "Slug"
-#: engine/core/filters.py:83
+#: engine/core/filters.py:102
msgid "Is Digital"
msgstr "Is Digital"
-#: engine/core/filters.py:84
+#: engine/core/filters.py:104
msgid "Include sub-categories"
msgstr "Include sub-categories"
-#: engine/core/filters.py:87
+#: engine/core/filters.py:108
msgid "Include personal ordered"
msgstr "Include personal ordered products"
-#: engine/core/filters.py:89 engine/core/models.py:648
+#: engine/core/filters.py:110 engine/core/models.py:669
msgid "SKU"
msgstr "SKU"
-#: engine/core/filters.py:184
+#: engine/core/filters.py:212
msgid "there must be a category_uuid to use include_subcategories flag"
msgstr "There must be a category_uuid to use include_subcategories flag"
-#: engine/core/filters.py:353
+#: engine/core/filters.py:398
msgid "Search (ID, product name or part number)"
msgstr "Search (ID, product name or part number)"
-#: engine/core/filters.py:356
+#: engine/core/filters.py:402
msgid "Bought after (inclusive)"
msgstr "Bought after (inclusive)"
-#: engine/core/filters.py:357
+#: engine/core/filters.py:405
msgid "Bought before (inclusive)"
msgstr "Bought before (inclusive)"
-#: engine/core/filters.py:360 engine/core/filters.py:407
-#: engine/core/filters.py:614
+#: engine/core/filters.py:410 engine/core/filters.py:461
+#: engine/core/filters.py:696
msgid "User email"
msgstr "User email"
-#: engine/core/filters.py:361 engine/core/filters.py:408
-#: engine/core/filters.py:592 engine/core/filters.py:613
+#: engine/core/filters.py:413 engine/core/filters.py:464
+#: engine/core/filters.py:671 engine/core/filters.py:693
msgid "User UUID"
msgstr "User UUID"
-#: engine/core/filters.py:362
+#: engine/core/filters.py:415
msgid "Status"
msgstr "Status"
-#: engine/core/filters.py:366
+#: engine/core/filters.py:419
msgid "Human Readable ID"
msgstr "Human Readable ID"
-#: engine/core/filters.py:429
+#: engine/core/filters.py:488
msgid "Parent"
msgstr "Parent"
-#: engine/core/filters.py:433
+#: engine/core/filters.py:492
msgid "Whole category(has at least 1 product or not)"
msgstr "Whole category(has at least 1 product or not)"
-#: engine/core/filters.py:437
+#: engine/core/filters.py:496
msgid "Level"
msgstr "Level"
-#: engine/core/filters.py:587
+#: engine/core/filters.py:666
msgid "Product UUID"
msgstr "Product UUID"
-#: engine/core/graphene/mutations.py:40
+#: engine/core/graphene/mutations.py:41
msgid "key to look for in or set into the cache"
msgstr "Key to look for in or set into the cache"
-#: engine/core/graphene/mutations.py:41
+#: engine/core/graphene/mutations.py:43
msgid "data to store in cache"
msgstr "Data to store in cache"
-#: engine/core/graphene/mutations.py:44
+#: engine/core/graphene/mutations.py:46
msgid "timeout in seconds to set the data for into the cache"
msgstr "Timeout in seconds to set the data for into the cache"
-#: engine/core/graphene/mutations.py:47
+#: engine/core/graphene/mutations.py:49
msgid "cached data"
msgstr "Cached data"
-#: engine/core/graphene/mutations.py:62
+#: engine/core/graphene/mutations.py:64
msgid "camelized JSON data from the requested URL"
msgstr "Camelized JSON data from the requested URL"
-#: engine/core/graphene/mutations.py:67 engine/core/views.py:257
+#: engine/core/graphene/mutations.py:69 engine/core/views.py:249
msgid "only URLs starting with http(s):// are allowed"
msgstr "Only URLs starting with http(s):// are allowed"
-#: engine/core/graphene/mutations.py:83
+#: engine/core/graphene/mutations.py:87
msgid "add a product to the order"
msgstr "Add a product to the order"
-#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131
-#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287
+#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139
+#: engine/core/graphene/mutations.py:255 engine/core/graphene/mutations.py:307
#, python-brace-format
msgid "order {order_uuid} not found"
msgstr "Order {order_uuid} not found!"
-#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159
+#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167
msgid "remove a product from the order"
msgstr "Remove a product from the order"
-#: engine/core/graphene/mutations.py:137
+#: engine/core/graphene/mutations.py:145
msgid "remove all products from the order"
msgstr "Remove all products from the order"
-#: engine/core/graphene/mutations.py:182
+#: engine/core/graphene/mutations.py:190
msgid "buy an order"
msgstr "Buy an order"
-#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265
+#: engine/core/graphene/mutations.py:221 engine/core/graphene/mutations.py:283
msgid "please provide either order_uuid or order_hr_id - mutually exclusive"
msgstr "Please provide either order_uuid or order_hr_id - mutually exclusive!"
-#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501
-#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712
+#: engine/core/graphene/mutations.py:250 engine/core/graphene/mutations.py:525
+#: engine/core/graphene/mutations.py:574 engine/core/viewsets.py:753
msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr "Wrong type came from order.buy() method: {type(instance)!s}"
-#: engine/core/graphene/mutations.py:245
+#: engine/core/graphene/mutations.py:261
msgid "perform an action on a list of products in the order"
msgstr "Perform an action on a list of products in the order"
-#: engine/core/graphene/mutations.py:250
+#: engine/core/graphene/mutations.py:266
msgid "remove/add"
msgstr "Remove/Add"
-#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323
+#: engine/core/graphene/mutations.py:302 engine/core/graphene/mutations.py:343
msgid "action must be either add or remove"
msgstr "Action must be either \"add\" or \"remove\"!"
-#: engine/core/graphene/mutations.py:293
+#: engine/core/graphene/mutations.py:313
msgid "perform an action on a list of products in the wishlist"
msgstr "Perform an action on a list of products in the wishlist"
-#: engine/core/graphene/mutations.py:311
+#: engine/core/graphene/mutations.py:331
msgid "please provide wishlist_uuid value"
msgstr "Please provide `wishlist_uuid` value."
-#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404
-#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460
-#: engine/core/graphene/mutations.py:504
+#: engine/core/graphene/mutations.py:348 engine/core/graphene/mutations.py:424
+#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480
+#: engine/core/graphene/mutations.py:530
#, python-brace-format
msgid "wishlist {wishlist_uuid} not found"
msgstr "Wishlist {wishlist_uuid} not found!"
-#: engine/core/graphene/mutations.py:382
+#: engine/core/graphene/mutations.py:402
msgid "add a product to the wishlist"
msgstr "Add a product to the order"
-#: engine/core/graphene/mutations.py:410
+#: engine/core/graphene/mutations.py:430
msgid "remove a product from the wishlist"
msgstr "Remove a product from the order"
-#: engine/core/graphene/mutations.py:438
+#: engine/core/graphene/mutations.py:458
msgid "remove all products from the wishlist"
msgstr "Remove a product from the order"
-#: engine/core/graphene/mutations.py:466
+#: engine/core/graphene/mutations.py:486
msgid "buy all products from the wishlist"
msgstr "Remove a product from the order"
-#: engine/core/graphene/mutations.py:510
+#: engine/core/graphene/mutations.py:536
msgid "buy a product"
msgstr "Buy an order"
-#: engine/core/graphene/mutations.py:516
+#: engine/core/graphene/mutations.py:543
msgid ""
-"please send the attributes as the string formatted like "
-"attr1=value1,attr2=value2"
+"please send the attributes as the string formatted like attr1=value1,"
+"attr2=value2"
msgstr ""
-"Please send the attributes as the string formatted like "
-"attr1=value1,attr2=value2"
+"Please send the attributes as the string formatted like attr1=value1,"
+"attr2=value2"
-#: engine/core/graphene/mutations.py:549
+#: engine/core/graphene/mutations.py:581
msgid "add or delete a feedback for orderproduct"
msgstr "Add or delete a feedback for the orderproduct"
-#: engine/core/graphene/mutations.py:573
+#: engine/core/graphene/mutations.py:607
msgid "action must be either `add` or `remove`"
msgstr "Action must be either `add` or `remove`!"
-#: engine/core/graphene/mutations.py:576
+#: engine/core/graphene/mutations.py:610
#, python-brace-format
msgid "order product {order_product_uuid} not found"
msgstr "Orderproduct {order_product_uuid} not found!"
-#: engine/core/graphene/mutations.py:582
+#: engine/core/graphene/mutations.py:617
msgid "original address string provided by the user"
msgstr "Original address string provided by the user"
-#: engine/core/graphene/mutations.py:618 engine/core/models.py:955
-#: engine/core/models.py:968 engine/core/models.py:1383
-#: engine/core/models.py:1412 engine/core/models.py:1437
-#: engine/core/viewsets.py:715
+#: engine/core/graphene/mutations.py:654 engine/core/models.py:978
+#: engine/core/models.py:991 engine/core/models.py:1435
+#: engine/core/models.py:1466 engine/core/models.py:1497
+#: engine/core/viewsets.py:760
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr "{name} does not exist: {uuid}!"
-#: engine/core/graphene/mutations.py:632
+#: engine/core/graphene/mutations.py:668
msgid "limit must be between 1 and 10"
msgstr "Limit must be between 1 and 10"
-#: engine/core/graphene/mutations.py:681
+#: engine/core/graphene/mutations.py:717
msgid "elasticsearch - works like a charm"
msgstr "ElasticSearch - works like a charm"
#: engine/core/graphene/object_types.py:82
-#: engine/core/graphene/object_types.py:370
-#: engine/core/graphene/object_types.py:417 engine/core/models.py:772
-#: engine/core/models.py:1250 engine/core/models.py:1897
+#: engine/core/graphene/object_types.py:417
+#: engine/core/graphene/object_types.py:468 engine/core/models.py:795
+#: engine/core/models.py:1289 engine/core/models.py:2021
msgid "attributes"
msgstr "Attributes"
@@ -1222,89 +1228,88 @@ msgid "groups of attributes"
msgstr "Groups of attributes"
#: engine/core/graphene/object_types.py:116
-#: engine/core/graphene/object_types.py:193
-#: engine/core/graphene/object_types.py:223 engine/core/models.py:432
+#: engine/core/graphene/object_types.py:214
+#: engine/core/graphene/object_types.py:252 engine/core/models.py:451
msgid "categories"
msgstr "Categories"
-#: engine/core/graphene/object_types.py:124 engine/core/models.py:503
+#: engine/core/graphene/object_types.py:132 engine/core/models.py:522
msgid "brands"
msgstr "Brands"
-#: engine/core/graphene/object_types.py:195
+#: engine/core/graphene/object_types.py:216
msgid "category image url"
msgstr "Categories"
-#: engine/core/graphene/object_types.py:196
-#: engine/core/graphene/object_types.py:317 engine/core/models.py:283
+#: engine/core/graphene/object_types.py:217
+#: engine/core/graphene/object_types.py:362 engine/core/models.py:289
msgid "markup percentage"
msgstr "Markup Percentage"
-#: engine/core/graphene/object_types.py:199
+#: engine/core/graphene/object_types.py:221
msgid "which attributes and values can be used for filtering this category."
msgstr "Which attributes and values can be used for filtering this category."
-#: engine/core/graphene/object_types.py:203
-msgid ""
-"minimum and maximum prices for products in this category, if available."
+#: engine/core/graphene/object_types.py:227
+msgid "minimum and maximum prices for products in this category, if available."
msgstr ""
"Minimum and maximum prices for products in this category, if available."
-#: engine/core/graphene/object_types.py:205
+#: engine/core/graphene/object_types.py:231
msgid "tags for this category"
msgstr "Tags for this category"
-#: engine/core/graphene/object_types.py:206
+#: engine/core/graphene/object_types.py:234
msgid "products in this category"
msgstr "Products in this category"
-#: engine/core/graphene/object_types.py:324 engine/core/models.py:188
+#: engine/core/graphene/object_types.py:369 engine/core/models.py:194
msgid "vendors"
msgstr "Vendors"
-#: engine/core/graphene/object_types.py:328
+#: engine/core/graphene/object_types.py:373
msgid "Latitude (Y coordinate)"
msgstr "Latitude (Y coordinate)"
-#: engine/core/graphene/object_types.py:329
+#: engine/core/graphene/object_types.py:374
msgid "Longitude (X coordinate)"
msgstr "Longitude (X coordinate)"
-#: engine/core/graphene/object_types.py:358
+#: engine/core/graphene/object_types.py:403
msgid "comment"
msgstr "How to"
-#: engine/core/graphene/object_types.py:359
-#: engine/core/graphene/object_types.py:483
+#: engine/core/graphene/object_types.py:405
+#: engine/core/graphene/object_types.py:539
msgid "rating value from 1 to 10, inclusive, or 0 if not set."
msgstr "Rating value from 1 to 10, inclusive, or 0 if not set."
-#: engine/core/graphene/object_types.py:366
+#: engine/core/graphene/object_types.py:413
msgid "represents feedback from a user."
msgstr "Represents feedback from a user."
-#: engine/core/graphene/object_types.py:371
-#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244
+#: engine/core/graphene/object_types.py:418
+#: engine/core/graphene/object_types.py:469 engine/core/models.py:1283
msgid "notifications"
msgstr "Notifications"
-#: engine/core/graphene/object_types.py:372
+#: engine/core/graphene/object_types.py:420
msgid "download url for this order product if applicable"
msgstr "Download url for this order product if applicable"
-#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736
+#: engine/core/graphene/object_types.py:422 engine/core/models.py:1848
msgid "feedback"
msgstr "Feedback"
-#: engine/core/graphene/object_types.py:407
+#: engine/core/graphene/object_types.py:456
msgid "a list of order products in this order"
msgstr "A list of order products in this order"
-#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214
+#: engine/core/graphene/object_types.py:458 engine/core/models.py:1253
msgid "billing address"
msgstr "Billing address"
-#: engine/core/graphene/object_types.py:412
+#: engine/core/graphene/object_types.py:462
msgid ""
"shipping address for this order, leave blank if same as billing address or "
"if not applicable"
@@ -1312,53 +1317,53 @@ msgstr ""
"Shipping address for this order, leave blank if same as billing address or "
"if not applicable"
-#: engine/core/graphene/object_types.py:414
+#: engine/core/graphene/object_types.py:465
msgid "total price of this order"
msgstr "Total price of this order"
-#: engine/core/graphene/object_types.py:415
+#: engine/core/graphene/object_types.py:466
msgid "total quantity of products in order"
msgstr "Total quantity of products in order"
-#: engine/core/graphene/object_types.py:416
+#: engine/core/graphene/object_types.py:467
msgid "are all products in the order digital"
msgstr "Are all of the products in the order digital"
-#: engine/core/graphene/object_types.py:419
+#: engine/core/graphene/object_types.py:471
msgid "transactions for this order"
msgstr "Transactions for this order"
-#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278
+#: engine/core/graphene/object_types.py:491 engine/core/models.py:1317
msgid "orders"
msgstr "Orders"
-#: engine/core/graphene/object_types.py:459
+#: engine/core/graphene/object_types.py:512
msgid "image url"
msgstr "Image URL"
-#: engine/core/graphene/object_types.py:466
+#: engine/core/graphene/object_types.py:519
msgid "product's images"
msgstr "Product's images"
-#: engine/core/graphene/object_types.py:473 engine/core/models.py:431
-#: engine/core/models.py:586
+#: engine/core/graphene/object_types.py:526 engine/core/models.py:450
+#: engine/core/models.py:607
msgid "category"
msgstr "Category"
-#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737
+#: engine/core/graphene/object_types.py:528 engine/core/models.py:1849
msgid "feedbacks"
msgstr "Feedbacks"
-#: engine/core/graphene/object_types.py:476 engine/core/models.py:502
-#: engine/core/models.py:595
+#: engine/core/graphene/object_types.py:529 engine/core/models.py:521
+#: engine/core/models.py:616
msgid "brand"
msgstr "Brand"
-#: engine/core/graphene/object_types.py:477 engine/core/models.py:106
+#: engine/core/graphene/object_types.py:531 engine/core/models.py:106
msgid "attribute groups"
msgstr "Attribute groups"
-#: engine/core/graphene/object_types.py:478
+#: engine/core/graphene/object_types.py:533
#: engine/core/templates/digital_order_created_email.html:111
#: engine/core/templates/digital_order_delivered_email.html:109
#: engine/core/templates/shipped_order_created_email.html:109
@@ -1366,7 +1371,7 @@ msgstr "Attribute groups"
msgid "price"
msgstr "Price"
-#: engine/core/graphene/object_types.py:479
+#: engine/core/graphene/object_types.py:534
#: engine/core/templates/digital_order_created_email.html:110
#: engine/core/templates/digital_order_delivered_email.html:108
#: engine/core/templates/shipped_order_created_email.html:108
@@ -1374,39 +1379,39 @@ msgstr "Price"
msgid "quantity"
msgstr "Quantity"
-#: engine/core/graphene/object_types.py:480
+#: engine/core/graphene/object_types.py:535
msgid "number of feedbacks"
msgstr "Number of feedbacks"
-#: engine/core/graphene/object_types.py:481
+#: engine/core/graphene/object_types.py:536
msgid "only available for personal orders"
msgstr "Products only available for personal orders"
-#: engine/core/graphene/object_types.py:484
+#: engine/core/graphene/object_types.py:541
msgid "discount price"
msgstr "Discount price"
-#: engine/core/graphene/object_types.py:508 engine/core/models.py:658
+#: engine/core/graphene/object_types.py:565 engine/core/models.py:679
msgid "products"
msgstr "Products"
-#: engine/core/graphene/object_types.py:611
+#: engine/core/graphene/object_types.py:675
msgid "promocodes"
msgstr "Promocodes"
-#: engine/core/graphene/object_types.py:621
+#: engine/core/graphene/object_types.py:690
msgid "products on sale"
msgstr "Products on sale"
-#: engine/core/graphene/object_types.py:628 engine/core/models.py:904
+#: engine/core/graphene/object_types.py:698 engine/core/models.py:927
msgid "promotions"
msgstr "Promotions"
-#: engine/core/graphene/object_types.py:632 engine/core/models.py:187
+#: engine/core/graphene/object_types.py:702 engine/core/models.py:193
msgid "vendor"
msgstr "Vendor"
-#: engine/core/graphene/object_types.py:633 engine/core/models.py:657
+#: engine/core/graphene/object_types.py:703 engine/core/models.py:678
#: engine/core/templates/digital_order_created_email.html:109
#: engine/core/templates/digital_order_delivered_email.html:107
#: engine/core/templates/shipped_order_created_email.html:107
@@ -1414,98 +1419,98 @@ msgstr "Vendor"
msgid "product"
msgstr "Product"
-#: engine/core/graphene/object_types.py:644 engine/core/models.py:927
+#: engine/core/graphene/object_types.py:715 engine/core/models.py:950
msgid "wishlisted products"
msgstr "Wishlisted products"
-#: engine/core/graphene/object_types.py:650 engine/core/models.py:944
+#: engine/core/graphene/object_types.py:722 engine/core/models.py:967
msgid "wishlists"
msgstr "Wishlists"
-#: engine/core/graphene/object_types.py:654
+#: engine/core/graphene/object_types.py:727
msgid "tagged products"
msgstr "Tagged products"
-#: engine/core/graphene/object_types.py:661 engine/core/models.py:224
-#: engine/core/models.py:601
+#: engine/core/graphene/object_types.py:735 engine/core/models.py:230
+#: engine/core/models.py:622
msgid "product tags"
msgstr "Product tags"
-#: engine/core/graphene/object_types.py:665
+#: engine/core/graphene/object_types.py:740
msgid "tagged categories"
msgstr "Tagged categories"
-#: engine/core/graphene/object_types.py:672
+#: engine/core/graphene/object_types.py:748
msgid "categories tags"
msgstr "Categories' tags"
-#: engine/core/graphene/object_types.py:676
+#: engine/core/graphene/object_types.py:752
msgid "project name"
msgstr "Project name"
-#: engine/core/graphene/object_types.py:677
+#: engine/core/graphene/object_types.py:753
msgid "company name"
msgstr "Company Name"
-#: engine/core/graphene/object_types.py:678
+#: engine/core/graphene/object_types.py:754
msgid "company address"
msgstr "Company Address"
-#: engine/core/graphene/object_types.py:679
+#: engine/core/graphene/object_types.py:755
msgid "company phone number"
msgstr "Company Phone Number"
-#: engine/core/graphene/object_types.py:680
+#: engine/core/graphene/object_types.py:758
msgid "email from, sometimes it must be used instead of host user value"
msgstr "'email from', sometimes it must be used instead of host user value"
-#: engine/core/graphene/object_types.py:681
+#: engine/core/graphene/object_types.py:761
msgid "email host user"
msgstr "Email host user"
-#: engine/core/graphene/object_types.py:682
+#: engine/core/graphene/object_types.py:762
msgid "maximum amount for payment"
msgstr "Maximum amount for payment"
-#: engine/core/graphene/object_types.py:683
+#: engine/core/graphene/object_types.py:763
msgid "minimum amount for payment"
msgstr "Minimum amount for payment"
-#: engine/core/graphene/object_types.py:684
+#: engine/core/graphene/object_types.py:764
msgid "analytics data"
msgstr "Analytics data"
-#: engine/core/graphene/object_types.py:685
+#: engine/core/graphene/object_types.py:765
msgid "advertisement data"
msgstr "Advertisement data"
-#: engine/core/graphene/object_types.py:688
+#: engine/core/graphene/object_types.py:768
msgid "company configuration"
msgstr "Configuration"
-#: engine/core/graphene/object_types.py:692
+#: engine/core/graphene/object_types.py:772
msgid "language code"
msgstr "Language code"
-#: engine/core/graphene/object_types.py:693
+#: engine/core/graphene/object_types.py:773
msgid "language name"
msgstr "Language name"
-#: engine/core/graphene/object_types.py:694
+#: engine/core/graphene/object_types.py:774
msgid "language flag, if exists :)"
msgstr "Language flag, if exists :)"
-#: engine/core/graphene/object_types.py:697
+#: engine/core/graphene/object_types.py:777
msgid "supported languages"
msgstr "Get a list of supported languages"
-#: engine/core/graphene/object_types.py:728
-#: engine/core/graphene/object_types.py:729
-#: engine/core/graphene/object_types.py:730
+#: engine/core/graphene/object_types.py:809
+#: engine/core/graphene/object_types.py:812
+#: engine/core/graphene/object_types.py:815
msgid "products search results"
msgstr "Products search results"
-#: engine/core/graphene/object_types.py:731
+#: engine/core/graphene/object_types.py:817
msgid "posts search results"
msgstr "Products search results"
@@ -1533,7 +1538,7 @@ msgstr "Parent attribute group"
msgid "attribute group's name"
msgstr "Attribute group's name"
-#: engine/core/models.py:105 engine/core/models.py:734
+#: engine/core/models.py:105 engine/core/models.py:755
msgid "attribute group"
msgstr "Attribute group"
@@ -1555,48 +1560,48 @@ msgstr ""
"also maintains additional metadata and constraints, making it suitable for "
"use in systems that interact with third-party vendors."
-#: engine/core/models.py:124
+#: engine/core/models.py:125
msgid "stores credentials and endpoints required for vendor communication"
msgstr ""
"Stores credentials and endpoints required for vendor's API communication"
-#: engine/core/models.py:125
+#: engine/core/models.py:127
msgid "authentication info"
msgstr "Authentication info"
-#: engine/core/models.py:130
+#: engine/core/models.py:132
msgid "define the markup for products retrieved from this vendor"
msgstr "Define the markup for products retrieved from this vendor"
-#: engine/core/models.py:131
+#: engine/core/models.py:133
msgid "vendor markup percentage"
msgstr "Vendor markup percentage"
-#: engine/core/models.py:135
+#: engine/core/models.py:137
msgid "name of this vendor"
msgstr "Name of this vendor"
-#: engine/core/models.py:136
+#: engine/core/models.py:138
msgid "vendor name"
msgstr "Vendor name"
-#: engine/core/models.py:147
+#: engine/core/models.py:153
msgid "response file"
msgstr "response file"
-#: engine/core/models.py:148
+#: engine/core/models.py:154
msgid "vendor's last processing response"
msgstr "vendor's last processing response"
-#: engine/core/models.py:154
+#: engine/core/models.py:160
msgid "vendor's integration file path"
msgstr "Vendor's integration file path"
-#: engine/core/models.py:155
+#: engine/core/models.py:161
msgid "integration path"
msgstr "Integration path"
-#: engine/core/models.py:197
+#: engine/core/models.py:203
msgid ""
"Represents a product tag used for classifying or identifying products. The "
"ProductTag class is designed to uniquely identify and classify products "
@@ -1610,27 +1615,27 @@ msgstr ""
"display name. It supports operations exported through mixins and provides "
"metadata customization for administrative purposes."
-#: engine/core/models.py:209 engine/core/models.py:240
+#: engine/core/models.py:215 engine/core/models.py:246
msgid "internal tag identifier for the product tag"
msgstr "Internal tag identifier for the product tag"
-#: engine/core/models.py:210 engine/core/models.py:241
+#: engine/core/models.py:216 engine/core/models.py:247
msgid "tag name"
msgstr "Tag name"
-#: engine/core/models.py:214 engine/core/models.py:245
+#: engine/core/models.py:220 engine/core/models.py:251
msgid "user-friendly name for the product tag"
msgstr "User-friendly name for the product tag"
-#: engine/core/models.py:215 engine/core/models.py:246
+#: engine/core/models.py:221 engine/core/models.py:252
msgid "tag display name"
msgstr "Tag display name"
-#: engine/core/models.py:223
+#: engine/core/models.py:229
msgid "product tag"
msgstr "Product tag"
-#: engine/core/models.py:229
+#: engine/core/models.py:235
msgid ""
"Represents a category tag used for products. This class models a category "
"tag that can be used to associate and classify products. It includes "
@@ -1640,15 +1645,15 @@ msgstr ""
"tag that can be used to associate and classify products. It includes "
"attributes for an internal tag identifier and a user-friendly display name."
-#: engine/core/models.py:254
+#: engine/core/models.py:260
msgid "category tag"
msgstr "category tag"
-#: engine/core/models.py:255 engine/core/models.py:327
+#: engine/core/models.py:261 engine/core/models.py:333
msgid "category tags"
msgstr "category tags"
-#: engine/core/models.py:260
+#: engine/core/models.py:266
msgid ""
"Represents a category entity to organize and group related items in a "
"hierarchical structure. Categories may have hierarchical relationships with "
@@ -1670,186 +1675,184 @@ msgstr ""
"hierarchy of categories, as well as assign attributes like images, tags, or "
"priority."
-#: engine/core/models.py:274
+#: engine/core/models.py:280
msgid "upload an image representing this category"
msgstr "Upload an image representing this category"
-#: engine/core/models.py:277
+#: engine/core/models.py:283
msgid "category image"
msgstr "Category image"
-#: engine/core/models.py:282
+#: engine/core/models.py:288
msgid "define a markup percentage for products in this category"
msgstr "Define a markup percentage for products in this category"
-#: engine/core/models.py:291
+#: engine/core/models.py:297
msgid "parent of this category to form a hierarchical structure"
msgstr "Parent of this category to form a hierarchical structure"
-#: engine/core/models.py:292
+#: engine/core/models.py:298
msgid "parent category"
msgstr "Parent category"
-#: engine/core/models.py:297
+#: engine/core/models.py:303
msgid "category name"
msgstr "Category name"
-#: engine/core/models.py:298
+#: engine/core/models.py:304
msgid "provide a name for this category"
msgstr "Provide a name for this category"
-#: engine/core/models.py:305
+#: engine/core/models.py:311
msgid "add a detailed description for this category"
msgstr "Add a detailed description for this category"
-#: engine/core/models.py:306
+#: engine/core/models.py:312
msgid "category description"
msgstr "Category description"
-#: engine/core/models.py:326
+#: engine/core/models.py:332
msgid "tags that help describe or group this category"
msgstr "tags that help describe or group this category"
-#: engine/core/models.py:333 engine/core/models.py:495
+#: engine/core/models.py:339 engine/core/models.py:514
msgid "priority"
msgstr "Priority"
-#: engine/core/models.py:438
+#: engine/core/models.py:457
msgid ""
"Represents a Brand object in the system. This class handles information and "
"attributes related to a brand, including its name, logos, description, "
"associated categories, a unique slug, and priority order. It allows for the "
-"organization and representation of brand-related data within the "
-"application."
+"organization and representation of brand-related data within the application."
msgstr ""
"Represents a Brand object in the system. This class handles information and "
"attributes related to a brand, including its name, logos, description, "
"associated categories, a unique slug, and priority order. It allows for the "
-"organization and representation of brand-related data within the "
-"application."
+"organization and representation of brand-related data within the application."
-#: engine/core/models.py:448
+#: engine/core/models.py:467
msgid "name of this brand"
msgstr "Name of this brand"
-#: engine/core/models.py:449
+#: engine/core/models.py:468
msgid "brand name"
msgstr "Brand name"
-#: engine/core/models.py:456
+#: engine/core/models.py:475
msgid "upload a logo representing this brand"
msgstr "Upload a logo representing this brand"
-#: engine/core/models.py:458
+#: engine/core/models.py:477
msgid "brand small image"
msgstr "Brand small image"
-#: engine/core/models.py:464
+#: engine/core/models.py:483
msgid "upload a big logo representing this brand"
msgstr "Upload a big logo representing this brand"
-#: engine/core/models.py:466
+#: engine/core/models.py:485
msgid "brand big image"
msgstr "Brand big image"
-#: engine/core/models.py:471
+#: engine/core/models.py:490
msgid "add a detailed description of the brand"
msgstr "Add a detailed description of the brand"
-#: engine/core/models.py:472
+#: engine/core/models.py:491
msgid "brand description"
msgstr "Brand description"
-#: engine/core/models.py:477
+#: engine/core/models.py:496
msgid "optional categories that this brand is associated with"
msgstr "Optional categories that this brand is associated with"
-#: engine/core/models.py:478
+#: engine/core/models.py:497
msgid "associated categories"
msgstr "Categories"
-#: engine/core/models.py:508
+#: engine/core/models.py:527
msgid ""
-"Represents the stock of a product managed in the system. This class provides"
-" details about the relationship between vendors, products, and their stock "
+"Represents the stock of a product managed in the system. This class provides "
+"details about the relationship between vendors, products, and their stock "
"information, as well as inventory-related properties like price, purchase "
"price, quantity, SKU, and digital assets. It is part of the inventory "
"management system to allow tracking and evaluation of products available "
"from various vendors."
msgstr ""
-"Represents the stock of a product managed in the system. This class provides"
-" details about the relationship between vendors, products, and their stock "
+"Represents the stock of a product managed in the system. This class provides "
+"details about the relationship between vendors, products, and their stock "
"information, as well as inventory-related properties like price, purchase "
"price, quantity, SKU, and digital assets. It is part of the inventory "
"management system to allow tracking and evaluation of products available "
"from various vendors."
-#: engine/core/models.py:520
+#: engine/core/models.py:539
msgid "the vendor supplying this product stock"
msgstr "The vendor supplying this product stock"
-#: engine/core/models.py:521
+#: engine/core/models.py:540
msgid "associated vendor"
msgstr "Associated vendor"
-#: engine/core/models.py:525
+#: engine/core/models.py:544
msgid "final price to the customer after markups"
msgstr "Final price to the customer after markups"
-#: engine/core/models.py:526
+#: engine/core/models.py:545
msgid "selling price"
msgstr "Selling price"
-#: engine/core/models.py:531
+#: engine/core/models.py:550
msgid "the product associated with this stock entry"
msgstr "The product associated with this stock entry"
-#: engine/core/models.py:532 engine/core/models.py:797
-#: engine/core/models.py:843 engine/core/models.py:1792
+#: engine/core/models.py:551 engine/core/models.py:820
+#: engine/core/models.py:866 engine/core/models.py:1904
msgid "associated product"
msgstr "Associated product"
-#: engine/core/models.py:539
+#: engine/core/models.py:558
msgid "the price paid to the vendor for this product"
msgstr "The price paid to the vendor for this product"
-#: engine/core/models.py:540
+#: engine/core/models.py:559
msgid "vendor purchase price"
msgstr "Vendor purchase price"
-#: engine/core/models.py:544
+#: engine/core/models.py:563
msgid "available quantity of the product in stock"
msgstr "Available quantity of the product in stock"
-#: engine/core/models.py:545
+#: engine/core/models.py:564
msgid "quantity in stock"
msgstr "Quantity in stock"
-#: engine/core/models.py:549
+#: engine/core/models.py:568
msgid "vendor-assigned SKU for identifying the product"
msgstr "Vendor-assigned SKU for identifying the product"
-#: engine/core/models.py:550
+#: engine/core/models.py:569
msgid "vendor sku"
msgstr "Vendor's SKU"
-#: engine/core/models.py:556
+#: engine/core/models.py:575
msgid "digital file associated with this stock if applicable"
msgstr "Digital file associated with this stock if applicable"
-#: engine/core/models.py:557
+#: engine/core/models.py:576
msgid "digital file"
msgstr "Digital file"
-#: engine/core/models.py:560
+#: engine/core/models.py:580
msgid "system attributes"
msgstr "System attributes"
-#: engine/core/models.py:567
+#: engine/core/models.py:588
msgid "stock entries"
msgstr "Stock entries"
-#: engine/core/models.py:572
+#: engine/core/models.py:593
msgid ""
"Represents a product with attributes such as category, brand, tags, digital "
"status, name, description, part number, and slug. Provides related utility "
@@ -1869,244 +1872,244 @@ msgstr ""
"properties to improve performance. It is used to define and manipulate "
"product data and its associated information within an application."
-#: engine/core/models.py:585
+#: engine/core/models.py:606
msgid "category this product belongs to"
msgstr "Category this product belongs to"
-#: engine/core/models.py:594
+#: engine/core/models.py:615
msgid "optionally associate this product with a brand"
msgstr "Optionally associate this product with a brand"
-#: engine/core/models.py:600
+#: engine/core/models.py:621
msgid "tags that help describe or group this product"
msgstr "Tags that help describe or group this product"
-#: engine/core/models.py:605
+#: engine/core/models.py:626
msgid "indicates whether this product is digitally delivered"
msgstr "Indicates whether this product is digitally delivered"
-#: engine/core/models.py:606
+#: engine/core/models.py:627
msgid "is product digital"
msgstr "Is product digital"
-#: engine/core/models.py:612
+#: engine/core/models.py:633
msgid "provide a clear identifying name for the product"
msgstr "Provide a clear identifying name for the product"
-#: engine/core/models.py:613
+#: engine/core/models.py:634
msgid "product name"
msgstr "Product name"
-#: engine/core/models.py:619 engine/core/models.py:892
+#: engine/core/models.py:640 engine/core/models.py:915
msgid "add a detailed description of the product"
msgstr "Add a detailed description of the product"
-#: engine/core/models.py:620
+#: engine/core/models.py:641
msgid "product description"
msgstr "Product description"
-#: engine/core/models.py:627
+#: engine/core/models.py:648
msgid "part number for this product"
msgstr "Part number for this product"
-#: engine/core/models.py:628
+#: engine/core/models.py:649
msgid "part number"
msgstr "Part number"
-#: engine/core/models.py:647
+#: engine/core/models.py:668
msgid "stock keeping unit for this product"
msgstr "Stock Keeping Unit for this product"
-#: engine/core/models.py:720
+#: engine/core/models.py:741
msgid ""
"Represents an attribute in the system. This class is used to define and "
"manage attributes, which are customizable pieces of data that can be "
"associated with other entities. Attributes have associated categories, "
-"groups, value types, and names. The model supports multiple types of values,"
-" including string, integer, float, boolean, array, and object. This allows "
+"groups, value types, and names. The model supports multiple types of values, "
+"including string, integer, float, boolean, array, and object. This allows "
"for dynamic and flexible data structuring."
msgstr ""
"Represents an attribute in the system. This class is used to define and "
"manage attributes, which are customizable pieces of data that can be "
"associated with other entities. Attributes have associated categories, "
-"groups, value types, and names. The model supports multiple types of values,"
-" including string, integer, float, boolean, array, and object. This allows "
+"groups, value types, and names. The model supports multiple types of values, "
+"including string, integer, float, boolean, array, and object. This allows "
"for dynamic and flexible data structuring."
-#: engine/core/models.py:733
+#: engine/core/models.py:754
msgid "group of this attribute"
msgstr "Group of this attribute"
-#: engine/core/models.py:739
+#: engine/core/models.py:760
msgid "string"
msgstr "String"
-#: engine/core/models.py:740
+#: engine/core/models.py:761
msgid "integer"
msgstr "Integer"
-#: engine/core/models.py:741
+#: engine/core/models.py:762
msgid "float"
msgstr "Float"
-#: engine/core/models.py:742
+#: engine/core/models.py:763
msgid "boolean"
msgstr "Boolean"
-#: engine/core/models.py:743
+#: engine/core/models.py:764
msgid "array"
msgstr "Array"
-#: engine/core/models.py:744
+#: engine/core/models.py:765
msgid "object"
msgstr "Object"
-#: engine/core/models.py:746
+#: engine/core/models.py:767
msgid "type of the attribute's value"
msgstr "Type of the attribute's value"
-#: engine/core/models.py:747
+#: engine/core/models.py:768
msgid "value type"
msgstr "Value type"
-#: engine/core/models.py:752
+#: engine/core/models.py:773
msgid "name of this attribute"
msgstr "Name of this attribute"
-#: engine/core/models.py:753
+#: engine/core/models.py:774
msgid "attribute's name"
msgstr "Attribute's name"
-#: engine/core/models.py:758
+#: engine/core/models.py:779
msgid "is filterable"
msgstr "is filterable"
-#: engine/core/models.py:759
+#: engine/core/models.py:781
msgid "designates whether this attribute can be used for filtering or not"
msgstr "designates whether this attribute can be used for filtering or not"
-#: engine/core/models.py:771 engine/core/models.py:789
+#: engine/core/models.py:794 engine/core/models.py:812
#: engine/core/templates/digital_order_delivered_email.html:134
msgid "attribute"
msgstr "Attribute"
-#: engine/core/models.py:777
+#: engine/core/models.py:800
msgid ""
-"Represents a specific value for an attribute that is linked to a product. It"
-" links the 'attribute' to a unique 'value', allowing better organization and"
-" dynamic representation of product characteristics."
+"Represents a specific value for an attribute that is linked to a product. It "
+"links the 'attribute' to a unique 'value', allowing better organization and "
+"dynamic representation of product characteristics."
msgstr ""
-"Represents a specific value for an attribute that is linked to a product. It"
-" links the 'attribute' to a unique 'value', allowing better organization and"
-" dynamic representation of product characteristics."
+"Represents a specific value for an attribute that is linked to a product. It "
+"links the 'attribute' to a unique 'value', allowing better organization and "
+"dynamic representation of product characteristics."
-#: engine/core/models.py:788
+#: engine/core/models.py:811
msgid "attribute of this value"
msgstr "Attribute of this value"
-#: engine/core/models.py:796
+#: engine/core/models.py:819
msgid "the specific product associated with this attribute's value"
msgstr "The specific product associated with this attribute's value"
-#: engine/core/models.py:802
+#: engine/core/models.py:825
msgid "the specific value for this attribute"
msgstr "The specific value for this attribute"
-#: engine/core/models.py:815
+#: engine/core/models.py:838
msgid ""
"Represents a product image associated with a product in the system. This "
-"class is designed to manage images for products, including functionality for"
-" uploading image files, associating them with specific products, and "
+"class is designed to manage images for products, including functionality for "
+"uploading image files, associating them with specific products, and "
"determining their display order. It also includes an accessibility feature "
"with alternative text for the images."
msgstr ""
"Represents a product image associated with a product in the system. This "
-"class is designed to manage images for products, including functionality for"
-" uploading image files, associating them with specific products, and "
+"class is designed to manage images for products, including functionality for "
+"uploading image files, associating them with specific products, and "
"determining their display order. It also includes an accessibility feature "
"with alternative text for the images."
-#: engine/core/models.py:826
+#: engine/core/models.py:849
msgid "provide alternative text for the image for accessibility"
msgstr "Provide alternative text for the image for accessibility"
-#: engine/core/models.py:827
+#: engine/core/models.py:850
msgid "image alt text"
msgstr "Image alt text"
-#: engine/core/models.py:830
+#: engine/core/models.py:853
msgid "upload the image file for this product"
msgstr "Upload the image file for this product"
-#: engine/core/models.py:831 engine/core/models.py:862
+#: engine/core/models.py:854 engine/core/models.py:885
msgid "product image"
msgstr "Product image"
-#: engine/core/models.py:836
+#: engine/core/models.py:859
msgid "determines the order in which images are displayed"
msgstr "Determines the order in which images are displayed"
-#: engine/core/models.py:837
+#: engine/core/models.py:860
msgid "display priority"
msgstr "Display priority"
-#: engine/core/models.py:842
+#: engine/core/models.py:865
msgid "the product that this image represents"
msgstr "The product that this image represents"
-#: engine/core/models.py:863
+#: engine/core/models.py:886
msgid "product images"
msgstr "Product images"
-#: engine/core/models.py:868
+#: engine/core/models.py:891
msgid ""
"Represents a promotional campaign for products with a discount. This class "
"is used to define and manage promotional campaigns that offer a percentage-"
"based discount for products. The class includes attributes for setting the "
"discount rate, providing details about the promotion, and linking it to the "
-"applicable products. It integrates with the product catalog to determine the"
-" affected items in the campaign."
+"applicable products. It integrates with the product catalog to determine the "
+"affected items in the campaign."
msgstr ""
"Represents a promotional campaign for products with a discount. This class "
"is used to define and manage promotional campaigns that offer a percentage-"
"based discount for products. The class includes attributes for setting the "
"discount rate, providing details about the promotion, and linking it to the "
-"applicable products. It integrates with the product catalog to determine the"
-" affected items in the campaign."
+"applicable products. It integrates with the product catalog to determine the "
+"affected items in the campaign."
-#: engine/core/models.py:880
+#: engine/core/models.py:903
msgid "percentage discount for the selected products"
msgstr "Percentage discount for the selected products"
-#: engine/core/models.py:881
+#: engine/core/models.py:904
msgid "discount percentage"
msgstr "Discount percentage"
-#: engine/core/models.py:886
+#: engine/core/models.py:909
msgid "provide a unique name for this promotion"
msgstr "Provide a unique name for this promotion"
-#: engine/core/models.py:887
+#: engine/core/models.py:910
msgid "promotion name"
msgstr "Promotion name"
-#: engine/core/models.py:893
+#: engine/core/models.py:916
msgid "promotion description"
msgstr "Promotion description"
-#: engine/core/models.py:898
+#: engine/core/models.py:921
msgid "select which products are included in this promotion"
msgstr "Select which products are included in this promotion"
-#: engine/core/models.py:899
+#: engine/core/models.py:922
msgid "included products"
msgstr "Included products"
-#: engine/core/models.py:903
+#: engine/core/models.py:926
msgid "promotion"
msgstr "Promotion"
-#: engine/core/models.py:914
+#: engine/core/models.py:937
msgid ""
"Represents a user's wishlist for storing and managing desired products. The "
"class provides functionality to manage a collection of products, supporting "
@@ -2118,123 +2121,123 @@ msgstr ""
"operations such as adding and removing products, as well as supporting "
"operations for adding and removing multiple products at once."
-#: engine/core/models.py:926
+#: engine/core/models.py:949
msgid "products that the user has marked as wanted"
msgstr "Products that the user has marked as wanted"
-#: engine/core/models.py:934
+#: engine/core/models.py:957
msgid "user who owns this wishlist"
msgstr "User who owns this wishlist"
-#: engine/core/models.py:935
+#: engine/core/models.py:958
msgid "wishlist owner"
msgstr "Wishlist's Owner"
-#: engine/core/models.py:943
+#: engine/core/models.py:966
msgid "wishlist"
msgstr "Wishlist"
-#: engine/core/models.py:985
+#: engine/core/models.py:1008
msgid ""
"Represents a documentary record tied to a product. This class is used to "
"store information about documentaries related to specific products, "
"including file uploads and their metadata. It contains methods and "
"properties to handle the file type and storage path for the documentary "
-"files. It extends functionality from specific mixins and provides additional"
-" custom features."
+"files. It extends functionality from specific mixins and provides additional "
+"custom features."
msgstr ""
"Represents a documentary record tied to a product. This class is used to "
"store information about documentaries related to specific products, "
"including file uploads and their metadata. It contains methods and "
"properties to handle the file type and storage path for the documentary "
-"files. It extends functionality from specific mixins and provides additional"
-" custom features."
+"files. It extends functionality from specific mixins and provides additional "
+"custom features."
-#: engine/core/models.py:998
+#: engine/core/models.py:1023
msgid "documentary"
msgstr "Documentary"
-#: engine/core/models.py:999
+#: engine/core/models.py:1024
msgid "documentaries"
msgstr "Documentaries"
-#: engine/core/models.py:1009
+#: engine/core/models.py:1034
msgid "unresolved"
msgstr "Unresolved"
-#: engine/core/models.py:1014
+#: engine/core/models.py:1039
msgid ""
-"Represents an address entity that includes location details and associations"
-" with a user. Provides functionality for geographic and address data "
-"storage, as well as integration with geocoding services. This class is "
-"designed to store detailed address information including components like "
-"street, city, region, country, and geolocation (longitude and latitude). It "
-"supports integration with geocoding APIs, enabling the storage of raw API "
-"responses for further processing or inspection. The class also allows "
-"associating an address with a user, facilitating personalized data handling."
+"Represents an address entity that includes location details and associations "
+"with a user. Provides functionality for geographic and address data storage, "
+"as well as integration with geocoding services. This class is designed to "
+"store detailed address information including components like street, city, "
+"region, country, and geolocation (longitude and latitude). It supports "
+"integration with geocoding APIs, enabling the storage of raw API responses "
+"for further processing or inspection. The class also allows associating an "
+"address with a user, facilitating personalized data handling."
msgstr ""
-"Represents an address entity that includes location details and associations"
-" with a user. Provides functionality for geographic and address data "
-"storage, as well as integration with geocoding services. This class is "
-"designed to store detailed address information including components like "
-"street, city, region, country, and geolocation (longitude and latitude). It "
-"supports integration with geocoding APIs, enabling the storage of raw API "
-"responses for further processing or inspection. The class also allows "
-"associating an address with a user, facilitating personalized data handling."
+"Represents an address entity that includes location details and associations "
+"with a user. Provides functionality for geographic and address data storage, "
+"as well as integration with geocoding services. This class is designed to "
+"store detailed address information including components like street, city, "
+"region, country, and geolocation (longitude and latitude). It supports "
+"integration with geocoding APIs, enabling the storage of raw API responses "
+"for further processing or inspection. The class also allows associating an "
+"address with a user, facilitating personalized data handling."
-#: engine/core/models.py:1029
+#: engine/core/models.py:1054
msgid "address line for the customer"
msgstr "Address line for the customer"
-#: engine/core/models.py:1030
+#: engine/core/models.py:1055
msgid "address line"
msgstr "Address line"
-#: engine/core/models.py:1032
+#: engine/core/models.py:1057
msgid "street"
msgstr "Street"
-#: engine/core/models.py:1033
+#: engine/core/models.py:1058
msgid "district"
msgstr "District"
-#: engine/core/models.py:1034
+#: engine/core/models.py:1059
msgid "city"
msgstr "City"
-#: engine/core/models.py:1035
+#: engine/core/models.py:1060
msgid "region"
msgstr "Region"
-#: engine/core/models.py:1036
+#: engine/core/models.py:1061
msgid "postal code"
msgstr "Postal code"
-#: engine/core/models.py:1037
+#: engine/core/models.py:1062
msgid "country"
msgstr "Country"
-#: engine/core/models.py:1044
+#: engine/core/models.py:1069
msgid "geolocation point: (longitude, latitude)"
msgstr "Geolocation Point(Longitude, Latitude)"
-#: engine/core/models.py:1047
+#: engine/core/models.py:1075
msgid "full JSON response from geocoder for this address"
msgstr "Full JSON response from geocoder for this address"
-#: engine/core/models.py:1052
+#: engine/core/models.py:1081
msgid "stored JSON response from the geocoding service"
msgstr "Stored JSON response from the geocoding service"
-#: engine/core/models.py:1060
+#: engine/core/models.py:1091
msgid "address"
msgstr "Address"
-#: engine/core/models.py:1061
+#: engine/core/models.py:1092
msgid "addresses"
msgstr "Adresses"
-#: engine/core/models.py:1073
+#: engine/core/models.py:1104
msgid ""
"Represents a promotional code that can be used for discounts, managing its "
"validity, type of discount, and application. The PromoCode class stores "
@@ -2250,71 +2253,71 @@ msgstr ""
"any), and status of its usage. It includes functionality to validate and "
"apply the promo code to an order while ensuring constraints are met."
-#: engine/core/models.py:1087
+#: engine/core/models.py:1118
msgid "unique code used by a user to redeem a discount"
msgstr "Unique code used by a user to redeem a discount"
-#: engine/core/models.py:1088
+#: engine/core/models.py:1119
msgid "promo code identifier"
msgstr "Promo code identifier"
-#: engine/core/models.py:1095
+#: engine/core/models.py:1126
msgid "fixed discount amount applied if percent is not used"
msgstr "Fixed discount amount applied if percent is not used"
-#: engine/core/models.py:1096
+#: engine/core/models.py:1127
msgid "fixed discount amount"
msgstr "Fixed discount amount"
-#: engine/core/models.py:1102
+#: engine/core/models.py:1133
msgid "percentage discount applied if fixed amount is not used"
msgstr "Percentage discount applied if fixed amount is not used"
-#: engine/core/models.py:1103
+#: engine/core/models.py:1134
msgid "percentage discount"
msgstr "Percentage discount"
-#: engine/core/models.py:1108
+#: engine/core/models.py:1139
msgid "timestamp when the promocode expires"
msgstr "Timestamp when the promocode expires"
-#: engine/core/models.py:1109
+#: engine/core/models.py:1140
msgid "end validity time"
msgstr "End validity time"
-#: engine/core/models.py:1114
+#: engine/core/models.py:1145
msgid "timestamp from which this promocode is valid"
msgstr "Timestamp from which this promocode is valid"
-#: engine/core/models.py:1115
+#: engine/core/models.py:1146
msgid "start validity time"
msgstr "Start validity time"
-#: engine/core/models.py:1120
+#: engine/core/models.py:1151
msgid "timestamp when the promocode was used, blank if not used yet"
msgstr "Timestamp when the promocode was used, blank if not used yet"
-#: engine/core/models.py:1121
+#: engine/core/models.py:1152
msgid "usage timestamp"
msgstr "Usage timestamp"
-#: engine/core/models.py:1126
+#: engine/core/models.py:1157
msgid "user assigned to this promocode if applicable"
msgstr "User assigned to this promocode if applicable"
-#: engine/core/models.py:1127
+#: engine/core/models.py:1158
msgid "assigned user"
msgstr "Assigned user"
-#: engine/core/models.py:1134
+#: engine/core/models.py:1165
msgid "promo code"
msgstr "Promo code"
-#: engine/core/models.py:1135
+#: engine/core/models.py:1166
msgid "promo codes"
msgstr "Promo codes"
-#: engine/core/models.py:1150
+#: engine/core/models.py:1182
msgid ""
"only one type of discount should be defined (amount or percent), but not "
"both or neither."
@@ -2322,161 +2325,161 @@ msgstr ""
"Only one type of discount should be defined (amount or percent), but not "
"both or neither."
-#: engine/core/models.py:1171
+#: engine/core/models.py:1204
msgid "promocode already used"
msgstr "Promocode has been used already"
-#: engine/core/models.py:1187
+#: engine/core/models.py:1226
#, python-brace-format
msgid "invalid discount type for promocode {self.uuid}"
msgstr "Invalid discount type for promocode {self.uuid}!"
-#: engine/core/models.py:1196
+#: engine/core/models.py:1235
msgid ""
"Represents an order placed by a user. This class models an order within the "
"application, including its various attributes such as billing and shipping "
-"information, status, associated user, notifications, and related operations."
-" Orders can have associated products, promotions can be applied, addresses "
+"information, status, associated user, notifications, and related operations. "
+"Orders can have associated products, promotions can be applied, addresses "
"set, and shipping or billing details updated. Equally, functionality "
"supports managing the products in the order lifecycle."
msgstr ""
"Represents an order placed by a user. This class models an order within the "
"application, including its various attributes such as billing and shipping "
-"information, status, associated user, notifications, and related operations."
-" Orders can have associated products, promotions can be applied, addresses "
+"information, status, associated user, notifications, and related operations. "
+"Orders can have associated products, promotions can be applied, addresses "
"set, and shipping or billing details updated. Equally, functionality "
"supports managing the products in the order lifecycle."
-#: engine/core/models.py:1213
+#: engine/core/models.py:1252
msgid "the billing address used for this order"
msgstr "The billing address used for this order"
-#: engine/core/models.py:1221
+#: engine/core/models.py:1260
msgid "optional promo code applied to this order"
msgstr "Optional promo code applied to this order"
-#: engine/core/models.py:1222
+#: engine/core/models.py:1261
msgid "applied promo code"
msgstr "Applied promo code"
-#: engine/core/models.py:1230
+#: engine/core/models.py:1269
msgid "the shipping address used for this order"
msgstr "The shipping address used for this order"
-#: engine/core/models.py:1231
+#: engine/core/models.py:1270
msgid "shipping address"
msgstr "Shipping address"
-#: engine/core/models.py:1237
+#: engine/core/models.py:1276
msgid "current status of the order in its lifecycle"
msgstr "Current status of the order in its lifecycle"
-#: engine/core/models.py:1238
+#: engine/core/models.py:1277
msgid "order status"
msgstr "Order status"
-#: engine/core/models.py:1243 engine/core/models.py:1769
+#: engine/core/models.py:1282 engine/core/models.py:1881
msgid "json structure of notifications to display to users"
msgstr ""
"JSON structure of notifications to display to users, in admin UI the table-"
"view is used"
-#: engine/core/models.py:1249
+#: engine/core/models.py:1288
msgid "json representation of order attributes for this order"
msgstr "JSON representation of order attributes for this order"
-#: engine/core/models.py:1255
+#: engine/core/models.py:1294
msgid "the user who placed the order"
msgstr "The user who placed the order"
-#: engine/core/models.py:1256
+#: engine/core/models.py:1295
msgid "user"
msgstr "User"
-#: engine/core/models.py:1262
+#: engine/core/models.py:1301
msgid "the timestamp when the order was finalized"
msgstr "The timestamp when the order was finalized"
-#: engine/core/models.py:1263
+#: engine/core/models.py:1302
msgid "buy time"
msgstr "Buy time"
-#: engine/core/models.py:1270
+#: engine/core/models.py:1309
msgid "a human-readable identifier for the order"
msgstr "A human-readable identifier for the order"
-#: engine/core/models.py:1271
+#: engine/core/models.py:1310
msgid "human readable id"
msgstr "human-readable ID"
-#: engine/core/models.py:1277
+#: engine/core/models.py:1316
msgid "order"
msgstr "Order"
-#: engine/core/models.py:1319
+#: engine/core/models.py:1363
msgid "a user must have only one pending order at a time"
msgstr "A user must have only one pending order at a time!"
-#: engine/core/models.py:1351
+#: engine/core/models.py:1396
msgid "you cannot add products to an order that is not a pending one"
msgstr "You cannot add products to an order that is not a pending one"
-#: engine/core/models.py:1356
+#: engine/core/models.py:1402
msgid "you cannot add inactive products to order"
msgstr "You cannot add inactive products to order"
-#: engine/core/models.py:1373
+#: engine/core/models.py:1424
msgid "you cannot add more products than available in stock"
msgstr "You cannot add more products than available in stock"
-#: engine/core/models.py:1395 engine/core/models.py:1420
-#: engine/core/models.py:1428
+#: engine/core/models.py:1448 engine/core/models.py:1477
+#: engine/core/models.py:1487
msgid "you cannot remove products from an order that is not a pending one"
msgstr "You cannot remove products from an order that is not a pending one"
-#: engine/core/models.py:1416
+#: engine/core/models.py:1472
#, python-brace-format
msgid "{name} does not exist with query <{query}>"
msgstr "{name} does not exist with query <{query}>!"
-#: engine/core/models.py:1448
+#: engine/core/models.py:1511
msgid "promocode does not exist"
msgstr "Promocode does not exist"
-#: engine/core/models.py:1454
+#: engine/core/models.py:1526
msgid "you can only buy physical products with shipping address specified"
msgstr "You can only buy physical products with shipping address specified!"
-#: engine/core/models.py:1473
+#: engine/core/models.py:1547
msgid "address does not exist"
msgstr "Address does not exist"
-#: engine/core/models.py:1494 engine/core/models.py:1563
+#: engine/core/models.py:1569 engine/core/models.py:1648
msgid "you can not buy at this moment, please try again in a few minutes"
msgstr ""
"You can not purchase at this moment, please try again in a few minutes."
-#: engine/core/models.py:1497 engine/core/models.py:1559
+#: engine/core/models.py:1575 engine/core/models.py:1641
msgid "invalid force value"
msgstr "Invalid force value"
-#: engine/core/models.py:1503 engine/core/models.py:1566
+#: engine/core/models.py:1581 engine/core/models.py:1652
msgid "you cannot purchase an empty order!"
msgstr "You cannot purchase an empty order!"
-#: engine/core/models.py:1522
+#: engine/core/models.py:1602
msgid "you cannot buy an order without a user"
msgstr "You cannot buy an order without a user!"
-#: engine/core/models.py:1536
+#: engine/core/models.py:1616
msgid "a user without a balance cannot buy with balance"
msgstr "A user without a balance cannot buy with balance!"
-#: engine/core/models.py:1541
+#: engine/core/models.py:1622
msgid "insufficient funds to complete the order"
msgstr "Insufficient funds to complete the order"
-#: engine/core/models.py:1575
+#: engine/core/models.py:1663
msgid ""
"you cannot buy without registration, please provide the following "
"information: customer name, customer email, customer phone number"
@@ -2484,14 +2487,14 @@ msgstr ""
"you cannot buy without registration, please provide the following "
"information: customer name, customer email, customer phone number"
-#: engine/core/models.py:1584
+#: engine/core/models.py:1674
#, python-brace-format
msgid ""
"invalid payment method: {payment_method} from {available_payment_methods}"
msgstr ""
"Invalid payment method: {payment_method} from {available_payment_methods}!"
-#: engine/core/models.py:1699
+#: engine/core/models.py:1805
msgid ""
"Manages user feedback for products. This class is designed to capture and "
"store user feedback for specific products that they have purchased. It "
@@ -2505,33 +2508,32 @@ msgstr ""
"product in the order, and a user-assigned rating. The class uses database "
"fields to effectively model and manage feedback data."
-#: engine/core/models.py:1711
+#: engine/core/models.py:1817
msgid "user-provided comments about their experience with the product"
msgstr "User-provided comments about their experience with the product"
-#: engine/core/models.py:1712
+#: engine/core/models.py:1818
msgid "feedback comments"
msgstr "Feedback comments"
-#: engine/core/models.py:1719
-msgid ""
-"references the specific product in an order that this feedback is about"
+#: engine/core/models.py:1826
+msgid "references the specific product in an order that this feedback is about"
msgstr ""
"References the specific product in an order that this feedback is about"
-#: engine/core/models.py:1720
+#: engine/core/models.py:1828
msgid "related order product"
msgstr "Related order product"
-#: engine/core/models.py:1725
+#: engine/core/models.py:1833
msgid "user-assigned rating for the product"
msgstr "User-assigned rating for the product"
-#: engine/core/models.py:1726
+#: engine/core/models.py:1834
msgid "product rating"
msgstr "Product rating"
-#: engine/core/models.py:1742
+#: engine/core/models.py:1854
msgid ""
"Represents products associated with orders and their attributes. The "
"OrderProduct model maintains information about a product that is part of an "
@@ -2553,132 +2555,132 @@ msgstr ""
"download URL for digital products. The model integrates with the Order and "
"Product models and stores a reference to them."
-#: engine/core/models.py:1757
+#: engine/core/models.py:1869
msgid "the price paid by the customer for this product at purchase time"
msgstr "The price paid by the customer for this product at purchase time"
-#: engine/core/models.py:1758
+#: engine/core/models.py:1870
msgid "purchase price at order time"
msgstr "Purchase price at order time"
-#: engine/core/models.py:1763
+#: engine/core/models.py:1875
msgid "internal comments for admins about this ordered product"
msgstr "Internal comments for admins about this ordered product"
-#: engine/core/models.py:1764
+#: engine/core/models.py:1876
msgid "internal comments"
msgstr "Internal comments"
-#: engine/core/models.py:1770
+#: engine/core/models.py:1882
msgid "user notifications"
msgstr "User notifications"
-#: engine/core/models.py:1775
+#: engine/core/models.py:1887
msgid "json representation of this item's attributes"
msgstr "JSON representation of this item's attributes"
-#: engine/core/models.py:1776
+#: engine/core/models.py:1888
msgid "ordered product attributes"
msgstr "Ordered product attributes"
-#: engine/core/models.py:1781
+#: engine/core/models.py:1893
msgid "reference to the parent order that contains this product"
msgstr "Reference to the parent order that contains this product"
-#: engine/core/models.py:1782
+#: engine/core/models.py:1894
msgid "parent order"
msgstr "Parent order"
-#: engine/core/models.py:1791
+#: engine/core/models.py:1903
msgid "the specific product associated with this order line"
msgstr "The specific product associated with this order line"
-#: engine/core/models.py:1798
+#: engine/core/models.py:1910
msgid "quantity of this specific product in the order"
msgstr "Quantity of this specific product in the order"
-#: engine/core/models.py:1799
+#: engine/core/models.py:1911
msgid "product quantity"
msgstr "Product quantity"
-#: engine/core/models.py:1806
+#: engine/core/models.py:1918
msgid "current status of this product in the order"
msgstr "Current status of this product in the order"
-#: engine/core/models.py:1807
+#: engine/core/models.py:1919
msgid "product line status"
msgstr "Product line status"
-#: engine/core/models.py:1872
+#: engine/core/models.py:1986
msgid "order product must have an order"
msgstr "Orderproduct must have an associated order!"
-#: engine/core/models.py:1874
+#: engine/core/models.py:1988
#, python-brace-format
msgid "wrong action specified for feedback: {action}"
msgstr "Wrong action specified for feedback: {action}!"
-#: engine/core/models.py:1888
+#: engine/core/models.py:2005
msgid "you cannot feedback an order which is not received"
msgstr "you cannot feedback an order which is not received"
-#: engine/core/models.py:1894
+#: engine/core/models.py:2014
msgid "name"
msgstr "Name"
-#: engine/core/models.py:1895
+#: engine/core/models.py:2016
msgid "URL of the integration"
msgstr "URL of the integration"
-#: engine/core/models.py:1896
+#: engine/core/models.py:2019
msgid "authentication credentials"
msgstr "Authentication credentials"
-#: engine/core/models.py:1918
+#: engine/core/models.py:2042
msgid "you can only have one default CRM provider"
msgstr "You can only have one default CRM provider"
-#: engine/core/models.py:1928
+#: engine/core/models.py:2052
msgid "CRM"
msgstr "CRM"
-#: engine/core/models.py:1929
+#: engine/core/models.py:2053
msgid "CRMs"
msgstr "CRMs"
-#: engine/core/models.py:1941
+#: engine/core/models.py:2069
msgid "order CRM link"
msgstr "Order's CRM link"
-#: engine/core/models.py:1942
+#: engine/core/models.py:2070
msgid "orders CRM links"
msgstr "Orders' CRM links"
-#: engine/core/models.py:1947
+#: engine/core/models.py:2075
msgid ""
"Represents the downloading functionality for digital assets associated with "
"orders. The DigitalAssetDownload class provides the ability to manage and "
"access downloads related to order products. It maintains information about "
-"the associated order product, the number of downloads, and whether the asset"
-" is publicly visible. It includes a method to generate a URL for downloading"
-" the asset when the associated order is in a completed status."
+"the associated order product, the number of downloads, and whether the asset "
+"is publicly visible. It includes a method to generate a URL for downloading "
+"the asset when the associated order is in a completed status."
msgstr ""
"Represents the downloading functionality for digital assets associated with "
"orders. The DigitalAssetDownload class provides the ability to manage and "
"access downloads related to order products. It maintains information about "
-"the associated order product, the number of downloads, and whether the asset"
-" is publicly visible. It includes a method to generate a URL for downloading"
-" the asset when the associated order is in a completed status."
+"the associated order product, the number of downloads, and whether the asset "
+"is publicly visible. It includes a method to generate a URL for downloading "
+"the asset when the associated order is in a completed status."
-#: engine/core/models.py:1961
+#: engine/core/models.py:2091
msgid "download"
msgstr "Download"
-#: engine/core/models.py:1962
+#: engine/core/models.py:2092
msgid "downloads"
msgstr "Downloads"
-#: engine/core/serializers/utility.py:89
+#: engine/core/serializers/utility.py:91
msgid ""
"you must provide a comment, rating, and order product uuid to add feedback."
msgstr ""
@@ -2874,11 +2876,12 @@ msgstr "Hello %(order.user.first_name)s,"
#, python-format
msgid ""
"thank you for your order #%(order.pk)s! we are pleased to inform you that\n"
-" we have taken your order into work. below are the details of your\n"
+" we have taken your order into work. below are "
+"the details of your\n"
" order:"
msgstr ""
-"Thank you for your order #%(order.pk)s! We are pleased to inform you that we"
-" have taken your order into work. Below are the details of your order:"
+"Thank you for your order #%(order.pk)s! We are pleased to inform you that we "
+"have taken your order into work. Below are the details of your order:"
#: engine/core/templates/digital_order_created_email.html:112
#: engine/core/templates/digital_order_delivered_email.html:110
@@ -2988,11 +2991,12 @@ msgstr ""
#: engine/core/templates/shipped_order_created_email.html:101
#: engine/core/templates/shipped_order_delivered_email.html:101
msgid ""
-"thank you for your order! we are pleased to confirm your purchase. below are\n"
+"thank you for your order! we are pleased to confirm your purchase. below "
+"are\n"
" the details of your order:"
msgstr ""
-"Thank you for your order! We are pleased to confirm your purchase. Below are"
-" the details of your order:"
+"Thank you for your order! We are pleased to confirm your purchase. Below are "
+"the details of your order:"
#: engine/core/templates/shipped_order_created_email.html:123
#: engine/core/templates/shipped_order_delivered_email.html:123
@@ -3019,11 +3023,11 @@ msgstr ""
"all rights\n"
" reserved"
-#: engine/core/utils/caching.py:44
+#: engine/core/utils/caching.py:48
msgid "both data and timeout are required"
msgstr "Both data and timeout are required"
-#: engine/core/utils/caching.py:46
+#: engine/core/utils/caching.py:51
msgid "invalid timeout value, it must be between 0 and 216000 seconds"
msgstr "Invalid timeout value, it must be between 0 and 216000 seconds"
@@ -3032,17 +3036,17 @@ msgstr "Invalid timeout value, it must be between 0 and 216000 seconds"
msgid "{settings.PROJECT_NAME} | contact us initiated"
msgstr "{settings.PROJECT_NAME} | contact us initiated"
-#: engine/core/utils/emailing.py:73
+#: engine/core/utils/emailing.py:81
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order confirmation"
msgstr "{settings.PROJECT_NAME} | order confirmation"
-#: engine/core/utils/emailing.py:105
+#: engine/core/utils/emailing.py:115
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order delivered"
msgstr "{settings.PROJECT_NAME} | order delivered"
-#: engine/core/utils/emailing.py:188
+#: engine/core/utils/emailing.py:203
#, python-brace-format
msgid "{settings.PROJECT_NAME} | promocode granted"
msgstr "{settings.PROJECT_NAME} | promocode granted"
@@ -3055,13 +3059,13 @@ msgstr "You do not have permission to perform this action."
msgid "NOMINATIM_URL must be configured."
msgstr "NOMINATIM_URL parameter must be configured!"
-#: engine/core/validators.py:19
+#: engine/core/validators.py:21
#, python-brace-format
msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels"
msgstr ""
"Image dimensions should not exceed w{max_width} x h{max_height} pixels!"
-#: engine/core/views.py:91
+#: engine/core/views.py:105
msgid ""
"Handles the request for the sitemap index and returns an XML response. It "
"ensures the response includes the appropriate content type header for XML."
@@ -3069,7 +3073,7 @@ msgstr ""
"Handles the request for the sitemap index and returns an XML response. It "
"ensures the response includes the appropriate content type header for XML."
-#: engine/core/views.py:106
+#: engine/core/views.py:120
msgid ""
"Handles the detailed view response for a sitemap. This function processes "
"the request, fetches the appropriate sitemap detail response, and sets the "
@@ -3079,17 +3083,17 @@ msgstr ""
"the request, fetches the appropriate sitemap detail response, and sets the "
"Content-Type header for XML."
-#: engine/core/views.py:141
+#: engine/core/views.py:156
msgid ""
"Returns a list of supported languages and their corresponding information."
msgstr ""
"Returns a list of supported languages and their corresponding information."
-#: engine/core/views.py:173
+#: engine/core/views.py:183
msgid "Returns the parameters of the website as a JSON object."
msgstr "Returns the parameters of the website as a JSON object."
-#: engine/core/views.py:192
+#: engine/core/views.py:199
msgid ""
"Handles cache operations such as reading and setting cache data with a "
"specified key and timeout."
@@ -3097,11 +3101,11 @@ msgstr ""
"Handles cache operations such as reading and setting cache data with a "
"specified key and timeout."
-#: engine/core/views.py:219
+#: engine/core/views.py:221
msgid "Handles `contact us` form submissions."
msgstr "Handles `contact us` form submissions."
-#: engine/core/views.py:240
+#: engine/core/views.py:237
msgid ""
"Handles requests for processing and validating URLs from incoming POST "
"requests."
@@ -3109,78 +3113,86 @@ msgstr ""
"Handles requests for processing and validating URLs from incoming POST "
"requests."
-#: engine/core/views.py:280
+#: engine/core/views.py:274
msgid "Handles global search queries."
msgstr "Handles global search queries."
-#: engine/core/views.py:295
+#: engine/core/views.py:290
msgid "Handles the logic of buying as a business without registration."
msgstr "Handles the logic of buying as a business without registration."
-#: engine/core/views.py:332
+#: engine/core/views.py:338
msgid ""
"Handles the downloading of a digital asset associated with an order.\n"
-"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the digital asset file located in the "
+"storage directory of the project. If the file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
msgstr ""
"Handles the downloading of a digital asset associated with an order.\n"
-"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the digital asset file located in the "
+"storage directory of the project. If the file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
-#: engine/core/views.py:343
+#: engine/core/views.py:349
msgid "order_product_uuid is required"
msgstr "order_product_uuid is required"
-#: engine/core/views.py:350
+#: engine/core/views.py:356
msgid "order product does not exist"
msgstr "order product does not exist"
-#: engine/core/views.py:353
+#: engine/core/views.py:359
msgid "you can only download the digital asset once"
msgstr "You can only download the digital asset once"
-#: engine/core/views.py:356
+#: engine/core/views.py:363
msgid "the order must be paid before downloading the digital asset"
msgstr "the order must be paid before downloading the digital asset"
-#: engine/core/views.py:362
+#: engine/core/views.py:370
msgid "the order product does not have a product"
msgstr "The order product does not have a product"
-#: engine/core/views.py:399
+#: engine/core/views.py:414
msgid "favicon not found"
msgstr "favicon not found"
-#: engine/core/views.py:404
+#: engine/core/views.py:419
msgid ""
"Handles requests for the favicon of a website.\n"
-"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the favicon file located in the static "
+"directory of the project. If the favicon file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
msgstr ""
"Handles requests for the favicon of a website.\n"
-"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the favicon file located in the static "
+"directory of the project. If the favicon file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
-#: engine/core/views.py:416
+#: engine/core/views.py:431
msgid ""
-"Redirects the request to the admin index page. The function handles incoming"
-" HTTP requests and redirects them to the Django admin interface index page. "
+"Redirects the request to the admin index page. The function handles incoming "
+"HTTP requests and redirects them to the Django admin interface index page. "
"It uses Django's `redirect` function for handling the HTTP redirection."
msgstr ""
-"Redirects the request to the admin index page. The function handles incoming"
-" HTTP requests and redirects them to the Django admin interface index page. "
+"Redirects the request to the admin index page. The function handles incoming "
+"HTTP requests and redirects them to the Django admin interface index page. "
"It uses Django's `redirect` function for handling the HTTP redirection."
-#: engine/core/views.py:429
+#: engine/core/views.py:443
msgid "Returns current version of the eVibes. "
msgstr "Returns current version of the eVibes."
-#: engine/core/views.py:623 engine/core/views.py:636
+#: engine/core/views.py:672 engine/core/views.py:687
#, python-format
msgid "Revenue & Orders (last %(days)d)"
msgstr "Revenue & Orders (last %(days)d)"
-#: engine/core/views.py:793
+#: engine/core/views.py:868
msgid "Returns custom variables for Dashboard. "
msgstr "Returns custom variables for Dashboard."
-#: engine/core/viewsets.py:136
+#: engine/core/viewsets.py:139
msgid ""
"Defines a viewset for managing Evibes-related operations. The EvibesViewSet "
"class inherits from ModelViewSet and provides functionality for handling "
@@ -3194,21 +3206,19 @@ msgstr ""
"serializer classes based on the current action, customizable permissions, "
"and rendering formats."
-#: engine/core/viewsets.py:156
+#: engine/core/viewsets.py:160
msgid ""
-"Represents a viewset for managing AttributeGroup objects. Handles operations"
-" related to AttributeGroup, including filtering, serialization, and "
-"retrieval of data. This class is part of the application's API layer and "
-"provides a standardized way to process requests and responses for "
-"AttributeGroup data."
+"Represents a viewset for managing AttributeGroup objects. Handles operations "
+"related to AttributeGroup, including filtering, serialization, and retrieval "
+"of data. This class is part of the application's API layer and provides a "
+"standardized way to process requests and responses for AttributeGroup data."
msgstr ""
-"Represents a viewset for managing AttributeGroup objects. Handles operations"
-" related to AttributeGroup, including filtering, serialization, and "
-"retrieval of data. This class is part of the application's API layer and "
-"provides a standardized way to process requests and responses for "
-"AttributeGroup data."
+"Represents a viewset for managing AttributeGroup objects. Handles operations "
+"related to AttributeGroup, including filtering, serialization, and retrieval "
+"of data. This class is part of the application's API layer and provides a "
+"standardized way to process requests and responses for AttributeGroup data."
-#: engine/core/viewsets.py:175
+#: engine/core/viewsets.py:179
msgid ""
"Handles operations related to Attribute objects within the application. "
"Provides a set of API endpoints to interact with Attribute data. This class "
@@ -3224,21 +3234,21 @@ msgstr ""
"specific fields or retrieving detailed versus simplified information "
"depending on the request."
-#: engine/core/viewsets.py:194
+#: engine/core/viewsets.py:198
msgid ""
"A viewset for managing AttributeValue objects. This viewset provides "
"functionality for listing, retrieving, creating, updating, and deleting "
"AttributeValue objects. It integrates with Django REST Framework's viewset "
-"mechanisms and uses appropriate serializers for different actions. Filtering"
-" capabilities are provided through the DjangoFilterBackend."
+"mechanisms and uses appropriate serializers for different actions. Filtering "
+"capabilities are provided through the DjangoFilterBackend."
msgstr ""
"A viewset for managing AttributeValue objects. This viewset provides "
"functionality for listing, retrieving, creating, updating, and deleting "
"AttributeValue objects. It integrates with Django REST Framework's viewset "
-"mechanisms and uses appropriate serializers for different actions. Filtering"
-" capabilities are provided through the DjangoFilterBackend."
+"mechanisms and uses appropriate serializers for different actions. Filtering "
+"capabilities are provided through the DjangoFilterBackend."
-#: engine/core/viewsets.py:213
+#: engine/core/viewsets.py:217
msgid ""
"Manages views for Category-related operations. The CategoryViewSet class is "
"responsible for handling operations related to the Category model in the "
@@ -3252,7 +3262,7 @@ msgstr ""
"The viewset also enforces permissions to ensure that only authorized users "
"can access specific data."
-#: engine/core/viewsets.py:326
+#: engine/core/viewsets.py:346
msgid ""
"Represents a viewset for managing Brand instances. This class provides "
"functionality for querying, filtering, and serializing Brand objects. It "
@@ -3264,7 +3274,7 @@ msgstr ""
"uses Django's ViewSet framework to simplify the implementation of API "
"endpoints for Brand objects."
-#: engine/core/viewsets.py:438
+#: engine/core/viewsets.py:458
msgid ""
"Manages operations related to the `Product` model in the system. This class "
"provides a viewset for managing products, including their filtering, "
@@ -3282,7 +3292,7 @@ msgstr ""
"product details, applying permissions, and accessing related feedback of a "
"product."
-#: engine/core/viewsets.py:574
+#: engine/core/viewsets.py:605
msgid ""
"Represents a viewset for managing Vendor objects. This viewset allows "
"fetching, filtering, and serializing Vendor data. It defines the queryset, "
@@ -3296,59 +3306,59 @@ msgstr ""
"actions. The purpose of this class is to provide streamlined access to "
"Vendor-related resources through the Django REST framework."
-#: engine/core/viewsets.py:594
+#: engine/core/viewsets.py:625
msgid ""
"Representation of a view set handling Feedback objects. This class manages "
"operations related to Feedback objects, including listing, filtering, and "
"retrieving details. The purpose of this view set is to provide different "
-"serializers for different actions and implement permission-based handling of"
-" accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
+"serializers for different actions and implement permission-based handling of "
+"accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
"use of Django's filtering system for querying data."
msgstr ""
"Representation of a view set handling Feedback objects. This class manages "
"operations related to Feedback objects, including listing, filtering, and "
"retrieving details. The purpose of this view set is to provide different "
-"serializers for different actions and implement permission-based handling of"
-" accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
+"serializers for different actions and implement permission-based handling of "
+"accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
"use of Django's filtering system for querying data."
-#: engine/core/viewsets.py:621
+#: engine/core/viewsets.py:652
msgid ""
"ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes "
"various endpoints for handling order operations such as adding or removing "
-"products, performing purchases for registered as well as unregistered users,"
-" and retrieving the current authenticated user's pending orders. The ViewSet"
-" uses multiple serializers based on the specific action being performed and "
+"products, performing purchases for registered as well as unregistered users, "
+"and retrieving the current authenticated user's pending orders. The ViewSet "
+"uses multiple serializers based on the specific action being performed and "
"enforces permissions accordingly while interacting with order data."
msgstr ""
"ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes "
"various endpoints for handling order operations such as adding or removing "
-"products, performing purchases for registered as well as unregistered users,"
-" and retrieving the current authenticated user's pending orders. The ViewSet"
-" uses multiple serializers based on the specific action being performed and "
+"products, performing purchases for registered as well as unregistered users, "
+"and retrieving the current authenticated user's pending orders. The ViewSet "
+"uses multiple serializers based on the specific action being performed and "
"enforces permissions accordingly while interacting with order data."
-#: engine/core/viewsets.py:825
+#: engine/core/viewsets.py:914
msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It "
-"includes filtering, permission checks, and serializer switching based on the"
-" requested action. Additionally, it provides a detailed action for handling "
+"includes filtering, permission checks, and serializer switching based on the "
+"requested action. Additionally, it provides a detailed action for handling "
"feedback on OrderProduct instances"
msgstr ""
"Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It "
-"includes filtering, permission checks, and serializer switching based on the"
-" requested action. Additionally, it provides a detailed action for handling "
+"includes filtering, permission checks, and serializer switching based on the "
+"requested action. Additionally, it provides a detailed action for handling "
"feedback on OrderProduct instances"
-#: engine/core/viewsets.py:879
+#: engine/core/viewsets.py:974
msgid "Manages operations related to Product images in the application. "
msgstr "Manages operations related to Product images in the application."
-#: engine/core/viewsets.py:892
+#: engine/core/viewsets.py:988
msgid ""
"Manages the retrieval and handling of PromoCode instances through various "
"API actions."
@@ -3356,33 +3366,33 @@ msgstr ""
"Manages the retrieval and handling of PromoCode instances through various "
"API actions."
-#: engine/core/viewsets.py:914
+#: engine/core/viewsets.py:1019
msgid "Represents a view set for managing promotions. "
msgstr "Represents a view set for managing promotions."
-#: engine/core/viewsets.py:927
+#: engine/core/viewsets.py:1032
msgid "Handles operations related to Stock data in the system."
msgstr "Handles operations related to Stock data in the system."
-#: engine/core/viewsets.py:941
+#: engine/core/viewsets.py:1046
msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the "
-"retrieval, modification, and customization of products within the wish list."
-" This ViewSet facilitates functionality such as adding, removing, and bulk "
+"retrieval, modification, and customization of products within the wish list. "
+"This ViewSet facilitates functionality such as adding, removing, and bulk "
"actions for wishlist products. Permission checks are integrated to ensure "
"that users can only manage their own wishlists unless explicit permissions "
"are granted."
msgstr ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the "
-"retrieval, modification, and customization of products within the wish list."
-" This ViewSet facilitates functionality such as adding, removing, and bulk "
+"retrieval, modification, and customization of products within the wish list. "
+"This ViewSet facilitates functionality such as adding, removing, and bulk "
"actions for wishlist products. Permission checks are integrated to ensure "
"that users can only manage their own wishlists unless explicit permissions "
"are granted."
-#: engine/core/viewsets.py:1056
+#: engine/core/viewsets.py:1183
msgid ""
"This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom "
@@ -3396,12 +3406,12 @@ msgstr ""
"different HTTP methods, serializer overrides, and permission handling based "
"on the request context."
-#: engine/core/viewsets.py:1123
+#: engine/core/viewsets.py:1254
#, python-brace-format
msgid "Geocoding error: {e}"
msgstr "Geocoding error: {e}"
-#: engine/core/viewsets.py:1131
+#: engine/core/viewsets.py:1262
msgid ""
"Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing "
diff --git a/engine/core/locale/es_ES/LC_MESSAGES/django.po b/engine/core/locale/es_ES/LC_MESSAGES/django.po
index e38de311..fe7dfa6f 100644
--- a/engine/core/locale/es_ES/LC_MESSAGES/django.po
+++ b/engine/core/locale/es_ES/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 22:12+0300\n"
+"POT-Creation-Date: 2025-12-18 19:09+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -27,113 +27,112 @@ msgstr ""
msgid "is active"
msgstr "Está activo"
-#: engine/core/abstract.py:21
+#: engine/core/abstract.py:22
msgid ""
-"if set to false, this object can't be seen by users without needed "
-"permission"
+"if set to false, this object can't be seen by users without needed permission"
msgstr ""
"Si se establece en false, este objeto no puede ser visto por los usuarios "
"sin el permiso necesario"
-#: engine/core/abstract.py:23 engine/core/choices.py:18
+#: engine/core/abstract.py:26 engine/core/choices.py:18
msgid "created"
msgstr "Creado"
-#: engine/core/abstract.py:23
+#: engine/core/abstract.py:26
msgid "when the object first appeared on the database"
msgstr "Cuando el objeto apareció por primera vez en la base de datos"
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "modified"
msgstr "Modificado"
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "when the object was last modified"
msgstr "Cuándo se editó el objeto por última vez"
-#: engine/core/admin.py:85
+#: engine/core/admin.py:94
msgid "translations"
msgstr "Traducciones"
-#: engine/core/admin.py:89
+#: engine/core/admin.py:102
msgid "general"
msgstr "General"
-#: engine/core/admin.py:91
+#: engine/core/admin.py:106
msgid "relations"
msgstr "Relaciones"
-#: engine/core/admin.py:93
+#: engine/core/admin.py:111
msgid "additional info"
msgstr "información adicional"
-#: engine/core/admin.py:111
+#: engine/core/admin.py:133
msgid "metadata"
msgstr "Metadatos"
-#: engine/core/admin.py:118
+#: engine/core/admin.py:141
msgid "timestamps"
msgstr "Marcas de tiempo"
-#: engine/core/admin.py:133
+#: engine/core/admin.py:157
#, python-format
msgid "activate selected %(verbose_name_plural)s"
msgstr "Activar %(verbose_name_plural)s seleccionado"
-#: engine/core/admin.py:138
+#: engine/core/admin.py:165
msgid "selected items have been activated."
msgstr "Los artículos seleccionados se han activado."
-#: engine/core/admin.py:144
+#: engine/core/admin.py:173
#, python-format
msgid "deactivate selected %(verbose_name_plural)s"
msgstr "Desactivar %(verbose_name_plural)s seleccionado"
-#: engine/core/admin.py:149
+#: engine/core/admin.py:183
msgid "selected items have been deactivated."
msgstr "Los artículos seleccionados se han desactivado."
-#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586
-#: engine/core/graphene/object_types.py:593 engine/core/models.py:801
-#: engine/core/models.py:809
+#: engine/core/admin.py:195 engine/core/graphene/object_types.py:650
+#: engine/core/graphene/object_types.py:657 engine/core/models.py:824
+#: engine/core/models.py:832
msgid "attribute value"
msgstr "Atributo Valor"
-#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75
-#: engine/core/models.py:810
+#: engine/core/admin.py:196 engine/core/graphene/object_types.py:75
+#: engine/core/models.py:833
msgid "attribute values"
msgstr "Valores de los atributos"
-#: engine/core/admin.py:172
+#: engine/core/admin.py:207
msgid "image"
msgstr "Imagen"
-#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474
+#: engine/core/admin.py:208 engine/core/graphene/object_types.py:527
msgid "images"
msgstr "Imágenes"
-#: engine/core/admin.py:184 engine/core/models.py:566
+#: engine/core/admin.py:219 engine/core/models.py:587
msgid "stock"
msgstr "Stock"
-#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640
+#: engine/core/admin.py:220 engine/core/graphene/object_types.py:710
msgid "stocks"
msgstr "Acciones"
-#: engine/core/admin.py:196 engine/core/models.py:1818
+#: engine/core/admin.py:231 engine/core/models.py:1930
msgid "order product"
msgstr "Pedir un producto"
-#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389
-#: engine/core/models.py:1819
+#: engine/core/admin.py:232 engine/core/graphene/object_types.py:438
+#: engine/core/models.py:1931
msgid "order products"
msgstr "Pedir productos"
-#: engine/core/admin.py:210 engine/core/admin.py:211
+#: engine/core/admin.py:250 engine/core/admin.py:251
msgid "children"
msgstr "Niños"
-#: engine/core/admin.py:977
+#: engine/core/admin.py:1059
msgid "Config"
msgstr "Configurar"
@@ -157,8 +156,7 @@ msgstr "Entregado"
msgid "canceled"
msgstr "Cancelado"
-#: engine/core/choices.py:8 engine/core/choices.py:16
-#: engine/core/choices.py:24
+#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24
msgid "failed"
msgstr "Fallido"
@@ -186,11 +184,11 @@ msgstr "Momento"
msgid "successful"
msgstr "Éxito"
-#: engine/core/docs/drf/views.py:31
+#: engine/core/docs/drf/views.py:30
msgid "OpenAPI schema in selected format with selected language"
msgstr "Esquema OpenAPI en el formato seleccionado con el idioma seleccionado"
-#: engine/core/docs/drf/views.py:33
+#: engine/core/docs/drf/views.py:32
msgid ""
"OpenApi3 schema for this API. Format can be selected via content "
"negotiation. Language can be selected with Accept-Language and query "
@@ -200,277 +198,275 @@ msgstr ""
"negociación de contenido. El idioma se puede seleccionar tanto con Accept-"
"Language como con el parámetro de consulta."
-#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37
+#: engine/core/docs/drf/views.py:43 engine/core/graphene/mutations.py:37
msgid "cache I/O"
msgstr "E/S de caché"
-#: engine/core/docs/drf/views.py:46
+#: engine/core/docs/drf/views.py:45
msgid ""
"apply only a key to read permitted data from cache.\n"
"apply key, data and timeout with authentication to write data to cache."
msgstr ""
"Aplicar sólo una clave para leer datos permitidos de la caché.\n"
-"Aplicar clave, datos y tiempo de espera con autenticación para escribir datos en la caché."
+"Aplicar clave, datos y tiempo de espera con autenticación para escribir "
+"datos en la caché."
-#: engine/core/docs/drf/views.py:62
+#: engine/core/docs/drf/views.py:63
msgid "get a list of supported languages"
msgstr "Obtener una lista de los idiomas admitidos"
-#: engine/core/docs/drf/views.py:74
+#: engine/core/docs/drf/views.py:75
msgid "get application's exposable parameters"
msgstr "Obtener los parámetros exponibles de la aplicación"
-#: engine/core/docs/drf/views.py:84
+#: engine/core/docs/drf/views.py:89
msgid "send a message to the support team"
msgstr "Enviar un mensaje al equipo de asistencia"
-#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57
+#: engine/core/docs/drf/views.py:103 engine/core/graphene/mutations.py:59
msgid "request a CORSed URL"
msgstr "Solicitar una URL CORSed. Solo se permite https."
-#: engine/core/docs/drf/views.py:112
+#: engine/core/docs/drf/views.py:119
msgid "Search between products, categories and brands"
msgstr "Búsqueda entre productos, categorías y marcas"
-#: engine/core/docs/drf/views.py:130
+#: engine/core/docs/drf/views.py:141
msgid "global search endpoint to query across project's tables"
msgstr ""
"Punto final de búsqueda global para consultar todas las tablas del proyecto"
-#: engine/core/docs/drf/views.py:139
+#: engine/core/docs/drf/views.py:150
msgid "purchase an order as a business"
msgstr "Comprar un pedido como empresa"
-#: engine/core/docs/drf/views.py:146
+#: engine/core/docs/drf/views.py:158
msgid ""
"purchase an order as a business, using the provided `products` with "
"`product_uuid` and `attributes`."
msgstr ""
-"Compra un pedido como empresa, utilizando los `productos` proporcionados con"
-" `product_uuid` y `attributes`."
+"Compra un pedido como empresa, utilizando los `productos` proporcionados con "
+"`product_uuid` y `attributes`."
-#: engine/core/docs/drf/views.py:164
+#: engine/core/docs/drf/views.py:177
msgid "download a digital asset from purchased digital order"
msgstr "descargar un activo digital de un pedido digital adquirido"
-#: engine/core/docs/drf/viewsets.py:61
+#: engine/core/docs/drf/viewsets.py:65
msgid "list all attribute groups (simple view)"
msgstr "Lista de todos los grupos de atributos (vista simple)"
-#: engine/core/docs/drf/viewsets.py:68
+#: engine/core/docs/drf/viewsets.py:75
msgid "retrieve a single attribute group (detailed view)"
msgstr "Recuperar un único grupo de atributos (vista detallada)"
-#: engine/core/docs/drf/viewsets.py:75
+#: engine/core/docs/drf/viewsets.py:82
msgid "create an attribute group"
msgstr "Crear un grupo de atributos"
-#: engine/core/docs/drf/viewsets.py:82
+#: engine/core/docs/drf/viewsets.py:92
msgid "delete an attribute group"
msgstr "Eliminar un grupo de atributos"
-#: engine/core/docs/drf/viewsets.py:89
+#: engine/core/docs/drf/viewsets.py:99
msgid "rewrite an existing attribute group saving non-editables"
msgstr "Reescribir un grupo de atributos existente guardando los no editables"
-#: engine/core/docs/drf/viewsets.py:96
-msgid ""
-"rewrite some fields of an existing attribute group saving non-editables"
+#: engine/core/docs/drf/viewsets.py:107
+msgid "rewrite some fields of an existing attribute group saving non-editables"
msgstr ""
"Reescribir algunos campos de un grupo de atributos existente guardando los "
"no editables"
-#: engine/core/docs/drf/viewsets.py:106
+#: engine/core/docs/drf/viewsets.py:118
msgid "list all attributes (simple view)"
msgstr "Listar todos los atributos (vista simple)"
-#: engine/core/docs/drf/viewsets.py:113
+#: engine/core/docs/drf/viewsets.py:128
msgid "retrieve a single attribute (detailed view)"
msgstr "Recuperar un único atributo (vista detallada)"
-#: engine/core/docs/drf/viewsets.py:120
+#: engine/core/docs/drf/viewsets.py:135
msgid "create an attribute"
msgstr "Crear un atributo"
-#: engine/core/docs/drf/viewsets.py:127
+#: engine/core/docs/drf/viewsets.py:142
msgid "delete an attribute"
msgstr "Borrar un atributo"
-#: engine/core/docs/drf/viewsets.py:134
+#: engine/core/docs/drf/viewsets.py:149
msgid "rewrite an existing attribute saving non-editables"
msgstr "Reescribir un atributo existente guardando los no editables"
-#: engine/core/docs/drf/viewsets.py:141
+#: engine/core/docs/drf/viewsets.py:156
msgid "rewrite some fields of an existing attribute saving non-editables"
msgstr ""
-"Reescribir algunos campos de un atributo existente guardando los no "
-"editables"
+"Reescribir algunos campos de un atributo existente guardando los no editables"
-#: engine/core/docs/drf/viewsets.py:151
+#: engine/core/docs/drf/viewsets.py:166
msgid "list all attribute values (simple view)"
msgstr "Listar todos los valores de atributos (vista simple)"
-#: engine/core/docs/drf/viewsets.py:158
+#: engine/core/docs/drf/viewsets.py:176
msgid "retrieve a single attribute value (detailed view)"
msgstr "Recuperar un único valor de atributo (vista detallada)"
-#: engine/core/docs/drf/viewsets.py:165
+#: engine/core/docs/drf/viewsets.py:183
msgid "create an attribute value"
msgstr "Crear un valor de atributo"
-#: engine/core/docs/drf/viewsets.py:172
+#: engine/core/docs/drf/viewsets.py:193
msgid "delete an attribute value"
msgstr "Borrar un valor de atributo"
-#: engine/core/docs/drf/viewsets.py:179
+#: engine/core/docs/drf/viewsets.py:200
msgid "rewrite an existing attribute value saving non-editables"
msgstr "Reescribir un valor de atributo existente guardando los no editables"
-#: engine/core/docs/drf/viewsets.py:186
-msgid ""
-"rewrite some fields of an existing attribute value saving non-editables"
+#: engine/core/docs/drf/viewsets.py:208
+msgid "rewrite some fields of an existing attribute value saving non-editables"
msgstr ""
-"Reescribir algunos campos de un valor de atributo existente guardando los no"
-" editables"
+"Reescribir algunos campos de un valor de atributo existente guardando los no "
+"editables"
-#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197
+#: engine/core/docs/drf/viewsets.py:219 engine/core/docs/drf/viewsets.py:220
msgid "list all categories (simple view)"
msgstr "Lista de todas las categorías (vista simple)"
-#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205
+#: engine/core/docs/drf/viewsets.py:230 engine/core/docs/drf/viewsets.py:231
msgid "retrieve a single category (detailed view)"
msgstr "Recuperar una sola categoría (vista detallada)"
-#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258
+#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:286
msgid "Category UUID or slug"
msgstr "UUID o slug de la categoría"
-#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221
+#: engine/core/docs/drf/viewsets.py:246 engine/core/docs/drf/viewsets.py:247
msgid "create a category"
msgstr "Crear una categoría"
-#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229
+#: engine/core/docs/drf/viewsets.py:254 engine/core/docs/drf/viewsets.py:255
msgid "delete a category"
msgstr "Eliminar una categoría"
-#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237
+#: engine/core/docs/drf/viewsets.py:262 engine/core/docs/drf/viewsets.py:263
msgid "rewrite an existing category saving non-editables"
msgstr "Reescribir una categoría existente guardando los no editables"
-#: engine/core/docs/drf/viewsets.py:244 engine/core/docs/drf/viewsets.py:245
+#: engine/core/docs/drf/viewsets.py:270 engine/core/docs/drf/viewsets.py:272
msgid "rewrite some fields of an existing category saving non-editables"
msgstr ""
"Reescribir algunos campos de una categoría existente guardando los no "
"editables"
-#: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704
-#: engine/core/docs/drf/viewsets.py:988
+#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:1046
#: engine/core/graphene/object_types.py:117
-#: engine/core/graphene/object_types.py:207
-#: engine/core/graphene/object_types.py:482
+#: engine/core/graphene/object_types.py:236
+#: engine/core/graphene/object_types.py:537
msgid "SEO Meta snapshot"
msgstr "SEO Meta snapshot"
-#: engine/core/docs/drf/viewsets.py:253
+#: engine/core/docs/drf/viewsets.py:281
msgid "returns a snapshot of the category's SEO meta data"
msgstr "Devuelve una instantánea de los metadatos SEO de la categoría"
-#: engine/core/docs/drf/viewsets.py:274
+#: engine/core/docs/drf/viewsets.py:302
msgid "list all orders (simple view)"
msgstr "Lista de todas las categorías (vista simple)"
-#: engine/core/docs/drf/viewsets.py:275
+#: engine/core/docs/drf/viewsets.py:303
msgid "for non-staff users, only their own orders are returned."
msgstr ""
"Para los usuarios que no forman parte del personal, sólo se devuelven sus "
"propios pedidos."
-#: engine/core/docs/drf/viewsets.py:281
+#: engine/core/docs/drf/viewsets.py:309
msgid ""
-"Case-insensitive substring search across human_readable_id, "
-"order_products.product.name, and order_products.product.partnumber"
+"Case-insensitive substring search across human_readable_id, order_products."
+"product.name, and order_products.product.partnumber"
msgstr ""
"Búsqueda de subcadenas sin distinción entre mayúsculas y minúsculas en "
-"human_readable_id, order_products.product.name y "
-"order_products.product.partnumber"
+"human_readable_id, order_products.product.name y order_products.product."
+"partnumber"
-#: engine/core/docs/drf/viewsets.py:288
+#: engine/core/docs/drf/viewsets.py:316
msgid "Filter orders with buy_time >= this ISO 8601 datetime"
msgstr "Filtrar los pedidos con buy_time >= esta fecha ISO 8601"
-#: engine/core/docs/drf/viewsets.py:293
+#: engine/core/docs/drf/viewsets.py:321
msgid "Filter orders with buy_time <= this ISO 8601 datetime"
msgstr "Filtrar pedidos con hora de compra <= esta fecha ISO 8601"
-#: engine/core/docs/drf/viewsets.py:298
+#: engine/core/docs/drf/viewsets.py:326
msgid "Filter by exact order UUID"
msgstr "Filtrar por UUID de pedido exacto"
-#: engine/core/docs/drf/viewsets.py:303
+#: engine/core/docs/drf/viewsets.py:331
msgid "Filter by exact human-readable order ID"
msgstr "Filtrar por ID de pedido exacto legible por el ser humano"
-#: engine/core/docs/drf/viewsets.py:308
+#: engine/core/docs/drf/viewsets.py:336
msgid "Filter by user's email (case-insensitive exact match)"
msgstr ""
-"Filtrar por correo electrónico del usuario (coincidencia exacta insensible a"
-" mayúsculas y minúsculas)"
+"Filtrar por correo electrónico del usuario (coincidencia exacta insensible a "
+"mayúsculas y minúsculas)"
-#: engine/core/docs/drf/viewsets.py:313
+#: engine/core/docs/drf/viewsets.py:341
msgid "Filter by user's UUID"
msgstr "Filtrar por UUID de usuario"
-#: engine/core/docs/drf/viewsets.py:318
+#: engine/core/docs/drf/viewsets.py:347
msgid "Filter by order status (case-insensitive substring match)"
msgstr ""
"Filtrar por estado del pedido (coincidencia de subcadenas insensible a "
"mayúsculas y minúsculas)"
-#: engine/core/docs/drf/viewsets.py:324
+#: engine/core/docs/drf/viewsets.py:354
msgid ""
-"Order by one of: uuid, human_readable_id, user_email, user, status, created,"
-" modified, buy_time, random. Prefix with '-' for descending (e.g. "
-"'-buy_time')."
+"Order by one of: uuid, human_readable_id, user_email, user, status, created, "
+"modified, buy_time, random. Prefix with '-' for descending (e.g. '-"
+"buy_time')."
msgstr ""
"Ordenar por: uuid, human_readable_id, user_email, user, status, created, "
"modified, buy_time, random. Utilice el prefijo '-' para orden descendente "
"(por ejemplo, '-tiempo_compra')."
-#: engine/core/docs/drf/viewsets.py:336
+#: engine/core/docs/drf/viewsets.py:366
msgid "retrieve a single order (detailed view)"
msgstr "Recuperar una sola categoría (vista detallada)"
-#: engine/core/docs/drf/viewsets.py:341
+#: engine/core/docs/drf/viewsets.py:371
msgid "Order UUID or human-readable id"
msgstr "UUID del pedido o identificador legible"
-#: engine/core/docs/drf/viewsets.py:351
+#: engine/core/docs/drf/viewsets.py:381
msgid "create an order"
msgstr "Crear un atributo"
-#: engine/core/docs/drf/viewsets.py:352
+#: engine/core/docs/drf/viewsets.py:382
msgid "doesn't work for non-staff users."
msgstr "No funciona para los usuarios que no son personal."
-#: engine/core/docs/drf/viewsets.py:359
+#: engine/core/docs/drf/viewsets.py:389
msgid "delete an order"
msgstr "Borrar un atributo"
-#: engine/core/docs/drf/viewsets.py:366
+#: engine/core/docs/drf/viewsets.py:396
msgid "rewrite an existing order saving non-editables"
msgstr "Reescribir una categoría existente guardando los no editables"
-#: engine/core/docs/drf/viewsets.py:373
+#: engine/core/docs/drf/viewsets.py:403
msgid "rewrite some fields of an existing order saving non-editables"
msgstr ""
"Reescribir algunos campos de una categoría existente guardando los no "
"editables"
-#: engine/core/docs/drf/viewsets.py:380
+#: engine/core/docs/drf/viewsets.py:410
msgid "purchase an order"
msgstr "Precio de compra en el momento del pedido"
-#: engine/core/docs/drf/viewsets.py:382
+#: engine/core/docs/drf/viewsets.py:412
msgid ""
"finalizes the order purchase. if `force_balance` is used, the purchase is "
"completed using the user's balance; if `force_payment` is used, a "
@@ -480,27 +476,27 @@ msgstr ""
"finaliza utilizando el saldo del usuario; Si se utiliza `force_payment`, se "
"inicia una transacción."
-#: engine/core/docs/drf/viewsets.py:397
+#: engine/core/docs/drf/viewsets.py:427
msgid "retrieve current pending order of a user"
msgstr "recuperar el pedido pendiente actual de un usuario"
-#: engine/core/docs/drf/viewsets.py:398
+#: engine/core/docs/drf/viewsets.py:428
msgid "retrieves a current pending order of an authenticated user"
msgstr "recupera un pedido pendiente actual de un usuario autenticado"
-#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334
+#: engine/core/docs/drf/viewsets.py:438 engine/core/graphene/mutations.py:354
msgid "purchase an order without account creation"
msgstr "comprar un pedido sin crear una cuenta"
-#: engine/core/docs/drf/viewsets.py:409
+#: engine/core/docs/drf/viewsets.py:439
msgid "finalizes the order purchase for a non-registered user."
msgstr "finaliza la compra del pedido para un usuario no registrado."
-#: engine/core/docs/drf/viewsets.py:420
+#: engine/core/docs/drf/viewsets.py:450
msgid "add product to order"
msgstr "Añadir un producto al pedido"
-#: engine/core/docs/drf/viewsets.py:421
+#: engine/core/docs/drf/viewsets.py:452
msgid ""
"adds a product to an order using the provided `product_uuid` and "
"`attributes`."
@@ -508,11 +504,11 @@ msgstr ""
"Añade un producto a un pedido utilizando el `product_uuid` y los "
"`attributes` proporcionados."
-#: engine/core/docs/drf/viewsets.py:429
+#: engine/core/docs/drf/viewsets.py:461
msgid "add a list of products to order, quantities will not count"
msgstr "Añadir una lista de productos a la orden, las cantidades no contarán"
-#: engine/core/docs/drf/viewsets.py:430
+#: engine/core/docs/drf/viewsets.py:463
msgid ""
"adds a list of products to an order using the provided `product_uuid` and "
"`attributes`."
@@ -520,11 +516,11 @@ msgstr ""
"Añade una lista de productos a un pedido utilizando el `product_uuid` y los "
"`attributes` proporcionados."
-#: engine/core/docs/drf/viewsets.py:438
+#: engine/core/docs/drf/viewsets.py:472
msgid "remove product from order"
msgstr "Eliminar un producto del pedido"
-#: engine/core/docs/drf/viewsets.py:439
+#: engine/core/docs/drf/viewsets.py:474
msgid ""
"removes a product from an order using the provided `product_uuid` and "
"`attributes`."
@@ -532,11 +528,11 @@ msgstr ""
"Elimina un producto de un pedido utilizando el `product_uuid` y los "
"`attributes` proporcionados."
-#: engine/core/docs/drf/viewsets.py:447
+#: engine/core/docs/drf/viewsets.py:483
msgid "remove product from order, quantities will not count"
msgstr "Eliminar un producto del pedido, las cantidades no contarán"
-#: engine/core/docs/drf/viewsets.py:448
+#: engine/core/docs/drf/viewsets.py:485
msgid ""
"removes a list of products from an order using the provided `product_uuid` "
"and `attributes`"
@@ -544,725 +540,734 @@ msgstr ""
"Elimina una lista de productos de un pedido utilizando el `product_uuid` y "
"los `attributes` proporcionados."
-#: engine/core/docs/drf/viewsets.py:459
+#: engine/core/docs/drf/viewsets.py:497
msgid "list all wishlists (simple view)"
msgstr "Listar todos los atributos (vista simple)"
-#: engine/core/docs/drf/viewsets.py:460
+#: engine/core/docs/drf/viewsets.py:498
msgid "for non-staff users, only their own wishlists are returned."
msgstr ""
"Para los usuarios que no forman parte del personal, sólo se devuelven sus "
"propias listas de deseos."
-#: engine/core/docs/drf/viewsets.py:467
+#: engine/core/docs/drf/viewsets.py:508
msgid "retrieve a single wishlist (detailed view)"
msgstr "Recuperar un único atributo (vista detallada)"
-#: engine/core/docs/drf/viewsets.py:474
+#: engine/core/docs/drf/viewsets.py:515
msgid "create an wishlist"
msgstr "Crear un atributo"
-#: engine/core/docs/drf/viewsets.py:475
+#: engine/core/docs/drf/viewsets.py:516
msgid "Doesn't work for non-staff users."
msgstr "No funciona para los usuarios que no son personal."
-#: engine/core/docs/drf/viewsets.py:482
+#: engine/core/docs/drf/viewsets.py:523
msgid "delete an wishlist"
msgstr "Borrar un atributo"
-#: engine/core/docs/drf/viewsets.py:489
+#: engine/core/docs/drf/viewsets.py:530
msgid "rewrite an existing wishlist saving non-editables"
msgstr "Reescribir un atributo existente guardando los no editables"
-#: engine/core/docs/drf/viewsets.py:496
+#: engine/core/docs/drf/viewsets.py:537
msgid "rewrite some fields of an existing wishlist saving non-editables"
msgstr ""
-"Reescribir algunos campos de un atributo existente guardando los no "
-"editables"
+"Reescribir algunos campos de un atributo existente guardando los no editables"
-#: engine/core/docs/drf/viewsets.py:503
+#: engine/core/docs/drf/viewsets.py:544
msgid "retrieve current pending wishlist of a user"
msgstr "recuperar la lista de deseos pendiente de un usuario"
-#: engine/core/docs/drf/viewsets.py:504
+#: engine/core/docs/drf/viewsets.py:545
msgid "retrieves a current pending wishlist of an authenticated user"
msgstr "recupera una lista de deseos pendiente de un usuario autenticado"
-#: engine/core/docs/drf/viewsets.py:514
+#: engine/core/docs/drf/viewsets.py:555
msgid "add product to wishlist"
msgstr "Añadir un producto al pedido"
-#: engine/core/docs/drf/viewsets.py:515
+#: engine/core/docs/drf/viewsets.py:557
msgid "adds a product to an wishlist using the provided `product_uuid`"
msgstr ""
"Añade un producto a una lista de deseos utilizando el `product_uuid` "
"proporcionado"
-#: engine/core/docs/drf/viewsets.py:523
+#: engine/core/docs/drf/viewsets.py:566
msgid "remove product from wishlist"
msgstr "Eliminar un producto de la lista de deseos"
-#: engine/core/docs/drf/viewsets.py:524
+#: engine/core/docs/drf/viewsets.py:568
msgid "removes a product from an wishlist using the provided `product_uuid`"
msgstr ""
"Elimina un producto de una lista de deseos utilizando el `product_uuid` "
"proporcionado."
-#: engine/core/docs/drf/viewsets.py:532
+#: engine/core/docs/drf/viewsets.py:577
msgid "add many products to wishlist"
msgstr "Añadir muchos productos a la lista de deseos"
-#: engine/core/docs/drf/viewsets.py:533
+#: engine/core/docs/drf/viewsets.py:579
msgid "adds many products to an wishlist using the provided `product_uuids`"
msgstr ""
"Añade varios productos a una lista de deseos utilizando los `product_uuids` "
"proporcionados."
-#: engine/core/docs/drf/viewsets.py:541
+#: engine/core/docs/drf/viewsets.py:588
msgid "remove many products from wishlist"
msgstr "Eliminar un producto del pedido"
-#: engine/core/docs/drf/viewsets.py:542
+#: engine/core/docs/drf/viewsets.py:590
msgid ""
"removes many products from an wishlist using the provided `product_uuids`"
msgstr ""
"Elimina varios productos de una lista de deseos utilizando los "
"`product_uuids` proporcionados."
-#: engine/core/docs/drf/viewsets.py:549
+#: engine/core/docs/drf/viewsets.py:598
msgid ""
"Filter by one or more attribute name/value pairs. \n"
"• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n"
-"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n"
-"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n"
+"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, "
+"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, "
+"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n"
+"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), "
+"`true`/`false` for booleans, integers, floats; otherwise treated as "
+"string. \n"
"• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n"
"Examples: \n"
-"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n"
+"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\","
+"\"bluetooth\"]`, \n"
"`b64-description=icontains-aGVhdC1jb2xk`"
msgstr ""
"Filtrar por uno o varios pares nombre/valor de atributo. \n"
"- Sintaxis**: `nombre_attr=método-valor[;attr2=método2-valor2]...`.\n"
-"- Métodos** (por defecto `icontiene` si se omite): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`.\n"
-"- Tipificación de valores**: Se intenta primero JSON (para poder pasar listas/dictos), `true`/`false` para booleanos, enteros, flotantes; en caso contrario se trata como cadena. \n"
-"- Base64**: prefiérelo con `b64-` para codificar en base64 el valor sin procesar. \n"
+"- Métodos** (por defecto `icontiene` si se omite): `iexact`, `exact`, "
+"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, "
+"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`.\n"
+"- Tipificación de valores**: Se intenta primero JSON (para poder pasar "
+"listas/dictos), `true`/`false` para booleanos, enteros, flotantes; en caso "
+"contrario se trata como cadena. \n"
+"- Base64**: prefiérelo con `b64-` para codificar en base64 el valor sin "
+"procesar. \n"
"Ejemplos: \n"
-"`color=rojo exacto`, `tamaño=gt-10`, `características=en-[\"wifi\", \"bluetooth\"]`,\n"
+"`color=rojo exacto`, `tamaño=gt-10`, `características=en-[\"wifi\", "
+"\"bluetooth\"]`,\n"
"`b64-description=icontains-aGVhdC1jb2xk`."
-#: engine/core/docs/drf/viewsets.py:568 engine/core/docs/drf/viewsets.py:569
+#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
msgid "list all products (simple view)"
msgstr "Listar todos los productos (vista simple)"
-#: engine/core/docs/drf/viewsets.py:574
+#: engine/core/docs/drf/viewsets.py:623
msgid "(exact) Product UUID"
msgstr "UUID (exacto) del producto"
-#: engine/core/docs/drf/viewsets.py:581
+#: engine/core/docs/drf/viewsets.py:630
msgid ""
-"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n"
+"Comma-separated list of fields to sort by. Prefix with `-` for "
+"descending. \n"
"**Allowed:** uuid, rating, name, slug, created, modified, price, random"
msgstr ""
-"Lista separada por comas de campos por los que ordenar. Prefiérela con `-` para que sea descendente. \n"
+"Lista separada por comas de campos por los que ordenar. Prefiérela con `-` "
+"para que sea descendente. \n"
"**Permitido:** uuid, rating, name, slug, created, modified, price, random"
-#: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599
+#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
msgid "retrieve a single product (detailed view)"
msgstr "Recuperar un solo producto (vista detallada)"
-#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634
-#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672
-#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710
+#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683
+#: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725
+#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763
msgid "Product UUID or slug"
msgstr "UUID o babosa del producto"
-#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
+#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
#: engine/core/graphene/dashboard_mutations/product.py:80
#: engine/core/graphene/dashboard_mutations/product.py:118
#: engine/core/graphene/dashboard_mutations/product.py:166
msgid "create a product"
msgstr "Crear un producto"
-#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629
+#: engine/core/docs/drf/viewsets.py:677 engine/core/docs/drf/viewsets.py:678
msgid "rewrite an existing product, preserving non-editable fields"
msgstr "Reescribir un producto existente conservando los campos no editables"
-#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
+#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:700
msgid ""
"update some fields of an existing product, preserving non-editable fields"
msgstr ""
"Actualizar algunos campos de un producto existente, conservando los campos "
"no editables"
-#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
+#: engine/core/docs/drf/viewsets.py:719 engine/core/docs/drf/viewsets.py:720
msgid "delete a product"
msgstr "Eliminar un producto"
-#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686
+#: engine/core/docs/drf/viewsets.py:738 engine/core/docs/drf/viewsets.py:739
msgid "lists all permitted feedbacks for a product"
msgstr "enumera todas las opiniones permitidas sobre un producto"
-#: engine/core/docs/drf/viewsets.py:705
+#: engine/core/docs/drf/viewsets.py:758
msgid "returns a snapshot of the product's SEO meta data"
msgstr "Devuelve una instantánea de los metadatos SEO del producto"
-#: engine/core/docs/drf/viewsets.py:726
+#: engine/core/docs/drf/viewsets.py:779
msgid "list all addresses"
msgstr "Enumerar todas las direcciones"
-#: engine/core/docs/drf/viewsets.py:736
+#: engine/core/docs/drf/viewsets.py:789
msgid "retrieve a single address"
msgstr "Recuperar una única dirección"
-#: engine/core/docs/drf/viewsets.py:746
+#: engine/core/docs/drf/viewsets.py:799
msgid "create a new address"
msgstr "Crear una nueva dirección"
-#: engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:810
msgid "delete an address"
msgstr "Borrar una dirección"
-#: engine/core/docs/drf/viewsets.py:767
+#: engine/core/docs/drf/viewsets.py:820
msgid "update an entire address"
msgstr "Actualizar una dirección completa"
-#: engine/core/docs/drf/viewsets.py:778
+#: engine/core/docs/drf/viewsets.py:831
msgid "partially update an address"
msgstr "Actualizar parcialmente una dirección"
-#: engine/core/docs/drf/viewsets.py:789
+#: engine/core/docs/drf/viewsets.py:842
msgid "autocomplete address suggestions"
msgstr "Autocompletar direcciones"
-#: engine/core/docs/drf/viewsets.py:794
+#: engine/core/docs/drf/viewsets.py:848
msgid "raw data query string, please append with data from geo-IP endpoint"
msgstr ""
"Cadena de consulta de datos sin procesar, adjunte los datos del punto final "
"geo-IP"
-#: engine/core/docs/drf/viewsets.py:800
+#: engine/core/docs/drf/viewsets.py:855
msgid "limit the results amount, 1 < limit < 10, default: 5"
msgstr "limita la cantidad de resultados, 1 < límite < 10, por defecto: 5"
-#: engine/core/docs/drf/viewsets.py:816
+#: engine/core/docs/drf/viewsets.py:871
msgid "list all feedbacks (simple view)"
msgstr "lista de todas las reacciones (vista simple)"
-#: engine/core/docs/drf/viewsets.py:823
+#: engine/core/docs/drf/viewsets.py:881
msgid "retrieve a single feedback (detailed view)"
msgstr "recuperar una sola respuesta (vista detallada)"
-#: engine/core/docs/drf/viewsets.py:830
+#: engine/core/docs/drf/viewsets.py:888
msgid "create a feedback"
msgstr "crear una retroalimentación"
-#: engine/core/docs/drf/viewsets.py:837
+#: engine/core/docs/drf/viewsets.py:895
msgid "delete a feedback"
msgstr "eliminar un comentario"
-#: engine/core/docs/drf/viewsets.py:844
+#: engine/core/docs/drf/viewsets.py:902
msgid "rewrite an existing feedback saving non-editables"
msgstr "reescribir una respuesta existente guardando los no editables"
-#: engine/core/docs/drf/viewsets.py:851
+#: engine/core/docs/drf/viewsets.py:909
msgid "rewrite some fields of an existing feedback saving non-editables"
msgstr ""
"Reescribir algunos campos de una categoría existente guardando los no "
"editables"
-#: engine/core/docs/drf/viewsets.py:861
+#: engine/core/docs/drf/viewsets.py:919
msgid "list all order–product relations (simple view)"
msgstr "listar todas las relaciones pedido-producto (vista simple)"
-#: engine/core/docs/drf/viewsets.py:871
+#: engine/core/docs/drf/viewsets.py:929
msgid "retrieve a single order–product relation (detailed view)"
msgstr "recuperar una única relación pedido-producto (vista detallada)"
-#: engine/core/docs/drf/viewsets.py:881
+#: engine/core/docs/drf/viewsets.py:939
msgid "create a new order–product relation"
msgstr "crear una nueva relación pedido-producto"
-#: engine/core/docs/drf/viewsets.py:891
+#: engine/core/docs/drf/viewsets.py:949
msgid "replace an existing order–product relation"
msgstr "sustituir una relación pedido-producto existente"
-#: engine/core/docs/drf/viewsets.py:901
+#: engine/core/docs/drf/viewsets.py:959
msgid "partially update an existing order–product relation"
msgstr "actualizar parcialmente una relación pedido-producto existente"
-#: engine/core/docs/drf/viewsets.py:911
+#: engine/core/docs/drf/viewsets.py:969
msgid "delete an order–product relation"
msgstr "suprimir una relación pedido-producto"
-#: engine/core/docs/drf/viewsets.py:921
+#: engine/core/docs/drf/viewsets.py:979
msgid "add or remove feedback on an order–product relation"
msgstr "añadir o eliminar comentarios en una relación pedido-producto"
-#: engine/core/docs/drf/viewsets.py:938
+#: engine/core/docs/drf/viewsets.py:996
msgid "list all brands (simple view)"
msgstr "Lista de todas las marcas (vista simple)"
-#: engine/core/docs/drf/viewsets.py:945
+#: engine/core/docs/drf/viewsets.py:1003
msgid "retrieve a single brand (detailed view)"
msgstr "Recuperar una sola marca (vista detallada)"
-#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993
+#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051
msgid "Brand UUID or slug"
msgstr "UUID o slug de la marca"
-#: engine/core/docs/drf/viewsets.py:960
+#: engine/core/docs/drf/viewsets.py:1018
msgid "create a brand"
msgstr "Crear una marca"
-#: engine/core/docs/drf/viewsets.py:967
+#: engine/core/docs/drf/viewsets.py:1025
msgid "delete a brand"
msgstr "Borrar una marca"
-#: engine/core/docs/drf/viewsets.py:974
+#: engine/core/docs/drf/viewsets.py:1032
msgid "rewrite an existing brand saving non-editables"
msgstr "Reescribir una marca existente ahorrando no editables"
-#: engine/core/docs/drf/viewsets.py:981
+#: engine/core/docs/drf/viewsets.py:1039
msgid "rewrite some fields of an existing brand saving non-editables"
msgstr ""
"Reescribir algunos campos de una categoría existente guardando los no "
"editables"
-#: engine/core/docs/drf/viewsets.py:1006
+#: engine/core/docs/drf/viewsets.py:1064
msgid "list all vendors (simple view)"
msgstr "Listar todos los vendedores (vista simple)"
-#: engine/core/docs/drf/viewsets.py:1013
+#: engine/core/docs/drf/viewsets.py:1074
msgid "retrieve a single vendor (detailed view)"
msgstr "Recuperar un único proveedor (vista detallada)"
-#: engine/core/docs/drf/viewsets.py:1020
+#: engine/core/docs/drf/viewsets.py:1081
msgid "create a vendor"
msgstr "Crear un proveedor"
-#: engine/core/docs/drf/viewsets.py:1027
+#: engine/core/docs/drf/viewsets.py:1088
msgid "delete a vendor"
msgstr "Eliminar un proveedor"
-#: engine/core/docs/drf/viewsets.py:1034
+#: engine/core/docs/drf/viewsets.py:1095
msgid "rewrite an existing vendor saving non-editables"
msgstr "Reescribir un proveedor existente guardando los no editables"
-#: engine/core/docs/drf/viewsets.py:1041
+#: engine/core/docs/drf/viewsets.py:1102
msgid "rewrite some fields of an existing vendor saving non-editables"
msgstr ""
"Reescribir algunos campos de una categoría existente guardando los no "
"editables"
-#: engine/core/docs/drf/viewsets.py:1051
+#: engine/core/docs/drf/viewsets.py:1112
msgid "list all product images (simple view)"
msgstr "Listar todas las imágenes de los productos (vista simple)"
-#: engine/core/docs/drf/viewsets.py:1058
+#: engine/core/docs/drf/viewsets.py:1122
msgid "retrieve a single product image (detailed view)"
msgstr "Recuperar una sola imagen del producto (vista detallada)"
-#: engine/core/docs/drf/viewsets.py:1065
+#: engine/core/docs/drf/viewsets.py:1129
msgid "create a product image"
msgstr "Crear una imagen del producto"
-#: engine/core/docs/drf/viewsets.py:1072
+#: engine/core/docs/drf/viewsets.py:1139
msgid "delete a product image"
msgstr "Eliminar la imagen de un producto"
-#: engine/core/docs/drf/viewsets.py:1079
+#: engine/core/docs/drf/viewsets.py:1146
msgid "rewrite an existing product image saving non-editables"
-msgstr ""
-"Reescribir una imagen de producto existente guardando los no editables"
+msgstr "Reescribir una imagen de producto existente guardando los no editables"
-#: engine/core/docs/drf/viewsets.py:1086
+#: engine/core/docs/drf/viewsets.py:1154
msgid "rewrite some fields of an existing product image saving non-editables"
msgstr ""
"Reescribir algunos campos de una categoría existente guardando los no "
"editables"
-#: engine/core/docs/drf/viewsets.py:1096
+#: engine/core/docs/drf/viewsets.py:1165
msgid "list all promo codes (simple view)"
msgstr "Listar todos los códigos promocionales (vista simple)"
-#: engine/core/docs/drf/viewsets.py:1103
+#: engine/core/docs/drf/viewsets.py:1175
msgid "retrieve a single promo code (detailed view)"
msgstr "Recuperar un único código promocional (vista detallada)"
-#: engine/core/docs/drf/viewsets.py:1110
+#: engine/core/docs/drf/viewsets.py:1182
msgid "create a promo code"
msgstr "Crear un código promocional"
-#: engine/core/docs/drf/viewsets.py:1117
+#: engine/core/docs/drf/viewsets.py:1189
msgid "delete a promo code"
msgstr "Eliminar un código promocional"
-#: engine/core/docs/drf/viewsets.py:1124
+#: engine/core/docs/drf/viewsets.py:1196
msgid "rewrite an existing promo code saving non-editables"
msgstr "Reescribir un código promocional existente guardando los no editables"
-#: engine/core/docs/drf/viewsets.py:1131
+#: engine/core/docs/drf/viewsets.py:1203
msgid "rewrite some fields of an existing promo code saving non-editables"
msgstr ""
"Reescribir algunos campos de una categoría existente guardando los no "
"editables"
-#: engine/core/docs/drf/viewsets.py:1141
+#: engine/core/docs/drf/viewsets.py:1213
msgid "list all promotions (simple view)"
msgstr "Lista de todas las promociones (vista simple)"
-#: engine/core/docs/drf/viewsets.py:1148
+#: engine/core/docs/drf/viewsets.py:1223
msgid "retrieve a single promotion (detailed view)"
msgstr "Recuperar una sola promoción (vista detallada)"
-#: engine/core/docs/drf/viewsets.py:1155
+#: engine/core/docs/drf/viewsets.py:1230
msgid "create a promotion"
msgstr "Crear una promoción"
-#: engine/core/docs/drf/viewsets.py:1162
+#: engine/core/docs/drf/viewsets.py:1237
msgid "delete a promotion"
msgstr "Eliminar una promoción"
-#: engine/core/docs/drf/viewsets.py:1169
+#: engine/core/docs/drf/viewsets.py:1244
msgid "rewrite an existing promotion saving non-editables"
msgstr "Reescribir una promoción existente guardando los no editables"
-#: engine/core/docs/drf/viewsets.py:1176
+#: engine/core/docs/drf/viewsets.py:1251
msgid "rewrite some fields of an existing promotion saving non-editables"
msgstr ""
"Reescribir algunos campos de una categoría existente guardando los no "
"editables"
-#: engine/core/docs/drf/viewsets.py:1186
+#: engine/core/docs/drf/viewsets.py:1261
msgid "list all stocks (simple view)"
msgstr "Listar todas las acciones (vista simple)"
-#: engine/core/docs/drf/viewsets.py:1193
+#: engine/core/docs/drf/viewsets.py:1268
msgid "retrieve a single stock (detailed view)"
msgstr "Recuperar una sola acción (vista detallada)"
-#: engine/core/docs/drf/viewsets.py:1200
+#: engine/core/docs/drf/viewsets.py:1275
msgid "create a stock record"
msgstr "Crear una ficha de existencias"
-#: engine/core/docs/drf/viewsets.py:1207
+#: engine/core/docs/drf/viewsets.py:1282
msgid "delete a stock record"
msgstr "Borrar una ficha de existencias"
-#: engine/core/docs/drf/viewsets.py:1214
+#: engine/core/docs/drf/viewsets.py:1289
msgid "rewrite an existing stock record saving non-editables"
msgstr ""
"Reescribir un registro de existencias existente guardando los no editables"
-#: engine/core/docs/drf/viewsets.py:1221
+#: engine/core/docs/drf/viewsets.py:1297
msgid "rewrite some fields of an existing stock record saving non-editables"
msgstr ""
"Reescribir algunos campos de una categoría existente guardando los no "
"editables"
-#: engine/core/docs/drf/viewsets.py:1231
+#: engine/core/docs/drf/viewsets.py:1308
msgid "list all product tags (simple view)"
msgstr "Listar todas las etiquetas de productos (vista simple)"
-#: engine/core/docs/drf/viewsets.py:1238
+#: engine/core/docs/drf/viewsets.py:1318
msgid "retrieve a single product tag (detailed view)"
msgstr "Recuperar una sola etiqueta de producto (vista detallada)"
-#: engine/core/docs/drf/viewsets.py:1245
+#: engine/core/docs/drf/viewsets.py:1325
msgid "create a product tag"
msgstr "Crear una etiqueta de producto"
-#: engine/core/docs/drf/viewsets.py:1252
+#: engine/core/docs/drf/viewsets.py:1335
msgid "delete a product tag"
msgstr "Eliminar una etiqueta de producto"
-#: engine/core/docs/drf/viewsets.py:1259
+#: engine/core/docs/drf/viewsets.py:1342
msgid "rewrite an existing product tag saving non-editables"
msgstr ""
"Reescribir una etiqueta de producto existente guardando los no editables"
-#: engine/core/docs/drf/viewsets.py:1266
+#: engine/core/docs/drf/viewsets.py:1350
msgid "rewrite some fields of an existing product tag saving non-editables"
msgstr ""
"Reescribir algunos campos de una categoría existente guardando los no "
"editables"
-#: engine/core/elasticsearch/__init__.py:122
-#: engine/core/elasticsearch/__init__.py:570
+#: engine/core/elasticsearch/__init__.py:127
+#: engine/core/elasticsearch/__init__.py:627
msgid "no search term provided."
msgstr "No se proporciona ningún término de búsqueda."
-#: engine/core/filters.py:69 engine/core/filters.py:426
-#: engine/core/filters.py:553
+#: engine/core/filters.py:78 engine/core/filters.py:484
+#: engine/core/filters.py:625
msgid "Search"
msgstr "Buscar en"
-#: engine/core/filters.py:70 engine/core/filters.py:583
-#: engine/core/filters.py:612
+#: engine/core/filters.py:79 engine/core/filters.py:662
+#: engine/core/filters.py:691
msgid "UUID"
msgstr "UUID"
-#: engine/core/filters.py:71 engine/core/filters.py:428
-#: engine/core/filters.py:555
+#: engine/core/filters.py:80 engine/core/filters.py:487
+#: engine/core/filters.py:627
msgid "Name"
msgstr "Nombre"
-#: engine/core/filters.py:72 engine/core/filters.py:557
+#: engine/core/filters.py:82 engine/core/filters.py:630
msgid "Categories"
msgstr "Categorías"
-#: engine/core/filters.py:74
+#: engine/core/filters.py:86
msgid "Categories Slugs"
msgstr "Categorías Babosas"
-#: engine/core/filters.py:75 engine/core/filters.py:436
+#: engine/core/filters.py:88 engine/core/filters.py:495
msgid "Tags"
msgstr "Etiquetas"
-#: engine/core/filters.py:76
+#: engine/core/filters.py:90
msgid "Min Price"
msgstr "Precio mínimo"
-#: engine/core/filters.py:77
+#: engine/core/filters.py:93
msgid "Max Price"
msgstr "Precio máximo"
-#: engine/core/filters.py:78
+#: engine/core/filters.py:95
msgid "Is Active"
msgstr "Está activo"
-#: engine/core/filters.py:79
+#: engine/core/filters.py:96
msgid "Brand"
msgstr "Marca"
-#: engine/core/filters.py:80
+#: engine/core/filters.py:97
msgid "Attributes"
msgstr "Atributos"
-#: engine/core/filters.py:81
+#: engine/core/filters.py:99
msgid "Quantity"
msgstr "Cantidad"
-#: engine/core/filters.py:82 engine/core/filters.py:430
-#: engine/core/filters.py:556 engine/core/models.py:321
-#: engine/core/models.py:489 engine/core/models.py:644
+#: engine/core/filters.py:101 engine/core/filters.py:489
+#: engine/core/filters.py:628 engine/core/models.py:327
+#: engine/core/models.py:508 engine/core/models.py:665
msgid "Slug"
msgstr "Babosa"
-#: engine/core/filters.py:83
+#: engine/core/filters.py:102
msgid "Is Digital"
msgstr "Es Digital"
-#: engine/core/filters.py:84
+#: engine/core/filters.py:104
msgid "Include sub-categories"
msgstr "Incluir subcategorías"
-#: engine/core/filters.py:87
+#: engine/core/filters.py:108
msgid "Include personal ordered"
msgstr "Incluir productos personales solicitados"
-#: engine/core/filters.py:89 engine/core/models.py:648
+#: engine/core/filters.py:110 engine/core/models.py:669
msgid "SKU"
msgstr "SKU"
-#: engine/core/filters.py:184
+#: engine/core/filters.py:212
msgid "there must be a category_uuid to use include_subcategories flag"
-msgstr ""
-"Debe haber un category_uuid para usar la bandera include_subcategories"
+msgstr "Debe haber un category_uuid para usar la bandera include_subcategories"
-#: engine/core/filters.py:353
+#: engine/core/filters.py:398
msgid "Search (ID, product name or part number)"
msgstr "Búsqueda (ID, nombre del producto o número de pieza)"
-#: engine/core/filters.py:356
+#: engine/core/filters.py:402
msgid "Bought after (inclusive)"
msgstr "Comprado después (inclusive)"
-#: engine/core/filters.py:357
+#: engine/core/filters.py:405
msgid "Bought before (inclusive)"
msgstr "Comprado antes (inclusive)"
-#: engine/core/filters.py:360 engine/core/filters.py:407
-#: engine/core/filters.py:614
+#: engine/core/filters.py:410 engine/core/filters.py:461
+#: engine/core/filters.py:696
msgid "User email"
msgstr "Correo electrónico del usuario"
-#: engine/core/filters.py:361 engine/core/filters.py:408
-#: engine/core/filters.py:592 engine/core/filters.py:613
+#: engine/core/filters.py:413 engine/core/filters.py:464
+#: engine/core/filters.py:671 engine/core/filters.py:693
msgid "User UUID"
msgstr "UUID de usuario"
-#: engine/core/filters.py:362
+#: engine/core/filters.py:415
msgid "Status"
msgstr "Estado"
-#: engine/core/filters.py:366
+#: engine/core/filters.py:419
msgid "Human Readable ID"
msgstr "Identificación legible"
-#: engine/core/filters.py:429
+#: engine/core/filters.py:488
msgid "Parent"
msgstr "Padres"
-#: engine/core/filters.py:433
+#: engine/core/filters.py:492
msgid "Whole category(has at least 1 product or not)"
msgstr "Toda la categoría (tenga o no al menos 1 producto)"
-#: engine/core/filters.py:437
+#: engine/core/filters.py:496
msgid "Level"
msgstr "Nivel"
-#: engine/core/filters.py:587
+#: engine/core/filters.py:666
msgid "Product UUID"
msgstr "UUID del producto"
-#: engine/core/graphene/mutations.py:40
+#: engine/core/graphene/mutations.py:41
msgid "key to look for in or set into the cache"
msgstr "Clave que hay que buscar o introducir en la caché"
-#: engine/core/graphene/mutations.py:41
+#: engine/core/graphene/mutations.py:43
msgid "data to store in cache"
msgstr "Datos a almacenar en caché"
-#: engine/core/graphene/mutations.py:44
+#: engine/core/graphene/mutations.py:46
msgid "timeout in seconds to set the data for into the cache"
msgstr "Tiempo de espera en segundos para poner los datos en la caché"
-#: engine/core/graphene/mutations.py:47
+#: engine/core/graphene/mutations.py:49
msgid "cached data"
msgstr "Datos en caché"
-#: engine/core/graphene/mutations.py:62
+#: engine/core/graphene/mutations.py:64
msgid "camelized JSON data from the requested URL"
msgstr "Datos JSON camelizados de la URL solicitada"
-#: engine/core/graphene/mutations.py:67 engine/core/views.py:257
+#: engine/core/graphene/mutations.py:69 engine/core/views.py:249
msgid "only URLs starting with http(s):// are allowed"
msgstr "Sólo se permiten URL que empiecen por http(s)://."
-#: engine/core/graphene/mutations.py:83
+#: engine/core/graphene/mutations.py:87
msgid "add a product to the order"
msgstr "Añadir un producto al pedido"
-#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131
-#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287
+#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139
+#: engine/core/graphene/mutations.py:255 engine/core/graphene/mutations.py:307
#, python-brace-format
msgid "order {order_uuid} not found"
msgstr "Pedido {order_uuid} ¡no encontrado!"
-#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159
+#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167
msgid "remove a product from the order"
msgstr "Eliminar un producto del pedido"
-#: engine/core/graphene/mutations.py:137
+#: engine/core/graphene/mutations.py:145
msgid "remove all products from the order"
msgstr "Eliminar todos los productos del pedido"
-#: engine/core/graphene/mutations.py:182
+#: engine/core/graphene/mutations.py:190
msgid "buy an order"
msgstr "Comprar un pedido"
-#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265
+#: engine/core/graphene/mutations.py:221 engine/core/graphene/mutations.py:283
msgid "please provide either order_uuid or order_hr_id - mutually exclusive"
msgstr "Indique order_uuid o order_hr_id, ¡se excluyen mutuamente!"
-#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501
-#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712
+#: engine/core/graphene/mutations.py:250 engine/core/graphene/mutations.py:525
+#: engine/core/graphene/mutations.py:574 engine/core/viewsets.py:753
msgid "wrong type came from order.buy() method: {type(instance)!s}"
-msgstr ""
-"Tipo incorrecto proveniente del método order.buy(): {type(instance)!s}"
+msgstr "Tipo incorrecto proveniente del método order.buy(): {type(instance)!s}"
-#: engine/core/graphene/mutations.py:245
+#: engine/core/graphene/mutations.py:261
msgid "perform an action on a list of products in the order"
msgstr "Realizar una acción en una lista de productos del pedido"
-#: engine/core/graphene/mutations.py:250
+#: engine/core/graphene/mutations.py:266
msgid "remove/add"
msgstr "Quitar/Agregar"
-#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323
+#: engine/core/graphene/mutations.py:302 engine/core/graphene/mutations.py:343
msgid "action must be either add or remove"
msgstr "La acción debe ser \"añadir\" o \"eliminar\"."
-#: engine/core/graphene/mutations.py:293
+#: engine/core/graphene/mutations.py:313
msgid "perform an action on a list of products in the wishlist"
msgstr "Realizar una acción en una lista de productos de la lista de deseos"
-#: engine/core/graphene/mutations.py:311
+#: engine/core/graphene/mutations.py:331
msgid "please provide wishlist_uuid value"
msgstr "Por favor, proporcione el valor `wishlist_uuid`."
-#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404
-#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460
-#: engine/core/graphene/mutations.py:504
+#: engine/core/graphene/mutations.py:348 engine/core/graphene/mutations.py:424
+#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480
+#: engine/core/graphene/mutations.py:530
#, python-brace-format
msgid "wishlist {wishlist_uuid} not found"
msgstr "Lista de deseos {wishlist_uuid} ¡no encontrada!"
-#: engine/core/graphene/mutations.py:382
+#: engine/core/graphene/mutations.py:402
msgid "add a product to the wishlist"
msgstr "Añadir un producto al pedido"
-#: engine/core/graphene/mutations.py:410
+#: engine/core/graphene/mutations.py:430
msgid "remove a product from the wishlist"
msgstr "Eliminar un producto del pedido"
-#: engine/core/graphene/mutations.py:438
+#: engine/core/graphene/mutations.py:458
msgid "remove all products from the wishlist"
msgstr "Eliminar un producto del pedido"
-#: engine/core/graphene/mutations.py:466
+#: engine/core/graphene/mutations.py:486
msgid "buy all products from the wishlist"
msgstr "Eliminar un producto del pedido"
-#: engine/core/graphene/mutations.py:510
+#: engine/core/graphene/mutations.py:536
msgid "buy a product"
msgstr "Comprar un pedido"
-#: engine/core/graphene/mutations.py:516
+#: engine/core/graphene/mutations.py:543
msgid ""
-"please send the attributes as the string formatted like "
-"attr1=value1,attr2=value2"
+"please send the attributes as the string formatted like attr1=value1,"
+"attr2=value2"
msgstr ""
-"Por favor, envíe los atributos como una cadena formateada como "
-"attr1=valor1,attr2=valor2"
+"Por favor, envíe los atributos como una cadena formateada como attr1=valor1,"
+"attr2=valor2"
-#: engine/core/graphene/mutations.py:549
+#: engine/core/graphene/mutations.py:581
msgid "add or delete a feedback for orderproduct"
msgstr "Añadir o eliminar un comentario para el pedido-producto"
-#: engine/core/graphene/mutations.py:573
+#: engine/core/graphene/mutations.py:607
msgid "action must be either `add` or `remove`"
msgstr "La acción debe ser \"añadir\" o \"eliminar\"."
-#: engine/core/graphene/mutations.py:576
+#: engine/core/graphene/mutations.py:610
#, python-brace-format
msgid "order product {order_product_uuid} not found"
msgstr "No se ha encontrado el producto {order_product_uuid}."
-#: engine/core/graphene/mutations.py:582
+#: engine/core/graphene/mutations.py:617
msgid "original address string provided by the user"
msgstr "Cadena de dirección original proporcionada por el usuario"
-#: engine/core/graphene/mutations.py:618 engine/core/models.py:955
-#: engine/core/models.py:968 engine/core/models.py:1383
-#: engine/core/models.py:1412 engine/core/models.py:1437
-#: engine/core/viewsets.py:715
+#: engine/core/graphene/mutations.py:654 engine/core/models.py:978
+#: engine/core/models.py:991 engine/core/models.py:1435
+#: engine/core/models.py:1466 engine/core/models.py:1497
+#: engine/core/viewsets.py:760
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr "{name} no existe: ¡{uuid}!"
-#: engine/core/graphene/mutations.py:632
+#: engine/core/graphene/mutations.py:668
msgid "limit must be between 1 and 10"
msgstr "El límite debe estar entre 1 y 10"
-#: engine/core/graphene/mutations.py:681
+#: engine/core/graphene/mutations.py:717
msgid "elasticsearch - works like a charm"
msgstr "ElasticSearch - funciona a las mil maravillas"
#: engine/core/graphene/object_types.py:82
-#: engine/core/graphene/object_types.py:370
-#: engine/core/graphene/object_types.py:417 engine/core/models.py:772
-#: engine/core/models.py:1250 engine/core/models.py:1897
+#: engine/core/graphene/object_types.py:417
+#: engine/core/graphene/object_types.py:468 engine/core/models.py:795
+#: engine/core/models.py:1289 engine/core/models.py:2021
msgid "attributes"
msgstr "Atributos"
@@ -1275,93 +1280,91 @@ msgid "groups of attributes"
msgstr "Grupos de atributos"
#: engine/core/graphene/object_types.py:116
-#: engine/core/graphene/object_types.py:193
-#: engine/core/graphene/object_types.py:223 engine/core/models.py:432
+#: engine/core/graphene/object_types.py:214
+#: engine/core/graphene/object_types.py:252 engine/core/models.py:451
msgid "categories"
msgstr "Categorías"
-#: engine/core/graphene/object_types.py:124 engine/core/models.py:503
+#: engine/core/graphene/object_types.py:132 engine/core/models.py:522
msgid "brands"
msgstr "Marcas"
-#: engine/core/graphene/object_types.py:195
+#: engine/core/graphene/object_types.py:216
msgid "category image url"
msgstr "Categorías"
-#: engine/core/graphene/object_types.py:196
-#: engine/core/graphene/object_types.py:317 engine/core/models.py:283
+#: engine/core/graphene/object_types.py:217
+#: engine/core/graphene/object_types.py:362 engine/core/models.py:289
msgid "markup percentage"
msgstr "Porcentaje de recargo"
-#: engine/core/graphene/object_types.py:199
+#: engine/core/graphene/object_types.py:221
msgid "which attributes and values can be used for filtering this category."
msgstr ""
"Qué atributos y valores se pueden utilizar para filtrar esta categoría."
-#: engine/core/graphene/object_types.py:203
-msgid ""
-"minimum and maximum prices for products in this category, if available."
+#: engine/core/graphene/object_types.py:227
+msgid "minimum and maximum prices for products in this category, if available."
msgstr ""
"Precios mínimo y máximo de los productos de esta categoría, si están "
"disponibles."
-#: engine/core/graphene/object_types.py:205
+#: engine/core/graphene/object_types.py:231
msgid "tags for this category"
msgstr "Etiquetas para esta categoría"
-#: engine/core/graphene/object_types.py:206
+#: engine/core/graphene/object_types.py:234
msgid "products in this category"
msgstr "Productos de esta categoría"
-#: engine/core/graphene/object_types.py:324 engine/core/models.py:188
+#: engine/core/graphene/object_types.py:369 engine/core/models.py:194
msgid "vendors"
msgstr "Vendedores"
-#: engine/core/graphene/object_types.py:328
+#: engine/core/graphene/object_types.py:373
msgid "Latitude (Y coordinate)"
msgstr "Latitud (coordenada Y)"
-#: engine/core/graphene/object_types.py:329
+#: engine/core/graphene/object_types.py:374
msgid "Longitude (X coordinate)"
msgstr "Longitud (coordenada X)"
-#: engine/core/graphene/object_types.py:358
+#: engine/core/graphene/object_types.py:403
msgid "comment"
msgstr "Cómo"
-#: engine/core/graphene/object_types.py:359
-#: engine/core/graphene/object_types.py:483
+#: engine/core/graphene/object_types.py:405
+#: engine/core/graphene/object_types.py:539
msgid "rating value from 1 to 10, inclusive, or 0 if not set."
msgstr ""
-"Valor de calificación de 1 a 10, ambos inclusive, o 0 si no está "
-"configurado."
+"Valor de calificación de 1 a 10, ambos inclusive, o 0 si no está configurado."
-#: engine/core/graphene/object_types.py:366
+#: engine/core/graphene/object_types.py:413
msgid "represents feedback from a user."
msgstr "Representa la opinión de un usuario."
-#: engine/core/graphene/object_types.py:371
-#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244
+#: engine/core/graphene/object_types.py:418
+#: engine/core/graphene/object_types.py:469 engine/core/models.py:1283
msgid "notifications"
msgstr "Notificaciones"
-#: engine/core/graphene/object_types.py:372
+#: engine/core/graphene/object_types.py:420
msgid "download url for this order product if applicable"
msgstr "Descargar url para este producto de pedido si procede"
-#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736
+#: engine/core/graphene/object_types.py:422 engine/core/models.py:1848
msgid "feedback"
msgstr "Comentarios"
-#: engine/core/graphene/object_types.py:407
+#: engine/core/graphene/object_types.py:456
msgid "a list of order products in this order"
msgstr "Una lista de los productos del pedido"
-#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214
+#: engine/core/graphene/object_types.py:458 engine/core/models.py:1253
msgid "billing address"
msgstr "Dirección de facturación"
-#: engine/core/graphene/object_types.py:412
+#: engine/core/graphene/object_types.py:462
msgid ""
"shipping address for this order, leave blank if same as billing address or "
"if not applicable"
@@ -1369,53 +1372,53 @@ msgstr ""
"Dirección de envío para este pedido, dejar en blanco si es la misma que la "
"de facturación o si no procede"
-#: engine/core/graphene/object_types.py:414
+#: engine/core/graphene/object_types.py:465
msgid "total price of this order"
msgstr "Precio total de este pedido"
-#: engine/core/graphene/object_types.py:415
+#: engine/core/graphene/object_types.py:466
msgid "total quantity of products in order"
msgstr "Cantidad total de productos del pedido"
-#: engine/core/graphene/object_types.py:416
+#: engine/core/graphene/object_types.py:467
msgid "are all products in the order digital"
msgstr "¿Están todos los productos en el pedido digital"
-#: engine/core/graphene/object_types.py:419
+#: engine/core/graphene/object_types.py:471
msgid "transactions for this order"
msgstr "Transacciones para este pedido"
-#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278
+#: engine/core/graphene/object_types.py:491 engine/core/models.py:1317
msgid "orders"
msgstr "Pedidos"
-#: engine/core/graphene/object_types.py:459
+#: engine/core/graphene/object_types.py:512
msgid "image url"
msgstr "URL de la imagen"
-#: engine/core/graphene/object_types.py:466
+#: engine/core/graphene/object_types.py:519
msgid "product's images"
msgstr "Imágenes del producto"
-#: engine/core/graphene/object_types.py:473 engine/core/models.py:431
-#: engine/core/models.py:586
+#: engine/core/graphene/object_types.py:526 engine/core/models.py:450
+#: engine/core/models.py:607
msgid "category"
msgstr "Categoría"
-#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737
+#: engine/core/graphene/object_types.py:528 engine/core/models.py:1849
msgid "feedbacks"
msgstr "Comentarios"
-#: engine/core/graphene/object_types.py:476 engine/core/models.py:502
-#: engine/core/models.py:595
+#: engine/core/graphene/object_types.py:529 engine/core/models.py:521
+#: engine/core/models.py:616
msgid "brand"
msgstr "Marca"
-#: engine/core/graphene/object_types.py:477 engine/core/models.py:106
+#: engine/core/graphene/object_types.py:531 engine/core/models.py:106
msgid "attribute groups"
msgstr "Grupos de atributos"
-#: engine/core/graphene/object_types.py:478
+#: engine/core/graphene/object_types.py:533
#: engine/core/templates/digital_order_created_email.html:111
#: engine/core/templates/digital_order_delivered_email.html:109
#: engine/core/templates/shipped_order_created_email.html:109
@@ -1423,7 +1426,7 @@ msgstr "Grupos de atributos"
msgid "price"
msgstr "Precio"
-#: engine/core/graphene/object_types.py:479
+#: engine/core/graphene/object_types.py:534
#: engine/core/templates/digital_order_created_email.html:110
#: engine/core/templates/digital_order_delivered_email.html:108
#: engine/core/templates/shipped_order_created_email.html:108
@@ -1431,39 +1434,39 @@ msgstr "Precio"
msgid "quantity"
msgstr "Cantidad"
-#: engine/core/graphene/object_types.py:480
+#: engine/core/graphene/object_types.py:535
msgid "number of feedbacks"
msgstr "Número de reacciones"
-#: engine/core/graphene/object_types.py:481
+#: engine/core/graphene/object_types.py:536
msgid "only available for personal orders"
msgstr "Productos sólo disponibles para pedidos personales"
-#: engine/core/graphene/object_types.py:484
+#: engine/core/graphene/object_types.py:541
msgid "discount price"
msgstr "Precio reducido"
-#: engine/core/graphene/object_types.py:508 engine/core/models.py:658
+#: engine/core/graphene/object_types.py:565 engine/core/models.py:679
msgid "products"
msgstr "Productos"
-#: engine/core/graphene/object_types.py:611
+#: engine/core/graphene/object_types.py:675
msgid "promocodes"
msgstr "Códigos promocionales"
-#: engine/core/graphene/object_types.py:621
+#: engine/core/graphene/object_types.py:690
msgid "products on sale"
msgstr "Productos a la venta"
-#: engine/core/graphene/object_types.py:628 engine/core/models.py:904
+#: engine/core/graphene/object_types.py:698 engine/core/models.py:927
msgid "promotions"
msgstr "Promociones"
-#: engine/core/graphene/object_types.py:632 engine/core/models.py:187
+#: engine/core/graphene/object_types.py:702 engine/core/models.py:193
msgid "vendor"
msgstr "Vendedor"
-#: engine/core/graphene/object_types.py:633 engine/core/models.py:657
+#: engine/core/graphene/object_types.py:703 engine/core/models.py:678
#: engine/core/templates/digital_order_created_email.html:109
#: engine/core/templates/digital_order_delivered_email.html:107
#: engine/core/templates/shipped_order_created_email.html:107
@@ -1471,99 +1474,99 @@ msgstr "Vendedor"
msgid "product"
msgstr "Producto"
-#: engine/core/graphene/object_types.py:644 engine/core/models.py:927
+#: engine/core/graphene/object_types.py:715 engine/core/models.py:950
msgid "wishlisted products"
msgstr "Productos deseados"
-#: engine/core/graphene/object_types.py:650 engine/core/models.py:944
+#: engine/core/graphene/object_types.py:722 engine/core/models.py:967
msgid "wishlists"
msgstr "Listas de deseos"
-#: engine/core/graphene/object_types.py:654
+#: engine/core/graphene/object_types.py:727
msgid "tagged products"
msgstr "Productos con etiqueta"
-#: engine/core/graphene/object_types.py:661 engine/core/models.py:224
-#: engine/core/models.py:601
+#: engine/core/graphene/object_types.py:735 engine/core/models.py:230
+#: engine/core/models.py:622
msgid "product tags"
msgstr "Etiquetas del producto"
-#: engine/core/graphene/object_types.py:665
+#: engine/core/graphene/object_types.py:740
msgid "tagged categories"
msgstr "Categorías"
-#: engine/core/graphene/object_types.py:672
+#: engine/core/graphene/object_types.py:748
msgid "categories tags"
msgstr "Etiquetas de las categorías"
-#: engine/core/graphene/object_types.py:676
+#: engine/core/graphene/object_types.py:752
msgid "project name"
msgstr "Nombre del proyecto"
-#: engine/core/graphene/object_types.py:677
+#: engine/core/graphene/object_types.py:753
msgid "company name"
msgstr "Nombre de la empresa"
-#: engine/core/graphene/object_types.py:678
+#: engine/core/graphene/object_types.py:754
msgid "company address"
msgstr "Dirección de la empresa"
-#: engine/core/graphene/object_types.py:679
+#: engine/core/graphene/object_types.py:755
msgid "company phone number"
msgstr "Teléfono de la empresa"
-#: engine/core/graphene/object_types.py:680
+#: engine/core/graphene/object_types.py:758
msgid "email from, sometimes it must be used instead of host user value"
msgstr ""
"'email from', a veces debe utilizarse en lugar del valor del usuario host"
-#: engine/core/graphene/object_types.py:681
+#: engine/core/graphene/object_types.py:761
msgid "email host user"
msgstr "Correo electrónico del usuario anfitrión"
-#: engine/core/graphene/object_types.py:682
+#: engine/core/graphene/object_types.py:762
msgid "maximum amount for payment"
msgstr "Importe máximo de pago"
-#: engine/core/graphene/object_types.py:683
+#: engine/core/graphene/object_types.py:763
msgid "minimum amount for payment"
msgstr "Importe mínimo de pago"
-#: engine/core/graphene/object_types.py:684
+#: engine/core/graphene/object_types.py:764
msgid "analytics data"
msgstr "Datos analíticos"
-#: engine/core/graphene/object_types.py:685
+#: engine/core/graphene/object_types.py:765
msgid "advertisement data"
msgstr "Datos publicitarios"
-#: engine/core/graphene/object_types.py:688
+#: engine/core/graphene/object_types.py:768
msgid "company configuration"
msgstr "Configuración"
-#: engine/core/graphene/object_types.py:692
+#: engine/core/graphene/object_types.py:772
msgid "language code"
msgstr "Código de idioma"
-#: engine/core/graphene/object_types.py:693
+#: engine/core/graphene/object_types.py:773
msgid "language name"
msgstr "Nombre de la lengua"
-#: engine/core/graphene/object_types.py:694
+#: engine/core/graphene/object_types.py:774
msgid "language flag, if exists :)"
msgstr "Bandera de idioma, si existe :)"
-#: engine/core/graphene/object_types.py:697
+#: engine/core/graphene/object_types.py:777
msgid "supported languages"
msgstr "Obtener una lista de los idiomas admitidos"
-#: engine/core/graphene/object_types.py:728
-#: engine/core/graphene/object_types.py:729
-#: engine/core/graphene/object_types.py:730
+#: engine/core/graphene/object_types.py:809
+#: engine/core/graphene/object_types.py:812
+#: engine/core/graphene/object_types.py:815
msgid "products search results"
msgstr "Resultados de la búsqueda de productos"
-#: engine/core/graphene/object_types.py:731
+#: engine/core/graphene/object_types.py:817
msgid "posts search results"
msgstr "Resultados de la búsqueda de productos"
@@ -1577,8 +1580,8 @@ msgstr ""
"Representa un grupo de atributos, que puede ser jerárquico. Esta clase se "
"utiliza para gestionar y organizar grupos de atributos. Un grupo de "
"atributos puede tener un grupo padre, formando una estructura jerárquica. "
-"Esto puede ser útil para categorizar y gestionar los atributos de manera más"
-" eficaz en un sistema complejo."
+"Esto puede ser útil para categorizar y gestionar los atributos de manera más "
+"eficaz en un sistema complejo."
#: engine/core/models.py:91
msgid "parent of this group"
@@ -1592,7 +1595,7 @@ msgstr "Grupo de atributos padre"
msgid "attribute group's name"
msgstr "Nombre del grupo de atributos"
-#: engine/core/models.py:105 engine/core/models.py:734
+#: engine/core/models.py:105 engine/core/models.py:755
msgid "attribute group"
msgstr "Grupo de atributos"
@@ -1608,58 +1611,58 @@ msgid ""
msgstr ""
"Representa una entidad de proveedor capaz de almacenar información sobre "
"proveedores externos y sus requisitos de interacción. La clase Proveedor se "
-"utiliza para definir y gestionar la información relacionada con un proveedor"
-" externo. Almacena el nombre del vendedor, los detalles de autenticación "
+"utiliza para definir y gestionar la información relacionada con un proveedor "
+"externo. Almacena el nombre del vendedor, los detalles de autenticación "
"necesarios para la comunicación y el porcentaje de marcado aplicado a los "
-"productos recuperados del vendedor. Este modelo también mantiene metadatos y"
-" restricciones adicionales, lo que lo hace adecuado para su uso en sistemas "
+"productos recuperados del vendedor. Este modelo también mantiene metadatos y "
+"restricciones adicionales, lo que lo hace adecuado para su uso en sistemas "
"que interactúan con proveedores externos."
-#: engine/core/models.py:124
+#: engine/core/models.py:125
msgid "stores credentials and endpoints required for vendor communication"
msgstr ""
"Almacena las credenciales y los puntos finales necesarios para la "
"comunicación API del proveedor"
-#: engine/core/models.py:125
+#: engine/core/models.py:127
msgid "authentication info"
msgstr "Información de autenticación"
-#: engine/core/models.py:130
+#: engine/core/models.py:132
msgid "define the markup for products retrieved from this vendor"
msgstr ""
"Definir el margen de beneficio para los productos recuperados de este "
"proveedor"
-#: engine/core/models.py:131
+#: engine/core/models.py:133
msgid "vendor markup percentage"
msgstr "Porcentaje de margen del vendedor"
-#: engine/core/models.py:135
+#: engine/core/models.py:137
msgid "name of this vendor"
msgstr "Nombre de este vendedor"
-#: engine/core/models.py:136
+#: engine/core/models.py:138
msgid "vendor name"
msgstr "Nombre del vendedor"
-#: engine/core/models.py:147
+#: engine/core/models.py:153
msgid "response file"
msgstr "archivo de respuesta"
-#: engine/core/models.py:148
+#: engine/core/models.py:154
msgid "vendor's last processing response"
msgstr "última respuesta de procesamiento del proveedor"
-#: engine/core/models.py:154
+#: engine/core/models.py:160
msgid "vendor's integration file path"
msgstr "Ruta del archivo de integración del proveedor"
-#: engine/core/models.py:155
+#: engine/core/models.py:161
msgid "integration path"
msgstr "Vía de integración"
-#: engine/core/models.py:197
+#: engine/core/models.py:203
msgid ""
"Represents a product tag used for classifying or identifying products. The "
"ProductTag class is designed to uniquely identify and classify products "
@@ -1674,27 +1677,27 @@ msgstr ""
"operaciones exportadas a través de mixins y proporciona personalización de "
"metadatos con fines administrativos."
-#: engine/core/models.py:209 engine/core/models.py:240
+#: engine/core/models.py:215 engine/core/models.py:246
msgid "internal tag identifier for the product tag"
msgstr "Identificador interno de la etiqueta del producto"
-#: engine/core/models.py:210 engine/core/models.py:241
+#: engine/core/models.py:216 engine/core/models.py:247
msgid "tag name"
msgstr "Nombre de la etiqueta"
-#: engine/core/models.py:214 engine/core/models.py:245
+#: engine/core/models.py:220 engine/core/models.py:251
msgid "user-friendly name for the product tag"
msgstr "Nombre fácil de usar para la etiqueta del producto"
-#: engine/core/models.py:215 engine/core/models.py:246
+#: engine/core/models.py:221 engine/core/models.py:252
msgid "tag display name"
msgstr "Nombre de la etiqueta"
-#: engine/core/models.py:223
+#: engine/core/models.py:229
msgid "product tag"
msgstr "Etiqueta del producto"
-#: engine/core/models.py:229
+#: engine/core/models.py:235
msgid ""
"Represents a category tag used for products. This class models a category "
"tag that can be used to associate and classify products. It includes "
@@ -1705,15 +1708,15 @@ msgstr ""
"clasificar productos. Incluye atributos para un identificador de etiqueta "
"interno y un nombre de visualización fácil de usar."
-#: engine/core/models.py:254
+#: engine/core/models.py:260
msgid "category tag"
msgstr "etiqueta de categoría"
-#: engine/core/models.py:255 engine/core/models.py:327
+#: engine/core/models.py:261 engine/core/models.py:333
msgid "category tags"
msgstr "etiquetas de categoría"
-#: engine/core/models.py:260
+#: engine/core/models.py:266
msgid ""
"Represents a category entity to organize and group related items in a "
"hierarchical structure. Categories may have hierarchical relationships with "
@@ -1736,57 +1739,56 @@ msgstr ""
"descripción y la jerarquía de las categorías, así como asignar atributos "
"como imágenes, etiquetas o prioridad."
-#: engine/core/models.py:274
+#: engine/core/models.py:280
msgid "upload an image representing this category"
msgstr "Cargar una imagen que represente esta categoría"
-#: engine/core/models.py:277
+#: engine/core/models.py:283
msgid "category image"
msgstr "Categoría imagen"
-#: engine/core/models.py:282
+#: engine/core/models.py:288
msgid "define a markup percentage for products in this category"
msgstr "Definir un porcentaje de recargo para los productos de esta categoría"
-#: engine/core/models.py:291
+#: engine/core/models.py:297
msgid "parent of this category to form a hierarchical structure"
msgstr "Padre de esta categoría para formar una estructura jerárquica"
-#: engine/core/models.py:292
+#: engine/core/models.py:298
msgid "parent category"
msgstr "Categoría de padres"
-#: engine/core/models.py:297
+#: engine/core/models.py:303
msgid "category name"
msgstr "Nombre de la categoría"
-#: engine/core/models.py:298
+#: engine/core/models.py:304
msgid "provide a name for this category"
msgstr "Indique un nombre para esta categoría"
-#: engine/core/models.py:305
+#: engine/core/models.py:311
msgid "add a detailed description for this category"
msgstr "Añadir una descripción detallada para esta categoría"
-#: engine/core/models.py:306
+#: engine/core/models.py:312
msgid "category description"
msgstr "Descripción de la categoría"
-#: engine/core/models.py:326
+#: engine/core/models.py:332
msgid "tags that help describe or group this category"
msgstr "etiquetas que ayudan a describir o agrupar esta categoría"
-#: engine/core/models.py:333 engine/core/models.py:495
+#: engine/core/models.py:339 engine/core/models.py:514
msgid "priority"
msgstr "Prioridad"
-#: engine/core/models.py:438
+#: engine/core/models.py:457
msgid ""
"Represents a Brand object in the system. This class handles information and "
"attributes related to a brand, including its name, logos, description, "
"associated categories, a unique slug, and priority order. It allows for the "
-"organization and representation of brand-related data within the "
-"application."
+"organization and representation of brand-related data within the application."
msgstr ""
"Representa un objeto Marca en el sistema. Esta clase maneja información y "
"atributos relacionados con una marca, incluyendo su nombre, logotipos, "
@@ -1794,50 +1796,50 @@ msgstr ""
"Permite organizar y representar los datos relacionados con la marca dentro "
"de la aplicación."
-#: engine/core/models.py:448
+#: engine/core/models.py:467
msgid "name of this brand"
msgstr "Nombre de esta marca"
-#: engine/core/models.py:449
+#: engine/core/models.py:468
msgid "brand name"
msgstr "Marca"
-#: engine/core/models.py:456
+#: engine/core/models.py:475
msgid "upload a logo representing this brand"
msgstr "Cargar un logotipo que represente a esta marca"
-#: engine/core/models.py:458
+#: engine/core/models.py:477
msgid "brand small image"
msgstr "Marca pequeña imagen"
-#: engine/core/models.py:464
+#: engine/core/models.py:483
msgid "upload a big logo representing this brand"
msgstr "Sube un logotipo grande que represente a esta marca"
-#: engine/core/models.py:466
+#: engine/core/models.py:485
msgid "brand big image"
msgstr "Gran imagen de marca"
-#: engine/core/models.py:471
+#: engine/core/models.py:490
msgid "add a detailed description of the brand"
msgstr "Añadir una descripción detallada de la marca"
-#: engine/core/models.py:472
+#: engine/core/models.py:491
msgid "brand description"
msgstr "Descripción de la marca"
-#: engine/core/models.py:477
+#: engine/core/models.py:496
msgid "optional categories that this brand is associated with"
msgstr "Categorías opcionales a las que se asocia esta marca"
-#: engine/core/models.py:478
+#: engine/core/models.py:497
msgid "associated categories"
msgstr "Categorías"
-#: engine/core/models.py:508
+#: engine/core/models.py:527
msgid ""
-"Represents the stock of a product managed in the system. This class provides"
-" details about the relationship between vendors, products, and their stock "
+"Represents the stock of a product managed in the system. This class provides "
+"details about the relationship between vendors, products, and their stock "
"information, as well as inventory-related properties like price, purchase "
"price, quantity, SKU, and digital assets. It is part of the inventory "
"management system to allow tracking and evaluation of products available "
@@ -1846,77 +1848,77 @@ msgstr ""
"Representa el stock de un producto gestionado en el sistema. Esta clase "
"proporciona detalles sobre la relación entre vendedores, productos y su "
"información de existencias, así como propiedades relacionadas con el "
-"inventario como precio, precio de compra, cantidad, SKU y activos digitales."
-" Forma parte del sistema de gestión de inventario para permitir el "
+"inventario como precio, precio de compra, cantidad, SKU y activos digitales. "
+"Forma parte del sistema de gestión de inventario para permitir el "
"seguimiento y la evaluación de los productos disponibles de varios "
"vendedores."
-#: engine/core/models.py:520
+#: engine/core/models.py:539
msgid "the vendor supplying this product stock"
msgstr "El vendedor que suministra este producto dispone de"
-#: engine/core/models.py:521
+#: engine/core/models.py:540
msgid "associated vendor"
msgstr "Proveedor asociado"
-#: engine/core/models.py:525
+#: engine/core/models.py:544
msgid "final price to the customer after markups"
msgstr "Precio final al cliente después de márgenes"
-#: engine/core/models.py:526
+#: engine/core/models.py:545
msgid "selling price"
msgstr "Precio de venta"
-#: engine/core/models.py:531
+#: engine/core/models.py:550
msgid "the product associated with this stock entry"
msgstr "El producto asociado a esta entrada en stock"
-#: engine/core/models.py:532 engine/core/models.py:797
-#: engine/core/models.py:843 engine/core/models.py:1792
+#: engine/core/models.py:551 engine/core/models.py:820
+#: engine/core/models.py:866 engine/core/models.py:1904
msgid "associated product"
msgstr "Producto asociado"
-#: engine/core/models.py:539
+#: engine/core/models.py:558
msgid "the price paid to the vendor for this product"
msgstr "El precio pagado al vendedor por este producto"
-#: engine/core/models.py:540
+#: engine/core/models.py:559
msgid "vendor purchase price"
msgstr "Precio de compra al vendedor"
-#: engine/core/models.py:544
+#: engine/core/models.py:563
msgid "available quantity of the product in stock"
msgstr "Cantidad disponible del producto en stock"
-#: engine/core/models.py:545
+#: engine/core/models.py:564
msgid "quantity in stock"
msgstr "Cantidad en stock"
-#: engine/core/models.py:549
+#: engine/core/models.py:568
msgid "vendor-assigned SKU for identifying the product"
msgstr "SKU asignada por el proveedor para identificar el producto"
-#: engine/core/models.py:550
+#: engine/core/models.py:569
msgid "vendor sku"
msgstr "SKU del vendedor"
-#: engine/core/models.py:556
+#: engine/core/models.py:575
msgid "digital file associated with this stock if applicable"
msgstr "Archivo digital asociado a esta acción, si procede"
-#: engine/core/models.py:557
+#: engine/core/models.py:576
msgid "digital file"
msgstr "Archivo digital"
-#: engine/core/models.py:560
+#: engine/core/models.py:580
msgid "system attributes"
msgstr "Atributos del sistema"
-#: engine/core/models.py:567
+#: engine/core/models.py:588
msgid "stock entries"
msgstr "Entradas en existencias"
-#: engine/core/models.py:572
+#: engine/core/models.py:593
msgid ""
"Represents a product with attributes such as category, brand, tags, digital "
"status, name, description, part number, and slug. Provides related utility "
@@ -1930,163 +1932,163 @@ msgstr ""
"Representa un producto con atributos como categoría, marca, etiquetas, "
"estado digital, nombre, descripción, número de pieza y babosa. Proporciona "
"propiedades de utilidad relacionadas para recuperar valoraciones, recuentos "
-"de comentarios, precio, cantidad y total de pedidos. Diseñado para su uso en"
-" un sistema que gestiona el comercio electrónico o la gestión de "
-"inventarios. Esta clase interactúa con modelos relacionados (como Category, "
-"Brand y ProductTag) y gestiona el almacenamiento en caché de las propiedades"
-" a las que se accede con frecuencia para mejorar el rendimiento. Se utiliza "
-"para definir y manipular datos de productos y su información asociada dentro"
-" de una aplicación."
+"de comentarios, precio, cantidad y total de pedidos. Diseñado para su uso en "
+"un sistema que gestiona el comercio electrónico o la gestión de inventarios. "
+"Esta clase interactúa con modelos relacionados (como Category, Brand y "
+"ProductTag) y gestiona el almacenamiento en caché de las propiedades a las "
+"que se accede con frecuencia para mejorar el rendimiento. Se utiliza para "
+"definir y manipular datos de productos y su información asociada dentro de "
+"una aplicación."
-#: engine/core/models.py:585
+#: engine/core/models.py:606
msgid "category this product belongs to"
msgstr "Categoría a la que pertenece este producto"
-#: engine/core/models.py:594
+#: engine/core/models.py:615
msgid "optionally associate this product with a brand"
msgstr "Si lo desea, puede asociar este producto a una marca"
-#: engine/core/models.py:600
+#: engine/core/models.py:621
msgid "tags that help describe or group this product"
msgstr "Etiquetas que ayudan a describir o agrupar este producto"
-#: engine/core/models.py:605
+#: engine/core/models.py:626
msgid "indicates whether this product is digitally delivered"
msgstr "Indica si este producto se entrega digitalmente"
-#: engine/core/models.py:606
+#: engine/core/models.py:627
msgid "is product digital"
msgstr "¿Es digital el producto?"
-#: engine/core/models.py:612
+#: engine/core/models.py:633
msgid "provide a clear identifying name for the product"
msgstr "Proporcionar un nombre que identifique claramente el producto"
-#: engine/core/models.py:613
+#: engine/core/models.py:634
msgid "product name"
msgstr "Nombre del producto"
-#: engine/core/models.py:619 engine/core/models.py:892
+#: engine/core/models.py:640 engine/core/models.py:915
msgid "add a detailed description of the product"
msgstr "Añada una descripción detallada del producto"
-#: engine/core/models.py:620
+#: engine/core/models.py:641
msgid "product description"
msgstr "Descripción del producto"
-#: engine/core/models.py:627
+#: engine/core/models.py:648
msgid "part number for this product"
msgstr "Número de pieza de este producto"
-#: engine/core/models.py:628
+#: engine/core/models.py:649
msgid "part number"
msgstr "Número de pieza"
-#: engine/core/models.py:647
+#: engine/core/models.py:668
msgid "stock keeping unit for this product"
msgstr "Unidad de Mantenimiento de Existencias para este producto"
-#: engine/core/models.py:720
+#: engine/core/models.py:741
msgid ""
"Represents an attribute in the system. This class is used to define and "
"manage attributes, which are customizable pieces of data that can be "
"associated with other entities. Attributes have associated categories, "
-"groups, value types, and names. The model supports multiple types of values,"
-" including string, integer, float, boolean, array, and object. This allows "
+"groups, value types, and names. The model supports multiple types of values, "
+"including string, integer, float, boolean, array, and object. This allows "
"for dynamic and flexible data structuring."
msgstr ""
"Representa un atributo en el sistema. Esta clase se utiliza para definir y "
"gestionar atributos, que son datos personalizables que pueden asociarse a "
-"otras entidades. Los atributos tienen asociadas categorías, grupos, tipos de"
-" valores y nombres. El modelo admite varios tipos de valores, como cadenas, "
+"otras entidades. Los atributos tienen asociadas categorías, grupos, tipos de "
+"valores y nombres. El modelo admite varios tipos de valores, como cadenas, "
"enteros, flotantes, booleanos, matrices y objetos. Esto permite una "
"estructuración dinámica y flexible de los datos."
-#: engine/core/models.py:733
+#: engine/core/models.py:754
msgid "group of this attribute"
msgstr "Grupo de este atributo"
-#: engine/core/models.py:739
+#: engine/core/models.py:760
msgid "string"
msgstr "Cadena"
-#: engine/core/models.py:740
+#: engine/core/models.py:761
msgid "integer"
msgstr "Entero"
-#: engine/core/models.py:741
+#: engine/core/models.py:762
msgid "float"
msgstr "Flotador"
-#: engine/core/models.py:742
+#: engine/core/models.py:763
msgid "boolean"
msgstr "Booleano"
-#: engine/core/models.py:743
+#: engine/core/models.py:764
msgid "array"
msgstr "Matriz"
-#: engine/core/models.py:744
+#: engine/core/models.py:765
msgid "object"
msgstr "Objeto"
-#: engine/core/models.py:746
+#: engine/core/models.py:767
msgid "type of the attribute's value"
msgstr "Tipo del valor del atributo"
-#: engine/core/models.py:747
+#: engine/core/models.py:768
msgid "value type"
msgstr "Tipo de valor"
-#: engine/core/models.py:752
+#: engine/core/models.py:773
msgid "name of this attribute"
msgstr "Nombre de este atributo"
-#: engine/core/models.py:753
+#: engine/core/models.py:774
msgid "attribute's name"
msgstr "Nombre del atributo"
-#: engine/core/models.py:758
+#: engine/core/models.py:779
msgid "is filterable"
msgstr "es filtrable"
-#: engine/core/models.py:759
+#: engine/core/models.py:781
msgid "designates whether this attribute can be used for filtering or not"
msgstr ""
"Qué atributos y valores se pueden utilizar para filtrar esta categoría."
-#: engine/core/models.py:771 engine/core/models.py:789
+#: engine/core/models.py:794 engine/core/models.py:812
#: engine/core/templates/digital_order_delivered_email.html:134
msgid "attribute"
msgstr "Atributo"
-#: engine/core/models.py:777
+#: engine/core/models.py:800
msgid ""
-"Represents a specific value for an attribute that is linked to a product. It"
-" links the 'attribute' to a unique 'value', allowing better organization and"
-" dynamic representation of product characteristics."
+"Represents a specific value for an attribute that is linked to a product. It "
+"links the 'attribute' to a unique 'value', allowing better organization and "
+"dynamic representation of product characteristics."
msgstr ""
"Representa un valor específico para un atributo vinculado a un producto. "
"Vincula el \"atributo\" a un \"valor\" único, lo que permite una mejor "
"organización y representación dinámica de las características del producto."
-#: engine/core/models.py:788
+#: engine/core/models.py:811
msgid "attribute of this value"
msgstr "Atributo de este valor"
-#: engine/core/models.py:796
+#: engine/core/models.py:819
msgid "the specific product associated with this attribute's value"
msgstr "El producto específico asociado al valor de este atributo"
-#: engine/core/models.py:802
+#: engine/core/models.py:825
msgid "the specific value for this attribute"
msgstr "El valor específico de este atributo"
-#: engine/core/models.py:815
+#: engine/core/models.py:838
msgid ""
"Represents a product image associated with a product in the system. This "
-"class is designed to manage images for products, including functionality for"
-" uploading image files, associating them with specific products, and "
+"class is designed to manage images for products, including functionality for "
+"uploading image files, associating them with specific products, and "
"determining their display order. It also includes an accessibility feature "
"with alternative text for the images."
msgstr ""
@@ -2096,47 +2098,47 @@ msgstr ""
"específicos y determinar su orden de visualización. También incluye una "
"función de accesibilidad con texto alternativo para las imágenes."
-#: engine/core/models.py:826
+#: engine/core/models.py:849
msgid "provide alternative text for the image for accessibility"
msgstr ""
"Proporcione un texto alternativo para la imagen en aras de la accesibilidad"
-#: engine/core/models.py:827
+#: engine/core/models.py:850
msgid "image alt text"
msgstr "Texto alternativo de la imagen"
-#: engine/core/models.py:830
+#: engine/core/models.py:853
msgid "upload the image file for this product"
msgstr "Cargar el archivo de imagen para este producto"
-#: engine/core/models.py:831 engine/core/models.py:862
+#: engine/core/models.py:854 engine/core/models.py:885
msgid "product image"
msgstr "Imagen del producto"
-#: engine/core/models.py:836
+#: engine/core/models.py:859
msgid "determines the order in which images are displayed"
msgstr "Determina el orden de visualización de las imágenes"
-#: engine/core/models.py:837
+#: engine/core/models.py:860
msgid "display priority"
msgstr "Prioridad de visualización"
-#: engine/core/models.py:842
+#: engine/core/models.py:865
msgid "the product that this image represents"
msgstr "El producto que representa esta imagen"
-#: engine/core/models.py:863
+#: engine/core/models.py:886
msgid "product images"
msgstr "Imágenes de productos"
-#: engine/core/models.py:868
+#: engine/core/models.py:891
msgid ""
"Represents a promotional campaign for products with a discount. This class "
"is used to define and manage promotional campaigns that offer a percentage-"
"based discount for products. The class includes attributes for setting the "
"discount rate, providing details about the promotion, and linking it to the "
-"applicable products. It integrates with the product catalog to determine the"
-" affected items in the campaign."
+"applicable products. It integrates with the product catalog to determine the "
+"affected items in the campaign."
msgstr ""
"Representa una campaña promocional para productos con descuento. Esta clase "
"se utiliza para definir y gestionar campañas promocionales que ofrecen un "
@@ -2145,39 +2147,39 @@ msgstr ""
"promoción y vincularla a los productos aplicables. Se integra con el "
"catálogo de productos para determinar los artículos afectados en la campaña."
-#: engine/core/models.py:880
+#: engine/core/models.py:903
msgid "percentage discount for the selected products"
msgstr "Porcentaje de descuento para los productos seleccionados"
-#: engine/core/models.py:881
+#: engine/core/models.py:904
msgid "discount percentage"
msgstr "Porcentaje de descuento"
-#: engine/core/models.py:886
+#: engine/core/models.py:909
msgid "provide a unique name for this promotion"
msgstr "Proporcione un nombre único para esta promoción"
-#: engine/core/models.py:887
+#: engine/core/models.py:910
msgid "promotion name"
msgstr "Nombre de la promoción"
-#: engine/core/models.py:893
+#: engine/core/models.py:916
msgid "promotion description"
msgstr "Descripción de la promoción"
-#: engine/core/models.py:898
+#: engine/core/models.py:921
msgid "select which products are included in this promotion"
msgstr "Seleccione los productos incluidos en esta promoción"
-#: engine/core/models.py:899
+#: engine/core/models.py:922
msgid "included products"
msgstr "Productos incluidos"
-#: engine/core/models.py:903
+#: engine/core/models.py:926
msgid "promotion"
msgstr "Promoción"
-#: engine/core/models.py:914
+#: engine/core/models.py:937
msgid ""
"Represents a user's wishlist for storing and managing desired products. The "
"class provides functionality to manage a collection of products, supporting "
@@ -2190,30 +2192,30 @@ msgstr ""
"productos, así como soportar operaciones para añadir y eliminar múltiples "
"productos a la vez."
-#: engine/core/models.py:926
+#: engine/core/models.py:949
msgid "products that the user has marked as wanted"
msgstr "Productos que el usuario ha marcado como deseados"
-#: engine/core/models.py:934
+#: engine/core/models.py:957
msgid "user who owns this wishlist"
msgstr "Usuario propietario de esta lista de deseos"
-#: engine/core/models.py:935
+#: engine/core/models.py:958
msgid "wishlist owner"
msgstr "Propietario de Wishlist"
-#: engine/core/models.py:943
+#: engine/core/models.py:966
msgid "wishlist"
msgstr "Lista de deseos"
-#: engine/core/models.py:985
+#: engine/core/models.py:1008
msgid ""
"Represents a documentary record tied to a product. This class is used to "
"store information about documentaries related to specific products, "
"including file uploads and their metadata. It contains methods and "
"properties to handle the file type and storage path for the documentary "
-"files. It extends functionality from specific mixins and provides additional"
-" custom features."
+"files. It extends functionality from specific mixins and provides additional "
+"custom features."
msgstr ""
"Representa un registro documental vinculado a un producto. Esta clase se "
"utiliza para almacenar información sobre documentales relacionados con "
@@ -2222,28 +2224,28 @@ msgstr ""
"de almacenamiento de los archivos documentales. Amplía la funcionalidad de "
"mixins específicos y proporciona características personalizadas adicionales."
-#: engine/core/models.py:998
+#: engine/core/models.py:1023
msgid "documentary"
msgstr "Documental"
-#: engine/core/models.py:999
+#: engine/core/models.py:1024
msgid "documentaries"
msgstr "Documentaries"
-#: engine/core/models.py:1009
+#: engine/core/models.py:1034
msgid "unresolved"
msgstr "Sin resolver"
-#: engine/core/models.py:1014
+#: engine/core/models.py:1039
msgid ""
-"Represents an address entity that includes location details and associations"
-" with a user. Provides functionality for geographic and address data "
-"storage, as well as integration with geocoding services. This class is "
-"designed to store detailed address information including components like "
-"street, city, region, country, and geolocation (longitude and latitude). It "
-"supports integration with geocoding APIs, enabling the storage of raw API "
-"responses for further processing or inspection. The class also allows "
-"associating an address with a user, facilitating personalized data handling."
+"Represents an address entity that includes location details and associations "
+"with a user. Provides functionality for geographic and address data storage, "
+"as well as integration with geocoding services. This class is designed to "
+"store detailed address information including components like street, city, "
+"region, country, and geolocation (longitude and latitude). It supports "
+"integration with geocoding APIs, enabling the storage of raw API responses "
+"for further processing or inspection. The class also allows associating an "
+"address with a user, facilitating personalized data handling."
msgstr ""
"Representa una entidad de dirección que incluye detalles de ubicación y "
"asociaciones con un usuario. Proporciona funcionalidad para el "
@@ -2252,63 +2254,63 @@ msgstr ""
"información detallada sobre direcciones, incluidos componentes como calle, "
"ciudad, región, país y geolocalización (longitud y latitud). Admite la "
"integración con API de geocodificación, permitiendo el almacenamiento de "
-"respuestas API sin procesar para su posterior procesamiento o inspección. La"
-" clase también permite asociar una dirección a un usuario, facilitando el "
+"respuestas API sin procesar para su posterior procesamiento o inspección. La "
+"clase también permite asociar una dirección a un usuario, facilitando el "
"manejo personalizado de los datos."
-#: engine/core/models.py:1029
+#: engine/core/models.py:1054
msgid "address line for the customer"
msgstr "Dirección del cliente"
-#: engine/core/models.py:1030
+#: engine/core/models.py:1055
msgid "address line"
msgstr "Dirección"
-#: engine/core/models.py:1032
+#: engine/core/models.py:1057
msgid "street"
msgstr "Calle"
-#: engine/core/models.py:1033
+#: engine/core/models.py:1058
msgid "district"
msgstr "Distrito"
-#: engine/core/models.py:1034
+#: engine/core/models.py:1059
msgid "city"
msgstr "Ciudad"
-#: engine/core/models.py:1035
+#: engine/core/models.py:1060
msgid "region"
msgstr "Región"
-#: engine/core/models.py:1036
+#: engine/core/models.py:1061
msgid "postal code"
msgstr "Promo code"
-#: engine/core/models.py:1037
+#: engine/core/models.py:1062
msgid "country"
msgstr "País"
-#: engine/core/models.py:1044
+#: engine/core/models.py:1069
msgid "geolocation point: (longitude, latitude)"
msgstr "Geolocalización Punto(Longitud, Latitud)"
-#: engine/core/models.py:1047
+#: engine/core/models.py:1075
msgid "full JSON response from geocoder for this address"
msgstr "Respuesta JSON completa del geocodificador para esta dirección"
-#: engine/core/models.py:1052
+#: engine/core/models.py:1081
msgid "stored JSON response from the geocoding service"
msgstr "Respuesta JSON almacenada del servicio de geocodificación"
-#: engine/core/models.py:1060
+#: engine/core/models.py:1091
msgid "address"
msgstr "Dirección"
-#: engine/core/models.py:1061
+#: engine/core/models.py:1092
msgid "addresses"
msgstr "Direcciones"
-#: engine/core/models.py:1073
+#: engine/core/models.py:1104
msgid ""
"Represents a promotional code that can be used for discounts, managing its "
"validity, type of discount, and application. The PromoCode class stores "
@@ -2325,72 +2327,72 @@ msgstr ""
"para validar y aplicar el código promocional a un pedido garantizando el "
"cumplimiento de las restricciones."
-#: engine/core/models.py:1087
+#: engine/core/models.py:1118
msgid "unique code used by a user to redeem a discount"
msgstr "Código único utilizado por un usuario para canjear un descuento"
-#: engine/core/models.py:1088
+#: engine/core/models.py:1119
msgid "promo code identifier"
msgstr "Promo code identifier"
-#: engine/core/models.py:1095
+#: engine/core/models.py:1126
msgid "fixed discount amount applied if percent is not used"
msgstr "Se aplica un descuento fijo si no se utiliza el porcentaje"
-#: engine/core/models.py:1096
+#: engine/core/models.py:1127
msgid "fixed discount amount"
msgstr "Importe fijo del descuento"
-#: engine/core/models.py:1102
+#: engine/core/models.py:1133
msgid "percentage discount applied if fixed amount is not used"
msgstr "Porcentaje de descuento aplicado si no se utiliza el importe fijo"
-#: engine/core/models.py:1103
+#: engine/core/models.py:1134
msgid "percentage discount"
msgstr "Porcentaje de descuento"
-#: engine/core/models.py:1108
+#: engine/core/models.py:1139
msgid "timestamp when the promocode expires"
msgstr "Fecha de caducidad del promocode"
-#: engine/core/models.py:1109
+#: engine/core/models.py:1140
msgid "end validity time"
msgstr "Hora de fin de validez"
-#: engine/core/models.py:1114
+#: engine/core/models.py:1145
msgid "timestamp from which this promocode is valid"
msgstr "Fecha a partir de la cual es válido este promocode"
-#: engine/core/models.py:1115
+#: engine/core/models.py:1146
msgid "start validity time"
msgstr "Hora de inicio de validez"
-#: engine/core/models.py:1120
+#: engine/core/models.py:1151
msgid "timestamp when the promocode was used, blank if not used yet"
msgstr ""
"Fecha en la que se utilizó el promocode, en blanco si aún no se ha utilizado"
-#: engine/core/models.py:1121
+#: engine/core/models.py:1152
msgid "usage timestamp"
msgstr "Marca de tiempo de uso"
-#: engine/core/models.py:1126
+#: engine/core/models.py:1157
msgid "user assigned to this promocode if applicable"
msgstr "Usuario asignado a este promocode si procede"
-#: engine/core/models.py:1127
+#: engine/core/models.py:1158
msgid "assigned user"
msgstr "Usuario asignado"
-#: engine/core/models.py:1134
+#: engine/core/models.py:1165
msgid "promo code"
msgstr "Promo code"
-#: engine/core/models.py:1135
+#: engine/core/models.py:1166
msgid "promo codes"
msgstr "Promo codes"
-#: engine/core/models.py:1150
+#: engine/core/models.py:1182
msgid ""
"only one type of discount should be defined (amount or percent), but not "
"both or neither."
@@ -2398,21 +2400,21 @@ msgstr ""
"Sólo debe definirse un tipo de descuento (importe o porcentaje), pero no "
"ambos ni ninguno."
-#: engine/core/models.py:1171
+#: engine/core/models.py:1204
msgid "promocode already used"
msgstr "El código promocional ya ha sido utilizado"
-#: engine/core/models.py:1187
+#: engine/core/models.py:1226
#, python-brace-format
msgid "invalid discount type for promocode {self.uuid}"
msgstr "¡Tipo de descuento no válido para el código promocional {self.uuid}!"
-#: engine/core/models.py:1196
+#: engine/core/models.py:1235
msgid ""
"Represents an order placed by a user. This class models an order within the "
"application, including its various attributes such as billing and shipping "
-"information, status, associated user, notifications, and related operations."
-" Orders can have associated products, promotions can be applied, addresses "
+"information, status, associated user, notifications, and related operations. "
+"Orders can have associated products, promotions can be applied, addresses "
"set, and shipping or billing details updated. Equally, functionality "
"supports managing the products in the order lifecycle."
msgstr ""
@@ -2420,142 +2422,142 @@ msgstr ""
"dentro de la aplicación, incluyendo sus diversos atributos como información "
"de facturación y envío, estado, usuario asociado, notificaciones y "
"operaciones relacionadas. Los pedidos pueden tener productos asociados, se "
-"pueden aplicar promociones, establecer direcciones y actualizar los datos de"
-" envío o facturación. Del mismo modo, la funcionalidad permite gestionar los"
-" productos en el ciclo de vida del pedido."
+"pueden aplicar promociones, establecer direcciones y actualizar los datos de "
+"envío o facturación. Del mismo modo, la funcionalidad permite gestionar los "
+"productos en el ciclo de vida del pedido."
-#: engine/core/models.py:1213
+#: engine/core/models.py:1252
msgid "the billing address used for this order"
msgstr "La dirección de facturación utilizada para este pedido"
-#: engine/core/models.py:1221
+#: engine/core/models.py:1260
msgid "optional promo code applied to this order"
msgstr "Código promocional opcional aplicado a este pedido"
-#: engine/core/models.py:1222
+#: engine/core/models.py:1261
msgid "applied promo code"
msgstr "Código promocional aplicado"
-#: engine/core/models.py:1230
+#: engine/core/models.py:1269
msgid "the shipping address used for this order"
msgstr "La dirección de envío utilizada para este pedido"
-#: engine/core/models.py:1231
+#: engine/core/models.py:1270
msgid "shipping address"
msgstr "Dirección de envío"
-#: engine/core/models.py:1237
+#: engine/core/models.py:1276
msgid "current status of the order in its lifecycle"
msgstr "Estado actual del pedido en su ciclo de vida"
-#: engine/core/models.py:1238
+#: engine/core/models.py:1277
msgid "order status"
msgstr "Estado del pedido"
-#: engine/core/models.py:1243 engine/core/models.py:1769
+#: engine/core/models.py:1282 engine/core/models.py:1881
msgid "json structure of notifications to display to users"
msgstr ""
"Estructura JSON de las notificaciones para mostrar a los usuarios, en la "
"interfaz de administración se utiliza la vista de tabla."
-#: engine/core/models.py:1249
+#: engine/core/models.py:1288
msgid "json representation of order attributes for this order"
msgstr "Representación JSON de los atributos de la orden para esta orden"
-#: engine/core/models.py:1255
+#: engine/core/models.py:1294
msgid "the user who placed the order"
msgstr "El usuario que realizó el pedido"
-#: engine/core/models.py:1256
+#: engine/core/models.py:1295
msgid "user"
msgstr "Usuario"
-#: engine/core/models.py:1262
+#: engine/core/models.py:1301
msgid "the timestamp when the order was finalized"
msgstr "Fecha de finalización de la orden"
-#: engine/core/models.py:1263
+#: engine/core/models.py:1302
msgid "buy time"
msgstr "Comprar tiempo"
-#: engine/core/models.py:1270
+#: engine/core/models.py:1309
msgid "a human-readable identifier for the order"
msgstr "Un identificador legible por el ser humano para la orden"
-#: engine/core/models.py:1271
+#: engine/core/models.py:1310
msgid "human readable id"
msgstr "ID legible por humanos"
-#: engine/core/models.py:1277
+#: engine/core/models.py:1316
msgid "order"
msgstr "Pida"
-#: engine/core/models.py:1319
+#: engine/core/models.py:1363
msgid "a user must have only one pending order at a time"
msgstr "Un usuario sólo puede tener una orden pendiente a la vez."
-#: engine/core/models.py:1351
+#: engine/core/models.py:1396
msgid "you cannot add products to an order that is not a pending one"
msgstr "No puede añadir productos a un pedido que no esté pendiente"
-#: engine/core/models.py:1356
+#: engine/core/models.py:1402
msgid "you cannot add inactive products to order"
msgstr "No se pueden añadir productos inactivos al pedido"
-#: engine/core/models.py:1373
+#: engine/core/models.py:1424
msgid "you cannot add more products than available in stock"
msgstr "No puede añadir más productos de los disponibles en stock"
-#: engine/core/models.py:1395 engine/core/models.py:1420
-#: engine/core/models.py:1428
+#: engine/core/models.py:1448 engine/core/models.py:1477
+#: engine/core/models.py:1487
msgid "you cannot remove products from an order that is not a pending one"
msgstr "No puede eliminar productos de un pedido que no esté pendiente"
-#: engine/core/models.py:1416
+#: engine/core/models.py:1472
#, python-brace-format
msgid "{name} does not exist with query <{query}>"
msgstr "{name} ¡no existe con la consulta <{query}>!"
-#: engine/core/models.py:1448
+#: engine/core/models.py:1511
msgid "promocode does not exist"
msgstr "Promocode no existe"
-#: engine/core/models.py:1454
+#: engine/core/models.py:1526
msgid "you can only buy physical products with shipping address specified"
msgstr ""
"Sólo puede comprar productos físicos con la dirección de envío especificada."
-#: engine/core/models.py:1473
+#: engine/core/models.py:1547
msgid "address does not exist"
msgstr "La dirección no existe"
-#: engine/core/models.py:1494 engine/core/models.py:1563
+#: engine/core/models.py:1569 engine/core/models.py:1648
msgid "you can not buy at this moment, please try again in a few minutes"
msgstr ""
"No puede comprar en este momento, por favor inténtelo de nuevo en unos "
"minutos."
-#: engine/core/models.py:1497 engine/core/models.py:1559
+#: engine/core/models.py:1575 engine/core/models.py:1641
msgid "invalid force value"
msgstr "Valor de fuerza no válido"
-#: engine/core/models.py:1503 engine/core/models.py:1566
+#: engine/core/models.py:1581 engine/core/models.py:1652
msgid "you cannot purchase an empty order!"
msgstr "No se puede comprar un pedido vacío."
-#: engine/core/models.py:1522
+#: engine/core/models.py:1602
msgid "you cannot buy an order without a user"
msgstr "No se puede comprar un pedido sin un usuario."
-#: engine/core/models.py:1536
+#: engine/core/models.py:1616
msgid "a user without a balance cannot buy with balance"
msgstr "¡Un usuario sin saldo no puede comprar con saldo!"
-#: engine/core/models.py:1541
+#: engine/core/models.py:1622
msgid "insufficient funds to complete the order"
msgstr "Fondos insuficientes para completar el pedido"
-#: engine/core/models.py:1575
+#: engine/core/models.py:1663
msgid ""
"you cannot buy without registration, please provide the following "
"information: customer name, customer email, customer phone number"
@@ -2563,14 +2565,14 @@ msgstr ""
"no puede comprar sin registrarse, facilite la siguiente información: nombre "
"del cliente, correo electrónico del cliente, número de teléfono del cliente"
-#: engine/core/models.py:1584
+#: engine/core/models.py:1674
#, python-brace-format
msgid ""
"invalid payment method: {payment_method} from {available_payment_methods}"
msgstr ""
"Forma de pago no válida: ¡{payment_method} de {available_payment_methods}!"
-#: engine/core/models.py:1699
+#: engine/core/models.py:1805
msgid ""
"Manages user feedback for products. This class is designed to capture and "
"store user feedback for specific products that they have purchased. It "
@@ -2586,34 +2588,33 @@ msgstr ""
"clase utiliza campos de base de datos para modelar y gestionar eficazmente "
"los datos de los comentarios."
-#: engine/core/models.py:1711
+#: engine/core/models.py:1817
msgid "user-provided comments about their experience with the product"
msgstr "Comentarios de los usuarios sobre su experiencia con el producto"
-#: engine/core/models.py:1712
+#: engine/core/models.py:1818
msgid "feedback comments"
msgstr "Comentarios"
-#: engine/core/models.py:1719
-msgid ""
-"references the specific product in an order that this feedback is about"
+#: engine/core/models.py:1826
+msgid "references the specific product in an order that this feedback is about"
msgstr ""
"Hace referencia al producto específico de un pedido sobre el que trata esta "
"opinión"
-#: engine/core/models.py:1720
+#: engine/core/models.py:1828
msgid "related order product"
msgstr "Producto relacionado con el pedido"
-#: engine/core/models.py:1725
+#: engine/core/models.py:1833
msgid "user-assigned rating for the product"
msgstr "Valoración del producto asignada por el usuario"
-#: engine/core/models.py:1726
+#: engine/core/models.py:1834
msgid "product rating"
msgstr "Valoración del producto"
-#: engine/core/models.py:1742
+#: engine/core/models.py:1854
msgid ""
"Represents products associated with orders and their attributes. The "
"OrderProduct model maintains information about a product that is part of an "
@@ -2631,140 +2632,139 @@ msgstr ""
"atributos del producto y su estado. Gestiona las notificaciones para el "
"usuario y los administradores y maneja operaciones como la devolución del "
"saldo del producto o la adición de comentarios. Este modelo también "
-"proporciona métodos y propiedades que soportan la lógica de negocio, como el"
-" cálculo del precio total o la generación de una URL de descarga para "
+"proporciona métodos y propiedades que soportan la lógica de negocio, como el "
+"cálculo del precio total o la generación de una URL de descarga para "
"productos digitales. El modelo se integra con los modelos Pedido y Producto "
"y almacena una referencia a ellos."
-#: engine/core/models.py:1757
+#: engine/core/models.py:1869
msgid "the price paid by the customer for this product at purchase time"
msgstr ""
"El precio pagado por el cliente por este producto en el momento de la compra"
-#: engine/core/models.py:1758
+#: engine/core/models.py:1870
msgid "purchase price at order time"
msgstr "Precio de compra en el momento del pedido"
-#: engine/core/models.py:1763
+#: engine/core/models.py:1875
msgid "internal comments for admins about this ordered product"
msgstr ""
"Comentarios internos para los administradores sobre este producto solicitado"
-#: engine/core/models.py:1764
+#: engine/core/models.py:1876
msgid "internal comments"
msgstr "Comentarios internos"
-#: engine/core/models.py:1770
+#: engine/core/models.py:1882
msgid "user notifications"
msgstr "Notificaciones a los usuarios"
-#: engine/core/models.py:1775
+#: engine/core/models.py:1887
msgid "json representation of this item's attributes"
msgstr "Representación JSON de los atributos de este elemento"
-#: engine/core/models.py:1776
+#: engine/core/models.py:1888
msgid "ordered product attributes"
msgstr "Atributos ordenados del producto"
-#: engine/core/models.py:1781
+#: engine/core/models.py:1893
msgid "reference to the parent order that contains this product"
msgstr "Referencia al pedido principal que contiene este producto"
-#: engine/core/models.py:1782
+#: engine/core/models.py:1894
msgid "parent order"
msgstr "Orden de los padres"
-#: engine/core/models.py:1791
+#: engine/core/models.py:1903
msgid "the specific product associated with this order line"
msgstr "El producto específico asociado a esta línea de pedido"
-#: engine/core/models.py:1798
+#: engine/core/models.py:1910
msgid "quantity of this specific product in the order"
msgstr "Cantidad de este producto específico en el pedido"
-#: engine/core/models.py:1799
+#: engine/core/models.py:1911
msgid "product quantity"
msgstr "Cantidad de productos"
-#: engine/core/models.py:1806
+#: engine/core/models.py:1918
msgid "current status of this product in the order"
msgstr "Estado actual de este producto en el pedido"
-#: engine/core/models.py:1807
+#: engine/core/models.py:1919
msgid "product line status"
msgstr "Estado de la línea de productos"
-#: engine/core/models.py:1872
+#: engine/core/models.py:1986
msgid "order product must have an order"
msgstr "El pedido-producto debe tener un pedido asociado."
-#: engine/core/models.py:1874
+#: engine/core/models.py:1988
#, python-brace-format
msgid "wrong action specified for feedback: {action}"
msgstr "Acción incorrecta especificada para la retroalimentación: ¡{action}!"
-#: engine/core/models.py:1888
+#: engine/core/models.py:2005
msgid "you cannot feedback an order which is not received"
msgstr "no se puede comentar un pedido no recibido"
-#: engine/core/models.py:1894
+#: engine/core/models.py:2014
msgid "name"
msgstr "Nombre"
-#: engine/core/models.py:1895
+#: engine/core/models.py:2016
msgid "URL of the integration"
msgstr "URL de la integración"
-#: engine/core/models.py:1896
+#: engine/core/models.py:2019
msgid "authentication credentials"
msgstr "Credenciales de autenticación"
-#: engine/core/models.py:1918
+#: engine/core/models.py:2042
msgid "you can only have one default CRM provider"
msgstr "Sólo puede tener un proveedor de CRM por defecto"
-#: engine/core/models.py:1928
+#: engine/core/models.py:2052
msgid "CRM"
msgstr "CRM"
-#: engine/core/models.py:1929
+#: engine/core/models.py:2053
msgid "CRMs"
msgstr "CRMs"
-#: engine/core/models.py:1941
+#: engine/core/models.py:2069
msgid "order CRM link"
msgstr "Enlace CRM del pedido"
-#: engine/core/models.py:1942
+#: engine/core/models.py:2070
msgid "orders CRM links"
msgstr "Enlaces CRM de los pedidos"
-#: engine/core/models.py:1947
+#: engine/core/models.py:2075
msgid ""
"Represents the downloading functionality for digital assets associated with "
"orders. The DigitalAssetDownload class provides the ability to manage and "
"access downloads related to order products. It maintains information about "
-"the associated order product, the number of downloads, and whether the asset"
-" is publicly visible. It includes a method to generate a URL for downloading"
-" the asset when the associated order is in a completed status."
+"the associated order product, the number of downloads, and whether the asset "
+"is publicly visible. It includes a method to generate a URL for downloading "
+"the asset when the associated order is in a completed status."
msgstr ""
"Representa la funcionalidad de descarga de activos digitales asociados a "
-"pedidos. La clase DigitalAssetDownload proporciona la capacidad de gestionar"
-" y acceder a descargas relacionadas con productos de pedidos. Mantiene "
+"pedidos. La clase DigitalAssetDownload proporciona la capacidad de gestionar "
+"y acceder a descargas relacionadas con productos de pedidos. Mantiene "
"información sobre el producto del pedido asociado, el número de descargas y "
-"si el activo es visible públicamente. Incluye un método para generar una URL"
-" para descargar el activo cuando el pedido asociado está en estado "
-"completado."
+"si el activo es visible públicamente. Incluye un método para generar una URL "
+"para descargar el activo cuando el pedido asociado está en estado completado."
-#: engine/core/models.py:1961
+#: engine/core/models.py:2091
msgid "download"
msgstr "Descargar"
-#: engine/core/models.py:1962
+#: engine/core/models.py:2092
msgid "downloads"
msgstr "Descargas"
-#: engine/core/serializers/utility.py:89
+#: engine/core/serializers/utility.py:91
msgid ""
"you must provide a comment, rating, and order product uuid to add feedback."
msgstr ""
@@ -2961,7 +2961,8 @@ msgstr "Hola %(order.user.first_name)s,"
#, python-format
msgid ""
"thank you for your order #%(order.pk)s! we are pleased to inform you that\n"
-" we have taken your order into work. below are the details of your\n"
+" we have taken your order into work. below are "
+"the details of your\n"
" order:"
msgstr ""
"¡Gracias por su pedido #%(order.pk)s! Nos complace informarle de que hemos "
@@ -3075,7 +3076,8 @@ msgstr ""
#: engine/core/templates/shipped_order_created_email.html:101
#: engine/core/templates/shipped_order_delivered_email.html:101
msgid ""
-"thank you for your order! we are pleased to confirm your purchase. below are\n"
+"thank you for your order! we are pleased to confirm your purchase. below "
+"are\n"
" the details of your order:"
msgstr ""
"Gracias por su pedido. Nos complace confirmarle su compra. A continuación "
@@ -3106,11 +3108,11 @@ msgstr ""
"todos los derechos\n"
" reservados"
-#: engine/core/utils/caching.py:44
+#: engine/core/utils/caching.py:48
msgid "both data and timeout are required"
msgstr "Tanto los datos como el tiempo de espera son necesarios"
-#: engine/core/utils/caching.py:46
+#: engine/core/utils/caching.py:51
msgid "invalid timeout value, it must be between 0 and 216000 seconds"
msgstr ""
"Valor de tiempo de espera no válido, debe estar entre 0 y 216000 segundos."
@@ -3120,17 +3122,17 @@ msgstr ""
msgid "{settings.PROJECT_NAME} | contact us initiated"
msgstr "{settings.PROJECT_NAME} | contacto iniciado"
-#: engine/core/utils/emailing.py:73
+#: engine/core/utils/emailing.py:81
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order confirmation"
msgstr "{settings.PROJECT_NAME} | confirmación de pedido"
-#: engine/core/utils/emailing.py:105
+#: engine/core/utils/emailing.py:115
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order delivered"
msgstr "{settings.PROJECT_NAME} | pedido entregado"
-#: engine/core/utils/emailing.py:188
+#: engine/core/utils/emailing.py:203
#, python-brace-format
msgid "{settings.PROJECT_NAME} | promocode granted"
msgstr "{settings.PROJECT_NAME} | promocode granted"
@@ -3143,23 +3145,23 @@ msgstr "No tiene permiso para realizar esta acción."
msgid "NOMINATIM_URL must be configured."
msgstr "El parámetro NOMINATIM_URL debe estar configurado."
-#: engine/core/validators.py:19
+#: engine/core/validators.py:21
#, python-brace-format
msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels"
msgstr ""
"Las dimensiones de la imagen no deben superar w{max_width} x h{max_height} "
"píxeles."
-#: engine/core/views.py:91
+#: engine/core/views.py:105
msgid ""
"Handles the request for the sitemap index and returns an XML response. It "
"ensures the response includes the appropriate content type header for XML."
msgstr ""
-"Gestiona la solicitud del índice del mapa del sitio y devuelve una respuesta"
-" XML. Se asegura de que la respuesta incluya el encabezado de tipo de "
+"Gestiona la solicitud del índice del mapa del sitio y devuelve una respuesta "
+"XML. Se asegura de que la respuesta incluya el encabezado de tipo de "
"contenido apropiado para XML."
-#: engine/core/views.py:106
+#: engine/core/views.py:120
msgid ""
"Handles the detailed view response for a sitemap. This function processes "
"the request, fetches the appropriate sitemap detail response, and sets the "
@@ -3169,18 +3171,17 @@ msgstr ""
"función procesa la solicitud, obtiene la respuesta detallada del mapa del "
"sitio y establece el encabezado Content-Type para XML."
-#: engine/core/views.py:141
+#: engine/core/views.py:156
msgid ""
"Returns a list of supported languages and their corresponding information."
msgstr ""
-"Devuelve una lista de los idiomas admitidos y su información "
-"correspondiente."
+"Devuelve una lista de los idiomas admitidos y su información correspondiente."
-#: engine/core/views.py:173
+#: engine/core/views.py:183
msgid "Returns the parameters of the website as a JSON object."
msgstr "Devuelve los parámetros del sitio web como un objeto JSON."
-#: engine/core/views.py:192
+#: engine/core/views.py:199
msgid ""
"Handles cache operations such as reading and setting cache data with a "
"specified key and timeout."
@@ -3188,11 +3189,11 @@ msgstr ""
"Gestiona las operaciones de caché, como la lectura y el establecimiento de "
"datos de caché con una clave y un tiempo de espera especificados."
-#: engine/core/views.py:219
+#: engine/core/views.py:221
msgid "Handles `contact us` form submissions."
msgstr "Gestiona los formularios de contacto."
-#: engine/core/views.py:240
+#: engine/core/views.py:237
msgid ""
"Handles requests for processing and validating URLs from incoming POST "
"requests."
@@ -3200,79 +3201,87 @@ msgstr ""
"Gestiona las solicitudes de procesamiento y validación de URL de las "
"solicitudes POST entrantes."
-#: engine/core/views.py:280
+#: engine/core/views.py:274
msgid "Handles global search queries."
msgstr "Gestiona las consultas de búsqueda global."
-#: engine/core/views.py:295
+#: engine/core/views.py:290
msgid "Handles the logic of buying as a business without registration."
msgstr "Maneja la lógica de la compra como empresa sin registro."
-#: engine/core/views.py:332
+#: engine/core/views.py:338
msgid ""
"Handles the downloading of a digital asset associated with an order.\n"
-"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the digital asset file located in the "
+"storage directory of the project. If the file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
msgstr ""
"Gestiona la descarga de un activo digital asociado a un pedido.\n"
-"Esta función intenta servir el archivo del activo digital ubicado en el directorio de almacenamiento del proyecto. Si no se encuentra el archivo, se genera un error HTTP 404 para indicar que el recurso no está disponible."
+"Esta función intenta servir el archivo del activo digital ubicado en el "
+"directorio de almacenamiento del proyecto. Si no se encuentra el archivo, se "
+"genera un error HTTP 404 para indicar que el recurso no está disponible."
-#: engine/core/views.py:343
+#: engine/core/views.py:349
msgid "order_product_uuid is required"
msgstr "order_product_uuid es obligatorio"
-#: engine/core/views.py:350
+#: engine/core/views.py:356
msgid "order product does not exist"
msgstr "pedir producto no existe"
-#: engine/core/views.py:353
+#: engine/core/views.py:359
msgid "you can only download the digital asset once"
msgstr "Sólo puede descargar el activo digital una vez"
-#: engine/core/views.py:356
+#: engine/core/views.py:363
msgid "the order must be paid before downloading the digital asset"
msgstr "el pedido debe pagarse antes de descargar el activo digital"
-#: engine/core/views.py:362
+#: engine/core/views.py:370
msgid "the order product does not have a product"
msgstr "El producto del pedido no tiene un producto"
-#: engine/core/views.py:399
+#: engine/core/views.py:414
msgid "favicon not found"
msgstr "favicon no encontrado"
-#: engine/core/views.py:404
+#: engine/core/views.py:419
msgid ""
"Handles requests for the favicon of a website.\n"
-"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the favicon file located in the static "
+"directory of the project. If the favicon file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
msgstr ""
"Gestiona las peticiones del favicon de un sitio web.\n"
-"Esta función intenta servir el archivo favicon ubicado en el directorio estático del proyecto. Si no se encuentra el archivo favicon, se genera un error HTTP 404 para indicar que el recurso no está disponible."
+"Esta función intenta servir el archivo favicon ubicado en el directorio "
+"estático del proyecto. Si no se encuentra el archivo favicon, se genera un "
+"error HTTP 404 para indicar que el recurso no está disponible."
-#: engine/core/views.py:416
+#: engine/core/views.py:431
msgid ""
-"Redirects the request to the admin index page. The function handles incoming"
-" HTTP requests and redirects them to the Django admin interface index page. "
+"Redirects the request to the admin index page. The function handles incoming "
+"HTTP requests and redirects them to the Django admin interface index page. "
"It uses Django's `redirect` function for handling the HTTP redirection."
msgstr ""
"Redirige la petición a la página índice de administración. La función "
"gestiona las peticiones HTTP entrantes y las redirige a la página de índice "
-"de la interfaz de administración de Django. Utiliza la función `redirect` de"
-" Django para gestionar la redirección HTTP."
+"de la interfaz de administración de Django. Utiliza la función `redirect` de "
+"Django para gestionar la redirección HTTP."
-#: engine/core/views.py:429
+#: engine/core/views.py:443
msgid "Returns current version of the eVibes. "
msgstr "Devuelve la versión actual del eVibes."
-#: engine/core/views.py:623 engine/core/views.py:636
+#: engine/core/views.py:672 engine/core/views.py:687
#, python-format
msgid "Revenue & Orders (last %(days)d)"
msgstr "Ingresos y pedidos (últimos %(days)d)"
-#: engine/core/views.py:793
+#: engine/core/views.py:868
msgid "Returns custom variables for Dashboard. "
msgstr "Devuelve variables personalizadas para Dashboard."
-#: engine/core/viewsets.py:136
+#: engine/core/viewsets.py:139
msgid ""
"Defines a viewset for managing Evibes-related operations. The EvibesViewSet "
"class inherits from ModelViewSet and provides functionality for handling "
@@ -3286,21 +3295,20 @@ msgstr ""
"Incluye soporte para clases serializadoras dinámicas basadas en la acción "
"actual, permisos personalizables y formatos de representación."
-#: engine/core/viewsets.py:156
+#: engine/core/viewsets.py:160
msgid ""
-"Represents a viewset for managing AttributeGroup objects. Handles operations"
-" related to AttributeGroup, including filtering, serialization, and "
-"retrieval of data. This class is part of the application's API layer and "
-"provides a standardized way to process requests and responses for "
-"AttributeGroup data."
+"Represents a viewset for managing AttributeGroup objects. Handles operations "
+"related to AttributeGroup, including filtering, serialization, and retrieval "
+"of data. This class is part of the application's API layer and provides a "
+"standardized way to process requests and responses for AttributeGroup data."
msgstr ""
"Representa un conjunto de vistas para gestionar objetos AttributeGroup. "
"Maneja operaciones relacionadas con AttributeGroup, incluyendo filtrado, "
-"serialización y recuperación de datos. Esta clase forma parte de la capa API"
-" de la aplicación y proporciona una forma estandarizada de procesar las "
+"serialización y recuperación de datos. Esta clase forma parte de la capa API "
+"de la aplicación y proporciona una forma estandarizada de procesar las "
"solicitudes y respuestas de los datos de AttributeGroup."
-#: engine/core/viewsets.py:175
+#: engine/core/viewsets.py:179
msgid ""
"Handles operations related to Attribute objects within the application. "
"Provides a set of API endpoints to interact with Attribute data. This class "
@@ -3309,30 +3317,30 @@ msgid ""
"specific fields or retrieving detailed versus simplified information "
"depending on the request."
msgstr ""
-"Gestiona las operaciones relacionadas con los objetos Attribute dentro de la"
-" aplicación. Proporciona un conjunto de puntos finales de la API para "
-"interactuar con los datos de los atributos. Esta clase gestiona la consulta,"
-" el filtrado y la serialización de objetos Attribute, lo que permite un "
+"Gestiona las operaciones relacionadas con los objetos Attribute dentro de la "
+"aplicación. Proporciona un conjunto de puntos finales de la API para "
+"interactuar con los datos de los atributos. Esta clase gestiona la consulta, "
+"el filtrado y la serialización de objetos Attribute, lo que permite un "
"control dinámico de los datos devueltos, como el filtrado por campos "
"específicos o la recuperación de información detallada o simplificada en "
"función de la solicitud."
-#: engine/core/viewsets.py:194
+#: engine/core/viewsets.py:198
msgid ""
"A viewset for managing AttributeValue objects. This viewset provides "
"functionality for listing, retrieving, creating, updating, and deleting "
"AttributeValue objects. It integrates with Django REST Framework's viewset "
-"mechanisms and uses appropriate serializers for different actions. Filtering"
-" capabilities are provided through the DjangoFilterBackend."
+"mechanisms and uses appropriate serializers for different actions. Filtering "
+"capabilities are provided through the DjangoFilterBackend."
msgstr ""
"Conjunto de vistas para gestionar objetos AttributeValue. Este conjunto de "
-"vistas proporciona funcionalidad para listar, recuperar, crear, actualizar y"
-" eliminar objetos AttributeValue. Se integra con los mecanismos viewset de "
+"vistas proporciona funcionalidad para listar, recuperar, crear, actualizar y "
+"eliminar objetos AttributeValue. Se integra con los mecanismos viewset de "
"Django REST Framework y utiliza serializadores apropiados para diferentes "
"acciones. Las capacidades de filtrado se proporcionan a través de "
"DjangoFilterBackend."
-#: engine/core/viewsets.py:213
+#: engine/core/viewsets.py:217
msgid ""
"Manages views for Category-related operations. The CategoryViewSet class is "
"responsible for handling operations related to the Category model in the "
@@ -3343,10 +3351,10 @@ msgstr ""
"Gestiona vistas para operaciones relacionadas con Categorías. La clase "
"CategoryViewSet se encarga de gestionar las operaciones relacionadas con el "
"modelo Category del sistema. Permite recuperar, filtrar y serializar datos "
-"de categorías. El conjunto de vistas también aplica permisos para garantizar"
-" que sólo los usuarios autorizados puedan acceder a datos específicos."
+"de categorías. El conjunto de vistas también aplica permisos para garantizar "
+"que sólo los usuarios autorizados puedan acceder a datos específicos."
-#: engine/core/viewsets.py:326
+#: engine/core/viewsets.py:346
msgid ""
"Represents a viewset for managing Brand instances. This class provides "
"functionality for querying, filtering, and serializing Brand objects. It "
@@ -3354,11 +3362,11 @@ msgid ""
"endpoints for Brand objects."
msgstr ""
"Representa un conjunto de vistas para gestionar instancias de Brand. Esta "
-"clase proporciona funcionalidad para consultar, filtrar y serializar objetos"
-" Brand. Utiliza el marco ViewSet de Django para simplificar la "
-"implementación de puntos finales de API para objetos Brand."
+"clase proporciona funcionalidad para consultar, filtrar y serializar objetos "
+"Brand. Utiliza el marco ViewSet de Django para simplificar la implementación "
+"de puntos finales de API para objetos Brand."
-#: engine/core/viewsets.py:438
+#: engine/core/viewsets.py:458
msgid ""
"Manages operations related to the `Product` model in the system. This class "
"provides a viewset for managing products, including their filtering, "
@@ -3370,14 +3378,13 @@ msgid ""
msgstr ""
"Gestiona las operaciones relacionadas con el modelo `Producto` en el "
"sistema. Esta clase proporciona un conjunto de vistas para la gestión de "
-"productos, incluyendo su filtrado, serialización y operaciones en instancias"
-" específicas. Se extiende desde `EvibesViewSet` para utilizar "
-"funcionalidades comunes y se integra con el framework Django REST para "
-"operaciones RESTful API. Incluye métodos para recuperar detalles del "
-"producto, aplicar permisos y acceder a comentarios relacionados de un "
-"producto."
+"productos, incluyendo su filtrado, serialización y operaciones en instancias "
+"específicas. Se extiende desde `EvibesViewSet` para utilizar funcionalidades "
+"comunes y se integra con el framework Django REST para operaciones RESTful "
+"API. Incluye métodos para recuperar detalles del producto, aplicar permisos "
+"y acceder a comentarios relacionados de un producto."
-#: engine/core/viewsets.py:574
+#: engine/core/viewsets.py:605
msgid ""
"Represents a viewset for managing Vendor objects. This viewset allows "
"fetching, filtering, and serializing Vendor data. It defines the queryset, "
@@ -3392,13 +3399,13 @@ msgstr ""
"proporcionar un acceso simplificado a los recursos relacionados con el "
"vendedor a través del marco REST de Django."
-#: engine/core/viewsets.py:594
+#: engine/core/viewsets.py:625
msgid ""
"Representation of a view set handling Feedback objects. This class manages "
"operations related to Feedback objects, including listing, filtering, and "
"retrieving details. The purpose of this view set is to provide different "
-"serializers for different actions and implement permission-based handling of"
-" accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
+"serializers for different actions and implement permission-based handling of "
+"accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
"use of Django's filtering system for querying data."
msgstr ""
"Representación de un conjunto de vistas que maneja objetos Feedback. Esta "
@@ -3406,34 +3413,34 @@ msgstr ""
"incluyendo el listado, filtrado y recuperación de detalles. El propósito de "
"este conjunto de vistas es proporcionar diferentes serializadores para "
"diferentes acciones e implementar el manejo basado en permisos de los "
-"objetos Feedback accesibles. Extiende la base `EvibesViewSet` y hace uso del"
-" sistema de filtrado de Django para la consulta de datos."
+"objetos Feedback accesibles. Extiende la base `EvibesViewSet` y hace uso del "
+"sistema de filtrado de Django para la consulta de datos."
-#: engine/core/viewsets.py:621
+#: engine/core/viewsets.py:652
msgid ""
"ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes "
"various endpoints for handling order operations such as adding or removing "
-"products, performing purchases for registered as well as unregistered users,"
-" and retrieving the current authenticated user's pending orders. The ViewSet"
-" uses multiple serializers based on the specific action being performed and "
+"products, performing purchases for registered as well as unregistered users, "
+"and retrieving the current authenticated user's pending orders. The ViewSet "
+"uses multiple serializers based on the specific action being performed and "
"enforces permissions accordingly while interacting with order data."
msgstr ""
"ViewSet para la gestión de pedidos y operaciones relacionadas. Esta clase "
"proporciona funcionalidad para recuperar, modificar y gestionar objetos de "
-"pedido. Incluye varios puntos finales para gestionar operaciones de pedidos,"
-" como añadir o eliminar productos, realizar compras para usuarios "
-"registrados y no registrados, y recuperar los pedidos pendientes del usuario"
-" autenticado actual. ViewSet utiliza varios serializadores en función de la "
-"acción específica que se esté realizando y aplica los permisos "
-"correspondientes al interactuar con los datos del pedido."
+"pedido. Incluye varios puntos finales para gestionar operaciones de pedidos, "
+"como añadir o eliminar productos, realizar compras para usuarios registrados "
+"y no registrados, y recuperar los pedidos pendientes del usuario autenticado "
+"actual. ViewSet utiliza varios serializadores en función de la acción "
+"específica que se esté realizando y aplica los permisos correspondientes al "
+"interactuar con los datos del pedido."
-#: engine/core/viewsets.py:825
+#: engine/core/viewsets.py:914
msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It "
-"includes filtering, permission checks, and serializer switching based on the"
-" requested action. Additionally, it provides a detailed action for handling "
+"includes filtering, permission checks, and serializer switching based on the "
+"requested action. Additionally, it provides a detailed action for handling "
"feedback on OrderProduct instances"
msgstr ""
"Proporciona un conjunto de vistas para gestionar entidades OrderProduct. "
@@ -3443,13 +3450,13 @@ msgstr ""
"Además, proporciona una acción detallada para gestionar los comentarios "
"sobre las instancias de OrderProduct."
-#: engine/core/viewsets.py:879
+#: engine/core/viewsets.py:974
msgid "Manages operations related to Product images in the application. "
msgstr ""
"Gestiona las operaciones relacionadas con las imágenes de productos en la "
"aplicación."
-#: engine/core/viewsets.py:892
+#: engine/core/viewsets.py:988
msgid ""
"Manages the retrieval and handling of PromoCode instances through various "
"API actions."
@@ -3457,21 +3464,21 @@ msgstr ""
"Gestiona la recuperación y el manejo de instancias de PromoCode a través de "
"varias acciones de la API."
-#: engine/core/viewsets.py:914
+#: engine/core/viewsets.py:1019
msgid "Represents a view set for managing promotions. "
msgstr "Representa un conjunto de vistas para gestionar promociones."
-#: engine/core/viewsets.py:927
+#: engine/core/viewsets.py:1032
msgid "Handles operations related to Stock data in the system."
msgstr ""
"Gestiona las operaciones relacionadas con los datos de Stock en el sistema."
-#: engine/core/viewsets.py:941
+#: engine/core/viewsets.py:1046
msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the "
-"retrieval, modification, and customization of products within the wish list."
-" This ViewSet facilitates functionality such as adding, removing, and bulk "
+"retrieval, modification, and customization of products within the wish list. "
+"This ViewSet facilitates functionality such as adding, removing, and bulk "
"actions for wishlist products. Permission checks are integrated to ensure "
"that users can only manage their own wishlists unless explicit permissions "
"are granted."
@@ -3485,7 +3492,7 @@ msgstr ""
"integrados para garantizar que los usuarios sólo puedan gestionar sus "
"propias listas de deseos a menos que se concedan permisos explícitos."
-#: engine/core/viewsets.py:1056
+#: engine/core/viewsets.py:1183
msgid ""
"This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom "
@@ -3496,15 +3503,15 @@ msgstr ""
"Esta clase proporciona la funcionalidad viewset para la gestión de objetos "
"`Address`. La clase AddressViewSet permite operaciones CRUD, filtrado y "
"acciones personalizadas relacionadas con entidades de direcciones. Incluye "
-"comportamientos especializados para diferentes métodos HTTP, anulaciones del"
-" serializador y gestión de permisos basada en el contexto de la solicitud."
+"comportamientos especializados para diferentes métodos HTTP, anulaciones del "
+"serializador y gestión de permisos basada en el contexto de la solicitud."
-#: engine/core/viewsets.py:1123
+#: engine/core/viewsets.py:1254
#, python-brace-format
msgid "Geocoding error: {e}"
msgstr "Error de geocodificación: {e}"
-#: engine/core/viewsets.py:1131
+#: engine/core/viewsets.py:1262
msgid ""
"Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing "
diff --git a/engine/core/locale/fa_IR/LC_MESSAGES/django.po b/engine/core/locale/fa_IR/LC_MESSAGES/django.po
index 7faa342c..fcf8e2f6 100644
--- a/engine/core/locale/fa_IR/LC_MESSAGES/django.po
+++ b/engine/core/locale/fa_IR/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 22:12+0300\n"
+"POT-Creation-Date: 2025-12-18 19:09+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -28,110 +28,110 @@ msgstr ""
msgid "is active"
msgstr ""
-#: engine/core/abstract.py:21
+#: engine/core/abstract.py:22
msgid ""
"if set to false, this object can't be seen by users without needed permission"
msgstr ""
-#: engine/core/abstract.py:23 engine/core/choices.py:18
+#: engine/core/abstract.py:26 engine/core/choices.py:18
msgid "created"
msgstr ""
-#: engine/core/abstract.py:23
+#: engine/core/abstract.py:26
msgid "when the object first appeared on the database"
msgstr ""
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "modified"
msgstr ""
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "when the object was last modified"
msgstr ""
-#: engine/core/admin.py:85
+#: engine/core/admin.py:94
msgid "translations"
msgstr ""
-#: engine/core/admin.py:89
+#: engine/core/admin.py:102
msgid "general"
msgstr ""
-#: engine/core/admin.py:91
+#: engine/core/admin.py:106
msgid "relations"
msgstr ""
-#: engine/core/admin.py:93
+#: engine/core/admin.py:111
msgid "additional info"
msgstr ""
-#: engine/core/admin.py:111
+#: engine/core/admin.py:133
msgid "metadata"
msgstr ""
-#: engine/core/admin.py:118
+#: engine/core/admin.py:141
msgid "timestamps"
msgstr ""
-#: engine/core/admin.py:133
+#: engine/core/admin.py:157
#, python-format
msgid "activate selected %(verbose_name_plural)s"
msgstr ""
-#: engine/core/admin.py:138
+#: engine/core/admin.py:165
msgid "selected items have been activated."
msgstr ""
-#: engine/core/admin.py:144
+#: engine/core/admin.py:173
#, python-format
msgid "deactivate selected %(verbose_name_plural)s"
msgstr ""
-#: engine/core/admin.py:149
+#: engine/core/admin.py:183
msgid "selected items have been deactivated."
msgstr ""
-#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586
-#: engine/core/graphene/object_types.py:593 engine/core/models.py:801
-#: engine/core/models.py:809
+#: engine/core/admin.py:195 engine/core/graphene/object_types.py:650
+#: engine/core/graphene/object_types.py:657 engine/core/models.py:824
+#: engine/core/models.py:832
msgid "attribute value"
msgstr ""
-#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75
-#: engine/core/models.py:810
+#: engine/core/admin.py:196 engine/core/graphene/object_types.py:75
+#: engine/core/models.py:833
msgid "attribute values"
msgstr ""
-#: engine/core/admin.py:172
+#: engine/core/admin.py:207
msgid "image"
msgstr ""
-#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474
+#: engine/core/admin.py:208 engine/core/graphene/object_types.py:527
msgid "images"
msgstr ""
-#: engine/core/admin.py:184 engine/core/models.py:566
+#: engine/core/admin.py:219 engine/core/models.py:587
msgid "stock"
msgstr ""
-#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640
+#: engine/core/admin.py:220 engine/core/graphene/object_types.py:710
msgid "stocks"
msgstr ""
-#: engine/core/admin.py:196 engine/core/models.py:1818
+#: engine/core/admin.py:231 engine/core/models.py:1930
msgid "order product"
msgstr ""
-#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389
-#: engine/core/models.py:1819
+#: engine/core/admin.py:232 engine/core/graphene/object_types.py:438
+#: engine/core/models.py:1931
msgid "order products"
msgstr ""
-#: engine/core/admin.py:210 engine/core/admin.py:211
+#: engine/core/admin.py:250 engine/core/admin.py:251
msgid "children"
msgstr ""
-#: engine/core/admin.py:977
+#: engine/core/admin.py:1059
msgid "Config"
msgstr ""
@@ -183,395 +183,395 @@ msgstr ""
msgid "successful"
msgstr ""
-#: engine/core/docs/drf/views.py:31
+#: engine/core/docs/drf/views.py:30
msgid "OpenAPI schema in selected format with selected language"
msgstr ""
-#: engine/core/docs/drf/views.py:33
+#: engine/core/docs/drf/views.py:32
msgid ""
"OpenApi3 schema for this API. Format can be selected via content "
"negotiation. Language can be selected with Accept-Language and query "
"parameter both."
msgstr ""
-#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37
+#: engine/core/docs/drf/views.py:43 engine/core/graphene/mutations.py:37
msgid "cache I/O"
msgstr ""
-#: engine/core/docs/drf/views.py:46
+#: engine/core/docs/drf/views.py:45
msgid ""
"apply only a key to read permitted data from cache.\n"
"apply key, data and timeout with authentication to write data to cache."
msgstr ""
-#: engine/core/docs/drf/views.py:62
+#: engine/core/docs/drf/views.py:63
msgid "get a list of supported languages"
msgstr ""
-#: engine/core/docs/drf/views.py:74
+#: engine/core/docs/drf/views.py:75
msgid "get application's exposable parameters"
msgstr ""
-#: engine/core/docs/drf/views.py:84
+#: engine/core/docs/drf/views.py:89
msgid "send a message to the support team"
msgstr ""
-#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57
+#: engine/core/docs/drf/views.py:103 engine/core/graphene/mutations.py:59
msgid "request a CORSed URL"
msgstr ""
-#: engine/core/docs/drf/views.py:112
+#: engine/core/docs/drf/views.py:119
msgid "Search between products, categories and brands"
msgstr ""
-#: engine/core/docs/drf/views.py:130
+#: engine/core/docs/drf/views.py:141
msgid "global search endpoint to query across project's tables"
msgstr ""
-#: engine/core/docs/drf/views.py:139
+#: engine/core/docs/drf/views.py:150
msgid "purchase an order as a business"
msgstr ""
-#: engine/core/docs/drf/views.py:146
+#: engine/core/docs/drf/views.py:158
msgid ""
"purchase an order as a business, using the provided `products` with "
"`product_uuid` and `attributes`."
msgstr ""
-#: engine/core/docs/drf/views.py:164
+#: engine/core/docs/drf/views.py:177
msgid "download a digital asset from purchased digital order"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:61
+#: engine/core/docs/drf/viewsets.py:65
msgid "list all attribute groups (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:68
+#: engine/core/docs/drf/viewsets.py:75
msgid "retrieve a single attribute group (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:75
+#: engine/core/docs/drf/viewsets.py:82
msgid "create an attribute group"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:82
+#: engine/core/docs/drf/viewsets.py:92
msgid "delete an attribute group"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:89
+#: engine/core/docs/drf/viewsets.py:99
msgid "rewrite an existing attribute group saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:96
+#: engine/core/docs/drf/viewsets.py:107
msgid "rewrite some fields of an existing attribute group saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:106
+#: engine/core/docs/drf/viewsets.py:118
msgid "list all attributes (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:113
+#: engine/core/docs/drf/viewsets.py:128
msgid "retrieve a single attribute (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:120
+#: engine/core/docs/drf/viewsets.py:135
msgid "create an attribute"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:127
+#: engine/core/docs/drf/viewsets.py:142
msgid "delete an attribute"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:134
+#: engine/core/docs/drf/viewsets.py:149
msgid "rewrite an existing attribute saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:141
+#: engine/core/docs/drf/viewsets.py:156
msgid "rewrite some fields of an existing attribute saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:151
+#: engine/core/docs/drf/viewsets.py:166
msgid "list all attribute values (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:158
+#: engine/core/docs/drf/viewsets.py:176
msgid "retrieve a single attribute value (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:165
+#: engine/core/docs/drf/viewsets.py:183
msgid "create an attribute value"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:172
+#: engine/core/docs/drf/viewsets.py:193
msgid "delete an attribute value"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:179
+#: engine/core/docs/drf/viewsets.py:200
msgid "rewrite an existing attribute value saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:186
+#: engine/core/docs/drf/viewsets.py:208
msgid "rewrite some fields of an existing attribute value saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197
+#: engine/core/docs/drf/viewsets.py:219 engine/core/docs/drf/viewsets.py:220
msgid "list all categories (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205
+#: engine/core/docs/drf/viewsets.py:230 engine/core/docs/drf/viewsets.py:231
msgid "retrieve a single category (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258
+#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:286
msgid "Category UUID or slug"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221
+#: engine/core/docs/drf/viewsets.py:246 engine/core/docs/drf/viewsets.py:247
msgid "create a category"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229
+#: engine/core/docs/drf/viewsets.py:254 engine/core/docs/drf/viewsets.py:255
msgid "delete a category"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237
+#: engine/core/docs/drf/viewsets.py:262 engine/core/docs/drf/viewsets.py:263
msgid "rewrite an existing category saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:244 engine/core/docs/drf/viewsets.py:245
+#: engine/core/docs/drf/viewsets.py:270 engine/core/docs/drf/viewsets.py:272
msgid "rewrite some fields of an existing category saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704
-#: engine/core/docs/drf/viewsets.py:988
+#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:1046
#: engine/core/graphene/object_types.py:117
-#: engine/core/graphene/object_types.py:207
-#: engine/core/graphene/object_types.py:482
+#: engine/core/graphene/object_types.py:236
+#: engine/core/graphene/object_types.py:537
msgid "SEO Meta snapshot"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:253
+#: engine/core/docs/drf/viewsets.py:281
msgid "returns a snapshot of the category's SEO meta data"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:274
+#: engine/core/docs/drf/viewsets.py:302
msgid "list all orders (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:275
+#: engine/core/docs/drf/viewsets.py:303
msgid "for non-staff users, only their own orders are returned."
msgstr ""
-#: engine/core/docs/drf/viewsets.py:281
+#: engine/core/docs/drf/viewsets.py:309
msgid ""
"Case-insensitive substring search across human_readable_id, order_products."
"product.name, and order_products.product.partnumber"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:288
+#: engine/core/docs/drf/viewsets.py:316
msgid "Filter orders with buy_time >= this ISO 8601 datetime"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:293
+#: engine/core/docs/drf/viewsets.py:321
msgid "Filter orders with buy_time <= this ISO 8601 datetime"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:298
+#: engine/core/docs/drf/viewsets.py:326
msgid "Filter by exact order UUID"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:303
+#: engine/core/docs/drf/viewsets.py:331
msgid "Filter by exact human-readable order ID"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:308
+#: engine/core/docs/drf/viewsets.py:336
msgid "Filter by user's email (case-insensitive exact match)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:313
+#: engine/core/docs/drf/viewsets.py:341
msgid "Filter by user's UUID"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:318
+#: engine/core/docs/drf/viewsets.py:347
msgid "Filter by order status (case-insensitive substring match)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:324
+#: engine/core/docs/drf/viewsets.py:354
msgid ""
"Order by one of: uuid, human_readable_id, user_email, user, status, created, "
"modified, buy_time, random. Prefix with '-' for descending (e.g. '-"
"buy_time')."
msgstr ""
-#: engine/core/docs/drf/viewsets.py:336
+#: engine/core/docs/drf/viewsets.py:366
msgid "retrieve a single order (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:341
+#: engine/core/docs/drf/viewsets.py:371
msgid "Order UUID or human-readable id"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:351
+#: engine/core/docs/drf/viewsets.py:381
msgid "create an order"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:352
+#: engine/core/docs/drf/viewsets.py:382
msgid "doesn't work for non-staff users."
msgstr ""
-#: engine/core/docs/drf/viewsets.py:359
+#: engine/core/docs/drf/viewsets.py:389
msgid "delete an order"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:366
+#: engine/core/docs/drf/viewsets.py:396
msgid "rewrite an existing order saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:373
+#: engine/core/docs/drf/viewsets.py:403
msgid "rewrite some fields of an existing order saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:380
+#: engine/core/docs/drf/viewsets.py:410
msgid "purchase an order"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:382
+#: engine/core/docs/drf/viewsets.py:412
msgid ""
"finalizes the order purchase. if `force_balance` is used, the purchase is "
"completed using the user's balance; if `force_payment` is used, a "
"transaction is initiated."
msgstr ""
-#: engine/core/docs/drf/viewsets.py:397
+#: engine/core/docs/drf/viewsets.py:427
msgid "retrieve current pending order of a user"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:398
+#: engine/core/docs/drf/viewsets.py:428
msgid "retrieves a current pending order of an authenticated user"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334
+#: engine/core/docs/drf/viewsets.py:438 engine/core/graphene/mutations.py:354
msgid "purchase an order without account creation"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:409
+#: engine/core/docs/drf/viewsets.py:439
msgid "finalizes the order purchase for a non-registered user."
msgstr ""
-#: engine/core/docs/drf/viewsets.py:420
+#: engine/core/docs/drf/viewsets.py:450
msgid "add product to order"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:421
+#: engine/core/docs/drf/viewsets.py:452
msgid ""
"adds a product to an order using the provided `product_uuid` and "
"`attributes`."
msgstr ""
-#: engine/core/docs/drf/viewsets.py:429
+#: engine/core/docs/drf/viewsets.py:461
msgid "add a list of products to order, quantities will not count"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:430
+#: engine/core/docs/drf/viewsets.py:463
msgid ""
"adds a list of products to an order using the provided `product_uuid` and "
"`attributes`."
msgstr ""
-#: engine/core/docs/drf/viewsets.py:438
+#: engine/core/docs/drf/viewsets.py:472
msgid "remove product from order"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:439
+#: engine/core/docs/drf/viewsets.py:474
msgid ""
"removes a product from an order using the provided `product_uuid` and "
"`attributes`."
msgstr ""
-#: engine/core/docs/drf/viewsets.py:447
+#: engine/core/docs/drf/viewsets.py:483
msgid "remove product from order, quantities will not count"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:448
+#: engine/core/docs/drf/viewsets.py:485
msgid ""
"removes a list of products from an order using the provided `product_uuid` "
"and `attributes`"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:459
+#: engine/core/docs/drf/viewsets.py:497
msgid "list all wishlists (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:460
+#: engine/core/docs/drf/viewsets.py:498
msgid "for non-staff users, only their own wishlists are returned."
msgstr ""
-#: engine/core/docs/drf/viewsets.py:467
+#: engine/core/docs/drf/viewsets.py:508
msgid "retrieve a single wishlist (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:474
+#: engine/core/docs/drf/viewsets.py:515
msgid "create an wishlist"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:475
+#: engine/core/docs/drf/viewsets.py:516
msgid "Doesn't work for non-staff users."
msgstr ""
-#: engine/core/docs/drf/viewsets.py:482
+#: engine/core/docs/drf/viewsets.py:523
msgid "delete an wishlist"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:489
+#: engine/core/docs/drf/viewsets.py:530
msgid "rewrite an existing wishlist saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:496
+#: engine/core/docs/drf/viewsets.py:537
msgid "rewrite some fields of an existing wishlist saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:503
+#: engine/core/docs/drf/viewsets.py:544
msgid "retrieve current pending wishlist of a user"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:504
+#: engine/core/docs/drf/viewsets.py:545
msgid "retrieves a current pending wishlist of an authenticated user"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:514
+#: engine/core/docs/drf/viewsets.py:555
msgid "add product to wishlist"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:515
+#: engine/core/docs/drf/viewsets.py:557
msgid "adds a product to an wishlist using the provided `product_uuid`"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:523
+#: engine/core/docs/drf/viewsets.py:566
msgid "remove product from wishlist"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:524
+#: engine/core/docs/drf/viewsets.py:568
msgid "removes a product from an wishlist using the provided `product_uuid`"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:532
+#: engine/core/docs/drf/viewsets.py:577
msgid "add many products to wishlist"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:533
+#: engine/core/docs/drf/viewsets.py:579
msgid "adds many products to an wishlist using the provided `product_uuids`"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:541
+#: engine/core/docs/drf/viewsets.py:588
msgid "remove many products from wishlist"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:542
+#: engine/core/docs/drf/viewsets.py:590
msgid ""
"removes many products from an wishlist using the provided `product_uuids`"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:549
+#: engine/core/docs/drf/viewsets.py:598
msgid ""
"Filter by one or more attribute name/value pairs. \n"
"• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n"
@@ -588,592 +588,592 @@ msgid ""
"`b64-description=icontains-aGVhdC1jb2xk`"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:568 engine/core/docs/drf/viewsets.py:569
+#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
msgid "list all products (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:574
+#: engine/core/docs/drf/viewsets.py:623
msgid "(exact) Product UUID"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:581
+#: engine/core/docs/drf/viewsets.py:630
msgid ""
"Comma-separated list of fields to sort by. Prefix with `-` for "
"descending. \n"
"**Allowed:** uuid, rating, name, slug, created, modified, price, random"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599
+#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
msgid "retrieve a single product (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634
-#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672
-#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710
+#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683
+#: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725
+#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763
msgid "Product UUID or slug"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
+#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
#: engine/core/graphene/dashboard_mutations/product.py:80
#: engine/core/graphene/dashboard_mutations/product.py:118
#: engine/core/graphene/dashboard_mutations/product.py:166
msgid "create a product"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629
+#: engine/core/docs/drf/viewsets.py:677 engine/core/docs/drf/viewsets.py:678
msgid "rewrite an existing product, preserving non-editable fields"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
+#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:700
msgid ""
"update some fields of an existing product, preserving non-editable fields"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
+#: engine/core/docs/drf/viewsets.py:719 engine/core/docs/drf/viewsets.py:720
msgid "delete a product"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686
+#: engine/core/docs/drf/viewsets.py:738 engine/core/docs/drf/viewsets.py:739
msgid "lists all permitted feedbacks for a product"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:705
+#: engine/core/docs/drf/viewsets.py:758
msgid "returns a snapshot of the product's SEO meta data"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:726
+#: engine/core/docs/drf/viewsets.py:779
msgid "list all addresses"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:736
+#: engine/core/docs/drf/viewsets.py:789
msgid "retrieve a single address"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:746
+#: engine/core/docs/drf/viewsets.py:799
msgid "create a new address"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:810
msgid "delete an address"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:767
+#: engine/core/docs/drf/viewsets.py:820
msgid "update an entire address"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:778
+#: engine/core/docs/drf/viewsets.py:831
msgid "partially update an address"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:789
+#: engine/core/docs/drf/viewsets.py:842
msgid "autocomplete address suggestions"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:794
+#: engine/core/docs/drf/viewsets.py:848
msgid "raw data query string, please append with data from geo-IP endpoint"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:800
+#: engine/core/docs/drf/viewsets.py:855
msgid "limit the results amount, 1 < limit < 10, default: 5"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:816
+#: engine/core/docs/drf/viewsets.py:871
msgid "list all feedbacks (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:823
+#: engine/core/docs/drf/viewsets.py:881
msgid "retrieve a single feedback (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:830
+#: engine/core/docs/drf/viewsets.py:888
msgid "create a feedback"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:837
+#: engine/core/docs/drf/viewsets.py:895
msgid "delete a feedback"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:844
+#: engine/core/docs/drf/viewsets.py:902
msgid "rewrite an existing feedback saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:851
+#: engine/core/docs/drf/viewsets.py:909
msgid "rewrite some fields of an existing feedback saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:861
+#: engine/core/docs/drf/viewsets.py:919
msgid "list all order–product relations (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:871
+#: engine/core/docs/drf/viewsets.py:929
msgid "retrieve a single order–product relation (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:881
+#: engine/core/docs/drf/viewsets.py:939
msgid "create a new order–product relation"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:891
+#: engine/core/docs/drf/viewsets.py:949
msgid "replace an existing order–product relation"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:901
+#: engine/core/docs/drf/viewsets.py:959
msgid "partially update an existing order–product relation"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:911
+#: engine/core/docs/drf/viewsets.py:969
msgid "delete an order–product relation"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:921
+#: engine/core/docs/drf/viewsets.py:979
msgid "add or remove feedback on an order–product relation"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:938
+#: engine/core/docs/drf/viewsets.py:996
msgid "list all brands (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:945
+#: engine/core/docs/drf/viewsets.py:1003
msgid "retrieve a single brand (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993
+#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051
msgid "Brand UUID or slug"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:960
+#: engine/core/docs/drf/viewsets.py:1018
msgid "create a brand"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:967
+#: engine/core/docs/drf/viewsets.py:1025
msgid "delete a brand"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:974
+#: engine/core/docs/drf/viewsets.py:1032
msgid "rewrite an existing brand saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:981
+#: engine/core/docs/drf/viewsets.py:1039
msgid "rewrite some fields of an existing brand saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1006
+#: engine/core/docs/drf/viewsets.py:1064
msgid "list all vendors (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1013
+#: engine/core/docs/drf/viewsets.py:1074
msgid "retrieve a single vendor (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1020
+#: engine/core/docs/drf/viewsets.py:1081
msgid "create a vendor"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1027
+#: engine/core/docs/drf/viewsets.py:1088
msgid "delete a vendor"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1034
+#: engine/core/docs/drf/viewsets.py:1095
msgid "rewrite an existing vendor saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1041
+#: engine/core/docs/drf/viewsets.py:1102
msgid "rewrite some fields of an existing vendor saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1051
+#: engine/core/docs/drf/viewsets.py:1112
msgid "list all product images (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1058
+#: engine/core/docs/drf/viewsets.py:1122
msgid "retrieve a single product image (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1065
+#: engine/core/docs/drf/viewsets.py:1129
msgid "create a product image"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1072
+#: engine/core/docs/drf/viewsets.py:1139
msgid "delete a product image"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1079
+#: engine/core/docs/drf/viewsets.py:1146
msgid "rewrite an existing product image saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1086
+#: engine/core/docs/drf/viewsets.py:1154
msgid "rewrite some fields of an existing product image saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1096
+#: engine/core/docs/drf/viewsets.py:1165
msgid "list all promo codes (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1103
+#: engine/core/docs/drf/viewsets.py:1175
msgid "retrieve a single promo code (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1110
+#: engine/core/docs/drf/viewsets.py:1182
msgid "create a promo code"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1117
+#: engine/core/docs/drf/viewsets.py:1189
msgid "delete a promo code"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1124
+#: engine/core/docs/drf/viewsets.py:1196
msgid "rewrite an existing promo code saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1131
+#: engine/core/docs/drf/viewsets.py:1203
msgid "rewrite some fields of an existing promo code saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1141
+#: engine/core/docs/drf/viewsets.py:1213
msgid "list all promotions (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1148
+#: engine/core/docs/drf/viewsets.py:1223
msgid "retrieve a single promotion (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1155
+#: engine/core/docs/drf/viewsets.py:1230
msgid "create a promotion"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1162
+#: engine/core/docs/drf/viewsets.py:1237
msgid "delete a promotion"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1169
+#: engine/core/docs/drf/viewsets.py:1244
msgid "rewrite an existing promotion saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1176
+#: engine/core/docs/drf/viewsets.py:1251
msgid "rewrite some fields of an existing promotion saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1186
+#: engine/core/docs/drf/viewsets.py:1261
msgid "list all stocks (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1193
+#: engine/core/docs/drf/viewsets.py:1268
msgid "retrieve a single stock (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1200
+#: engine/core/docs/drf/viewsets.py:1275
msgid "create a stock record"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1207
+#: engine/core/docs/drf/viewsets.py:1282
msgid "delete a stock record"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1214
+#: engine/core/docs/drf/viewsets.py:1289
msgid "rewrite an existing stock record saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1221
+#: engine/core/docs/drf/viewsets.py:1297
msgid "rewrite some fields of an existing stock record saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1231
+#: engine/core/docs/drf/viewsets.py:1308
msgid "list all product tags (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1238
+#: engine/core/docs/drf/viewsets.py:1318
msgid "retrieve a single product tag (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1245
+#: engine/core/docs/drf/viewsets.py:1325
msgid "create a product tag"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1252
+#: engine/core/docs/drf/viewsets.py:1335
msgid "delete a product tag"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1259
+#: engine/core/docs/drf/viewsets.py:1342
msgid "rewrite an existing product tag saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1266
+#: engine/core/docs/drf/viewsets.py:1350
msgid "rewrite some fields of an existing product tag saving non-editables"
msgstr ""
-#: engine/core/elasticsearch/__init__.py:122
-#: engine/core/elasticsearch/__init__.py:570
+#: engine/core/elasticsearch/__init__.py:127
+#: engine/core/elasticsearch/__init__.py:627
msgid "no search term provided."
msgstr ""
-#: engine/core/filters.py:69 engine/core/filters.py:426
-#: engine/core/filters.py:553
+#: engine/core/filters.py:78 engine/core/filters.py:484
+#: engine/core/filters.py:625
msgid "Search"
msgstr ""
-#: engine/core/filters.py:70 engine/core/filters.py:583
-#: engine/core/filters.py:612
+#: engine/core/filters.py:79 engine/core/filters.py:662
+#: engine/core/filters.py:691
msgid "UUID"
msgstr ""
-#: engine/core/filters.py:71 engine/core/filters.py:428
-#: engine/core/filters.py:555
+#: engine/core/filters.py:80 engine/core/filters.py:487
+#: engine/core/filters.py:627
msgid "Name"
msgstr ""
-#: engine/core/filters.py:72 engine/core/filters.py:557
+#: engine/core/filters.py:82 engine/core/filters.py:630
msgid "Categories"
msgstr ""
-#: engine/core/filters.py:74
+#: engine/core/filters.py:86
msgid "Categories Slugs"
msgstr ""
-#: engine/core/filters.py:75 engine/core/filters.py:436
+#: engine/core/filters.py:88 engine/core/filters.py:495
msgid "Tags"
msgstr ""
-#: engine/core/filters.py:76
+#: engine/core/filters.py:90
msgid "Min Price"
msgstr ""
-#: engine/core/filters.py:77
+#: engine/core/filters.py:93
msgid "Max Price"
msgstr ""
-#: engine/core/filters.py:78
+#: engine/core/filters.py:95
msgid "Is Active"
msgstr ""
-#: engine/core/filters.py:79
+#: engine/core/filters.py:96
msgid "Brand"
msgstr ""
-#: engine/core/filters.py:80
+#: engine/core/filters.py:97
msgid "Attributes"
msgstr ""
-#: engine/core/filters.py:81
+#: engine/core/filters.py:99
msgid "Quantity"
msgstr ""
-#: engine/core/filters.py:82 engine/core/filters.py:430
-#: engine/core/filters.py:556 engine/core/models.py:321
-#: engine/core/models.py:489 engine/core/models.py:644
+#: engine/core/filters.py:101 engine/core/filters.py:489
+#: engine/core/filters.py:628 engine/core/models.py:327
+#: engine/core/models.py:508 engine/core/models.py:665
msgid "Slug"
msgstr ""
-#: engine/core/filters.py:83
+#: engine/core/filters.py:102
msgid "Is Digital"
msgstr ""
-#: engine/core/filters.py:84
+#: engine/core/filters.py:104
msgid "Include sub-categories"
msgstr ""
-#: engine/core/filters.py:87
+#: engine/core/filters.py:108
msgid "Include personal ordered"
msgstr ""
-#: engine/core/filters.py:89 engine/core/models.py:648
+#: engine/core/filters.py:110 engine/core/models.py:669
msgid "SKU"
msgstr ""
-#: engine/core/filters.py:184
+#: engine/core/filters.py:212
msgid "there must be a category_uuid to use include_subcategories flag"
msgstr ""
-#: engine/core/filters.py:353
+#: engine/core/filters.py:398
msgid "Search (ID, product name or part number)"
msgstr ""
-#: engine/core/filters.py:356
+#: engine/core/filters.py:402
msgid "Bought after (inclusive)"
msgstr ""
-#: engine/core/filters.py:357
+#: engine/core/filters.py:405
msgid "Bought before (inclusive)"
msgstr ""
-#: engine/core/filters.py:360 engine/core/filters.py:407
-#: engine/core/filters.py:614
+#: engine/core/filters.py:410 engine/core/filters.py:461
+#: engine/core/filters.py:696
msgid "User email"
msgstr ""
-#: engine/core/filters.py:361 engine/core/filters.py:408
-#: engine/core/filters.py:592 engine/core/filters.py:613
+#: engine/core/filters.py:413 engine/core/filters.py:464
+#: engine/core/filters.py:671 engine/core/filters.py:693
msgid "User UUID"
msgstr ""
-#: engine/core/filters.py:362
+#: engine/core/filters.py:415
msgid "Status"
msgstr ""
-#: engine/core/filters.py:366
+#: engine/core/filters.py:419
msgid "Human Readable ID"
msgstr ""
-#: engine/core/filters.py:429
+#: engine/core/filters.py:488
msgid "Parent"
msgstr ""
-#: engine/core/filters.py:433
+#: engine/core/filters.py:492
msgid "Whole category(has at least 1 product or not)"
msgstr ""
-#: engine/core/filters.py:437
+#: engine/core/filters.py:496
msgid "Level"
msgstr ""
-#: engine/core/filters.py:587
+#: engine/core/filters.py:666
msgid "Product UUID"
msgstr ""
-#: engine/core/graphene/mutations.py:40
+#: engine/core/graphene/mutations.py:41
msgid "key to look for in or set into the cache"
msgstr ""
-#: engine/core/graphene/mutations.py:41
+#: engine/core/graphene/mutations.py:43
msgid "data to store in cache"
msgstr ""
-#: engine/core/graphene/mutations.py:44
+#: engine/core/graphene/mutations.py:46
msgid "timeout in seconds to set the data for into the cache"
msgstr ""
-#: engine/core/graphene/mutations.py:47
+#: engine/core/graphene/mutations.py:49
msgid "cached data"
msgstr ""
-#: engine/core/graphene/mutations.py:62
+#: engine/core/graphene/mutations.py:64
msgid "camelized JSON data from the requested URL"
msgstr ""
-#: engine/core/graphene/mutations.py:67 engine/core/views.py:257
+#: engine/core/graphene/mutations.py:69 engine/core/views.py:249
msgid "only URLs starting with http(s):// are allowed"
msgstr ""
-#: engine/core/graphene/mutations.py:83
+#: engine/core/graphene/mutations.py:87
msgid "add a product to the order"
msgstr ""
-#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131
-#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287
+#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139
+#: engine/core/graphene/mutations.py:255 engine/core/graphene/mutations.py:307
#, python-brace-format
msgid "order {order_uuid} not found"
msgstr ""
-#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159
+#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167
msgid "remove a product from the order"
msgstr ""
-#: engine/core/graphene/mutations.py:137
+#: engine/core/graphene/mutations.py:145
msgid "remove all products from the order"
msgstr ""
-#: engine/core/graphene/mutations.py:182
+#: engine/core/graphene/mutations.py:190
msgid "buy an order"
msgstr ""
-#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265
+#: engine/core/graphene/mutations.py:221 engine/core/graphene/mutations.py:283
msgid "please provide either order_uuid or order_hr_id - mutually exclusive"
msgstr ""
-#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501
-#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712
+#: engine/core/graphene/mutations.py:250 engine/core/graphene/mutations.py:525
+#: engine/core/graphene/mutations.py:574 engine/core/viewsets.py:753
msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr ""
-#: engine/core/graphene/mutations.py:245
+#: engine/core/graphene/mutations.py:261
msgid "perform an action on a list of products in the order"
msgstr ""
-#: engine/core/graphene/mutations.py:250
+#: engine/core/graphene/mutations.py:266
msgid "remove/add"
msgstr ""
-#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323
+#: engine/core/graphene/mutations.py:302 engine/core/graphene/mutations.py:343
msgid "action must be either add or remove"
msgstr ""
-#: engine/core/graphene/mutations.py:293
+#: engine/core/graphene/mutations.py:313
msgid "perform an action on a list of products in the wishlist"
msgstr ""
-#: engine/core/graphene/mutations.py:311
+#: engine/core/graphene/mutations.py:331
msgid "please provide wishlist_uuid value"
msgstr ""
-#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404
-#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460
-#: engine/core/graphene/mutations.py:504
+#: engine/core/graphene/mutations.py:348 engine/core/graphene/mutations.py:424
+#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480
+#: engine/core/graphene/mutations.py:530
#, python-brace-format
msgid "wishlist {wishlist_uuid} not found"
msgstr ""
-#: engine/core/graphene/mutations.py:382
+#: engine/core/graphene/mutations.py:402
msgid "add a product to the wishlist"
msgstr ""
-#: engine/core/graphene/mutations.py:410
+#: engine/core/graphene/mutations.py:430
msgid "remove a product from the wishlist"
msgstr ""
-#: engine/core/graphene/mutations.py:438
+#: engine/core/graphene/mutations.py:458
msgid "remove all products from the wishlist"
msgstr ""
-#: engine/core/graphene/mutations.py:466
+#: engine/core/graphene/mutations.py:486
msgid "buy all products from the wishlist"
msgstr ""
-#: engine/core/graphene/mutations.py:510
+#: engine/core/graphene/mutations.py:536
msgid "buy a product"
msgstr ""
-#: engine/core/graphene/mutations.py:516
+#: engine/core/graphene/mutations.py:543
msgid ""
"please send the attributes as the string formatted like attr1=value1,"
"attr2=value2"
msgstr ""
-#: engine/core/graphene/mutations.py:549
+#: engine/core/graphene/mutations.py:581
msgid "add or delete a feedback for orderproduct"
msgstr ""
-#: engine/core/graphene/mutations.py:573
+#: engine/core/graphene/mutations.py:607
msgid "action must be either `add` or `remove`"
msgstr ""
-#: engine/core/graphene/mutations.py:576
+#: engine/core/graphene/mutations.py:610
#, python-brace-format
msgid "order product {order_product_uuid} not found"
msgstr ""
-#: engine/core/graphene/mutations.py:582
+#: engine/core/graphene/mutations.py:617
msgid "original address string provided by the user"
msgstr ""
-#: engine/core/graphene/mutations.py:618 engine/core/models.py:955
-#: engine/core/models.py:968 engine/core/models.py:1383
-#: engine/core/models.py:1412 engine/core/models.py:1437
-#: engine/core/viewsets.py:715
+#: engine/core/graphene/mutations.py:654 engine/core/models.py:978
+#: engine/core/models.py:991 engine/core/models.py:1435
+#: engine/core/models.py:1466 engine/core/models.py:1497
+#: engine/core/viewsets.py:760
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr ""
-#: engine/core/graphene/mutations.py:632
+#: engine/core/graphene/mutations.py:668
msgid "limit must be between 1 and 10"
msgstr ""
-#: engine/core/graphene/mutations.py:681
+#: engine/core/graphene/mutations.py:717
msgid "elasticsearch - works like a charm"
msgstr ""
#: engine/core/graphene/object_types.py:82
-#: engine/core/graphene/object_types.py:370
-#: engine/core/graphene/object_types.py:417 engine/core/models.py:772
-#: engine/core/models.py:1250 engine/core/models.py:1897
+#: engine/core/graphene/object_types.py:417
+#: engine/core/graphene/object_types.py:468 engine/core/models.py:795
+#: engine/core/models.py:1289 engine/core/models.py:2021
msgid "attributes"
msgstr ""
@@ -1186,139 +1186,139 @@ msgid "groups of attributes"
msgstr ""
#: engine/core/graphene/object_types.py:116
-#: engine/core/graphene/object_types.py:193
-#: engine/core/graphene/object_types.py:223 engine/core/models.py:432
+#: engine/core/graphene/object_types.py:214
+#: engine/core/graphene/object_types.py:252 engine/core/models.py:451
msgid "categories"
msgstr ""
-#: engine/core/graphene/object_types.py:124 engine/core/models.py:503
+#: engine/core/graphene/object_types.py:132 engine/core/models.py:522
msgid "brands"
msgstr ""
-#: engine/core/graphene/object_types.py:195
+#: engine/core/graphene/object_types.py:216
msgid "category image url"
msgstr ""
-#: engine/core/graphene/object_types.py:196
-#: engine/core/graphene/object_types.py:317 engine/core/models.py:283
+#: engine/core/graphene/object_types.py:217
+#: engine/core/graphene/object_types.py:362 engine/core/models.py:289
msgid "markup percentage"
msgstr ""
-#: engine/core/graphene/object_types.py:199
+#: engine/core/graphene/object_types.py:221
msgid "which attributes and values can be used for filtering this category."
msgstr ""
-#: engine/core/graphene/object_types.py:203
+#: engine/core/graphene/object_types.py:227
msgid "minimum and maximum prices for products in this category, if available."
msgstr ""
-#: engine/core/graphene/object_types.py:205
+#: engine/core/graphene/object_types.py:231
msgid "tags for this category"
msgstr ""
-#: engine/core/graphene/object_types.py:206
+#: engine/core/graphene/object_types.py:234
msgid "products in this category"
msgstr ""
-#: engine/core/graphene/object_types.py:324 engine/core/models.py:188
+#: engine/core/graphene/object_types.py:369 engine/core/models.py:194
msgid "vendors"
msgstr ""
-#: engine/core/graphene/object_types.py:328
+#: engine/core/graphene/object_types.py:373
msgid "Latitude (Y coordinate)"
msgstr ""
-#: engine/core/graphene/object_types.py:329
+#: engine/core/graphene/object_types.py:374
msgid "Longitude (X coordinate)"
msgstr ""
-#: engine/core/graphene/object_types.py:358
+#: engine/core/graphene/object_types.py:403
msgid "comment"
msgstr ""
-#: engine/core/graphene/object_types.py:359
-#: engine/core/graphene/object_types.py:483
+#: engine/core/graphene/object_types.py:405
+#: engine/core/graphene/object_types.py:539
msgid "rating value from 1 to 10, inclusive, or 0 if not set."
msgstr ""
-#: engine/core/graphene/object_types.py:366
+#: engine/core/graphene/object_types.py:413
msgid "represents feedback from a user."
msgstr ""
-#: engine/core/graphene/object_types.py:371
-#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244
+#: engine/core/graphene/object_types.py:418
+#: engine/core/graphene/object_types.py:469 engine/core/models.py:1283
msgid "notifications"
msgstr ""
-#: engine/core/graphene/object_types.py:372
+#: engine/core/graphene/object_types.py:420
msgid "download url for this order product if applicable"
msgstr ""
-#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736
+#: engine/core/graphene/object_types.py:422 engine/core/models.py:1848
msgid "feedback"
msgstr ""
-#: engine/core/graphene/object_types.py:407
+#: engine/core/graphene/object_types.py:456
msgid "a list of order products in this order"
msgstr ""
-#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214
+#: engine/core/graphene/object_types.py:458 engine/core/models.py:1253
msgid "billing address"
msgstr ""
-#: engine/core/graphene/object_types.py:412
+#: engine/core/graphene/object_types.py:462
msgid ""
"shipping address for this order, leave blank if same as billing address or "
"if not applicable"
msgstr ""
-#: engine/core/graphene/object_types.py:414
+#: engine/core/graphene/object_types.py:465
msgid "total price of this order"
msgstr ""
-#: engine/core/graphene/object_types.py:415
+#: engine/core/graphene/object_types.py:466
msgid "total quantity of products in order"
msgstr ""
-#: engine/core/graphene/object_types.py:416
+#: engine/core/graphene/object_types.py:467
msgid "are all products in the order digital"
msgstr ""
-#: engine/core/graphene/object_types.py:419
+#: engine/core/graphene/object_types.py:471
msgid "transactions for this order"
msgstr ""
-#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278
+#: engine/core/graphene/object_types.py:491 engine/core/models.py:1317
msgid "orders"
msgstr ""
-#: engine/core/graphene/object_types.py:459
+#: engine/core/graphene/object_types.py:512
msgid "image url"
msgstr ""
-#: engine/core/graphene/object_types.py:466
+#: engine/core/graphene/object_types.py:519
msgid "product's images"
msgstr ""
-#: engine/core/graphene/object_types.py:473 engine/core/models.py:431
-#: engine/core/models.py:586
+#: engine/core/graphene/object_types.py:526 engine/core/models.py:450
+#: engine/core/models.py:607
msgid "category"
msgstr ""
-#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737
+#: engine/core/graphene/object_types.py:528 engine/core/models.py:1849
msgid "feedbacks"
msgstr ""
-#: engine/core/graphene/object_types.py:476 engine/core/models.py:502
-#: engine/core/models.py:595
+#: engine/core/graphene/object_types.py:529 engine/core/models.py:521
+#: engine/core/models.py:616
msgid "brand"
msgstr ""
-#: engine/core/graphene/object_types.py:477 engine/core/models.py:106
+#: engine/core/graphene/object_types.py:531 engine/core/models.py:106
msgid "attribute groups"
msgstr ""
-#: engine/core/graphene/object_types.py:478
+#: engine/core/graphene/object_types.py:533
#: engine/core/templates/digital_order_created_email.html:111
#: engine/core/templates/digital_order_delivered_email.html:109
#: engine/core/templates/shipped_order_created_email.html:109
@@ -1326,7 +1326,7 @@ msgstr ""
msgid "price"
msgstr ""
-#: engine/core/graphene/object_types.py:479
+#: engine/core/graphene/object_types.py:534
#: engine/core/templates/digital_order_created_email.html:110
#: engine/core/templates/digital_order_delivered_email.html:108
#: engine/core/templates/shipped_order_created_email.html:108
@@ -1334,39 +1334,39 @@ msgstr ""
msgid "quantity"
msgstr ""
-#: engine/core/graphene/object_types.py:480
+#: engine/core/graphene/object_types.py:535
msgid "number of feedbacks"
msgstr ""
-#: engine/core/graphene/object_types.py:481
+#: engine/core/graphene/object_types.py:536
msgid "only available for personal orders"
msgstr ""
-#: engine/core/graphene/object_types.py:484
+#: engine/core/graphene/object_types.py:541
msgid "discount price"
msgstr ""
-#: engine/core/graphene/object_types.py:508 engine/core/models.py:658
+#: engine/core/graphene/object_types.py:565 engine/core/models.py:679
msgid "products"
msgstr ""
-#: engine/core/graphene/object_types.py:611
+#: engine/core/graphene/object_types.py:675
msgid "promocodes"
msgstr ""
-#: engine/core/graphene/object_types.py:621
+#: engine/core/graphene/object_types.py:690
msgid "products on sale"
msgstr ""
-#: engine/core/graphene/object_types.py:628 engine/core/models.py:904
+#: engine/core/graphene/object_types.py:698 engine/core/models.py:927
msgid "promotions"
msgstr ""
-#: engine/core/graphene/object_types.py:632 engine/core/models.py:187
+#: engine/core/graphene/object_types.py:702 engine/core/models.py:193
msgid "vendor"
msgstr ""
-#: engine/core/graphene/object_types.py:633 engine/core/models.py:657
+#: engine/core/graphene/object_types.py:703 engine/core/models.py:678
#: engine/core/templates/digital_order_created_email.html:109
#: engine/core/templates/digital_order_delivered_email.html:107
#: engine/core/templates/shipped_order_created_email.html:107
@@ -1374,98 +1374,98 @@ msgstr ""
msgid "product"
msgstr ""
-#: engine/core/graphene/object_types.py:644 engine/core/models.py:927
+#: engine/core/graphene/object_types.py:715 engine/core/models.py:950
msgid "wishlisted products"
msgstr ""
-#: engine/core/graphene/object_types.py:650 engine/core/models.py:944
+#: engine/core/graphene/object_types.py:722 engine/core/models.py:967
msgid "wishlists"
msgstr ""
-#: engine/core/graphene/object_types.py:654
+#: engine/core/graphene/object_types.py:727
msgid "tagged products"
msgstr ""
-#: engine/core/graphene/object_types.py:661 engine/core/models.py:224
-#: engine/core/models.py:601
+#: engine/core/graphene/object_types.py:735 engine/core/models.py:230
+#: engine/core/models.py:622
msgid "product tags"
msgstr ""
-#: engine/core/graphene/object_types.py:665
+#: engine/core/graphene/object_types.py:740
msgid "tagged categories"
msgstr ""
-#: engine/core/graphene/object_types.py:672
+#: engine/core/graphene/object_types.py:748
msgid "categories tags"
msgstr ""
-#: engine/core/graphene/object_types.py:676
+#: engine/core/graphene/object_types.py:752
msgid "project name"
msgstr ""
-#: engine/core/graphene/object_types.py:677
+#: engine/core/graphene/object_types.py:753
msgid "company name"
msgstr ""
-#: engine/core/graphene/object_types.py:678
+#: engine/core/graphene/object_types.py:754
msgid "company address"
msgstr ""
-#: engine/core/graphene/object_types.py:679
+#: engine/core/graphene/object_types.py:755
msgid "company phone number"
msgstr ""
-#: engine/core/graphene/object_types.py:680
+#: engine/core/graphene/object_types.py:758
msgid "email from, sometimes it must be used instead of host user value"
msgstr ""
-#: engine/core/graphene/object_types.py:681
+#: engine/core/graphene/object_types.py:761
msgid "email host user"
msgstr ""
-#: engine/core/graphene/object_types.py:682
+#: engine/core/graphene/object_types.py:762
msgid "maximum amount for payment"
msgstr ""
-#: engine/core/graphene/object_types.py:683
+#: engine/core/graphene/object_types.py:763
msgid "minimum amount for payment"
msgstr ""
-#: engine/core/graphene/object_types.py:684
+#: engine/core/graphene/object_types.py:764
msgid "analytics data"
msgstr ""
-#: engine/core/graphene/object_types.py:685
+#: engine/core/graphene/object_types.py:765
msgid "advertisement data"
msgstr ""
-#: engine/core/graphene/object_types.py:688
+#: engine/core/graphene/object_types.py:768
msgid "company configuration"
msgstr ""
-#: engine/core/graphene/object_types.py:692
+#: engine/core/graphene/object_types.py:772
msgid "language code"
msgstr ""
-#: engine/core/graphene/object_types.py:693
+#: engine/core/graphene/object_types.py:773
msgid "language name"
msgstr ""
-#: engine/core/graphene/object_types.py:694
+#: engine/core/graphene/object_types.py:774
msgid "language flag, if exists :)"
msgstr ""
-#: engine/core/graphene/object_types.py:697
+#: engine/core/graphene/object_types.py:777
msgid "supported languages"
msgstr ""
-#: engine/core/graphene/object_types.py:728
-#: engine/core/graphene/object_types.py:729
-#: engine/core/graphene/object_types.py:730
+#: engine/core/graphene/object_types.py:809
+#: engine/core/graphene/object_types.py:812
+#: engine/core/graphene/object_types.py:815
msgid "products search results"
msgstr ""
-#: engine/core/graphene/object_types.py:731
+#: engine/core/graphene/object_types.py:817
msgid "posts search results"
msgstr ""
@@ -1489,7 +1489,7 @@ msgstr ""
msgid "attribute group's name"
msgstr ""
-#: engine/core/models.py:105 engine/core/models.py:734
+#: engine/core/models.py:105 engine/core/models.py:755
msgid "attribute group"
msgstr ""
@@ -1504,47 +1504,47 @@ msgid ""
"use in systems that interact with third-party vendors."
msgstr ""
-#: engine/core/models.py:124
+#: engine/core/models.py:125
msgid "stores credentials and endpoints required for vendor communication"
msgstr ""
-#: engine/core/models.py:125
+#: engine/core/models.py:127
msgid "authentication info"
msgstr ""
-#: engine/core/models.py:130
+#: engine/core/models.py:132
msgid "define the markup for products retrieved from this vendor"
msgstr ""
-#: engine/core/models.py:131
+#: engine/core/models.py:133
msgid "vendor markup percentage"
msgstr ""
-#: engine/core/models.py:135
+#: engine/core/models.py:137
msgid "name of this vendor"
msgstr ""
-#: engine/core/models.py:136
+#: engine/core/models.py:138
msgid "vendor name"
msgstr ""
-#: engine/core/models.py:147
+#: engine/core/models.py:153
msgid "response file"
msgstr ""
-#: engine/core/models.py:148
+#: engine/core/models.py:154
msgid "vendor's last processing response"
msgstr ""
-#: engine/core/models.py:154
+#: engine/core/models.py:160
msgid "vendor's integration file path"
msgstr ""
-#: engine/core/models.py:155
+#: engine/core/models.py:161
msgid "integration path"
msgstr ""
-#: engine/core/models.py:197
+#: engine/core/models.py:203
msgid ""
"Represents a product tag used for classifying or identifying products. The "
"ProductTag class is designed to uniquely identify and classify products "
@@ -1553,42 +1553,42 @@ msgid ""
"metadata customization for administrative purposes."
msgstr ""
-#: engine/core/models.py:209 engine/core/models.py:240
+#: engine/core/models.py:215 engine/core/models.py:246
msgid "internal tag identifier for the product tag"
msgstr ""
-#: engine/core/models.py:210 engine/core/models.py:241
+#: engine/core/models.py:216 engine/core/models.py:247
msgid "tag name"
msgstr ""
-#: engine/core/models.py:214 engine/core/models.py:245
+#: engine/core/models.py:220 engine/core/models.py:251
msgid "user-friendly name for the product tag"
msgstr ""
-#: engine/core/models.py:215 engine/core/models.py:246
+#: engine/core/models.py:221 engine/core/models.py:252
msgid "tag display name"
msgstr ""
-#: engine/core/models.py:223
+#: engine/core/models.py:229
msgid "product tag"
msgstr ""
-#: engine/core/models.py:229
+#: engine/core/models.py:235
msgid ""
"Represents a category tag used for products. This class models a category "
"tag that can be used to associate and classify products. It includes "
"attributes for an internal tag identifier and a user-friendly display name."
msgstr ""
-#: engine/core/models.py:254
+#: engine/core/models.py:260
msgid "category tag"
msgstr ""
-#: engine/core/models.py:255 engine/core/models.py:327
+#: engine/core/models.py:261 engine/core/models.py:333
msgid "category tags"
msgstr ""
-#: engine/core/models.py:260
+#: engine/core/models.py:266
msgid ""
"Represents a category entity to organize and group related items in a "
"hierarchical structure. Categories may have hierarchical relationships with "
@@ -1601,51 +1601,51 @@ msgid ""
"priority."
msgstr ""
-#: engine/core/models.py:274
+#: engine/core/models.py:280
msgid "upload an image representing this category"
msgstr ""
-#: engine/core/models.py:277
+#: engine/core/models.py:283
msgid "category image"
msgstr ""
-#: engine/core/models.py:282
+#: engine/core/models.py:288
msgid "define a markup percentage for products in this category"
msgstr ""
-#: engine/core/models.py:291
+#: engine/core/models.py:297
msgid "parent of this category to form a hierarchical structure"
msgstr ""
-#: engine/core/models.py:292
+#: engine/core/models.py:298
msgid "parent category"
msgstr ""
-#: engine/core/models.py:297
+#: engine/core/models.py:303
msgid "category name"
msgstr ""
-#: engine/core/models.py:298
+#: engine/core/models.py:304
msgid "provide a name for this category"
msgstr ""
-#: engine/core/models.py:305
+#: engine/core/models.py:311
msgid "add a detailed description for this category"
msgstr ""
-#: engine/core/models.py:306
+#: engine/core/models.py:312
msgid "category description"
msgstr ""
-#: engine/core/models.py:326
+#: engine/core/models.py:332
msgid "tags that help describe or group this category"
msgstr ""
-#: engine/core/models.py:333 engine/core/models.py:495
+#: engine/core/models.py:339 engine/core/models.py:514
msgid "priority"
msgstr ""
-#: engine/core/models.py:438
+#: engine/core/models.py:457
msgid ""
"Represents a Brand object in the system. This class handles information and "
"attributes related to a brand, including its name, logos, description, "
@@ -1653,47 +1653,47 @@ msgid ""
"organization and representation of brand-related data within the application."
msgstr ""
-#: engine/core/models.py:448
+#: engine/core/models.py:467
msgid "name of this brand"
msgstr ""
-#: engine/core/models.py:449
+#: engine/core/models.py:468
msgid "brand name"
msgstr ""
-#: engine/core/models.py:456
+#: engine/core/models.py:475
msgid "upload a logo representing this brand"
msgstr ""
-#: engine/core/models.py:458
+#: engine/core/models.py:477
msgid "brand small image"
msgstr ""
-#: engine/core/models.py:464
+#: engine/core/models.py:483
msgid "upload a big logo representing this brand"
msgstr ""
-#: engine/core/models.py:466
+#: engine/core/models.py:485
msgid "brand big image"
msgstr ""
-#: engine/core/models.py:471
+#: engine/core/models.py:490
msgid "add a detailed description of the brand"
msgstr ""
-#: engine/core/models.py:472
+#: engine/core/models.py:491
msgid "brand description"
msgstr ""
-#: engine/core/models.py:477
+#: engine/core/models.py:496
msgid "optional categories that this brand is associated with"
msgstr ""
-#: engine/core/models.py:478
+#: engine/core/models.py:497
msgid "associated categories"
msgstr ""
-#: engine/core/models.py:508
+#: engine/core/models.py:527
msgid ""
"Represents the stock of a product managed in the system. This class provides "
"details about the relationship between vendors, products, and their stock "
@@ -1703,72 +1703,72 @@ msgid ""
"from various vendors."
msgstr ""
-#: engine/core/models.py:520
+#: engine/core/models.py:539
msgid "the vendor supplying this product stock"
msgstr ""
-#: engine/core/models.py:521
+#: engine/core/models.py:540
msgid "associated vendor"
msgstr ""
-#: engine/core/models.py:525
+#: engine/core/models.py:544
msgid "final price to the customer after markups"
msgstr ""
-#: engine/core/models.py:526
+#: engine/core/models.py:545
msgid "selling price"
msgstr ""
-#: engine/core/models.py:531
+#: engine/core/models.py:550
msgid "the product associated with this stock entry"
msgstr ""
-#: engine/core/models.py:532 engine/core/models.py:797
-#: engine/core/models.py:843 engine/core/models.py:1792
+#: engine/core/models.py:551 engine/core/models.py:820
+#: engine/core/models.py:866 engine/core/models.py:1904
msgid "associated product"
msgstr ""
-#: engine/core/models.py:539
+#: engine/core/models.py:558
msgid "the price paid to the vendor for this product"
msgstr ""
-#: engine/core/models.py:540
+#: engine/core/models.py:559
msgid "vendor purchase price"
msgstr ""
-#: engine/core/models.py:544
+#: engine/core/models.py:563
msgid "available quantity of the product in stock"
msgstr ""
-#: engine/core/models.py:545
+#: engine/core/models.py:564
msgid "quantity in stock"
msgstr ""
-#: engine/core/models.py:549
+#: engine/core/models.py:568
msgid "vendor-assigned SKU for identifying the product"
msgstr ""
-#: engine/core/models.py:550
+#: engine/core/models.py:569
msgid "vendor sku"
msgstr ""
-#: engine/core/models.py:556
+#: engine/core/models.py:575
msgid "digital file associated with this stock if applicable"
msgstr ""
-#: engine/core/models.py:557
+#: engine/core/models.py:576
msgid "digital file"
msgstr ""
-#: engine/core/models.py:560
+#: engine/core/models.py:580
msgid "system attributes"
msgstr ""
-#: engine/core/models.py:567
+#: engine/core/models.py:588
msgid "stock entries"
msgstr ""
-#: engine/core/models.py:572
+#: engine/core/models.py:593
msgid ""
"Represents a product with attributes such as category, brand, tags, digital "
"status, name, description, part number, and slug. Provides related utility "
@@ -1780,55 +1780,55 @@ msgid ""
"product data and its associated information within an application."
msgstr ""
-#: engine/core/models.py:585
+#: engine/core/models.py:606
msgid "category this product belongs to"
msgstr ""
-#: engine/core/models.py:594
+#: engine/core/models.py:615
msgid "optionally associate this product with a brand"
msgstr ""
-#: engine/core/models.py:600
+#: engine/core/models.py:621
msgid "tags that help describe or group this product"
msgstr ""
-#: engine/core/models.py:605
+#: engine/core/models.py:626
msgid "indicates whether this product is digitally delivered"
msgstr ""
-#: engine/core/models.py:606
+#: engine/core/models.py:627
msgid "is product digital"
msgstr ""
-#: engine/core/models.py:612
+#: engine/core/models.py:633
msgid "provide a clear identifying name for the product"
msgstr ""
-#: engine/core/models.py:613
+#: engine/core/models.py:634
msgid "product name"
msgstr ""
-#: engine/core/models.py:619 engine/core/models.py:892
+#: engine/core/models.py:640 engine/core/models.py:915
msgid "add a detailed description of the product"
msgstr ""
-#: engine/core/models.py:620
+#: engine/core/models.py:641
msgid "product description"
msgstr ""
-#: engine/core/models.py:627
+#: engine/core/models.py:648
msgid "part number for this product"
msgstr ""
-#: engine/core/models.py:628
+#: engine/core/models.py:649
msgid "part number"
msgstr ""
-#: engine/core/models.py:647
+#: engine/core/models.py:668
msgid "stock keeping unit for this product"
msgstr ""
-#: engine/core/models.py:720
+#: engine/core/models.py:741
msgid ""
"Represents an attribute in the system. This class is used to define and "
"manage attributes, which are customizable pieces of data that can be "
@@ -1838,83 +1838,83 @@ msgid ""
"for dynamic and flexible data structuring."
msgstr ""
-#: engine/core/models.py:733
+#: engine/core/models.py:754
msgid "group of this attribute"
msgstr ""
-#: engine/core/models.py:739
+#: engine/core/models.py:760
msgid "string"
msgstr ""
-#: engine/core/models.py:740
+#: engine/core/models.py:761
msgid "integer"
msgstr ""
-#: engine/core/models.py:741
+#: engine/core/models.py:762
msgid "float"
msgstr ""
-#: engine/core/models.py:742
+#: engine/core/models.py:763
msgid "boolean"
msgstr ""
-#: engine/core/models.py:743
+#: engine/core/models.py:764
msgid "array"
msgstr ""
-#: engine/core/models.py:744
+#: engine/core/models.py:765
msgid "object"
msgstr ""
-#: engine/core/models.py:746
+#: engine/core/models.py:767
msgid "type of the attribute's value"
msgstr ""
-#: engine/core/models.py:747
+#: engine/core/models.py:768
msgid "value type"
msgstr ""
-#: engine/core/models.py:752
+#: engine/core/models.py:773
msgid "name of this attribute"
msgstr ""
-#: engine/core/models.py:753
+#: engine/core/models.py:774
msgid "attribute's name"
msgstr ""
-#: engine/core/models.py:758
+#: engine/core/models.py:779
msgid "is filterable"
msgstr ""
-#: engine/core/models.py:759
+#: engine/core/models.py:781
msgid "designates whether this attribute can be used for filtering or not"
msgstr ""
-#: engine/core/models.py:771 engine/core/models.py:789
+#: engine/core/models.py:794 engine/core/models.py:812
#: engine/core/templates/digital_order_delivered_email.html:134
msgid "attribute"
msgstr ""
-#: engine/core/models.py:777
+#: engine/core/models.py:800
msgid ""
"Represents a specific value for an attribute that is linked to a product. It "
"links the 'attribute' to a unique 'value', allowing better organization and "
"dynamic representation of product characteristics."
msgstr ""
-#: engine/core/models.py:788
+#: engine/core/models.py:811
msgid "attribute of this value"
msgstr ""
-#: engine/core/models.py:796
+#: engine/core/models.py:819
msgid "the specific product associated with this attribute's value"
msgstr ""
-#: engine/core/models.py:802
+#: engine/core/models.py:825
msgid "the specific value for this attribute"
msgstr ""
-#: engine/core/models.py:815
+#: engine/core/models.py:838
msgid ""
"Represents a product image associated with a product in the system. This "
"class is designed to manage images for products, including functionality for "
@@ -1923,39 +1923,39 @@ msgid ""
"with alternative text for the images."
msgstr ""
-#: engine/core/models.py:826
+#: engine/core/models.py:849
msgid "provide alternative text for the image for accessibility"
msgstr ""
-#: engine/core/models.py:827
+#: engine/core/models.py:850
msgid "image alt text"
msgstr ""
-#: engine/core/models.py:830
+#: engine/core/models.py:853
msgid "upload the image file for this product"
msgstr ""
-#: engine/core/models.py:831 engine/core/models.py:862
+#: engine/core/models.py:854 engine/core/models.py:885
msgid "product image"
msgstr ""
-#: engine/core/models.py:836
+#: engine/core/models.py:859
msgid "determines the order in which images are displayed"
msgstr ""
-#: engine/core/models.py:837
+#: engine/core/models.py:860
msgid "display priority"
msgstr ""
-#: engine/core/models.py:842
+#: engine/core/models.py:865
msgid "the product that this image represents"
msgstr ""
-#: engine/core/models.py:863
+#: engine/core/models.py:886
msgid "product images"
msgstr ""
-#: engine/core/models.py:868
+#: engine/core/models.py:891
msgid ""
"Represents a promotional campaign for products with a discount. This class "
"is used to define and manage promotional campaigns that offer a percentage-"
@@ -1965,39 +1965,39 @@ msgid ""
"affected items in the campaign."
msgstr ""
-#: engine/core/models.py:880
+#: engine/core/models.py:903
msgid "percentage discount for the selected products"
msgstr ""
-#: engine/core/models.py:881
+#: engine/core/models.py:904
msgid "discount percentage"
msgstr ""
-#: engine/core/models.py:886
+#: engine/core/models.py:909
msgid "provide a unique name for this promotion"
msgstr ""
-#: engine/core/models.py:887
+#: engine/core/models.py:910
msgid "promotion name"
msgstr ""
-#: engine/core/models.py:893
+#: engine/core/models.py:916
msgid "promotion description"
msgstr ""
-#: engine/core/models.py:898
+#: engine/core/models.py:921
msgid "select which products are included in this promotion"
msgstr ""
-#: engine/core/models.py:899
+#: engine/core/models.py:922
msgid "included products"
msgstr ""
-#: engine/core/models.py:903
+#: engine/core/models.py:926
msgid "promotion"
msgstr ""
-#: engine/core/models.py:914
+#: engine/core/models.py:937
msgid ""
"Represents a user's wishlist for storing and managing desired products. The "
"class provides functionality to manage a collection of products, supporting "
@@ -2005,23 +2005,23 @@ msgid ""
"operations for adding and removing multiple products at once."
msgstr ""
-#: engine/core/models.py:926
+#: engine/core/models.py:949
msgid "products that the user has marked as wanted"
msgstr ""
-#: engine/core/models.py:934
+#: engine/core/models.py:957
msgid "user who owns this wishlist"
msgstr ""
-#: engine/core/models.py:935
+#: engine/core/models.py:958
msgid "wishlist owner"
msgstr ""
-#: engine/core/models.py:943
+#: engine/core/models.py:966
msgid "wishlist"
msgstr ""
-#: engine/core/models.py:985
+#: engine/core/models.py:1008
msgid ""
"Represents a documentary record tied to a product. This class is used to "
"store information about documentaries related to specific products, "
@@ -2031,19 +2031,19 @@ msgid ""
"custom features."
msgstr ""
-#: engine/core/models.py:998
+#: engine/core/models.py:1023
msgid "documentary"
msgstr ""
-#: engine/core/models.py:999
+#: engine/core/models.py:1024
msgid "documentaries"
msgstr ""
-#: engine/core/models.py:1009
+#: engine/core/models.py:1034
msgid "unresolved"
msgstr ""
-#: engine/core/models.py:1014
+#: engine/core/models.py:1039
msgid ""
"Represents an address entity that includes location details and associations "
"with a user. Provides functionality for geographic and address data storage, "
@@ -2055,59 +2055,59 @@ msgid ""
"address with a user, facilitating personalized data handling."
msgstr ""
-#: engine/core/models.py:1029
+#: engine/core/models.py:1054
msgid "address line for the customer"
msgstr ""
-#: engine/core/models.py:1030
+#: engine/core/models.py:1055
msgid "address line"
msgstr ""
-#: engine/core/models.py:1032
+#: engine/core/models.py:1057
msgid "street"
msgstr ""
-#: engine/core/models.py:1033
+#: engine/core/models.py:1058
msgid "district"
msgstr ""
-#: engine/core/models.py:1034
+#: engine/core/models.py:1059
msgid "city"
msgstr ""
-#: engine/core/models.py:1035
+#: engine/core/models.py:1060
msgid "region"
msgstr ""
-#: engine/core/models.py:1036
+#: engine/core/models.py:1061
msgid "postal code"
msgstr ""
-#: engine/core/models.py:1037
+#: engine/core/models.py:1062
msgid "country"
msgstr ""
-#: engine/core/models.py:1044
+#: engine/core/models.py:1069
msgid "geolocation point: (longitude, latitude)"
msgstr ""
-#: engine/core/models.py:1047
+#: engine/core/models.py:1075
msgid "full JSON response from geocoder for this address"
msgstr ""
-#: engine/core/models.py:1052
+#: engine/core/models.py:1081
msgid "stored JSON response from the geocoding service"
msgstr ""
-#: engine/core/models.py:1060
+#: engine/core/models.py:1091
msgid "address"
msgstr ""
-#: engine/core/models.py:1061
+#: engine/core/models.py:1092
msgid "addresses"
msgstr ""
-#: engine/core/models.py:1073
+#: engine/core/models.py:1104
msgid ""
"Represents a promotional code that can be used for discounts, managing its "
"validity, type of discount, and application. The PromoCode class stores "
@@ -2117,86 +2117,86 @@ msgid ""
"apply the promo code to an order while ensuring constraints are met."
msgstr ""
-#: engine/core/models.py:1087
+#: engine/core/models.py:1118
msgid "unique code used by a user to redeem a discount"
msgstr ""
-#: engine/core/models.py:1088
+#: engine/core/models.py:1119
msgid "promo code identifier"
msgstr ""
-#: engine/core/models.py:1095
+#: engine/core/models.py:1126
msgid "fixed discount amount applied if percent is not used"
msgstr ""
-#: engine/core/models.py:1096
+#: engine/core/models.py:1127
msgid "fixed discount amount"
msgstr ""
-#: engine/core/models.py:1102
+#: engine/core/models.py:1133
msgid "percentage discount applied if fixed amount is not used"
msgstr ""
-#: engine/core/models.py:1103
+#: engine/core/models.py:1134
msgid "percentage discount"
msgstr ""
-#: engine/core/models.py:1108
+#: engine/core/models.py:1139
msgid "timestamp when the promocode expires"
msgstr ""
-#: engine/core/models.py:1109
+#: engine/core/models.py:1140
msgid "end validity time"
msgstr ""
-#: engine/core/models.py:1114
+#: engine/core/models.py:1145
msgid "timestamp from which this promocode is valid"
msgstr ""
-#: engine/core/models.py:1115
+#: engine/core/models.py:1146
msgid "start validity time"
msgstr ""
-#: engine/core/models.py:1120
+#: engine/core/models.py:1151
msgid "timestamp when the promocode was used, blank if not used yet"
msgstr ""
-#: engine/core/models.py:1121
+#: engine/core/models.py:1152
msgid "usage timestamp"
msgstr ""
-#: engine/core/models.py:1126
+#: engine/core/models.py:1157
msgid "user assigned to this promocode if applicable"
msgstr ""
-#: engine/core/models.py:1127
+#: engine/core/models.py:1158
msgid "assigned user"
msgstr ""
-#: engine/core/models.py:1134
+#: engine/core/models.py:1165
msgid "promo code"
msgstr ""
-#: engine/core/models.py:1135
+#: engine/core/models.py:1166
msgid "promo codes"
msgstr ""
-#: engine/core/models.py:1150
+#: engine/core/models.py:1182
msgid ""
"only one type of discount should be defined (amount or percent), but not "
"both or neither."
msgstr ""
-#: engine/core/models.py:1171
+#: engine/core/models.py:1204
msgid "promocode already used"
msgstr ""
-#: engine/core/models.py:1187
+#: engine/core/models.py:1226
#, python-brace-format
msgid "invalid discount type for promocode {self.uuid}"
msgstr ""
-#: engine/core/models.py:1196
+#: engine/core/models.py:1235
msgid ""
"Represents an order placed by a user. This class models an order within the "
"application, including its various attributes such as billing and shipping "
@@ -2206,145 +2206,145 @@ msgid ""
"supports managing the products in the order lifecycle."
msgstr ""
-#: engine/core/models.py:1213
+#: engine/core/models.py:1252
msgid "the billing address used for this order"
msgstr ""
-#: engine/core/models.py:1221
+#: engine/core/models.py:1260
msgid "optional promo code applied to this order"
msgstr ""
-#: engine/core/models.py:1222
+#: engine/core/models.py:1261
msgid "applied promo code"
msgstr ""
-#: engine/core/models.py:1230
+#: engine/core/models.py:1269
msgid "the shipping address used for this order"
msgstr ""
-#: engine/core/models.py:1231
+#: engine/core/models.py:1270
msgid "shipping address"
msgstr ""
-#: engine/core/models.py:1237
+#: engine/core/models.py:1276
msgid "current status of the order in its lifecycle"
msgstr ""
-#: engine/core/models.py:1238
+#: engine/core/models.py:1277
msgid "order status"
msgstr ""
-#: engine/core/models.py:1243 engine/core/models.py:1769
+#: engine/core/models.py:1282 engine/core/models.py:1881
msgid "json structure of notifications to display to users"
msgstr ""
-#: engine/core/models.py:1249
+#: engine/core/models.py:1288
msgid "json representation of order attributes for this order"
msgstr ""
-#: engine/core/models.py:1255
+#: engine/core/models.py:1294
msgid "the user who placed the order"
msgstr ""
-#: engine/core/models.py:1256
+#: engine/core/models.py:1295
msgid "user"
msgstr ""
-#: engine/core/models.py:1262
+#: engine/core/models.py:1301
msgid "the timestamp when the order was finalized"
msgstr ""
-#: engine/core/models.py:1263
+#: engine/core/models.py:1302
msgid "buy time"
msgstr ""
-#: engine/core/models.py:1270
+#: engine/core/models.py:1309
msgid "a human-readable identifier for the order"
msgstr ""
-#: engine/core/models.py:1271
+#: engine/core/models.py:1310
msgid "human readable id"
msgstr ""
-#: engine/core/models.py:1277
+#: engine/core/models.py:1316
msgid "order"
msgstr ""
-#: engine/core/models.py:1319
+#: engine/core/models.py:1363
msgid "a user must have only one pending order at a time"
msgstr ""
-#: engine/core/models.py:1351
+#: engine/core/models.py:1396
msgid "you cannot add products to an order that is not a pending one"
msgstr ""
-#: engine/core/models.py:1356
+#: engine/core/models.py:1402
msgid "you cannot add inactive products to order"
msgstr ""
-#: engine/core/models.py:1373
+#: engine/core/models.py:1424
msgid "you cannot add more products than available in stock"
msgstr ""
-#: engine/core/models.py:1395 engine/core/models.py:1420
-#: engine/core/models.py:1428
+#: engine/core/models.py:1448 engine/core/models.py:1477
+#: engine/core/models.py:1487
msgid "you cannot remove products from an order that is not a pending one"
msgstr ""
-#: engine/core/models.py:1416
+#: engine/core/models.py:1472
#, python-brace-format
msgid "{name} does not exist with query <{query}>"
msgstr ""
-#: engine/core/models.py:1448
+#: engine/core/models.py:1511
msgid "promocode does not exist"
msgstr ""
-#: engine/core/models.py:1454
+#: engine/core/models.py:1526
msgid "you can only buy physical products with shipping address specified"
msgstr ""
-#: engine/core/models.py:1473
+#: engine/core/models.py:1547
msgid "address does not exist"
msgstr ""
-#: engine/core/models.py:1494 engine/core/models.py:1563
+#: engine/core/models.py:1569 engine/core/models.py:1648
msgid "you can not buy at this moment, please try again in a few minutes"
msgstr ""
-#: engine/core/models.py:1497 engine/core/models.py:1559
+#: engine/core/models.py:1575 engine/core/models.py:1641
msgid "invalid force value"
msgstr ""
-#: engine/core/models.py:1503 engine/core/models.py:1566
+#: engine/core/models.py:1581 engine/core/models.py:1652
msgid "you cannot purchase an empty order!"
msgstr ""
-#: engine/core/models.py:1522
+#: engine/core/models.py:1602
msgid "you cannot buy an order without a user"
msgstr ""
-#: engine/core/models.py:1536
+#: engine/core/models.py:1616
msgid "a user without a balance cannot buy with balance"
msgstr ""
-#: engine/core/models.py:1541
+#: engine/core/models.py:1622
msgid "insufficient funds to complete the order"
msgstr ""
-#: engine/core/models.py:1575
+#: engine/core/models.py:1663
msgid ""
"you cannot buy without registration, please provide the following "
"information: customer name, customer email, customer phone number"
msgstr ""
-#: engine/core/models.py:1584
+#: engine/core/models.py:1674
#, python-brace-format
msgid ""
"invalid payment method: {payment_method} from {available_payment_methods}"
msgstr ""
-#: engine/core/models.py:1699
+#: engine/core/models.py:1805
msgid ""
"Manages user feedback for products. This class is designed to capture and "
"store user feedback for specific products that they have purchased. It "
@@ -2353,31 +2353,31 @@ msgid ""
"fields to effectively model and manage feedback data."
msgstr ""
-#: engine/core/models.py:1711
+#: engine/core/models.py:1817
msgid "user-provided comments about their experience with the product"
msgstr ""
-#: engine/core/models.py:1712
+#: engine/core/models.py:1818
msgid "feedback comments"
msgstr ""
-#: engine/core/models.py:1719
+#: engine/core/models.py:1826
msgid "references the specific product in an order that this feedback is about"
msgstr ""
-#: engine/core/models.py:1720
+#: engine/core/models.py:1828
msgid "related order product"
msgstr ""
-#: engine/core/models.py:1725
+#: engine/core/models.py:1833
msgid "user-assigned rating for the product"
msgstr ""
-#: engine/core/models.py:1726
+#: engine/core/models.py:1834
msgid "product rating"
msgstr ""
-#: engine/core/models.py:1742
+#: engine/core/models.py:1854
msgid ""
"Represents products associated with orders and their attributes. The "
"OrderProduct model maintains information about a product that is part of an "
@@ -2390,108 +2390,108 @@ msgid ""
"Product models and stores a reference to them."
msgstr ""
-#: engine/core/models.py:1757
+#: engine/core/models.py:1869
msgid "the price paid by the customer for this product at purchase time"
msgstr ""
-#: engine/core/models.py:1758
+#: engine/core/models.py:1870
msgid "purchase price at order time"
msgstr ""
-#: engine/core/models.py:1763
+#: engine/core/models.py:1875
msgid "internal comments for admins about this ordered product"
msgstr ""
-#: engine/core/models.py:1764
+#: engine/core/models.py:1876
msgid "internal comments"
msgstr ""
-#: engine/core/models.py:1770
+#: engine/core/models.py:1882
msgid "user notifications"
msgstr ""
-#: engine/core/models.py:1775
+#: engine/core/models.py:1887
msgid "json representation of this item's attributes"
msgstr ""
-#: engine/core/models.py:1776
+#: engine/core/models.py:1888
msgid "ordered product attributes"
msgstr ""
-#: engine/core/models.py:1781
+#: engine/core/models.py:1893
msgid "reference to the parent order that contains this product"
msgstr ""
-#: engine/core/models.py:1782
+#: engine/core/models.py:1894
msgid "parent order"
msgstr ""
-#: engine/core/models.py:1791
+#: engine/core/models.py:1903
msgid "the specific product associated with this order line"
msgstr ""
-#: engine/core/models.py:1798
+#: engine/core/models.py:1910
msgid "quantity of this specific product in the order"
msgstr ""
-#: engine/core/models.py:1799
+#: engine/core/models.py:1911
msgid "product quantity"
msgstr ""
-#: engine/core/models.py:1806
+#: engine/core/models.py:1918
msgid "current status of this product in the order"
msgstr ""
-#: engine/core/models.py:1807
+#: engine/core/models.py:1919
msgid "product line status"
msgstr ""
-#: engine/core/models.py:1872
+#: engine/core/models.py:1986
msgid "order product must have an order"
msgstr ""
-#: engine/core/models.py:1874
+#: engine/core/models.py:1988
#, python-brace-format
msgid "wrong action specified for feedback: {action}"
msgstr ""
-#: engine/core/models.py:1888
+#: engine/core/models.py:2005
msgid "you cannot feedback an order which is not received"
msgstr ""
-#: engine/core/models.py:1894
+#: engine/core/models.py:2014
msgid "name"
msgstr ""
-#: engine/core/models.py:1895
+#: engine/core/models.py:2016
msgid "URL of the integration"
msgstr ""
-#: engine/core/models.py:1896
+#: engine/core/models.py:2019
msgid "authentication credentials"
msgstr ""
-#: engine/core/models.py:1918
+#: engine/core/models.py:2042
msgid "you can only have one default CRM provider"
msgstr ""
-#: engine/core/models.py:1928
+#: engine/core/models.py:2052
msgid "CRM"
msgstr ""
-#: engine/core/models.py:1929
+#: engine/core/models.py:2053
msgid "CRMs"
msgstr ""
-#: engine/core/models.py:1941
+#: engine/core/models.py:2069
msgid "order CRM link"
msgstr ""
-#: engine/core/models.py:1942
+#: engine/core/models.py:2070
msgid "orders CRM links"
msgstr ""
-#: engine/core/models.py:1947
+#: engine/core/models.py:2075
msgid ""
"Represents the downloading functionality for digital assets associated with "
"orders. The DigitalAssetDownload class provides the ability to manage and "
@@ -2501,15 +2501,15 @@ msgid ""
"the asset when the associated order is in a completed status."
msgstr ""
-#: engine/core/models.py:1961
+#: engine/core/models.py:2091
msgid "download"
msgstr ""
-#: engine/core/models.py:1962
+#: engine/core/models.py:2092
msgid "downloads"
msgstr ""
-#: engine/core/serializers/utility.py:89
+#: engine/core/serializers/utility.py:91
msgid ""
"you must provide a comment, rating, and order product uuid to add feedback."
msgstr ""
@@ -2835,11 +2835,11 @@ msgid ""
" reserved"
msgstr ""
-#: engine/core/utils/caching.py:44
+#: engine/core/utils/caching.py:48
msgid "both data and timeout are required"
msgstr ""
-#: engine/core/utils/caching.py:46
+#: engine/core/utils/caching.py:51
msgid "invalid timeout value, it must be between 0 and 216000 seconds"
msgstr ""
@@ -2848,17 +2848,17 @@ msgstr ""
msgid "{settings.PROJECT_NAME} | contact us initiated"
msgstr ""
-#: engine/core/utils/emailing.py:73
+#: engine/core/utils/emailing.py:81
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order confirmation"
msgstr ""
-#: engine/core/utils/emailing.py:105
+#: engine/core/utils/emailing.py:115
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order delivered"
msgstr ""
-#: engine/core/utils/emailing.py:188
+#: engine/core/utils/emailing.py:203
#, python-brace-format
msgid "{settings.PROJECT_NAME} | promocode granted"
msgstr ""
@@ -2871,58 +2871,58 @@ msgstr ""
msgid "NOMINATIM_URL must be configured."
msgstr ""
-#: engine/core/validators.py:19
+#: engine/core/validators.py:21
#, python-brace-format
msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels"
msgstr ""
-#: engine/core/views.py:91
+#: engine/core/views.py:105
msgid ""
"Handles the request for the sitemap index and returns an XML response. It "
"ensures the response includes the appropriate content type header for XML."
msgstr ""
-#: engine/core/views.py:106
+#: engine/core/views.py:120
msgid ""
"Handles the detailed view response for a sitemap. This function processes "
"the request, fetches the appropriate sitemap detail response, and sets the "
"Content-Type header for XML."
msgstr ""
-#: engine/core/views.py:141
+#: engine/core/views.py:156
msgid ""
"Returns a list of supported languages and their corresponding information."
msgstr ""
-#: engine/core/views.py:173
+#: engine/core/views.py:183
msgid "Returns the parameters of the website as a JSON object."
msgstr ""
-#: engine/core/views.py:192
+#: engine/core/views.py:199
msgid ""
"Handles cache operations such as reading and setting cache data with a "
"specified key and timeout."
msgstr ""
-#: engine/core/views.py:219
+#: engine/core/views.py:221
msgid "Handles `contact us` form submissions."
msgstr ""
-#: engine/core/views.py:240
+#: engine/core/views.py:237
msgid ""
"Handles requests for processing and validating URLs from incoming POST "
"requests."
msgstr ""
-#: engine/core/views.py:280
+#: engine/core/views.py:274
msgid "Handles global search queries."
msgstr ""
-#: engine/core/views.py:295
+#: engine/core/views.py:290
msgid "Handles the logic of buying as a business without registration."
msgstr ""
-#: engine/core/views.py:332
+#: engine/core/views.py:338
msgid ""
"Handles the downloading of a digital asset associated with an order.\n"
"This function attempts to serve the digital asset file located in the "
@@ -2930,31 +2930,31 @@ msgid ""
"error is raised to indicate the resource is unavailable."
msgstr ""
-#: engine/core/views.py:343
+#: engine/core/views.py:349
msgid "order_product_uuid is required"
msgstr ""
-#: engine/core/views.py:350
+#: engine/core/views.py:356
msgid "order product does not exist"
msgstr ""
-#: engine/core/views.py:353
+#: engine/core/views.py:359
msgid "you can only download the digital asset once"
msgstr ""
-#: engine/core/views.py:356
+#: engine/core/views.py:363
msgid "the order must be paid before downloading the digital asset"
msgstr ""
-#: engine/core/views.py:362
+#: engine/core/views.py:370
msgid "the order product does not have a product"
msgstr ""
-#: engine/core/views.py:399
+#: engine/core/views.py:414
msgid "favicon not found"
msgstr ""
-#: engine/core/views.py:404
+#: engine/core/views.py:419
msgid ""
"Handles requests for the favicon of a website.\n"
"This function attempts to serve the favicon file located in the static "
@@ -2962,27 +2962,27 @@ msgid ""
"error is raised to indicate the resource is unavailable."
msgstr ""
-#: engine/core/views.py:416
+#: engine/core/views.py:431
msgid ""
"Redirects the request to the admin index page. The function handles incoming "
"HTTP requests and redirects them to the Django admin interface index page. "
"It uses Django's `redirect` function for handling the HTTP redirection."
msgstr ""
-#: engine/core/views.py:429
+#: engine/core/views.py:443
msgid "Returns current version of the eVibes. "
msgstr ""
-#: engine/core/views.py:623 engine/core/views.py:636
+#: engine/core/views.py:672 engine/core/views.py:687
#, python-format
msgid "Revenue & Orders (last %(days)d)"
msgstr ""
-#: engine/core/views.py:793
+#: engine/core/views.py:868
msgid "Returns custom variables for Dashboard. "
msgstr ""
-#: engine/core/viewsets.py:136
+#: engine/core/viewsets.py:139
msgid ""
"Defines a viewset for managing Evibes-related operations. The EvibesViewSet "
"class inherits from ModelViewSet and provides functionality for handling "
@@ -2991,7 +2991,7 @@ msgid ""
"and rendering formats."
msgstr ""
-#: engine/core/viewsets.py:156
+#: engine/core/viewsets.py:160
msgid ""
"Represents a viewset for managing AttributeGroup objects. Handles operations "
"related to AttributeGroup, including filtering, serialization, and retrieval "
@@ -2999,7 +2999,7 @@ msgid ""
"standardized way to process requests and responses for AttributeGroup data."
msgstr ""
-#: engine/core/viewsets.py:175
+#: engine/core/viewsets.py:179
msgid ""
"Handles operations related to Attribute objects within the application. "
"Provides a set of API endpoints to interact with Attribute data. This class "
@@ -3009,7 +3009,7 @@ msgid ""
"depending on the request."
msgstr ""
-#: engine/core/viewsets.py:194
+#: engine/core/viewsets.py:198
msgid ""
"A viewset for managing AttributeValue objects. This viewset provides "
"functionality for listing, retrieving, creating, updating, and deleting "
@@ -3018,7 +3018,7 @@ msgid ""
"capabilities are provided through the DjangoFilterBackend."
msgstr ""
-#: engine/core/viewsets.py:213
+#: engine/core/viewsets.py:217
msgid ""
"Manages views for Category-related operations. The CategoryViewSet class is "
"responsible for handling operations related to the Category model in the "
@@ -3027,7 +3027,7 @@ msgid ""
"can access specific data."
msgstr ""
-#: engine/core/viewsets.py:326
+#: engine/core/viewsets.py:346
msgid ""
"Represents a viewset for managing Brand instances. This class provides "
"functionality for querying, filtering, and serializing Brand objects. It "
@@ -3035,7 +3035,7 @@ msgid ""
"endpoints for Brand objects."
msgstr ""
-#: engine/core/viewsets.py:438
+#: engine/core/viewsets.py:458
msgid ""
"Manages operations related to the `Product` model in the system. This class "
"provides a viewset for managing products, including their filtering, "
@@ -3046,7 +3046,7 @@ msgid ""
"product."
msgstr ""
-#: engine/core/viewsets.py:574
+#: engine/core/viewsets.py:605
msgid ""
"Represents a viewset for managing Vendor objects. This viewset allows "
"fetching, filtering, and serializing Vendor data. It defines the queryset, "
@@ -3055,7 +3055,7 @@ msgid ""
"Vendor-related resources through the Django REST framework."
msgstr ""
-#: engine/core/viewsets.py:594
+#: engine/core/viewsets.py:625
msgid ""
"Representation of a view set handling Feedback objects. This class manages "
"operations related to Feedback objects, including listing, filtering, and "
@@ -3065,7 +3065,7 @@ msgid ""
"use of Django's filtering system for querying data."
msgstr ""
-#: engine/core/viewsets.py:621
+#: engine/core/viewsets.py:652
msgid ""
"ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes "
@@ -3076,7 +3076,7 @@ msgid ""
"enforces permissions accordingly while interacting with order data."
msgstr ""
-#: engine/core/viewsets.py:825
+#: engine/core/viewsets.py:914
msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It "
@@ -3085,25 +3085,25 @@ msgid ""
"feedback on OrderProduct instances"
msgstr ""
-#: engine/core/viewsets.py:879
+#: engine/core/viewsets.py:974
msgid "Manages operations related to Product images in the application. "
msgstr ""
-#: engine/core/viewsets.py:892
+#: engine/core/viewsets.py:988
msgid ""
"Manages the retrieval and handling of PromoCode instances through various "
"API actions."
msgstr ""
-#: engine/core/viewsets.py:914
+#: engine/core/viewsets.py:1019
msgid "Represents a view set for managing promotions. "
msgstr ""
-#: engine/core/viewsets.py:927
+#: engine/core/viewsets.py:1032
msgid "Handles operations related to Stock data in the system."
msgstr ""
-#: engine/core/viewsets.py:941
+#: engine/core/viewsets.py:1046
msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the "
@@ -3114,7 +3114,7 @@ msgid ""
"are granted."
msgstr ""
-#: engine/core/viewsets.py:1056
+#: engine/core/viewsets.py:1183
msgid ""
"This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom "
@@ -3123,12 +3123,12 @@ msgid ""
"on the request context."
msgstr ""
-#: engine/core/viewsets.py:1123
+#: engine/core/viewsets.py:1254
#, python-brace-format
msgid "Geocoding error: {e}"
msgstr ""
-#: engine/core/viewsets.py:1131
+#: engine/core/viewsets.py:1262
msgid ""
"Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing "
diff --git a/engine/core/locale/fr_FR/LC_MESSAGES/django.po b/engine/core/locale/fr_FR/LC_MESSAGES/django.po
index 0cdc09ce..578bd56c 100644
--- a/engine/core/locale/fr_FR/LC_MESSAGES/django.po
+++ b/engine/core/locale/fr_FR/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 22:12+0300\n"
+"POT-Creation-Date: 2025-12-18 19:09+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -27,113 +27,112 @@ msgstr ""
msgid "is active"
msgstr "Est actif"
-#: engine/core/abstract.py:21
+#: engine/core/abstract.py:22
msgid ""
-"if set to false, this object can't be seen by users without needed "
-"permission"
+"if set to false, this object can't be seen by users without needed permission"
msgstr ""
"Si la valeur est fixée à false, cet objet ne peut pas être vu par les "
"utilisateurs qui n'ont pas l'autorisation nécessaire."
-#: engine/core/abstract.py:23 engine/core/choices.py:18
+#: engine/core/abstract.py:26 engine/core/choices.py:18
msgid "created"
msgstr "Créée"
-#: engine/core/abstract.py:23
+#: engine/core/abstract.py:26
msgid "when the object first appeared on the database"
msgstr "Date de la première apparition de l'objet dans la base de données"
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "modified"
msgstr "Modifié"
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "when the object was last modified"
msgstr "Date de la dernière modification de l'objet"
-#: engine/core/admin.py:85
+#: engine/core/admin.py:94
msgid "translations"
msgstr "Traductions"
-#: engine/core/admin.py:89
+#: engine/core/admin.py:102
msgid "general"
msgstr "Général"
-#: engine/core/admin.py:91
+#: engine/core/admin.py:106
msgid "relations"
msgstr "Relations"
-#: engine/core/admin.py:93
+#: engine/core/admin.py:111
msgid "additional info"
msgstr "Informations complémentaires"
-#: engine/core/admin.py:111
+#: engine/core/admin.py:133
msgid "metadata"
msgstr "Métadonnées"
-#: engine/core/admin.py:118
+#: engine/core/admin.py:141
msgid "timestamps"
msgstr "Horodatage"
-#: engine/core/admin.py:133
+#: engine/core/admin.py:157
#, python-format
msgid "activate selected %(verbose_name_plural)s"
msgstr "Activer la %(verbose_name_plural)s sélectionnée"
-#: engine/core/admin.py:138
+#: engine/core/admin.py:165
msgid "selected items have been activated."
msgstr "Les articles sélectionnés ont été activés !"
-#: engine/core/admin.py:144
+#: engine/core/admin.py:173
#, python-format
msgid "deactivate selected %(verbose_name_plural)s"
msgstr "Désactiver la %(verbose_name_plural)s sélectionnée"
-#: engine/core/admin.py:149
+#: engine/core/admin.py:183
msgid "selected items have been deactivated."
msgstr "Les articles sélectionnés ont été désactivés !"
-#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586
-#: engine/core/graphene/object_types.py:593 engine/core/models.py:801
-#: engine/core/models.py:809
+#: engine/core/admin.py:195 engine/core/graphene/object_types.py:650
+#: engine/core/graphene/object_types.py:657 engine/core/models.py:824
+#: engine/core/models.py:832
msgid "attribute value"
msgstr "Valeur de l'attribut"
-#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75
-#: engine/core/models.py:810
+#: engine/core/admin.py:196 engine/core/graphene/object_types.py:75
+#: engine/core/models.py:833
msgid "attribute values"
msgstr "Valeurs des attributs"
-#: engine/core/admin.py:172
+#: engine/core/admin.py:207
msgid "image"
msgstr "Image"
-#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474
+#: engine/core/admin.py:208 engine/core/graphene/object_types.py:527
msgid "images"
msgstr "Images"
-#: engine/core/admin.py:184 engine/core/models.py:566
+#: engine/core/admin.py:219 engine/core/models.py:587
msgid "stock"
msgstr "Stock"
-#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640
+#: engine/core/admin.py:220 engine/core/graphene/object_types.py:710
msgid "stocks"
msgstr "Stocks"
-#: engine/core/admin.py:196 engine/core/models.py:1818
+#: engine/core/admin.py:231 engine/core/models.py:1930
msgid "order product"
msgstr "Commander un produit"
-#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389
-#: engine/core/models.py:1819
+#: engine/core/admin.py:232 engine/core/graphene/object_types.py:438
+#: engine/core/models.py:1931
msgid "order products"
msgstr "Commander des produits"
-#: engine/core/admin.py:210 engine/core/admin.py:211
+#: engine/core/admin.py:250 engine/core/admin.py:251
msgid "children"
msgstr "Les enfants"
-#: engine/core/admin.py:977
+#: engine/core/admin.py:1059
msgid "Config"
msgstr "Config"
@@ -157,8 +156,7 @@ msgstr "Livré"
msgid "canceled"
msgstr "Annulé"
-#: engine/core/choices.py:8 engine/core/choices.py:16
-#: engine/core/choices.py:24
+#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24
msgid "failed"
msgstr "Échec"
@@ -186,11 +184,11 @@ msgstr "Momental"
msgid "successful"
msgstr "Réussite"
-#: engine/core/docs/drf/views.py:31
+#: engine/core/docs/drf/views.py:30
msgid "OpenAPI schema in selected format with selected language"
msgstr "Schéma OpenAPI dans le format et la langue sélectionnés"
-#: engine/core/docs/drf/views.py:33
+#: engine/core/docs/drf/views.py:32
msgid ""
"OpenApi3 schema for this API. Format can be selected via content "
"negotiation. Language can be selected with Accept-Language and query "
@@ -200,48 +198,50 @@ msgstr ""
"négociation de contenu. La langue peut être sélectionnée avec Accept-"
"Language et le paramètre de requête."
-#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37
+#: engine/core/docs/drf/views.py:43 engine/core/graphene/mutations.py:37
msgid "cache I/O"
msgstr "Cache I/O"
-#: engine/core/docs/drf/views.py:46
+#: engine/core/docs/drf/views.py:45
msgid ""
"apply only a key to read permitted data from cache.\n"
"apply key, data and timeout with authentication to write data to cache."
msgstr ""
-"Appliquer uniquement une clé pour lire les données autorisées dans la mémoire cache.\n"
-"Appliquer une clé, des données et un délai d'attente avec authentification pour écrire des données dans la mémoire cache."
+"Appliquer uniquement une clé pour lire les données autorisées dans la "
+"mémoire cache.\n"
+"Appliquer une clé, des données et un délai d'attente avec authentification "
+"pour écrire des données dans la mémoire cache."
-#: engine/core/docs/drf/views.py:62
+#: engine/core/docs/drf/views.py:63
msgid "get a list of supported languages"
msgstr "Obtenir la liste des langues prises en charge"
-#: engine/core/docs/drf/views.py:74
+#: engine/core/docs/drf/views.py:75
msgid "get application's exposable parameters"
msgstr "Obtenir les paramètres exposables de l'application"
-#: engine/core/docs/drf/views.py:84
+#: engine/core/docs/drf/views.py:89
msgid "send a message to the support team"
msgstr "Envoyer un message à l'équipe d'assistance"
-#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57
+#: engine/core/docs/drf/views.py:103 engine/core/graphene/mutations.py:59
msgid "request a CORSed URL"
msgstr "Demander une URL CORSée. Seul https est autorisé."
-#: engine/core/docs/drf/views.py:112
+#: engine/core/docs/drf/views.py:119
msgid "Search between products, categories and brands"
msgstr "Recherche entre produits, catégories et marques"
-#: engine/core/docs/drf/views.py:130
+#: engine/core/docs/drf/views.py:141
msgid "global search endpoint to query across project's tables"
msgstr ""
"Point d'arrivée de la recherche globale pour interroger les tables du projet"
-#: engine/core/docs/drf/views.py:139
+#: engine/core/docs/drf/views.py:150
msgid "purchase an order as a business"
msgstr "Acheter une commande en tant qu'entreprise"
-#: engine/core/docs/drf/views.py:146
+#: engine/core/docs/drf/views.py:158
msgid ""
"purchase an order as a business, using the provided `products` with "
"`product_uuid` and `attributes`."
@@ -249,263 +249,261 @@ msgstr ""
"Acheter une commande en tant qu'entreprise, en utilisant les `produits` "
"fournis avec `product_uuid` et `attributs`."
-#: engine/core/docs/drf/views.py:164
+#: engine/core/docs/drf/views.py:177
msgid "download a digital asset from purchased digital order"
msgstr ""
"télécharger un bien numérique à partir d'une commande numérique achetée"
-#: engine/core/docs/drf/viewsets.py:61
+#: engine/core/docs/drf/viewsets.py:65
msgid "list all attribute groups (simple view)"
msgstr "Liste de tous les groupes d'attributs (vue simple)"
-#: engine/core/docs/drf/viewsets.py:68
+#: engine/core/docs/drf/viewsets.py:75
msgid "retrieve a single attribute group (detailed view)"
msgstr "Récupérer un seul groupe d'attributs (vue détaillée)"
-#: engine/core/docs/drf/viewsets.py:75
+#: engine/core/docs/drf/viewsets.py:82
msgid "create an attribute group"
msgstr "Créer un groupe d'attributs"
-#: engine/core/docs/drf/viewsets.py:82
+#: engine/core/docs/drf/viewsets.py:92
msgid "delete an attribute group"
msgstr "Supprimer un groupe d'attributs"
-#: engine/core/docs/drf/viewsets.py:89
+#: engine/core/docs/drf/viewsets.py:99
msgid "rewrite an existing attribute group saving non-editables"
msgstr ""
"Réécrire un groupe d'attributs existant en sauvegardant les éléments non "
"modifiables"
-#: engine/core/docs/drf/viewsets.py:96
-msgid ""
-"rewrite some fields of an existing attribute group saving non-editables"
+#: engine/core/docs/drf/viewsets.py:107
+msgid "rewrite some fields of an existing attribute group saving non-editables"
msgstr ""
"Réécrire certains champs d'un groupe d'attributs existant en sauvegardant "
"les non-éditables"
-#: engine/core/docs/drf/viewsets.py:106
+#: engine/core/docs/drf/viewsets.py:118
msgid "list all attributes (simple view)"
msgstr "Liste de tous les attributs (vue simple)"
-#: engine/core/docs/drf/viewsets.py:113
+#: engine/core/docs/drf/viewsets.py:128
msgid "retrieve a single attribute (detailed view)"
msgstr "Récupérer un seul attribut (vue détaillée)"
-#: engine/core/docs/drf/viewsets.py:120
+#: engine/core/docs/drf/viewsets.py:135
msgid "create an attribute"
msgstr "Créer un attribut"
-#: engine/core/docs/drf/viewsets.py:127
+#: engine/core/docs/drf/viewsets.py:142
msgid "delete an attribute"
msgstr "Supprimer un attribut"
-#: engine/core/docs/drf/viewsets.py:134
+#: engine/core/docs/drf/viewsets.py:149
msgid "rewrite an existing attribute saving non-editables"
msgstr ""
"Réécrire un attribut existant en sauvegardant les éléments non modifiables"
-#: engine/core/docs/drf/viewsets.py:141
+#: engine/core/docs/drf/viewsets.py:156
msgid "rewrite some fields of an existing attribute saving non-editables"
msgstr ""
-"Réécrire certains champs d'un attribut existant en sauvegardant les éléments"
-" non modifiables"
+"Réécrire certains champs d'un attribut existant en sauvegardant les éléments "
+"non modifiables"
-#: engine/core/docs/drf/viewsets.py:151
+#: engine/core/docs/drf/viewsets.py:166
msgid "list all attribute values (simple view)"
msgstr "Liste de toutes les valeurs d'attributs (vue simple)"
-#: engine/core/docs/drf/viewsets.py:158
+#: engine/core/docs/drf/viewsets.py:176
msgid "retrieve a single attribute value (detailed view)"
msgstr "Récupérer une seule valeur d'attribut (vue détaillée)"
-#: engine/core/docs/drf/viewsets.py:165
+#: engine/core/docs/drf/viewsets.py:183
msgid "create an attribute value"
msgstr "Créer une valeur d'attribut"
-#: engine/core/docs/drf/viewsets.py:172
+#: engine/core/docs/drf/viewsets.py:193
msgid "delete an attribute value"
msgstr "Supprimer une valeur d'attribut"
-#: engine/core/docs/drf/viewsets.py:179
+#: engine/core/docs/drf/viewsets.py:200
msgid "rewrite an existing attribute value saving non-editables"
msgstr ""
"Réécrire une valeur d'attribut existante en sauvegardant les éléments non "
"modifiables"
-#: engine/core/docs/drf/viewsets.py:186
-msgid ""
-"rewrite some fields of an existing attribute value saving non-editables"
+#: engine/core/docs/drf/viewsets.py:208
+msgid "rewrite some fields of an existing attribute value saving non-editables"
msgstr ""
"Réécrire certains champs d'une valeur d'attribut existante en sauvegardant "
"les éléments non modifiables"
-#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197
+#: engine/core/docs/drf/viewsets.py:219 engine/core/docs/drf/viewsets.py:220
msgid "list all categories (simple view)"
msgstr "Liste de toutes les catégories (vue simple)"
-#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205
+#: engine/core/docs/drf/viewsets.py:230 engine/core/docs/drf/viewsets.py:231
msgid "retrieve a single category (detailed view)"
msgstr "Récupérer une seule catégorie (vue détaillée)"
-#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258
+#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:286
msgid "Category UUID or slug"
msgstr "Catégorie UUID ou slug"
-#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221
+#: engine/core/docs/drf/viewsets.py:246 engine/core/docs/drf/viewsets.py:247
msgid "create a category"
msgstr "Créer une catégorie"
-#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229
+#: engine/core/docs/drf/viewsets.py:254 engine/core/docs/drf/viewsets.py:255
msgid "delete a category"
msgstr "Supprimer une catégorie"
-#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237
+#: engine/core/docs/drf/viewsets.py:262 engine/core/docs/drf/viewsets.py:263
msgid "rewrite an existing category saving non-editables"
msgstr "Réécrire une catégorie existante en sauvegardant les non-éditables"
-#: engine/core/docs/drf/viewsets.py:244 engine/core/docs/drf/viewsets.py:245
+#: engine/core/docs/drf/viewsets.py:270 engine/core/docs/drf/viewsets.py:272
msgid "rewrite some fields of an existing category saving non-editables"
msgstr ""
"Réécrire certains champs d'une catégorie existante en sauvegardant les non-"
"éditables"
-#: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704
-#: engine/core/docs/drf/viewsets.py:988
+#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:1046
#: engine/core/graphene/object_types.py:117
-#: engine/core/graphene/object_types.py:207
-#: engine/core/graphene/object_types.py:482
+#: engine/core/graphene/object_types.py:236
+#: engine/core/graphene/object_types.py:537
msgid "SEO Meta snapshot"
msgstr "Méta snapshot SEO"
-#: engine/core/docs/drf/viewsets.py:253
+#: engine/core/docs/drf/viewsets.py:281
msgid "returns a snapshot of the category's SEO meta data"
msgstr "Renvoie un instantané des métadonnées SEO de la catégorie."
-#: engine/core/docs/drf/viewsets.py:274
+#: engine/core/docs/drf/viewsets.py:302
msgid "list all orders (simple view)"
msgstr "Liste de toutes les catégories (vue simple)"
-#: engine/core/docs/drf/viewsets.py:275
+#: engine/core/docs/drf/viewsets.py:303
msgid "for non-staff users, only their own orders are returned."
msgstr ""
"Pour les utilisateurs non fonctionnaires, seules leurs propres commandes "
"sont renvoyées."
-#: engine/core/docs/drf/viewsets.py:281
+#: engine/core/docs/drf/viewsets.py:309
msgid ""
-"Case-insensitive substring search across human_readable_id, "
-"order_products.product.name, and order_products.product.partnumber"
+"Case-insensitive substring search across human_readable_id, order_products."
+"product.name, and order_products.product.partnumber"
msgstr ""
-"Recherche insensible à la casse dans human_readable_id, "
-"order_products.product.name, et order_products.product.partnumber"
+"Recherche insensible à la casse dans human_readable_id, order_products."
+"product.name, et order_products.product.partnumber"
-#: engine/core/docs/drf/viewsets.py:288
+#: engine/core/docs/drf/viewsets.py:316
msgid "Filter orders with buy_time >= this ISO 8601 datetime"
msgstr "Filtrer les commandes dont l'heure d'achat est >= cette date ISO 8601"
-#: engine/core/docs/drf/viewsets.py:293
+#: engine/core/docs/drf/viewsets.py:321
msgid "Filter orders with buy_time <= this ISO 8601 datetime"
msgstr "Filtrer les commandes avec buy_time <= this ISO 8601 datetime"
-#: engine/core/docs/drf/viewsets.py:298
+#: engine/core/docs/drf/viewsets.py:326
msgid "Filter by exact order UUID"
msgstr "Filtre sur l'UUID exact de l'ordre"
-#: engine/core/docs/drf/viewsets.py:303
+#: engine/core/docs/drf/viewsets.py:331
msgid "Filter by exact human-readable order ID"
msgstr "Filtre sur l'identifiant exact de la commande, lisible par l'homme"
-#: engine/core/docs/drf/viewsets.py:308
+#: engine/core/docs/drf/viewsets.py:336
msgid "Filter by user's email (case-insensitive exact match)"
msgstr ""
"Filtre sur l'adresse électronique de l'utilisateur (correspondance exacte "
"insensible à la casse)"
-#: engine/core/docs/drf/viewsets.py:313
+#: engine/core/docs/drf/viewsets.py:341
msgid "Filter by user's UUID"
msgstr "Filtrer par UUID de l'utilisateur"
-#: engine/core/docs/drf/viewsets.py:318
+#: engine/core/docs/drf/viewsets.py:347
msgid "Filter by order status (case-insensitive substring match)"
msgstr ""
"Filtre sur l'état de la commande (correspondance insensible aux majuscules "
"et aux minuscules)"
-#: engine/core/docs/drf/viewsets.py:324
+#: engine/core/docs/drf/viewsets.py:354
msgid ""
-"Order by one of: uuid, human_readable_id, user_email, user, status, created,"
-" modified, buy_time, random. Prefix with '-' for descending (e.g. "
-"'-buy_time')."
+"Order by one of: uuid, human_readable_id, user_email, user, status, created, "
+"modified, buy_time, random. Prefix with '-' for descending (e.g. '-"
+"buy_time')."
msgstr ""
"Ordonner par l'un des éléments suivants : uuid, human_readable_id, "
-"user_email, user, status, created, modified, buy_time, random. Préfixer avec"
-" '-' pour l'ordre décroissant (par exemple '-buy_time')."
+"user_email, user, status, created, modified, buy_time, random. Préfixer avec "
+"'-' pour l'ordre décroissant (par exemple '-buy_time')."
-#: engine/core/docs/drf/viewsets.py:336
+#: engine/core/docs/drf/viewsets.py:366
msgid "retrieve a single order (detailed view)"
msgstr "Récupérer une seule catégorie (vue détaillée)"
-#: engine/core/docs/drf/viewsets.py:341
+#: engine/core/docs/drf/viewsets.py:371
msgid "Order UUID or human-readable id"
msgstr "UUID de la commande ou identifiant lisible par l'homme"
-#: engine/core/docs/drf/viewsets.py:351
+#: engine/core/docs/drf/viewsets.py:381
msgid "create an order"
msgstr "Créer un attribut"
-#: engine/core/docs/drf/viewsets.py:352
+#: engine/core/docs/drf/viewsets.py:382
msgid "doesn't work for non-staff users."
msgstr "Ne fonctionne pas pour les utilisateurs non fonctionnaires."
-#: engine/core/docs/drf/viewsets.py:359
+#: engine/core/docs/drf/viewsets.py:389
msgid "delete an order"
msgstr "Supprimer un attribut"
-#: engine/core/docs/drf/viewsets.py:366
+#: engine/core/docs/drf/viewsets.py:396
msgid "rewrite an existing order saving non-editables"
msgstr "Réécrire une catégorie existante en sauvegardant les non-éditables"
-#: engine/core/docs/drf/viewsets.py:373
+#: engine/core/docs/drf/viewsets.py:403
msgid "rewrite some fields of an existing order saving non-editables"
msgstr ""
"Réécrire certains champs d'une catégorie existante en sauvegardant les non-"
"éditables"
-#: engine/core/docs/drf/viewsets.py:380
+#: engine/core/docs/drf/viewsets.py:410
msgid "purchase an order"
msgstr "Prix d'achat au moment de la commande"
-#: engine/core/docs/drf/viewsets.py:382
+#: engine/core/docs/drf/viewsets.py:412
msgid ""
"finalizes the order purchase. if `force_balance` is used, the purchase is "
"completed using the user's balance; if `force_payment` is used, a "
"transaction is initiated."
msgstr ""
-"Finalise l'achat de la commande. Si `force_balance` est utilisé, l'achat est"
-" complété en utilisant le solde de l'utilisateur ; Si `force_payment` est "
+"Finalise l'achat de la commande. Si `force_balance` est utilisé, l'achat est "
+"complété en utilisant le solde de l'utilisateur ; Si `force_payment` est "
"utilisé, une transaction est initiée."
-#: engine/core/docs/drf/viewsets.py:397
+#: engine/core/docs/drf/viewsets.py:427
msgid "retrieve current pending order of a user"
msgstr "récupérer la commande en cours d'un utilisateur"
-#: engine/core/docs/drf/viewsets.py:398
+#: engine/core/docs/drf/viewsets.py:428
msgid "retrieves a current pending order of an authenticated user"
msgstr "récupère une commande en cours d'un utilisateur authentifié"
-#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334
+#: engine/core/docs/drf/viewsets.py:438 engine/core/graphene/mutations.py:354
msgid "purchase an order without account creation"
msgstr "acheter une commande sans créer de compte"
-#: engine/core/docs/drf/viewsets.py:409
+#: engine/core/docs/drf/viewsets.py:439
msgid "finalizes the order purchase for a non-registered user."
msgstr "finalise l'achat d'une commande pour un utilisateur non enregistré."
-#: engine/core/docs/drf/viewsets.py:420
+#: engine/core/docs/drf/viewsets.py:450
msgid "add product to order"
msgstr "Ajouter un produit à la commande"
-#: engine/core/docs/drf/viewsets.py:421
+#: engine/core/docs/drf/viewsets.py:452
msgid ""
"adds a product to an order using the provided `product_uuid` and "
"`attributes`."
@@ -513,13 +511,13 @@ msgstr ""
"Ajoute un produit à une commande en utilisant le `product_uuid` et les "
"`attributs` fournis."
-#: engine/core/docs/drf/viewsets.py:429
+#: engine/core/docs/drf/viewsets.py:461
msgid "add a list of products to order, quantities will not count"
msgstr ""
"Ajouter une liste de produits à la commande, les quantités ne seront pas "
"prises en compte"
-#: engine/core/docs/drf/viewsets.py:430
+#: engine/core/docs/drf/viewsets.py:463
msgid ""
"adds a list of products to an order using the provided `product_uuid` and "
"`attributes`."
@@ -527,11 +525,11 @@ msgstr ""
"Ajoute une liste de produits à une commande en utilisant le `product_uuid` "
"et les `attributs` fournis."
-#: engine/core/docs/drf/viewsets.py:438
+#: engine/core/docs/drf/viewsets.py:472
msgid "remove product from order"
msgstr "Supprimer un produit de la commande"
-#: engine/core/docs/drf/viewsets.py:439
+#: engine/core/docs/drf/viewsets.py:474
msgid ""
"removes a product from an order using the provided `product_uuid` and "
"`attributes`."
@@ -539,756 +537,768 @@ msgstr ""
"Supprime un produit d'une commande en utilisant le `product_uuid` et les "
"`attributs` fournis."
-#: engine/core/docs/drf/viewsets.py:447
+#: engine/core/docs/drf/viewsets.py:483
msgid "remove product from order, quantities will not count"
msgstr ""
"Retirer un produit de la commande, les quantités ne seront pas prises en "
"compte"
-#: engine/core/docs/drf/viewsets.py:448
+#: engine/core/docs/drf/viewsets.py:485
msgid ""
"removes a list of products from an order using the provided `product_uuid` "
"and `attributes`"
msgstr ""
-"Supprime une liste de produits d'une commande en utilisant le `product_uuid`"
-" et les `attributs` fournis."
+"Supprime une liste de produits d'une commande en utilisant le `product_uuid` "
+"et les `attributs` fournis."
-#: engine/core/docs/drf/viewsets.py:459
+#: engine/core/docs/drf/viewsets.py:497
msgid "list all wishlists (simple view)"
msgstr "Liste de tous les attributs (vue simple)"
-#: engine/core/docs/drf/viewsets.py:460
+#: engine/core/docs/drf/viewsets.py:498
msgid "for non-staff users, only their own wishlists are returned."
msgstr ""
"Pour les utilisateurs non fonctionnaires, seules leurs propres listes de "
"souhaits sont renvoyées."
-#: engine/core/docs/drf/viewsets.py:467
+#: engine/core/docs/drf/viewsets.py:508
msgid "retrieve a single wishlist (detailed view)"
msgstr "Récupérer un seul attribut (vue détaillée)"
-#: engine/core/docs/drf/viewsets.py:474
+#: engine/core/docs/drf/viewsets.py:515
msgid "create an wishlist"
msgstr "Créer un attribut"
-#: engine/core/docs/drf/viewsets.py:475
+#: engine/core/docs/drf/viewsets.py:516
msgid "Doesn't work for non-staff users."
msgstr "Ne fonctionne pas pour les utilisateurs non fonctionnaires."
-#: engine/core/docs/drf/viewsets.py:482
+#: engine/core/docs/drf/viewsets.py:523
msgid "delete an wishlist"
msgstr "Supprimer un attribut"
-#: engine/core/docs/drf/viewsets.py:489
+#: engine/core/docs/drf/viewsets.py:530
msgid "rewrite an existing wishlist saving non-editables"
msgstr ""
"Réécrire un attribut existant en sauvegardant les éléments non modifiables"
-#: engine/core/docs/drf/viewsets.py:496
+#: engine/core/docs/drf/viewsets.py:537
msgid "rewrite some fields of an existing wishlist saving non-editables"
msgstr ""
-"Réécrire certains champs d'un attribut existant en sauvegardant les éléments"
-" non modifiables"
+"Réécrire certains champs d'un attribut existant en sauvegardant les éléments "
+"non modifiables"
-#: engine/core/docs/drf/viewsets.py:503
+#: engine/core/docs/drf/viewsets.py:544
msgid "retrieve current pending wishlist of a user"
msgstr "récupérer la liste de souhaits en cours d'un utilisateur"
-#: engine/core/docs/drf/viewsets.py:504
+#: engine/core/docs/drf/viewsets.py:545
msgid "retrieves a current pending wishlist of an authenticated user"
msgstr ""
"récupération d'une liste de vœux en attente d'un utilisateur authentifié"
-#: engine/core/docs/drf/viewsets.py:514
+#: engine/core/docs/drf/viewsets.py:555
msgid "add product to wishlist"
msgstr "Ajouter un produit à la commande"
-#: engine/core/docs/drf/viewsets.py:515
+#: engine/core/docs/drf/viewsets.py:557
msgid "adds a product to an wishlist using the provided `product_uuid`"
msgstr ""
"Ajoute un produit à une liste de souhaits en utilisant le `product_uuid` "
"fourni"
-#: engine/core/docs/drf/viewsets.py:523
+#: engine/core/docs/drf/viewsets.py:566
msgid "remove product from wishlist"
msgstr "Supprimer un produit de la liste de souhaits"
-#: engine/core/docs/drf/viewsets.py:524
+#: engine/core/docs/drf/viewsets.py:568
msgid "removes a product from an wishlist using the provided `product_uuid`"
msgstr ""
"Supprime un produit d'une liste de souhaits en utilisant l'identifiant "
"`product_uuid` fourni."
-#: engine/core/docs/drf/viewsets.py:532
+#: engine/core/docs/drf/viewsets.py:577
msgid "add many products to wishlist"
msgstr "Ajouter plusieurs produits à la liste de souhaits"
-#: engine/core/docs/drf/viewsets.py:533
+#: engine/core/docs/drf/viewsets.py:579
msgid "adds many products to an wishlist using the provided `product_uuids`"
msgstr ""
"Ajoute plusieurs produits à une liste de souhaits en utilisant les "
"`product_uuids` fournis"
-#: engine/core/docs/drf/viewsets.py:541
+#: engine/core/docs/drf/viewsets.py:588
msgid "remove many products from wishlist"
msgstr "Supprimer un produit de la commande"
-#: engine/core/docs/drf/viewsets.py:542
+#: engine/core/docs/drf/viewsets.py:590
msgid ""
"removes many products from an wishlist using the provided `product_uuids`"
msgstr ""
"Supprime plusieurs produits d'une liste de souhaits en utilisant les "
"`product_uuids` fournis"
-#: engine/core/docs/drf/viewsets.py:549
+#: engine/core/docs/drf/viewsets.py:598
msgid ""
"Filter by one or more attribute name/value pairs. \n"
"• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n"
-"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n"
-"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n"
+"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, "
+"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, "
+"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n"
+"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), "
+"`true`/`false` for booleans, integers, floats; otherwise treated as "
+"string. \n"
"• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n"
"Examples: \n"
-"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n"
+"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\","
+"\"bluetooth\"]`, \n"
"`b64-description=icontains-aGVhdC1jb2xk`"
msgstr ""
"Filtre sur une ou plusieurs paires nom/valeur d'attribut. \n"
"- **Syntaxe** : `nom_attr=méthode-valeur[;attr2=méthode2-valeur2]...`\n"
-"- **Méthodes** (la valeur par défaut est `icontains` si elle est omise) : `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`\n"
-"- **Type de valeur** : JSON est essayé en premier (pour que vous puissiez passer des listes/dicts), `true`/`false` pour les booléens, les entiers, les flottants ; sinon traité comme une chaîne de caractères. \n"
-"- **Base64** : préfixe avec `b64-` pour encoder la valeur brute en base64 de manière sûre pour l'URL. \n"
+"- **Méthodes** (la valeur par défaut est `icontains` si elle est omise) : "
+"`iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, "
+"`istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, "
+"`gt`, `gte`, `in`\n"
+"- **Type de valeur** : JSON est essayé en premier (pour que vous puissiez "
+"passer des listes/dicts), `true`/`false` pour les booléens, les entiers, les "
+"flottants ; sinon traité comme une chaîne de caractères. \n"
+"- **Base64** : préfixe avec `b64-` pour encoder la valeur brute en base64 de "
+"manière sûre pour l'URL. \n"
"Exemples : \n"
"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\", \"bluetooth\"]`,\n"
"`b64-description=icontains-aGVhdC1jb2xk`"
-#: engine/core/docs/drf/viewsets.py:568 engine/core/docs/drf/viewsets.py:569
+#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
msgid "list all products (simple view)"
msgstr "Liste de tous les produits (vue simple)"
-#: engine/core/docs/drf/viewsets.py:574
+#: engine/core/docs/drf/viewsets.py:623
msgid "(exact) Product UUID"
msgstr "UUID (exact) du produit"
-#: engine/core/docs/drf/viewsets.py:581
+#: engine/core/docs/drf/viewsets.py:630
msgid ""
-"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n"
+"Comma-separated list of fields to sort by. Prefix with `-` for "
+"descending. \n"
"**Allowed:** uuid, rating, name, slug, created, modified, price, random"
msgstr ""
-"Liste de champs séparés par des virgules à trier. Préfixer avec `-` pour un tri descendant. \n"
+"Liste de champs séparés par des virgules à trier. Préfixer avec `-` pour un "
+"tri descendant. \n"
"**Allowed:** uuid, rating, name, slug, created, modified, price, random"
-#: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599
+#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
msgid "retrieve a single product (detailed view)"
msgstr "Récupérer un seul produit (vue détaillée)"
-#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634
-#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672
-#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710
+#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683
+#: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725
+#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763
msgid "Product UUID or slug"
msgstr "UUID ou Slug du produit"
-#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
+#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
#: engine/core/graphene/dashboard_mutations/product.py:80
#: engine/core/graphene/dashboard_mutations/product.py:118
#: engine/core/graphene/dashboard_mutations/product.py:166
msgid "create a product"
msgstr "Créer un produit"
-#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629
+#: engine/core/docs/drf/viewsets.py:677 engine/core/docs/drf/viewsets.py:678
msgid "rewrite an existing product, preserving non-editable fields"
msgstr "Réécrire un produit existant en préservant les champs non modifiables"
-#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
+#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:700
msgid ""
"update some fields of an existing product, preserving non-editable fields"
msgstr ""
"Mettre à jour certains champs d'un produit existant, en préservant les "
"champs non modifiables"
-#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
+#: engine/core/docs/drf/viewsets.py:719 engine/core/docs/drf/viewsets.py:720
msgid "delete a product"
msgstr "Supprimer un produit"
-#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686
+#: engine/core/docs/drf/viewsets.py:738 engine/core/docs/drf/viewsets.py:739
msgid "lists all permitted feedbacks for a product"
msgstr "liste tous les commentaires autorisés pour un produit"
-#: engine/core/docs/drf/viewsets.py:705
+#: engine/core/docs/drf/viewsets.py:758
msgid "returns a snapshot of the product's SEO meta data"
msgstr "Renvoie un instantané des métadonnées SEO du produit"
-#: engine/core/docs/drf/viewsets.py:726
+#: engine/core/docs/drf/viewsets.py:779
msgid "list all addresses"
msgstr "Liste de toutes les adresses"
-#: engine/core/docs/drf/viewsets.py:736
+#: engine/core/docs/drf/viewsets.py:789
msgid "retrieve a single address"
msgstr "Récupérer une seule adresse"
-#: engine/core/docs/drf/viewsets.py:746
+#: engine/core/docs/drf/viewsets.py:799
msgid "create a new address"
msgstr "Créer une nouvelle adresse"
-#: engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:810
msgid "delete an address"
msgstr "Supprimer une adresse"
-#: engine/core/docs/drf/viewsets.py:767
+#: engine/core/docs/drf/viewsets.py:820
msgid "update an entire address"
msgstr "Mise à jour d'une adresse entière"
-#: engine/core/docs/drf/viewsets.py:778
+#: engine/core/docs/drf/viewsets.py:831
msgid "partially update an address"
msgstr "Mise à jour partielle d'une adresse"
-#: engine/core/docs/drf/viewsets.py:789
+#: engine/core/docs/drf/viewsets.py:842
msgid "autocomplete address suggestions"
msgstr "Saisie automatique des adresses"
-#: engine/core/docs/drf/viewsets.py:794
+#: engine/core/docs/drf/viewsets.py:848
msgid "raw data query string, please append with data from geo-IP endpoint"
msgstr ""
"Chaîne de requête de données brutes, à compléter avec les données du point "
"d'extrémité géo-IP"
-#: engine/core/docs/drf/viewsets.py:800
+#: engine/core/docs/drf/viewsets.py:855
msgid "limit the results amount, 1 < limit < 10, default: 5"
msgstr "limite la quantité de résultats, 1 < limite < 10, par défaut : 5"
-#: engine/core/docs/drf/viewsets.py:816
+#: engine/core/docs/drf/viewsets.py:871
msgid "list all feedbacks (simple view)"
msgstr "liste de tous les commentaires (vue simple)"
-#: engine/core/docs/drf/viewsets.py:823
+#: engine/core/docs/drf/viewsets.py:881
msgid "retrieve a single feedback (detailed view)"
msgstr "récupérer un seul retour d'information (vue détaillée)"
-#: engine/core/docs/drf/viewsets.py:830
+#: engine/core/docs/drf/viewsets.py:888
msgid "create a feedback"
msgstr "créer un retour d'information"
-#: engine/core/docs/drf/viewsets.py:837
+#: engine/core/docs/drf/viewsets.py:895
msgid "delete a feedback"
msgstr "supprimer un feedback"
-#: engine/core/docs/drf/viewsets.py:844
+#: engine/core/docs/drf/viewsets.py:902
msgid "rewrite an existing feedback saving non-editables"
msgstr ""
"réécrire un feedback existant en sauvegardant les éléments non modifiables"
-#: engine/core/docs/drf/viewsets.py:851
+#: engine/core/docs/drf/viewsets.py:909
msgid "rewrite some fields of an existing feedback saving non-editables"
msgstr ""
"Réécrire certains champs d'une catégorie existante en sauvegardant les non-"
"éditables"
-#: engine/core/docs/drf/viewsets.py:861
+#: engine/core/docs/drf/viewsets.py:919
msgid "list all order–product relations (simple view)"
msgstr "lister toutes les relations commande-produit (vue simple)"
-#: engine/core/docs/drf/viewsets.py:871
+#: engine/core/docs/drf/viewsets.py:929
msgid "retrieve a single order–product relation (detailed view)"
msgstr "récupérer une seule relation commande-produit (vue détaillée)"
-#: engine/core/docs/drf/viewsets.py:881
+#: engine/core/docs/drf/viewsets.py:939
msgid "create a new order–product relation"
msgstr "créer une nouvelle relation commande-produit"
-#: engine/core/docs/drf/viewsets.py:891
+#: engine/core/docs/drf/viewsets.py:949
msgid "replace an existing order–product relation"
msgstr "remplacer une relation commande-produit existante"
-#: engine/core/docs/drf/viewsets.py:901
+#: engine/core/docs/drf/viewsets.py:959
msgid "partially update an existing order–product relation"
msgstr "mettre à jour partiellement une relation commande-produit existante"
-#: engine/core/docs/drf/viewsets.py:911
+#: engine/core/docs/drf/viewsets.py:969
msgid "delete an order–product relation"
msgstr "supprimer une relation commande-produit"
-#: engine/core/docs/drf/viewsets.py:921
+#: engine/core/docs/drf/viewsets.py:979
msgid "add or remove feedback on an order–product relation"
msgstr ""
"ajouter ou supprimer un retour d'information sur une relation commande-"
"produit"
-#: engine/core/docs/drf/viewsets.py:938
+#: engine/core/docs/drf/viewsets.py:996
msgid "list all brands (simple view)"
msgstr "Liste de toutes les marques (vue simple)"
-#: engine/core/docs/drf/viewsets.py:945
+#: engine/core/docs/drf/viewsets.py:1003
msgid "retrieve a single brand (detailed view)"
msgstr "Récupérer une seule marque (vue détaillée)"
-#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993
+#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051
msgid "Brand UUID or slug"
msgstr "UUID ou slug de la marque"
-#: engine/core/docs/drf/viewsets.py:960
+#: engine/core/docs/drf/viewsets.py:1018
msgid "create a brand"
msgstr "Créer une marque"
-#: engine/core/docs/drf/viewsets.py:967
+#: engine/core/docs/drf/viewsets.py:1025
msgid "delete a brand"
msgstr "Supprimer une marque"
-#: engine/core/docs/drf/viewsets.py:974
+#: engine/core/docs/drf/viewsets.py:1032
msgid "rewrite an existing brand saving non-editables"
msgstr "Réécrire une marque existante en sauvegardant les non-éditables"
-#: engine/core/docs/drf/viewsets.py:981
+#: engine/core/docs/drf/viewsets.py:1039
msgid "rewrite some fields of an existing brand saving non-editables"
msgstr ""
"Réécrire certains champs d'une catégorie existante en sauvegardant les non-"
"éditables"
-#: engine/core/docs/drf/viewsets.py:1006
+#: engine/core/docs/drf/viewsets.py:1064
msgid "list all vendors (simple view)"
msgstr "Liste de tous les fournisseurs (vue simple)"
-#: engine/core/docs/drf/viewsets.py:1013
+#: engine/core/docs/drf/viewsets.py:1074
msgid "retrieve a single vendor (detailed view)"
msgstr "Récupérer un seul fournisseur (vue détaillée)"
-#: engine/core/docs/drf/viewsets.py:1020
+#: engine/core/docs/drf/viewsets.py:1081
msgid "create a vendor"
msgstr "Créer un fournisseur"
-#: engine/core/docs/drf/viewsets.py:1027
+#: engine/core/docs/drf/viewsets.py:1088
msgid "delete a vendor"
msgstr "Supprimer un fournisseur"
-#: engine/core/docs/drf/viewsets.py:1034
+#: engine/core/docs/drf/viewsets.py:1095
msgid "rewrite an existing vendor saving non-editables"
msgstr ""
"Réécrire un vendeur existant en sauvegardant les éléments non modifiables"
-#: engine/core/docs/drf/viewsets.py:1041
+#: engine/core/docs/drf/viewsets.py:1102
msgid "rewrite some fields of an existing vendor saving non-editables"
msgstr ""
"Réécrire certains champs d'une catégorie existante en sauvegardant les non-"
"éditables"
-#: engine/core/docs/drf/viewsets.py:1051
+#: engine/core/docs/drf/viewsets.py:1112
msgid "list all product images (simple view)"
msgstr "Liste de toutes les images de produits (vue simple)"
-#: engine/core/docs/drf/viewsets.py:1058
+#: engine/core/docs/drf/viewsets.py:1122
msgid "retrieve a single product image (detailed view)"
msgstr "Récupérer l'image d'un seul produit (vue détaillée)"
-#: engine/core/docs/drf/viewsets.py:1065
+#: engine/core/docs/drf/viewsets.py:1129
msgid "create a product image"
msgstr "Créer une image du produit"
-#: engine/core/docs/drf/viewsets.py:1072
+#: engine/core/docs/drf/viewsets.py:1139
msgid "delete a product image"
msgstr "Supprimer une image de produit"
-#: engine/core/docs/drf/viewsets.py:1079
+#: engine/core/docs/drf/viewsets.py:1146
msgid "rewrite an existing product image saving non-editables"
msgstr ""
"Réécrire l'image d'un produit existant en sauvegardant les éléments non "
"modifiables"
-#: engine/core/docs/drf/viewsets.py:1086
+#: engine/core/docs/drf/viewsets.py:1154
msgid "rewrite some fields of an existing product image saving non-editables"
msgstr ""
"Réécrire certains champs d'une catégorie existante en sauvegardant les non-"
"éditables"
-#: engine/core/docs/drf/viewsets.py:1096
+#: engine/core/docs/drf/viewsets.py:1165
msgid "list all promo codes (simple view)"
msgstr "Liste de tous les codes promo (vue simple)"
-#: engine/core/docs/drf/viewsets.py:1103
+#: engine/core/docs/drf/viewsets.py:1175
msgid "retrieve a single promo code (detailed view)"
msgstr "Récupérer un seul code promo (vue détaillée)"
-#: engine/core/docs/drf/viewsets.py:1110
+#: engine/core/docs/drf/viewsets.py:1182
msgid "create a promo code"
msgstr "Créer un code promo"
-#: engine/core/docs/drf/viewsets.py:1117
+#: engine/core/docs/drf/viewsets.py:1189
msgid "delete a promo code"
msgstr "Supprimer un code promo"
-#: engine/core/docs/drf/viewsets.py:1124
+#: engine/core/docs/drf/viewsets.py:1196
msgid "rewrite an existing promo code saving non-editables"
msgstr "Réécrire un code promo existant en sauvegardant les non-éditables"
-#: engine/core/docs/drf/viewsets.py:1131
+#: engine/core/docs/drf/viewsets.py:1203
msgid "rewrite some fields of an existing promo code saving non-editables"
msgstr ""
"Réécrire certains champs d'une catégorie existante en sauvegardant les non-"
"éditables"
-#: engine/core/docs/drf/viewsets.py:1141
+#: engine/core/docs/drf/viewsets.py:1213
msgid "list all promotions (simple view)"
msgstr "Liste de toutes les promotions (vue simple)"
-#: engine/core/docs/drf/viewsets.py:1148
+#: engine/core/docs/drf/viewsets.py:1223
msgid "retrieve a single promotion (detailed view)"
msgstr "Récupérer une seule promotion (vue détaillée)"
-#: engine/core/docs/drf/viewsets.py:1155
+#: engine/core/docs/drf/viewsets.py:1230
msgid "create a promotion"
msgstr "Créer une promotion"
-#: engine/core/docs/drf/viewsets.py:1162
+#: engine/core/docs/drf/viewsets.py:1237
msgid "delete a promotion"
msgstr "Supprimer une promotion"
-#: engine/core/docs/drf/viewsets.py:1169
+#: engine/core/docs/drf/viewsets.py:1244
msgid "rewrite an existing promotion saving non-editables"
msgstr ""
-"Réécrire une promotion existante en sauvegardant les éléments non "
-"modifiables"
+"Réécrire une promotion existante en sauvegardant les éléments non modifiables"
-#: engine/core/docs/drf/viewsets.py:1176
+#: engine/core/docs/drf/viewsets.py:1251
msgid "rewrite some fields of an existing promotion saving non-editables"
msgstr ""
"Réécrire certains champs d'une catégorie existante en sauvegardant les non-"
"éditables"
-#: engine/core/docs/drf/viewsets.py:1186
+#: engine/core/docs/drf/viewsets.py:1261
msgid "list all stocks (simple view)"
msgstr "Liste de toutes les actions (vue simple)"
-#: engine/core/docs/drf/viewsets.py:1193
+#: engine/core/docs/drf/viewsets.py:1268
msgid "retrieve a single stock (detailed view)"
msgstr "Récupérer une seule action (vue détaillée)"
-#: engine/core/docs/drf/viewsets.py:1200
+#: engine/core/docs/drf/viewsets.py:1275
msgid "create a stock record"
msgstr "Créer une fiche de stock"
-#: engine/core/docs/drf/viewsets.py:1207
+#: engine/core/docs/drf/viewsets.py:1282
msgid "delete a stock record"
msgstr "Supprimer une fiche de stock"
-#: engine/core/docs/drf/viewsets.py:1214
+#: engine/core/docs/drf/viewsets.py:1289
msgid "rewrite an existing stock record saving non-editables"
msgstr ""
"Réécrire une fiche de stock existante en sauvegardant les éléments non "
"modifiables"
-#: engine/core/docs/drf/viewsets.py:1221
+#: engine/core/docs/drf/viewsets.py:1297
msgid "rewrite some fields of an existing stock record saving non-editables"
msgstr ""
"Réécrire certains champs d'une catégorie existante en sauvegardant les non-"
"éditables"
-#: engine/core/docs/drf/viewsets.py:1231
+#: engine/core/docs/drf/viewsets.py:1308
msgid "list all product tags (simple view)"
msgstr "Liste de toutes les étiquettes de produits (vue simple)"
-#: engine/core/docs/drf/viewsets.py:1238
+#: engine/core/docs/drf/viewsets.py:1318
msgid "retrieve a single product tag (detailed view)"
msgstr "Récupérer une seule étiquette de produit (vue détaillée)"
-#: engine/core/docs/drf/viewsets.py:1245
+#: engine/core/docs/drf/viewsets.py:1325
msgid "create a product tag"
msgstr "Créer une étiquette de produit"
-#: engine/core/docs/drf/viewsets.py:1252
+#: engine/core/docs/drf/viewsets.py:1335
msgid "delete a product tag"
msgstr "Supprimer une étiquette de produit"
-#: engine/core/docs/drf/viewsets.py:1259
+#: engine/core/docs/drf/viewsets.py:1342
msgid "rewrite an existing product tag saving non-editables"
msgstr ""
-"Réécrire une étiquette de produit existante en sauvegardant les éléments non"
-" modifiables"
+"Réécrire une étiquette de produit existante en sauvegardant les éléments non "
+"modifiables"
-#: engine/core/docs/drf/viewsets.py:1266
+#: engine/core/docs/drf/viewsets.py:1350
msgid "rewrite some fields of an existing product tag saving non-editables"
msgstr ""
"Réécrire certains champs d'une catégorie existante en sauvegardant les non-"
"éditables"
-#: engine/core/elasticsearch/__init__.py:122
-#: engine/core/elasticsearch/__init__.py:570
+#: engine/core/elasticsearch/__init__.py:127
+#: engine/core/elasticsearch/__init__.py:627
msgid "no search term provided."
msgstr "Aucun terme de recherche n'est fourni."
-#: engine/core/filters.py:69 engine/core/filters.py:426
-#: engine/core/filters.py:553
+#: engine/core/filters.py:78 engine/core/filters.py:484
+#: engine/core/filters.py:625
msgid "Search"
msgstr "Recherche"
-#: engine/core/filters.py:70 engine/core/filters.py:583
-#: engine/core/filters.py:612
+#: engine/core/filters.py:79 engine/core/filters.py:662
+#: engine/core/filters.py:691
msgid "UUID"
msgstr "UUID"
-#: engine/core/filters.py:71 engine/core/filters.py:428
-#: engine/core/filters.py:555
+#: engine/core/filters.py:80 engine/core/filters.py:487
+#: engine/core/filters.py:627
msgid "Name"
msgstr "Nom"
-#: engine/core/filters.py:72 engine/core/filters.py:557
+#: engine/core/filters.py:82 engine/core/filters.py:630
msgid "Categories"
msgstr "Catégories"
-#: engine/core/filters.py:74
+#: engine/core/filters.py:86
msgid "Categories Slugs"
msgstr "Catégories Limaces"
-#: engine/core/filters.py:75 engine/core/filters.py:436
+#: engine/core/filters.py:88 engine/core/filters.py:495
msgid "Tags"
msgstr "Tags"
-#: engine/core/filters.py:76
+#: engine/core/filters.py:90
msgid "Min Price"
msgstr "Prix minimum"
-#: engine/core/filters.py:77
+#: engine/core/filters.py:93
msgid "Max Price"
msgstr "Prix maximum"
-#: engine/core/filters.py:78
+#: engine/core/filters.py:95
msgid "Is Active"
msgstr "Est actif"
-#: engine/core/filters.py:79
+#: engine/core/filters.py:96
msgid "Brand"
msgstr "Marque"
-#: engine/core/filters.py:80
+#: engine/core/filters.py:97
msgid "Attributes"
msgstr "Attributs"
-#: engine/core/filters.py:81
+#: engine/core/filters.py:99
msgid "Quantity"
msgstr "Quantité"
-#: engine/core/filters.py:82 engine/core/filters.py:430
-#: engine/core/filters.py:556 engine/core/models.py:321
-#: engine/core/models.py:489 engine/core/models.py:644
+#: engine/core/filters.py:101 engine/core/filters.py:489
+#: engine/core/filters.py:628 engine/core/models.py:327
+#: engine/core/models.py:508 engine/core/models.py:665
msgid "Slug"
msgstr "Limace"
-#: engine/core/filters.py:83
+#: engine/core/filters.py:102
msgid "Is Digital"
msgstr "Is Digital"
-#: engine/core/filters.py:84
+#: engine/core/filters.py:104
msgid "Include sub-categories"
msgstr "Inclure des sous-catégories"
-#: engine/core/filters.py:87
+#: engine/core/filters.py:108
msgid "Include personal ordered"
msgstr "Inclure les produits commandés par les particuliers"
-#: engine/core/filters.py:89 engine/core/models.py:648
+#: engine/core/filters.py:110 engine/core/models.py:669
msgid "SKU"
msgstr "SKU"
-#: engine/core/filters.py:184
+#: engine/core/filters.py:212
msgid "there must be a category_uuid to use include_subcategories flag"
msgstr ""
"Il doit y avoir un category_uuid pour utiliser le drapeau "
"include_subcategories"
-#: engine/core/filters.py:353
+#: engine/core/filters.py:398
msgid "Search (ID, product name or part number)"
msgstr "Recherche (ID, nom du produit ou numéro de pièce)"
-#: engine/core/filters.py:356
+#: engine/core/filters.py:402
msgid "Bought after (inclusive)"
msgstr "Acheté après (inclus)"
-#: engine/core/filters.py:357
+#: engine/core/filters.py:405
msgid "Bought before (inclusive)"
msgstr "Acheté avant (inclus)"
-#: engine/core/filters.py:360 engine/core/filters.py:407
-#: engine/core/filters.py:614
+#: engine/core/filters.py:410 engine/core/filters.py:461
+#: engine/core/filters.py:696
msgid "User email"
msgstr "Courriel de l'utilisateur"
-#: engine/core/filters.py:361 engine/core/filters.py:408
-#: engine/core/filters.py:592 engine/core/filters.py:613
+#: engine/core/filters.py:413 engine/core/filters.py:464
+#: engine/core/filters.py:671 engine/core/filters.py:693
msgid "User UUID"
msgstr "UUID de l'utilisateur"
-#: engine/core/filters.py:362
+#: engine/core/filters.py:415
msgid "Status"
msgstr "Statut"
-#: engine/core/filters.py:366
+#: engine/core/filters.py:419
msgid "Human Readable ID"
msgstr "ID lisible par l'homme"
-#: engine/core/filters.py:429
+#: engine/core/filters.py:488
msgid "Parent"
msgstr "Parent"
-#: engine/core/filters.py:433
+#: engine/core/filters.py:492
msgid "Whole category(has at least 1 product or not)"
msgstr "Catégorie entière (avec au moins 1 produit ou non)"
-#: engine/core/filters.py:437
+#: engine/core/filters.py:496
msgid "Level"
msgstr "Niveau"
-#: engine/core/filters.py:587
+#: engine/core/filters.py:666
msgid "Product UUID"
msgstr "UUID du produit"
-#: engine/core/graphene/mutations.py:40
+#: engine/core/graphene/mutations.py:41
msgid "key to look for in or set into the cache"
msgstr "Clé à rechercher ou à insérer dans la cache"
-#: engine/core/graphene/mutations.py:41
+#: engine/core/graphene/mutations.py:43
msgid "data to store in cache"
msgstr "Données à stocker dans la mémoire cache"
-#: engine/core/graphene/mutations.py:44
+#: engine/core/graphene/mutations.py:46
msgid "timeout in seconds to set the data for into the cache"
msgstr "Délai d'attente en secondes pour placer les données dans le cache"
-#: engine/core/graphene/mutations.py:47
+#: engine/core/graphene/mutations.py:49
msgid "cached data"
msgstr "Données mises en cache"
-#: engine/core/graphene/mutations.py:62
+#: engine/core/graphene/mutations.py:64
msgid "camelized JSON data from the requested URL"
msgstr "Données JSON camélisées provenant de l'URL demandée"
-#: engine/core/graphene/mutations.py:67 engine/core/views.py:257
+#: engine/core/graphene/mutations.py:69 engine/core/views.py:249
msgid "only URLs starting with http(s):// are allowed"
msgstr "Seuls les URL commençant par http(s):// sont autorisés."
-#: engine/core/graphene/mutations.py:83
+#: engine/core/graphene/mutations.py:87
msgid "add a product to the order"
msgstr "Ajouter un produit à la commande"
-#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131
-#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287
+#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139
+#: engine/core/graphene/mutations.py:255 engine/core/graphene/mutations.py:307
#, python-brace-format
msgid "order {order_uuid} not found"
msgstr "Ordre {order_uuid} introuvable !"
-#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159
+#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167
msgid "remove a product from the order"
msgstr "Supprimer un produit de la commande"
-#: engine/core/graphene/mutations.py:137
+#: engine/core/graphene/mutations.py:145
msgid "remove all products from the order"
msgstr "Supprimer tous les produits de la commande"
-#: engine/core/graphene/mutations.py:182
+#: engine/core/graphene/mutations.py:190
msgid "buy an order"
msgstr "Acheter une commande"
-#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265
+#: engine/core/graphene/mutations.py:221 engine/core/graphene/mutations.py:283
msgid "please provide either order_uuid or order_hr_id - mutually exclusive"
msgstr ""
"Veuillez fournir soit order_uuid, soit order_hr_id - les deux s'excluent "
"mutuellement !"
-#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501
-#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712
+#: engine/core/graphene/mutations.py:250 engine/core/graphene/mutations.py:525
+#: engine/core/graphene/mutations.py:574 engine/core/viewsets.py:753
msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr ""
"Le mauvais type provient de la méthode order.buy() : {type(instance)!s}"
-#: engine/core/graphene/mutations.py:245
+#: engine/core/graphene/mutations.py:261
msgid "perform an action on a list of products in the order"
msgstr "Effectuer une action sur une liste de produits dans la commande"
-#: engine/core/graphene/mutations.py:250
+#: engine/core/graphene/mutations.py:266
msgid "remove/add"
msgstr "Supprimer/Ajouter"
-#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323
+#: engine/core/graphene/mutations.py:302 engine/core/graphene/mutations.py:343
msgid "action must be either add or remove"
msgstr "L'action doit être soit \"ajouter\", soit \"supprimer\" !"
-#: engine/core/graphene/mutations.py:293
+#: engine/core/graphene/mutations.py:313
msgid "perform an action on a list of products in the wishlist"
msgstr ""
"Effectuer une action sur une liste de produits dans la liste de souhaits"
-#: engine/core/graphene/mutations.py:311
+#: engine/core/graphene/mutations.py:331
msgid "please provide wishlist_uuid value"
msgstr "Veuillez indiquer la valeur de `wishlist_uuid`."
-#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404
-#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460
-#: engine/core/graphene/mutations.py:504
+#: engine/core/graphene/mutations.py:348 engine/core/graphene/mutations.py:424
+#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480
+#: engine/core/graphene/mutations.py:530
#, python-brace-format
msgid "wishlist {wishlist_uuid} not found"
msgstr "Wishlist {wishlist_uuid} introuvable !"
-#: engine/core/graphene/mutations.py:382
+#: engine/core/graphene/mutations.py:402
msgid "add a product to the wishlist"
msgstr "Ajouter un produit à la commande"
-#: engine/core/graphene/mutations.py:410
+#: engine/core/graphene/mutations.py:430
msgid "remove a product from the wishlist"
msgstr "Supprimer un produit de la commande"
-#: engine/core/graphene/mutations.py:438
+#: engine/core/graphene/mutations.py:458
msgid "remove all products from the wishlist"
msgstr "Supprimer un produit de la commande"
-#: engine/core/graphene/mutations.py:466
+#: engine/core/graphene/mutations.py:486
msgid "buy all products from the wishlist"
msgstr "Supprimer un produit de la commande"
-#: engine/core/graphene/mutations.py:510
+#: engine/core/graphene/mutations.py:536
msgid "buy a product"
msgstr "Acheter une commande"
-#: engine/core/graphene/mutations.py:516
+#: engine/core/graphene/mutations.py:543
msgid ""
-"please send the attributes as the string formatted like "
-"attr1=value1,attr2=value2"
+"please send the attributes as the string formatted like attr1=value1,"
+"attr2=value2"
msgstr ""
"Veuillez envoyer les attributs sous la forme d'une chaîne formatée comme "
"attr1=valeur1,attr2=valeur2."
-#: engine/core/graphene/mutations.py:549
+#: engine/core/graphene/mutations.py:581
msgid "add or delete a feedback for orderproduct"
msgstr ""
"ajouter ou supprimer un retour d'information sur une relation commande-"
"produit"
-#: engine/core/graphene/mutations.py:573
+#: engine/core/graphene/mutations.py:607
msgid "action must be either `add` or `remove`"
msgstr "L'action doit être soit `add` soit `remove` !"
-#: engine/core/graphene/mutations.py:576
+#: engine/core/graphene/mutations.py:610
#, python-brace-format
msgid "order product {order_product_uuid} not found"
msgstr "Le produit {order_product_uuid} n'a pas été trouvé !"
-#: engine/core/graphene/mutations.py:582
+#: engine/core/graphene/mutations.py:617
msgid "original address string provided by the user"
msgstr "Chaîne d'adresse originale fournie par l'utilisateur"
-#: engine/core/graphene/mutations.py:618 engine/core/models.py:955
-#: engine/core/models.py:968 engine/core/models.py:1383
-#: engine/core/models.py:1412 engine/core/models.py:1437
-#: engine/core/viewsets.py:715
+#: engine/core/graphene/mutations.py:654 engine/core/models.py:978
+#: engine/core/models.py:991 engine/core/models.py:1435
+#: engine/core/models.py:1466 engine/core/models.py:1497
+#: engine/core/viewsets.py:760
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr "{name} n'existe pas : {uuid} !"
-#: engine/core/graphene/mutations.py:632
+#: engine/core/graphene/mutations.py:668
msgid "limit must be between 1 and 10"
msgstr "La limite doit être comprise entre 1 et 10"
-#: engine/core/graphene/mutations.py:681
+#: engine/core/graphene/mutations.py:717
msgid "elasticsearch - works like a charm"
msgstr "ElasticSearch - fonctionne comme un charme"
#: engine/core/graphene/object_types.py:82
-#: engine/core/graphene/object_types.py:370
-#: engine/core/graphene/object_types.py:417 engine/core/models.py:772
-#: engine/core/models.py:1250 engine/core/models.py:1897
+#: engine/core/graphene/object_types.py:417
+#: engine/core/graphene/object_types.py:468 engine/core/models.py:795
+#: engine/core/models.py:1289 engine/core/models.py:2021
msgid "attributes"
msgstr "Attributs"
@@ -1301,146 +1311,145 @@ msgid "groups of attributes"
msgstr "Groupes d'attributs"
#: engine/core/graphene/object_types.py:116
-#: engine/core/graphene/object_types.py:193
-#: engine/core/graphene/object_types.py:223 engine/core/models.py:432
+#: engine/core/graphene/object_types.py:214
+#: engine/core/graphene/object_types.py:252 engine/core/models.py:451
msgid "categories"
msgstr "Catégories"
-#: engine/core/graphene/object_types.py:124 engine/core/models.py:503
+#: engine/core/graphene/object_types.py:132 engine/core/models.py:522
msgid "brands"
msgstr "Marques"
-#: engine/core/graphene/object_types.py:195
+#: engine/core/graphene/object_types.py:216
msgid "category image url"
msgstr "Catégories"
-#: engine/core/graphene/object_types.py:196
-#: engine/core/graphene/object_types.py:317 engine/core/models.py:283
+#: engine/core/graphene/object_types.py:217
+#: engine/core/graphene/object_types.py:362 engine/core/models.py:289
msgid "markup percentage"
msgstr "Markup Percentage"
-#: engine/core/graphene/object_types.py:199
+#: engine/core/graphene/object_types.py:221
msgid "which attributes and values can be used for filtering this category."
msgstr ""
"Quels attributs et valeurs peuvent être utilisés pour filtrer cette "
"catégorie."
-#: engine/core/graphene/object_types.py:203
-msgid ""
-"minimum and maximum prices for products in this category, if available."
+#: engine/core/graphene/object_types.py:227
+msgid "minimum and maximum prices for products in this category, if available."
msgstr ""
"Prix minimum et maximum pour les produits de cette catégorie, s'ils sont "
"disponibles."
-#: engine/core/graphene/object_types.py:205
+#: engine/core/graphene/object_types.py:231
msgid "tags for this category"
msgstr "Tags pour cette catégorie"
-#: engine/core/graphene/object_types.py:206
+#: engine/core/graphene/object_types.py:234
msgid "products in this category"
msgstr "Produits dans cette catégorie"
-#: engine/core/graphene/object_types.py:324 engine/core/models.py:188
+#: engine/core/graphene/object_types.py:369 engine/core/models.py:194
msgid "vendors"
msgstr "Vendeurs"
-#: engine/core/graphene/object_types.py:328
+#: engine/core/graphene/object_types.py:373
msgid "Latitude (Y coordinate)"
msgstr "Latitude (coordonnée Y)"
-#: engine/core/graphene/object_types.py:329
+#: engine/core/graphene/object_types.py:374
msgid "Longitude (X coordinate)"
msgstr "Longitude (coordonnée X)"
-#: engine/core/graphene/object_types.py:358
+#: engine/core/graphene/object_types.py:403
msgid "comment"
msgstr "Comment"
-#: engine/core/graphene/object_types.py:359
-#: engine/core/graphene/object_types.py:483
+#: engine/core/graphene/object_types.py:405
+#: engine/core/graphene/object_types.py:539
msgid "rating value from 1 to 10, inclusive, or 0 if not set."
msgstr "Valeur d'évaluation de 1 à 10 inclus, ou 0 si elle n'est pas définie."
-#: engine/core/graphene/object_types.py:366
+#: engine/core/graphene/object_types.py:413
msgid "represents feedback from a user."
msgstr "Représente le retour d'information d'un utilisateur."
-#: engine/core/graphene/object_types.py:371
-#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244
+#: engine/core/graphene/object_types.py:418
+#: engine/core/graphene/object_types.py:469 engine/core/models.py:1283
msgid "notifications"
msgstr "Notifications"
-#: engine/core/graphene/object_types.py:372
+#: engine/core/graphene/object_types.py:420
msgid "download url for this order product if applicable"
msgstr "URL de téléchargement pour ce produit de la commande, le cas échéant"
-#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736
+#: engine/core/graphene/object_types.py:422 engine/core/models.py:1848
msgid "feedback"
msgstr "Retour d'information"
-#: engine/core/graphene/object_types.py:407
+#: engine/core/graphene/object_types.py:456
msgid "a list of order products in this order"
msgstr "Une liste des produits commandés dans cette commande"
-#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214
+#: engine/core/graphene/object_types.py:458 engine/core/models.py:1253
msgid "billing address"
msgstr "Adresse de facturation"
-#: engine/core/graphene/object_types.py:412
+#: engine/core/graphene/object_types.py:462
msgid ""
"shipping address for this order, leave blank if same as billing address or "
"if not applicable"
msgstr ""
-"Adresse d'expédition pour cette commande, laisser vide si elle est identique"
-" à l'adresse de facturation ou si elle n'est pas applicable"
+"Adresse d'expédition pour cette commande, laisser vide si elle est identique "
+"à l'adresse de facturation ou si elle n'est pas applicable"
-#: engine/core/graphene/object_types.py:414
+#: engine/core/graphene/object_types.py:465
msgid "total price of this order"
msgstr "Prix total de la commande"
-#: engine/core/graphene/object_types.py:415
+#: engine/core/graphene/object_types.py:466
msgid "total quantity of products in order"
msgstr "Quantité totale de produits dans la commande"
-#: engine/core/graphene/object_types.py:416
+#: engine/core/graphene/object_types.py:467
msgid "are all products in the order digital"
msgstr "Tous les produits de la commande sont-ils numériques ?"
-#: engine/core/graphene/object_types.py:419
+#: engine/core/graphene/object_types.py:471
msgid "transactions for this order"
msgstr "Transactions pour cette commande"
-#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278
+#: engine/core/graphene/object_types.py:491 engine/core/models.py:1317
msgid "orders"
msgstr "Commandes"
-#: engine/core/graphene/object_types.py:459
+#: engine/core/graphene/object_types.py:512
msgid "image url"
msgstr "Image URL"
-#: engine/core/graphene/object_types.py:466
+#: engine/core/graphene/object_types.py:519
msgid "product's images"
msgstr "Images du produit"
-#: engine/core/graphene/object_types.py:473 engine/core/models.py:431
-#: engine/core/models.py:586
+#: engine/core/graphene/object_types.py:526 engine/core/models.py:450
+#: engine/core/models.py:607
msgid "category"
msgstr "Catégorie"
-#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737
+#: engine/core/graphene/object_types.py:528 engine/core/models.py:1849
msgid "feedbacks"
msgstr "Retour d'information"
-#: engine/core/graphene/object_types.py:476 engine/core/models.py:502
-#: engine/core/models.py:595
+#: engine/core/graphene/object_types.py:529 engine/core/models.py:521
+#: engine/core/models.py:616
msgid "brand"
msgstr "Marque"
-#: engine/core/graphene/object_types.py:477 engine/core/models.py:106
+#: engine/core/graphene/object_types.py:531 engine/core/models.py:106
msgid "attribute groups"
msgstr "Groupes d'attributs"
-#: engine/core/graphene/object_types.py:478
+#: engine/core/graphene/object_types.py:533
#: engine/core/templates/digital_order_created_email.html:111
#: engine/core/templates/digital_order_delivered_email.html:109
#: engine/core/templates/shipped_order_created_email.html:109
@@ -1448,7 +1457,7 @@ msgstr "Groupes d'attributs"
msgid "price"
msgstr "Prix"
-#: engine/core/graphene/object_types.py:479
+#: engine/core/graphene/object_types.py:534
#: engine/core/templates/digital_order_created_email.html:110
#: engine/core/templates/digital_order_delivered_email.html:108
#: engine/core/templates/shipped_order_created_email.html:108
@@ -1456,39 +1465,39 @@ msgstr "Prix"
msgid "quantity"
msgstr "Quantité"
-#: engine/core/graphene/object_types.py:480
+#: engine/core/graphene/object_types.py:535
msgid "number of feedbacks"
msgstr "Nombre de retours d'information"
-#: engine/core/graphene/object_types.py:481
+#: engine/core/graphene/object_types.py:536
msgid "only available for personal orders"
msgstr "Produits disponibles uniquement pour les commandes personnelles"
-#: engine/core/graphene/object_types.py:484
+#: engine/core/graphene/object_types.py:541
msgid "discount price"
msgstr "Prix d'escompte"
-#: engine/core/graphene/object_types.py:508 engine/core/models.py:658
+#: engine/core/graphene/object_types.py:565 engine/core/models.py:679
msgid "products"
msgstr "Produits"
-#: engine/core/graphene/object_types.py:611
+#: engine/core/graphene/object_types.py:675
msgid "promocodes"
msgstr "Promocodes"
-#: engine/core/graphene/object_types.py:621
+#: engine/core/graphene/object_types.py:690
msgid "products on sale"
msgstr "Produits en vente"
-#: engine/core/graphene/object_types.py:628 engine/core/models.py:904
+#: engine/core/graphene/object_types.py:698 engine/core/models.py:927
msgid "promotions"
msgstr "Promotions"
-#: engine/core/graphene/object_types.py:632 engine/core/models.py:187
+#: engine/core/graphene/object_types.py:702 engine/core/models.py:193
msgid "vendor"
msgstr "Vendeur"
-#: engine/core/graphene/object_types.py:633 engine/core/models.py:657
+#: engine/core/graphene/object_types.py:703 engine/core/models.py:678
#: engine/core/templates/digital_order_created_email.html:109
#: engine/core/templates/digital_order_delivered_email.html:107
#: engine/core/templates/shipped_order_created_email.html:107
@@ -1496,100 +1505,100 @@ msgstr "Vendeur"
msgid "product"
msgstr "Produit"
-#: engine/core/graphene/object_types.py:644 engine/core/models.py:927
+#: engine/core/graphene/object_types.py:715 engine/core/models.py:950
msgid "wishlisted products"
msgstr "Produits en liste de souhaits"
-#: engine/core/graphene/object_types.py:650 engine/core/models.py:944
+#: engine/core/graphene/object_types.py:722 engine/core/models.py:967
msgid "wishlists"
msgstr "Liste de souhaits"
-#: engine/core/graphene/object_types.py:654
+#: engine/core/graphene/object_types.py:727
msgid "tagged products"
msgstr "Produits marqués"
-#: engine/core/graphene/object_types.py:661 engine/core/models.py:224
-#: engine/core/models.py:601
+#: engine/core/graphene/object_types.py:735 engine/core/models.py:230
+#: engine/core/models.py:622
msgid "product tags"
msgstr "Étiquettes du produit"
-#: engine/core/graphene/object_types.py:665
+#: engine/core/graphene/object_types.py:740
msgid "tagged categories"
msgstr "Catégories marquées"
-#: engine/core/graphene/object_types.py:672
+#: engine/core/graphene/object_types.py:748
msgid "categories tags"
msgstr "Tags des catégories"
-#: engine/core/graphene/object_types.py:676
+#: engine/core/graphene/object_types.py:752
msgid "project name"
msgstr "Nom du projet"
-#: engine/core/graphene/object_types.py:677
+#: engine/core/graphene/object_types.py:753
msgid "company name"
msgstr "Nom de l'entreprise"
-#: engine/core/graphene/object_types.py:678
+#: engine/core/graphene/object_types.py:754
msgid "company address"
msgstr "Adresse de l'entreprise"
-#: engine/core/graphene/object_types.py:679
+#: engine/core/graphene/object_types.py:755
msgid "company phone number"
msgstr "Numéro de téléphone de l'entreprise"
-#: engine/core/graphene/object_types.py:680
+#: engine/core/graphene/object_types.py:758
msgid "email from, sometimes it must be used instead of host user value"
msgstr ""
"'email from', parfois il doit être utilisé à la place de la valeur de "
"l'utilisateur de l'hôte"
-#: engine/core/graphene/object_types.py:681
+#: engine/core/graphene/object_types.py:761
msgid "email host user"
msgstr "Utilisateur de l'hôte de messagerie"
-#: engine/core/graphene/object_types.py:682
+#: engine/core/graphene/object_types.py:762
msgid "maximum amount for payment"
msgstr "Montant maximum du paiement"
-#: engine/core/graphene/object_types.py:683
+#: engine/core/graphene/object_types.py:763
msgid "minimum amount for payment"
msgstr "Montant minimum pour le paiement"
-#: engine/core/graphene/object_types.py:684
+#: engine/core/graphene/object_types.py:764
msgid "analytics data"
msgstr "Données analytiques"
-#: engine/core/graphene/object_types.py:685
+#: engine/core/graphene/object_types.py:765
msgid "advertisement data"
msgstr "Advertisement data"
-#: engine/core/graphene/object_types.py:688
+#: engine/core/graphene/object_types.py:768
msgid "company configuration"
msgstr "Configuration"
-#: engine/core/graphene/object_types.py:692
+#: engine/core/graphene/object_types.py:772
msgid "language code"
msgstr "Code langue"
-#: engine/core/graphene/object_types.py:693
+#: engine/core/graphene/object_types.py:773
msgid "language name"
msgstr "Nom de la langue"
-#: engine/core/graphene/object_types.py:694
+#: engine/core/graphene/object_types.py:774
msgid "language flag, if exists :)"
msgstr "Drapeau linguistique, s'il existe :)"
-#: engine/core/graphene/object_types.py:697
+#: engine/core/graphene/object_types.py:777
msgid "supported languages"
msgstr "Obtenir la liste des langues prises en charge"
-#: engine/core/graphene/object_types.py:728
-#: engine/core/graphene/object_types.py:729
-#: engine/core/graphene/object_types.py:730
+#: engine/core/graphene/object_types.py:809
+#: engine/core/graphene/object_types.py:812
+#: engine/core/graphene/object_types.py:815
msgid "products search results"
msgstr "Résultats de la recherche de produits"
-#: engine/core/graphene/object_types.py:731
+#: engine/core/graphene/object_types.py:817
msgid "posts search results"
msgstr "Résultats de la recherche de produits"
@@ -1618,7 +1627,7 @@ msgstr "Groupe d'attributs parent"
msgid "attribute group's name"
msgstr "Nom du groupe d'attributs"
-#: engine/core/models.py:105 engine/core/models.py:734
+#: engine/core/models.py:105 engine/core/models.py:755
msgid "attribute group"
msgstr "Groupe d'attributs"
@@ -1634,58 +1643,58 @@ msgid ""
msgstr ""
"Représente une entité fournisseur capable de stocker des informations sur "
"les fournisseurs externes et leurs exigences en matière d'interaction. La "
-"classe Vendeur est utilisée pour définir et gérer les informations relatives"
-" à un fournisseur externe. Elle stocke le nom du fournisseur, les détails "
+"classe Vendeur est utilisée pour définir et gérer les informations relatives "
+"à un fournisseur externe. Elle stocke le nom du fournisseur, les détails "
"d'authentification requis pour la communication et le pourcentage de "
"majoration appliqué aux produits récupérés auprès du fournisseur. Ce modèle "
"gère également des métadonnées et des contraintes supplémentaires, ce qui "
"permet de l'utiliser dans des systèmes qui interagissent avec des vendeurs "
"tiers."
-#: engine/core/models.py:124
+#: engine/core/models.py:125
msgid "stores credentials and endpoints required for vendor communication"
msgstr ""
"Stocke les informations d'identification et les points d'extrémité "
"nécessaires à la communication avec l'API du fournisseur."
-#: engine/core/models.py:125
+#: engine/core/models.py:127
msgid "authentication info"
msgstr "Informations sur l'authentification"
-#: engine/core/models.py:130
+#: engine/core/models.py:132
msgid "define the markup for products retrieved from this vendor"
msgstr ""
"Définir la majoration pour les produits récupérés auprès de ce fournisseur"
-#: engine/core/models.py:131
+#: engine/core/models.py:133
msgid "vendor markup percentage"
msgstr "Pourcentage de marge du vendeur"
-#: engine/core/models.py:135
+#: engine/core/models.py:137
msgid "name of this vendor"
msgstr "Nom de ce vendeur"
-#: engine/core/models.py:136
+#: engine/core/models.py:138
msgid "vendor name"
msgstr "Nom du vendeur"
-#: engine/core/models.py:147
+#: engine/core/models.py:153
msgid "response file"
msgstr "dossier de réponse"
-#: engine/core/models.py:148
+#: engine/core/models.py:154
msgid "vendor's last processing response"
msgstr "la dernière réponse du vendeur en matière de traitement"
-#: engine/core/models.py:154
+#: engine/core/models.py:160
msgid "vendor's integration file path"
msgstr "Chemin d'accès au fichier d'intégration du fournisseur"
-#: engine/core/models.py:155
+#: engine/core/models.py:161
msgid "integration path"
msgstr "Parcours d'intégration"
-#: engine/core/models.py:197
+#: engine/core/models.py:203
msgid ""
"Represents a product tag used for classifying or identifying products. The "
"ProductTag class is designed to uniquely identify and classify products "
@@ -1700,46 +1709,46 @@ msgstr ""
"biais de mixins et permet de personnaliser les métadonnées à des fins "
"administratives."
-#: engine/core/models.py:209 engine/core/models.py:240
+#: engine/core/models.py:215 engine/core/models.py:246
msgid "internal tag identifier for the product tag"
msgstr "Identifiant interne de l'étiquette du produit"
-#: engine/core/models.py:210 engine/core/models.py:241
+#: engine/core/models.py:216 engine/core/models.py:247
msgid "tag name"
msgstr "Nom du jour"
-#: engine/core/models.py:214 engine/core/models.py:245
+#: engine/core/models.py:220 engine/core/models.py:251
msgid "user-friendly name for the product tag"
msgstr "Nom convivial pour l'étiquette du produit"
-#: engine/core/models.py:215 engine/core/models.py:246
+#: engine/core/models.py:221 engine/core/models.py:252
msgid "tag display name"
msgstr "Nom d'affichage de l'étiquette"
-#: engine/core/models.py:223
+#: engine/core/models.py:229
msgid "product tag"
msgstr "Étiquette du produit"
-#: engine/core/models.py:229
+#: engine/core/models.py:235
msgid ""
"Represents a category tag used for products. This class models a category "
"tag that can be used to associate and classify products. It includes "
"attributes for an internal tag identifier and a user-friendly display name."
msgstr ""
"Représente une étiquette de catégorie utilisée pour les produits. Cette "
-"classe modélise une balise de catégorie qui peut être utilisée pour associer"
-" et classer des produits. Elle comprend des attributs pour un identifiant de"
-" balise interne et un nom d'affichage convivial."
+"classe modélise une balise de catégorie qui peut être utilisée pour associer "
+"et classer des produits. Elle comprend des attributs pour un identifiant de "
+"balise interne et un nom d'affichage convivial."
-#: engine/core/models.py:254
+#: engine/core/models.py:260
msgid "category tag"
msgstr "étiquette de catégorie"
-#: engine/core/models.py:255 engine/core/models.py:327
+#: engine/core/models.py:261 engine/core/models.py:333
msgid "category tags"
msgstr "balises de catégorie"
-#: engine/core/models.py:260
+#: engine/core/models.py:266
msgid ""
"Represents a category entity to organize and group related items in a "
"hierarchical structure. Categories may have hierarchical relationships with "
@@ -1756,116 +1765,115 @@ msgstr ""
"avoir des relations hiérarchiques avec d'autres catégories, en prenant en "
"charge les relations parent-enfant. La classe comprend des champs pour les "
"métadonnées et la représentation visuelle, qui servent de base aux "
-"fonctionnalités liées aux catégories. Cette classe est généralement utilisée"
-" pour définir et gérer des catégories de produits ou d'autres regroupements "
+"fonctionnalités liées aux catégories. Cette classe est généralement utilisée "
+"pour définir et gérer des catégories de produits ou d'autres regroupements "
"similaires au sein d'une application, permettant aux utilisateurs ou aux "
"administrateurs de spécifier le nom, la description et la hiérarchie des "
"catégories, ainsi que d'attribuer des attributs tels que des images, des "
"balises ou une priorité."
-#: engine/core/models.py:274
+#: engine/core/models.py:280
msgid "upload an image representing this category"
msgstr "Télécharger une image représentant cette catégorie"
-#: engine/core/models.py:277
+#: engine/core/models.py:283
msgid "category image"
msgstr "Image de catégorie"
-#: engine/core/models.py:282
+#: engine/core/models.py:288
msgid "define a markup percentage for products in this category"
msgstr ""
"Définir un pourcentage de majoration pour les produits de cette catégorie"
-#: engine/core/models.py:291
+#: engine/core/models.py:297
msgid "parent of this category to form a hierarchical structure"
msgstr "Parent de cette catégorie pour former une structure hiérarchique"
-#: engine/core/models.py:292
+#: engine/core/models.py:298
msgid "parent category"
msgstr "Catégorie de parents"
-#: engine/core/models.py:297
+#: engine/core/models.py:303
msgid "category name"
msgstr "Nom de la catégorie"
-#: engine/core/models.py:298
+#: engine/core/models.py:304
msgid "provide a name for this category"
msgstr "Donnez un nom à cette catégorie"
-#: engine/core/models.py:305
+#: engine/core/models.py:311
msgid "add a detailed description for this category"
msgstr "Ajouter une description détaillée pour cette catégorie"
-#: engine/core/models.py:306
+#: engine/core/models.py:312
msgid "category description"
msgstr "Description de la catégorie"
-#: engine/core/models.py:326
+#: engine/core/models.py:332
msgid "tags that help describe or group this category"
msgstr "les étiquettes qui aident à décrire ou à regrouper cette catégorie"
-#: engine/core/models.py:333 engine/core/models.py:495
+#: engine/core/models.py:339 engine/core/models.py:514
msgid "priority"
msgstr "Priorité"
-#: engine/core/models.py:438
+#: engine/core/models.py:457
msgid ""
"Represents a Brand object in the system. This class handles information and "
"attributes related to a brand, including its name, logos, description, "
"associated categories, a unique slug, and priority order. It allows for the "
-"organization and representation of brand-related data within the "
-"application."
+"organization and representation of brand-related data within the application."
msgstr ""
"Représente un objet Marque dans le système. Cette classe gère les "
"informations et les attributs liés à une marque, y compris son nom, ses "
"logos, sa description, ses catégories associées, un nom unique et un ordre "
-"de priorité. Elle permet d'organiser et de représenter les données relatives"
-" à la marque dans l'application."
+"de priorité. Elle permet d'organiser et de représenter les données relatives "
+"à la marque dans l'application."
-#: engine/core/models.py:448
+#: engine/core/models.py:467
msgid "name of this brand"
msgstr "Nom de cette marque"
-#: engine/core/models.py:449
+#: engine/core/models.py:468
msgid "brand name"
msgstr "Nom de marque"
-#: engine/core/models.py:456
+#: engine/core/models.py:475
msgid "upload a logo representing this brand"
msgstr "Télécharger un logo représentant cette marque"
-#: engine/core/models.py:458
+#: engine/core/models.py:477
msgid "brand small image"
msgstr "Petite image de marque"
-#: engine/core/models.py:464
+#: engine/core/models.py:483
msgid "upload a big logo representing this brand"
msgstr "Télécharger un grand logo représentant cette marque"
-#: engine/core/models.py:466
+#: engine/core/models.py:485
msgid "brand big image"
msgstr "Une grande image de marque"
-#: engine/core/models.py:471
+#: engine/core/models.py:490
msgid "add a detailed description of the brand"
msgstr "Ajouter une description détaillée de la marque"
-#: engine/core/models.py:472
+#: engine/core/models.py:491
msgid "brand description"
msgstr "Description de la marque"
-#: engine/core/models.py:477
+#: engine/core/models.py:496
msgid "optional categories that this brand is associated with"
msgstr "Catégories facultatives auxquelles cette marque est associée"
-#: engine/core/models.py:478
+#: engine/core/models.py:497
msgid "associated categories"
msgstr "Catégories"
-#: engine/core/models.py:508
+#: engine/core/models.py:527
msgid ""
-"Represents the stock of a product managed in the system. This class provides"
-" details about the relationship between vendors, products, and their stock "
+"Represents the stock of a product managed in the system. This class provides "
+"details about the relationship between vendors, products, and their stock "
"information, as well as inventory-related properties like price, purchase "
"price, quantity, SKU, and digital assets. It is part of the inventory "
"management system to allow tracking and evaluation of products available "
@@ -1875,75 +1883,75 @@ msgstr ""
"des détails sur la relation entre les fournisseurs, les produits et leurs "
"informations de stock, ainsi que des propriétés liées à l'inventaire telles "
"que le prix, le prix d'achat, la quantité, l'UGS et les actifs numériques. "
-"Elle fait partie du système de gestion des stocks pour permettre le suivi et"
-" l'évaluation des produits disponibles auprès de différents fournisseurs."
+"Elle fait partie du système de gestion des stocks pour permettre le suivi et "
+"l'évaluation des produits disponibles auprès de différents fournisseurs."
-#: engine/core/models.py:520
+#: engine/core/models.py:539
msgid "the vendor supplying this product stock"
msgstr "Le vendeur qui fournit ce stock de produits"
-#: engine/core/models.py:521
+#: engine/core/models.py:540
msgid "associated vendor"
msgstr "Vendeur associé"
-#: engine/core/models.py:525
+#: engine/core/models.py:544
msgid "final price to the customer after markups"
msgstr "Prix final pour le client après majoration"
-#: engine/core/models.py:526
+#: engine/core/models.py:545
msgid "selling price"
msgstr "Prix de vente"
-#: engine/core/models.py:531
+#: engine/core/models.py:550
msgid "the product associated with this stock entry"
msgstr "Le produit associé à cette entrée de stock"
-#: engine/core/models.py:532 engine/core/models.py:797
-#: engine/core/models.py:843 engine/core/models.py:1792
+#: engine/core/models.py:551 engine/core/models.py:820
+#: engine/core/models.py:866 engine/core/models.py:1904
msgid "associated product"
msgstr "Produit associé"
-#: engine/core/models.py:539
+#: engine/core/models.py:558
msgid "the price paid to the vendor for this product"
msgstr "Le prix payé au vendeur pour ce produit"
-#: engine/core/models.py:540
+#: engine/core/models.py:559
msgid "vendor purchase price"
msgstr "Prix d'achat du vendeur"
-#: engine/core/models.py:544
+#: engine/core/models.py:563
msgid "available quantity of the product in stock"
msgstr "Quantité disponible du produit en stock"
-#: engine/core/models.py:545
+#: engine/core/models.py:564
msgid "quantity in stock"
msgstr "Quantité en stock"
-#: engine/core/models.py:549
+#: engine/core/models.py:568
msgid "vendor-assigned SKU for identifying the product"
msgstr "SKU attribué par le fournisseur pour identifier le produit"
-#: engine/core/models.py:550
+#: engine/core/models.py:569
msgid "vendor sku"
msgstr "UGS du vendeur"
-#: engine/core/models.py:556
+#: engine/core/models.py:575
msgid "digital file associated with this stock if applicable"
msgstr "Fichier numérique associé à ce stock, le cas échéant"
-#: engine/core/models.py:557
+#: engine/core/models.py:576
msgid "digital file"
msgstr "Fichier numérique"
-#: engine/core/models.py:560
+#: engine/core/models.py:580
msgid "system attributes"
msgstr "Attributs du système"
-#: engine/core/models.py:567
+#: engine/core/models.py:588
msgid "stock entries"
msgstr "Entrées de stock"
-#: engine/core/models.py:572
+#: engine/core/models.py:593
msgid ""
"Represents a product with attributes such as category, brand, tags, digital "
"status, name, description, part number, and slug. Provides related utility "
@@ -1955,8 +1963,8 @@ msgid ""
"product data and its associated information within an application."
msgstr ""
"Représente un produit avec des attributs tels que la catégorie, la marque, "
-"les étiquettes, l'état numérique, le nom, la description, le numéro de pièce"
-" et l'étiquette. Fournit des propriétés utilitaires connexes pour récupérer "
+"les étiquettes, l'état numérique, le nom, la description, le numéro de pièce "
+"et l'étiquette. Fournit des propriétés utilitaires connexes pour récupérer "
"les évaluations, le nombre de commentaires, le prix, la quantité et le "
"nombre total de commandes. Conçue pour être utilisée dans un système de "
"commerce électronique ou de gestion des stocks. Cette classe interagit avec "
@@ -1965,208 +1973,207 @@ msgstr ""
"performances. Elle est utilisée pour définir et manipuler les données "
"produit et les informations associées dans une application."
-#: engine/core/models.py:585
+#: engine/core/models.py:606
msgid "category this product belongs to"
msgstr "Catégorie à laquelle appartient ce produit"
-#: engine/core/models.py:594
+#: engine/core/models.py:615
msgid "optionally associate this product with a brand"
msgstr "Possibilité d'associer ce produit à une marque"
-#: engine/core/models.py:600
+#: engine/core/models.py:621
msgid "tags that help describe or group this product"
msgstr "Étiquettes permettant de décrire ou de regrouper ce produit"
-#: engine/core/models.py:605
+#: engine/core/models.py:626
msgid "indicates whether this product is digitally delivered"
msgstr "Indique si ce produit est livré numériquement"
-#: engine/core/models.py:606
+#: engine/core/models.py:627
msgid "is product digital"
msgstr "Le produit est-il numérique ?"
-#: engine/core/models.py:612
+#: engine/core/models.py:633
msgid "provide a clear identifying name for the product"
msgstr "Fournir un nom d'identification clair pour le produit"
-#: engine/core/models.py:613
+#: engine/core/models.py:634
msgid "product name"
msgstr "Nom du produit"
-#: engine/core/models.py:619 engine/core/models.py:892
+#: engine/core/models.py:640 engine/core/models.py:915
msgid "add a detailed description of the product"
msgstr "Ajouter une description détaillée du produit"
-#: engine/core/models.py:620
+#: engine/core/models.py:641
msgid "product description"
msgstr "Description du produit"
-#: engine/core/models.py:627
+#: engine/core/models.py:648
msgid "part number for this product"
msgstr "Numéro de pièce pour ce produit"
-#: engine/core/models.py:628
+#: engine/core/models.py:649
msgid "part number"
msgstr "Numéro de pièce"
-#: engine/core/models.py:647
+#: engine/core/models.py:668
msgid "stock keeping unit for this product"
msgstr "Unité de gestion des stocks pour ce produit"
-#: engine/core/models.py:720
+#: engine/core/models.py:741
msgid ""
"Represents an attribute in the system. This class is used to define and "
"manage attributes, which are customizable pieces of data that can be "
"associated with other entities. Attributes have associated categories, "
-"groups, value types, and names. The model supports multiple types of values,"
-" including string, integer, float, boolean, array, and object. This allows "
+"groups, value types, and names. The model supports multiple types of values, "
+"including string, integer, float, boolean, array, and object. This allows "
"for dynamic and flexible data structuring."
msgstr ""
"Représente un attribut dans le système. Cette classe est utilisée pour "
"définir et gérer les attributs, qui sont des données personnalisables "
-"pouvant être associées à d'autres entités. Les attributs sont associés à des"
-" catégories, des groupes, des types de valeurs et des noms. Le modèle prend "
+"pouvant être associées à d'autres entités. Les attributs sont associés à des "
+"catégories, des groupes, des types de valeurs et des noms. Le modèle prend "
"en charge plusieurs types de valeurs, notamment les chaînes de caractères, "
"les entiers, les flottants, les booléens, les tableaux et les objets. Cela "
"permet une structuration dynamique et flexible des données."
-#: engine/core/models.py:733
+#: engine/core/models.py:754
msgid "group of this attribute"
msgstr "Groupe de cet attribut"
-#: engine/core/models.py:739
+#: engine/core/models.py:760
msgid "string"
msgstr "Chaîne"
-#: engine/core/models.py:740
+#: engine/core/models.py:761
msgid "integer"
msgstr "Entier"
-#: engine/core/models.py:741
+#: engine/core/models.py:762
msgid "float"
msgstr "Flotteur"
-#: engine/core/models.py:742
+#: engine/core/models.py:763
msgid "boolean"
msgstr "Booléen"
-#: engine/core/models.py:743
+#: engine/core/models.py:764
msgid "array"
msgstr "Tableau"
-#: engine/core/models.py:744
+#: engine/core/models.py:765
msgid "object"
msgstr "Objet"
-#: engine/core/models.py:746
+#: engine/core/models.py:767
msgid "type of the attribute's value"
msgstr "Type de la valeur de l'attribut"
-#: engine/core/models.py:747
+#: engine/core/models.py:768
msgid "value type"
msgstr "Type de valeur"
-#: engine/core/models.py:752
+#: engine/core/models.py:773
msgid "name of this attribute"
msgstr "Nom de cet attribut"
-#: engine/core/models.py:753
+#: engine/core/models.py:774
msgid "attribute's name"
msgstr "Nom de l'attribut"
-#: engine/core/models.py:758
+#: engine/core/models.py:779
msgid "is filterable"
msgstr "est filtrable"
-#: engine/core/models.py:759
+#: engine/core/models.py:781
msgid "designates whether this attribute can be used for filtering or not"
msgstr ""
"Quels attributs et valeurs peuvent être utilisés pour filtrer cette "
"catégorie."
-#: engine/core/models.py:771 engine/core/models.py:789
+#: engine/core/models.py:794 engine/core/models.py:812
#: engine/core/templates/digital_order_delivered_email.html:134
msgid "attribute"
msgstr "Attribut"
-#: engine/core/models.py:777
+#: engine/core/models.py:800
msgid ""
-"Represents a specific value for an attribute that is linked to a product. It"
-" links the 'attribute' to a unique 'value', allowing better organization and"
-" dynamic representation of product characteristics."
+"Represents a specific value for an attribute that is linked to a product. It "
+"links the 'attribute' to a unique 'value', allowing better organization and "
+"dynamic representation of product characteristics."
msgstr ""
-"Représente une valeur spécifique pour un attribut lié à un produit. Il relie"
-" l'\"attribut\" à une \"valeur\" unique, ce qui permet une meilleure "
-"organisation et une représentation dynamique des caractéristiques du "
-"produit."
+"Représente une valeur spécifique pour un attribut lié à un produit. Il relie "
+"l'\"attribut\" à une \"valeur\" unique, ce qui permet une meilleure "
+"organisation et une représentation dynamique des caractéristiques du produit."
-#: engine/core/models.py:788
+#: engine/core/models.py:811
msgid "attribute of this value"
msgstr "Attribut de cette valeur"
-#: engine/core/models.py:796
+#: engine/core/models.py:819
msgid "the specific product associated with this attribute's value"
msgstr "Le produit spécifique associé à la valeur de cet attribut"
-#: engine/core/models.py:802
+#: engine/core/models.py:825
msgid "the specific value for this attribute"
msgstr "La valeur spécifique de cet attribut"
-#: engine/core/models.py:815
+#: engine/core/models.py:838
msgid ""
"Represents a product image associated with a product in the system. This "
-"class is designed to manage images for products, including functionality for"
-" uploading image files, associating them with specific products, and "
+"class is designed to manage images for products, including functionality for "
+"uploading image files, associating them with specific products, and "
"determining their display order. It also includes an accessibility feature "
"with alternative text for the images."
msgstr ""
-"Représente une image de produit associée à un produit dans le système. Cette"
-" classe est conçue pour gérer les images des produits, y compris la "
+"Représente une image de produit associée à un produit dans le système. Cette "
+"classe est conçue pour gérer les images des produits, y compris la "
"fonctionnalité de téléchargement des fichiers d'image, leur association à "
-"des produits spécifiques et la détermination de leur ordre d'affichage. Elle"
-" comprend également une fonction d'accessibilité avec un texte alternatif "
+"des produits spécifiques et la détermination de leur ordre d'affichage. Elle "
+"comprend également une fonction d'accessibilité avec un texte alternatif "
"pour les images."
-#: engine/core/models.py:826
+#: engine/core/models.py:849
msgid "provide alternative text for the image for accessibility"
msgstr "Fournir un texte alternatif pour l'image afin d'en faciliter l'accès"
-#: engine/core/models.py:827
+#: engine/core/models.py:850
msgid "image alt text"
msgstr "Texte alt de l'image"
-#: engine/core/models.py:830
+#: engine/core/models.py:853
msgid "upload the image file for this product"
msgstr "Télécharger le fichier image pour ce produit"
-#: engine/core/models.py:831 engine/core/models.py:862
+#: engine/core/models.py:854 engine/core/models.py:885
msgid "product image"
msgstr "Image du produit"
-#: engine/core/models.py:836
+#: engine/core/models.py:859
msgid "determines the order in which images are displayed"
msgstr "Détermine l'ordre d'affichage des images"
-#: engine/core/models.py:837
+#: engine/core/models.py:860
msgid "display priority"
msgstr "Priorité à l'affichage"
-#: engine/core/models.py:842
+#: engine/core/models.py:865
msgid "the product that this image represents"
msgstr "Le produit que cette image représente"
-#: engine/core/models.py:863
+#: engine/core/models.py:886
msgid "product images"
msgstr "Images du produit"
-#: engine/core/models.py:868
+#: engine/core/models.py:891
msgid ""
"Represents a promotional campaign for products with a discount. This class "
"is used to define and manage promotional campaigns that offer a percentage-"
"based discount for products. The class includes attributes for setting the "
"discount rate, providing details about the promotion, and linking it to the "
-"applicable products. It integrates with the product catalog to determine the"
-" affected items in the campaign."
+"applicable products. It integrates with the product catalog to determine the "
+"affected items in the campaign."
msgstr ""
"Représente une campagne promotionnelle pour des produits avec une remise. "
"Cette classe est utilisée pour définir et gérer des campagnes "
@@ -2176,39 +2183,39 @@ msgstr ""
"Elle s'intègre au catalogue de produits pour déterminer les articles "
"concernés par la campagne."
-#: engine/core/models.py:880
+#: engine/core/models.py:903
msgid "percentage discount for the selected products"
msgstr "Pourcentage de réduction pour les produits sélectionnés"
-#: engine/core/models.py:881
+#: engine/core/models.py:904
msgid "discount percentage"
msgstr "Pourcentage de réduction"
-#: engine/core/models.py:886
+#: engine/core/models.py:909
msgid "provide a unique name for this promotion"
msgstr "Donnez un nom unique à cette promotion"
-#: engine/core/models.py:887
+#: engine/core/models.py:910
msgid "promotion name"
msgstr "Nom de la promotion"
-#: engine/core/models.py:893
+#: engine/core/models.py:916
msgid "promotion description"
msgstr "Promotion description"
-#: engine/core/models.py:898
+#: engine/core/models.py:921
msgid "select which products are included in this promotion"
msgstr "Sélectionnez les produits inclus dans cette promotion"
-#: engine/core/models.py:899
+#: engine/core/models.py:922
msgid "included products"
msgstr "Produits inclus"
-#: engine/core/models.py:903
+#: engine/core/models.py:926
msgid "promotion"
msgstr "Promotion"
-#: engine/core/models.py:914
+#: engine/core/models.py:937
msgid ""
"Represents a user's wishlist for storing and managing desired products. The "
"class provides functionality to manage a collection of products, supporting "
@@ -2219,130 +2226,129 @@ msgstr ""
"gestion des produits souhaités. La classe fournit des fonctionnalités "
"permettant de gérer une collection de produits, en prenant en charge des "
"opérations telles que l'ajout et la suppression de produits, ainsi que des "
-"opérations permettant d'ajouter et de supprimer plusieurs produits à la "
-"fois."
+"opérations permettant d'ajouter et de supprimer plusieurs produits à la fois."
-#: engine/core/models.py:926
+#: engine/core/models.py:949
msgid "products that the user has marked as wanted"
msgstr "Produits que l'utilisateur a marqués comme souhaités"
-#: engine/core/models.py:934
+#: engine/core/models.py:957
msgid "user who owns this wishlist"
msgstr "Utilisateur qui possède cette liste de souhaits"
-#: engine/core/models.py:935
+#: engine/core/models.py:958
msgid "wishlist owner"
msgstr "Propriétaire de la liste de souhaits"
-#: engine/core/models.py:943
+#: engine/core/models.py:966
msgid "wishlist"
msgstr "Liste de souhaits"
-#: engine/core/models.py:985
+#: engine/core/models.py:1008
msgid ""
"Represents a documentary record tied to a product. This class is used to "
"store information about documentaries related to specific products, "
"including file uploads and their metadata. It contains methods and "
"properties to handle the file type and storage path for the documentary "
-"files. It extends functionality from specific mixins and provides additional"
-" custom features."
+"files. It extends functionality from specific mixins and provides additional "
+"custom features."
msgstr ""
-"Représente un enregistrement documentaire lié à un produit. Cette classe est"
-" utilisée pour stocker des informations sur les documentaires liés à des "
+"Représente un enregistrement documentaire lié à un produit. Cette classe est "
+"utilisée pour stocker des informations sur les documentaires liés à des "
"produits spécifiques, y compris les téléchargements de fichiers et leurs "
"métadonnées. Elle contient des méthodes et des propriétés permettant de "
"gérer le type de fichier et le chemin de stockage des fichiers "
"documentaires. Elle étend les fonctionnalités de mixins spécifiques et "
"fournit des fonctionnalités personnalisées supplémentaires."
-#: engine/core/models.py:998
+#: engine/core/models.py:1023
msgid "documentary"
msgstr "Documentaire"
-#: engine/core/models.py:999
+#: engine/core/models.py:1024
msgid "documentaries"
msgstr "Documentaires"
-#: engine/core/models.py:1009
+#: engine/core/models.py:1034
msgid "unresolved"
msgstr "Non résolu"
-#: engine/core/models.py:1014
+#: engine/core/models.py:1039
msgid ""
-"Represents an address entity that includes location details and associations"
-" with a user. Provides functionality for geographic and address data "
-"storage, as well as integration with geocoding services. This class is "
-"designed to store detailed address information including components like "
-"street, city, region, country, and geolocation (longitude and latitude). It "
-"supports integration with geocoding APIs, enabling the storage of raw API "
-"responses for further processing or inspection. The class also allows "
-"associating an address with a user, facilitating personalized data handling."
+"Represents an address entity that includes location details and associations "
+"with a user. Provides functionality for geographic and address data storage, "
+"as well as integration with geocoding services. This class is designed to "
+"store detailed address information including components like street, city, "
+"region, country, and geolocation (longitude and latitude). It supports "
+"integration with geocoding APIs, enabling the storage of raw API responses "
+"for further processing or inspection. The class also allows associating an "
+"address with a user, facilitating personalized data handling."
msgstr ""
"Représente une entité d'adresse qui comprend des détails de localisation et "
"des associations avec un utilisateur. Elle fournit des fonctionnalités de "
"stockage de données géographiques et d'adresses, ainsi qu'une intégration "
"avec des services de géocodage. Cette classe est conçue pour stocker des "
-"informations détaillées sur les adresses, y compris des éléments tels que la"
-" rue, la ville, la région, le pays et la géolocalisation (longitude et "
+"informations détaillées sur les adresses, y compris des éléments tels que la "
+"rue, la ville, la région, le pays et la géolocalisation (longitude et "
"latitude). Elle prend en charge l'intégration avec les API de géocodage, ce "
-"qui permet de stocker les réponses brutes de l'API en vue d'un traitement ou"
-" d'une inspection ultérieurs. La classe permet également d'associer une "
+"qui permet de stocker les réponses brutes de l'API en vue d'un traitement ou "
+"d'une inspection ultérieurs. La classe permet également d'associer une "
"adresse à un utilisateur, ce qui facilite le traitement personnalisé des "
"données."
-#: engine/core/models.py:1029
+#: engine/core/models.py:1054
msgid "address line for the customer"
msgstr "Ligne d'adresse du client"
-#: engine/core/models.py:1030
+#: engine/core/models.py:1055
msgid "address line"
msgstr "Ligne d'adresse"
-#: engine/core/models.py:1032
+#: engine/core/models.py:1057
msgid "street"
msgstr "Rue"
-#: engine/core/models.py:1033
+#: engine/core/models.py:1058
msgid "district"
msgstr "District"
-#: engine/core/models.py:1034
+#: engine/core/models.py:1059
msgid "city"
msgstr "Ville"
-#: engine/core/models.py:1035
+#: engine/core/models.py:1060
msgid "region"
msgstr "Région"
-#: engine/core/models.py:1036
+#: engine/core/models.py:1061
msgid "postal code"
msgstr "Code postal"
-#: engine/core/models.py:1037
+#: engine/core/models.py:1062
msgid "country"
msgstr "Pays"
-#: engine/core/models.py:1044
+#: engine/core/models.py:1069
msgid "geolocation point: (longitude, latitude)"
msgstr "Point de géolocalisation (longitude, latitude)"
-#: engine/core/models.py:1047
+#: engine/core/models.py:1075
msgid "full JSON response from geocoder for this address"
msgstr "Réponse JSON complète du géocodeur pour cette adresse"
-#: engine/core/models.py:1052
+#: engine/core/models.py:1081
msgid "stored JSON response from the geocoding service"
msgstr "Réponse JSON stockée du service de géocodage"
-#: engine/core/models.py:1060
+#: engine/core/models.py:1091
msgid "address"
msgstr "Adresse"
-#: engine/core/models.py:1061
+#: engine/core/models.py:1092
msgid "addresses"
msgstr "Adresses"
-#: engine/core/models.py:1073
+#: engine/core/models.py:1104
msgid ""
"Represents a promotional code that can be used for discounts, managing its "
"validity, type of discount, and application. The PromoCode class stores "
@@ -2353,83 +2359,80 @@ msgid ""
msgstr ""
"Représente un code promotionnel qui peut être utilisé pour des remises, en "
"gérant sa validité, le type de remise et l'application. La classe PromoCode "
-"stocke les détails d'un code promotionnel, notamment son identifiant unique,"
-" les propriétés de la remise (montant ou pourcentage), la période de "
+"stocke les détails d'un code promotionnel, notamment son identifiant unique, "
+"les propriétés de la remise (montant ou pourcentage), la période de "
"validité, l'utilisateur associé (le cas échéant) et l'état de son "
"utilisation. Elle comprend une fonctionnalité permettant de valider et "
"d'appliquer le code promotionnel à une commande tout en veillant à ce que "
"les contraintes soient respectées."
-#: engine/core/models.py:1087
+#: engine/core/models.py:1118
msgid "unique code used by a user to redeem a discount"
-msgstr ""
-"Code unique utilisé par un utilisateur pour bénéficier d'une réduction"
+msgstr "Code unique utilisé par un utilisateur pour bénéficier d'une réduction"
-#: engine/core/models.py:1088
+#: engine/core/models.py:1119
msgid "promo code identifier"
msgstr "Identifiant du code promotionnel"
-#: engine/core/models.py:1095
+#: engine/core/models.py:1126
msgid "fixed discount amount applied if percent is not used"
-msgstr ""
-"Montant fixe de la remise appliqué si le pourcentage n'est pas utilisé"
+msgstr "Montant fixe de la remise appliqué si le pourcentage n'est pas utilisé"
-#: engine/core/models.py:1096
+#: engine/core/models.py:1127
msgid "fixed discount amount"
msgstr "Montant de l'escompte fixe"
-#: engine/core/models.py:1102
+#: engine/core/models.py:1133
msgid "percentage discount applied if fixed amount is not used"
-msgstr ""
-"Pourcentage de réduction appliqué si le montant fixe n'est pas utilisé"
+msgstr "Pourcentage de réduction appliqué si le montant fixe n'est pas utilisé"
-#: engine/core/models.py:1103
+#: engine/core/models.py:1134
msgid "percentage discount"
msgstr "Pourcentage de réduction"
-#: engine/core/models.py:1108
+#: engine/core/models.py:1139
msgid "timestamp when the promocode expires"
msgstr "Date d'expiration du code promotionnel"
-#: engine/core/models.py:1109
+#: engine/core/models.py:1140
msgid "end validity time"
msgstr "Heure de fin de validité"
-#: engine/core/models.py:1114
+#: engine/core/models.py:1145
msgid "timestamp from which this promocode is valid"
msgstr "Date à partir de laquelle ce code promotionnel est valable"
-#: engine/core/models.py:1115
+#: engine/core/models.py:1146
msgid "start validity time"
msgstr "Heure de début de validité"
-#: engine/core/models.py:1120
+#: engine/core/models.py:1151
msgid "timestamp when the promocode was used, blank if not used yet"
msgstr ""
-"Date à laquelle le code promotionnel a été utilisé, vide s'il n'a pas encore"
-" été utilisé."
+"Date à laquelle le code promotionnel a été utilisé, vide s'il n'a pas encore "
+"été utilisé."
-#: engine/core/models.py:1121
+#: engine/core/models.py:1152
msgid "usage timestamp"
msgstr "Horodatage de l'utilisation"
-#: engine/core/models.py:1126
+#: engine/core/models.py:1157
msgid "user assigned to this promocode if applicable"
msgstr "Utilisateur assigné à ce code promo, le cas échéant"
-#: engine/core/models.py:1127
+#: engine/core/models.py:1158
msgid "assigned user"
msgstr "Utilisateur assigné"
-#: engine/core/models.py:1134
+#: engine/core/models.py:1165
msgid "promo code"
msgstr "Code promo"
-#: engine/core/models.py:1135
+#: engine/core/models.py:1166
msgid "promo codes"
msgstr "Codes promotionnels"
-#: engine/core/models.py:1150
+#: engine/core/models.py:1182
msgid ""
"only one type of discount should be defined (amount or percent), but not "
"both or neither."
@@ -2437,173 +2440,172 @@ msgstr ""
"Un seul type de remise doit être défini (montant ou pourcentage), mais pas "
"les deux ni aucun des deux."
-#: engine/core/models.py:1171
+#: engine/core/models.py:1204
msgid "promocode already used"
msgstr "Le code promotionnel a déjà été utilisé"
-#: engine/core/models.py:1187
+#: engine/core/models.py:1226
#, python-brace-format
msgid "invalid discount type for promocode {self.uuid}"
msgstr "Type de réduction non valide pour le code promo {self.uuid} !"
-#: engine/core/models.py:1196
+#: engine/core/models.py:1235
msgid ""
"Represents an order placed by a user. This class models an order within the "
"application, including its various attributes such as billing and shipping "
-"information, status, associated user, notifications, and related operations."
-" Orders can have associated products, promotions can be applied, addresses "
+"information, status, associated user, notifications, and related operations. "
+"Orders can have associated products, promotions can be applied, addresses "
"set, and shipping or billing details updated. Equally, functionality "
"supports managing the products in the order lifecycle."
msgstr ""
-"Représente une commande passée par un utilisateur. Cette classe modélise une"
-" commande dans l'application, y compris ses différents attributs tels que "
-"les informations de facturation et d'expédition, le statut, l'utilisateur "
-"associé, les notifications et les opérations connexes. Les commandes peuvent"
-" être associées à des produits, des promotions peuvent être appliquées, des "
-"adresses peuvent être définies et les détails d'expédition ou de facturation"
-" peuvent être mis à jour. De même, la fonctionnalité permet de gérer les "
+"Représente une commande passée par un utilisateur. Cette classe modélise une "
+"commande dans l'application, y compris ses différents attributs tels que les "
+"informations de facturation et d'expédition, le statut, l'utilisateur "
+"associé, les notifications et les opérations connexes. Les commandes peuvent "
+"être associées à des produits, des promotions peuvent être appliquées, des "
+"adresses peuvent être définies et les détails d'expédition ou de facturation "
+"peuvent être mis à jour. De même, la fonctionnalité permet de gérer les "
"produits dans le cycle de vie de la commande."
-#: engine/core/models.py:1213
+#: engine/core/models.py:1252
msgid "the billing address used for this order"
msgstr "L'adresse de facturation utilisée pour cette commande"
-#: engine/core/models.py:1221
+#: engine/core/models.py:1260
msgid "optional promo code applied to this order"
msgstr "Code promo optionnel appliqué à cette commande"
-#: engine/core/models.py:1222
+#: engine/core/models.py:1261
msgid "applied promo code"
msgstr "Code promo appliqué"
-#: engine/core/models.py:1230
+#: engine/core/models.py:1269
msgid "the shipping address used for this order"
msgstr "L'adresse de livraison utilisée pour cette commande"
-#: engine/core/models.py:1231
+#: engine/core/models.py:1270
msgid "shipping address"
msgstr "Adresse de livraison"
-#: engine/core/models.py:1237
+#: engine/core/models.py:1276
msgid "current status of the order in its lifecycle"
msgstr "Statut actuel de la commande dans son cycle de vie"
-#: engine/core/models.py:1238
+#: engine/core/models.py:1277
msgid "order status"
msgstr "Statut de la commande"
-#: engine/core/models.py:1243 engine/core/models.py:1769
+#: engine/core/models.py:1282 engine/core/models.py:1881
msgid "json structure of notifications to display to users"
msgstr ""
"Structure JSON des notifications à afficher aux utilisateurs ; dans "
"l'interface d'administration, la vue en tableau est utilisée."
-#: engine/core/models.py:1249
+#: engine/core/models.py:1288
msgid "json representation of order attributes for this order"
msgstr "Représentation JSON des attributs de cette commande"
-#: engine/core/models.py:1255
+#: engine/core/models.py:1294
msgid "the user who placed the order"
msgstr "L'utilisateur qui a passé la commande"
-#: engine/core/models.py:1256
+#: engine/core/models.py:1295
msgid "user"
msgstr "Utilisateur"
-#: engine/core/models.py:1262
+#: engine/core/models.py:1301
msgid "the timestamp when the order was finalized"
msgstr "L'heure à laquelle la commande a été finalisée."
-#: engine/core/models.py:1263
+#: engine/core/models.py:1302
msgid "buy time"
msgstr "Temps d'achat"
-#: engine/core/models.py:1270
+#: engine/core/models.py:1309
msgid "a human-readable identifier for the order"
msgstr "Un identifiant lisible par l'homme pour la commande"
-#: engine/core/models.py:1271
+#: engine/core/models.py:1310
msgid "human readable id"
msgstr "ID lisible par l'homme"
-#: engine/core/models.py:1277
+#: engine/core/models.py:1316
msgid "order"
msgstr "Commande"
-#: engine/core/models.py:1319
+#: engine/core/models.py:1363
msgid "a user must have only one pending order at a time"
msgstr "Un utilisateur ne peut avoir qu'un seul ordre en cours à la fois !"
-#: engine/core/models.py:1351
+#: engine/core/models.py:1396
msgid "you cannot add products to an order that is not a pending one"
msgstr ""
-"Vous ne pouvez pas ajouter de produits à une commande qui n'est pas en "
-"cours."
+"Vous ne pouvez pas ajouter de produits à une commande qui n'est pas en cours."
-#: engine/core/models.py:1356
+#: engine/core/models.py:1402
msgid "you cannot add inactive products to order"
msgstr "Vous ne pouvez pas ajouter des produits inactifs à la commande"
-#: engine/core/models.py:1373
+#: engine/core/models.py:1424
msgid "you cannot add more products than available in stock"
msgstr ""
"Vous ne pouvez pas ajouter plus de produits que ceux disponibles en stock"
-#: engine/core/models.py:1395 engine/core/models.py:1420
-#: engine/core/models.py:1428
+#: engine/core/models.py:1448 engine/core/models.py:1477
+#: engine/core/models.py:1487
msgid "you cannot remove products from an order that is not a pending one"
msgstr ""
"Vous ne pouvez pas retirer des produits d'une commande qui n'est pas en "
"cours."
-#: engine/core/models.py:1416
+#: engine/core/models.py:1472
#, python-brace-format
msgid "{name} does not exist with query <{query}>"
msgstr "{name} n'existe pas avec la requête <{query}> !"
-#: engine/core/models.py:1448
+#: engine/core/models.py:1511
msgid "promocode does not exist"
msgstr "Le code promotionnel n'existe pas"
-#: engine/core/models.py:1454
+#: engine/core/models.py:1526
msgid "you can only buy physical products with shipping address specified"
msgstr ""
"Vous ne pouvez acheter que des produits physiques dont l'adresse de "
"livraison est spécifiée !"
-#: engine/core/models.py:1473
+#: engine/core/models.py:1547
msgid "address does not exist"
msgstr "L'adresse n'existe pas"
-#: engine/core/models.py:1494 engine/core/models.py:1563
+#: engine/core/models.py:1569 engine/core/models.py:1648
msgid "you can not buy at this moment, please try again in a few minutes"
msgstr ""
"Vous ne pouvez pas acheter en ce moment, veuillez réessayer dans quelques "
"minutes."
-#: engine/core/models.py:1497 engine/core/models.py:1559
+#: engine/core/models.py:1575 engine/core/models.py:1641
msgid "invalid force value"
msgstr "Valeur de force non valide"
-#: engine/core/models.py:1503 engine/core/models.py:1566
+#: engine/core/models.py:1581 engine/core/models.py:1652
msgid "you cannot purchase an empty order!"
msgstr "Vous ne pouvez pas acheter une commande vide !"
-#: engine/core/models.py:1522
+#: engine/core/models.py:1602
msgid "you cannot buy an order without a user"
msgstr ""
"Vous ne pouvez pas retirer des produits d'une commande qui n'est pas en "
"cours."
-#: engine/core/models.py:1536
+#: engine/core/models.py:1616
msgid "a user without a balance cannot buy with balance"
msgstr "Un utilisateur sans solde ne peut pas acheter avec un solde !"
-#: engine/core/models.py:1541
+#: engine/core/models.py:1622
msgid "insufficient funds to complete the order"
msgstr "Insuffisance de fonds pour compléter la commande"
-#: engine/core/models.py:1575
+#: engine/core/models.py:1663
msgid ""
"you cannot buy without registration, please provide the following "
"information: customer name, customer email, customer phone number"
@@ -2612,7 +2614,7 @@ msgstr ""
"informations suivantes : nom du client, courriel du client, numéro de "
"téléphone du client"
-#: engine/core/models.py:1584
+#: engine/core/models.py:1674
#, python-brace-format
msgid ""
"invalid payment method: {payment_method} from {available_payment_methods}"
@@ -2620,7 +2622,7 @@ msgstr ""
"Méthode de paiement non valide : {payment_method} de "
"{available_payment_methods} !"
-#: engine/core/models.py:1699
+#: engine/core/models.py:1805
msgid ""
"Manages user feedback for products. This class is designed to capture and "
"store user feedback for specific products that they have purchased. It "
@@ -2636,34 +2638,33 @@ msgstr ""
"La classe utilise des champs de base de données pour modéliser et gérer "
"efficacement les données de feedback."
-#: engine/core/models.py:1711
+#: engine/core/models.py:1817
msgid "user-provided comments about their experience with the product"
msgstr "Commentaires des utilisateurs sur leur expérience du produit"
-#: engine/core/models.py:1712
+#: engine/core/models.py:1818
msgid "feedback comments"
msgstr "Commentaires"
-#: engine/core/models.py:1719
-msgid ""
-"references the specific product in an order that this feedback is about"
+#: engine/core/models.py:1826
+msgid "references the specific product in an order that this feedback is about"
msgstr ""
"Fait référence au produit spécifique d'une commande sur lequel porte le "
"retour d'information."
-#: engine/core/models.py:1720
+#: engine/core/models.py:1828
msgid "related order product"
msgstr "Produit de commande apparenté"
-#: engine/core/models.py:1725
+#: engine/core/models.py:1833
msgid "user-assigned rating for the product"
msgstr "Note attribuée par l'utilisateur au produit"
-#: engine/core/models.py:1726
+#: engine/core/models.py:1834
msgid "product rating"
msgstr "Evaluation du produit"
-#: engine/core/models.py:1742
+#: engine/core/models.py:1854
msgid ""
"Represents products associated with orders and their attributes. The "
"OrderProduct model maintains information about a product that is part of an "
@@ -2675,130 +2676,128 @@ msgid ""
"download URL for digital products. The model integrates with the Order and "
"Product models and stores a reference to them."
msgstr ""
-"Représente les produits associés aux commandes et leurs attributs. Le modèle"
-" OrderProduct conserve les informations relatives à un produit faisant "
-"partie d'une commande, y compris des détails tels que le prix d'achat, la "
-"quantité, les attributs du produit et le statut. Il gère les notifications "
-"destinées à l'utilisateur et aux administrateurs, ainsi que des opérations "
-"telles que le renvoi du solde du produit ou l'ajout de commentaires. Ce "
-"modèle fournit également des méthodes et des propriétés qui prennent en "
-"charge la logique commerciale, comme le calcul du prix total ou la "
-"génération d'une URL de téléchargement pour les produits numériques. Le "
-"modèle s'intègre aux modèles de commande et de produit et stocke une "
-"référence à ces derniers."
+"Représente les produits associés aux commandes et leurs attributs. Le modèle "
+"OrderProduct conserve les informations relatives à un produit faisant partie "
+"d'une commande, y compris des détails tels que le prix d'achat, la quantité, "
+"les attributs du produit et le statut. Il gère les notifications destinées à "
+"l'utilisateur et aux administrateurs, ainsi que des opérations telles que le "
+"renvoi du solde du produit ou l'ajout de commentaires. Ce modèle fournit "
+"également des méthodes et des propriétés qui prennent en charge la logique "
+"commerciale, comme le calcul du prix total ou la génération d'une URL de "
+"téléchargement pour les produits numériques. Le modèle s'intègre aux modèles "
+"de commande et de produit et stocke une référence à ces derniers."
-#: engine/core/models.py:1757
+#: engine/core/models.py:1869
msgid "the price paid by the customer for this product at purchase time"
msgstr "Le prix payé par le client pour ce produit au moment de l'achat"
-#: engine/core/models.py:1758
+#: engine/core/models.py:1870
msgid "purchase price at order time"
msgstr "Prix d'achat au moment de la commande"
-#: engine/core/models.py:1763
+#: engine/core/models.py:1875
msgid "internal comments for admins about this ordered product"
-msgstr ""
-"Commentaires internes pour les administrateurs sur ce produit commandé"
+msgstr "Commentaires internes pour les administrateurs sur ce produit commandé"
-#: engine/core/models.py:1764
+#: engine/core/models.py:1876
msgid "internal comments"
msgstr "Commentaires internes"
-#: engine/core/models.py:1770
+#: engine/core/models.py:1882
msgid "user notifications"
msgstr "Notifications aux utilisateurs"
-#: engine/core/models.py:1775
+#: engine/core/models.py:1887
msgid "json representation of this item's attributes"
msgstr "Représentation JSON des attributs de cet élément"
-#: engine/core/models.py:1776
+#: engine/core/models.py:1888
msgid "ordered product attributes"
msgstr "Attributs du produit ordonnés"
-#: engine/core/models.py:1781
+#: engine/core/models.py:1893
msgid "reference to the parent order that contains this product"
msgstr "Référence à l'ordre parent qui contient ce produit"
-#: engine/core/models.py:1782
+#: engine/core/models.py:1894
msgid "parent order"
msgstr "Ordonnance parentale"
-#: engine/core/models.py:1791
+#: engine/core/models.py:1903
msgid "the specific product associated with this order line"
msgstr "Le produit spécifique associé à cette ligne de commande"
-#: engine/core/models.py:1798
+#: engine/core/models.py:1910
msgid "quantity of this specific product in the order"
msgstr "Quantité de ce produit spécifique dans la commande"
-#: engine/core/models.py:1799
+#: engine/core/models.py:1911
msgid "product quantity"
msgstr "Quantité de produits"
-#: engine/core/models.py:1806
+#: engine/core/models.py:1918
msgid "current status of this product in the order"
msgstr "Statut actuel de ce produit dans la commande"
-#: engine/core/models.py:1807
+#: engine/core/models.py:1919
msgid "product line status"
msgstr "Statut de la ligne de produits"
-#: engine/core/models.py:1872
+#: engine/core/models.py:1986
msgid "order product must have an order"
msgstr "Le produit doit être associé à une commande !"
-#: engine/core/models.py:1874
+#: engine/core/models.py:1988
#, python-brace-format
msgid "wrong action specified for feedback: {action}"
msgstr "Mauvaise action spécifiée pour le retour d'information : {action} !"
-#: engine/core/models.py:1888
+#: engine/core/models.py:2005
msgid "you cannot feedback an order which is not received"
msgstr ""
"Vous ne pouvez pas retirer des produits d'une commande qui n'est pas en "
"cours."
-#: engine/core/models.py:1894
+#: engine/core/models.py:2014
msgid "name"
msgstr "Nom"
-#: engine/core/models.py:1895
+#: engine/core/models.py:2016
msgid "URL of the integration"
msgstr "URL de l'intégration"
-#: engine/core/models.py:1896
+#: engine/core/models.py:2019
msgid "authentication credentials"
msgstr "Références d'authentification"
-#: engine/core/models.py:1918
+#: engine/core/models.py:2042
msgid "you can only have one default CRM provider"
msgstr "Vous ne pouvez avoir qu'un seul fournisseur de CRM par défaut"
-#: engine/core/models.py:1928
+#: engine/core/models.py:2052
msgid "CRM"
msgstr "CRM"
-#: engine/core/models.py:1929
+#: engine/core/models.py:2053
msgid "CRMs"
msgstr "CRM"
-#: engine/core/models.py:1941
+#: engine/core/models.py:2069
msgid "order CRM link"
msgstr "Lien CRM de la commande"
-#: engine/core/models.py:1942
+#: engine/core/models.py:2070
msgid "orders CRM links"
msgstr "Liens CRM des commandes"
-#: engine/core/models.py:1947
+#: engine/core/models.py:2075
msgid ""
"Represents the downloading functionality for digital assets associated with "
"orders. The DigitalAssetDownload class provides the ability to manage and "
"access downloads related to order products. It maintains information about "
-"the associated order product, the number of downloads, and whether the asset"
-" is publicly visible. It includes a method to generate a URL for downloading"
-" the asset when the associated order is in a completed status."
+"the associated order product, the number of downloads, and whether the asset "
+"is publicly visible. It includes a method to generate a URL for downloading "
+"the asset when the associated order is in a completed status."
msgstr ""
"Représente la fonctionnalité de téléchargement des ressources numériques "
"associées aux commandes. La classe DigitalAssetDownload permet de gérer et "
@@ -2808,15 +2807,15 @@ msgstr ""
"méthode permettant de générer une URL pour le téléchargement de l'actif "
"lorsque la commande associée est terminée."
-#: engine/core/models.py:1961
+#: engine/core/models.py:2091
msgid "download"
msgstr "Télécharger"
-#: engine/core/models.py:1962
+#: engine/core/models.py:2092
msgid "downloads"
msgstr "Téléchargements"
-#: engine/core/serializers/utility.py:89
+#: engine/core/serializers/utility.py:91
msgid ""
"you must provide a comment, rating, and order product uuid to add feedback."
msgstr ""
@@ -3013,7 +3012,8 @@ msgstr "Bonjour %(order.user.first_name)s,"
#, python-format
msgid ""
"thank you for your order #%(order.pk)s! we are pleased to inform you that\n"
-" we have taken your order into work. below are the details of your\n"
+" we have taken your order into work. below are "
+"the details of your\n"
" order:"
msgstr ""
"Merci pour votre commande #%(order.pk)s ! Nous avons le plaisir de vous "
@@ -3128,7 +3128,8 @@ msgstr ""
#: engine/core/templates/shipped_order_created_email.html:101
#: engine/core/templates/shipped_order_delivered_email.html:101
msgid ""
-"thank you for your order! we are pleased to confirm your purchase. below are\n"
+"thank you for your order! we are pleased to confirm your purchase. below "
+"are\n"
" the details of your order:"
msgstr ""
"Nous vous remercions pour votre commande ! Nous avons le plaisir de "
@@ -3160,32 +3161,32 @@ msgstr ""
"tous les droits\n"
" réservés"
-#: engine/core/utils/caching.py:44
+#: engine/core/utils/caching.py:48
msgid "both data and timeout are required"
msgstr "Les données et le délai d'attente sont tous deux nécessaires"
-#: engine/core/utils/caching.py:46
+#: engine/core/utils/caching.py:51
msgid "invalid timeout value, it must be between 0 and 216000 seconds"
msgstr ""
-"La valeur du délai d'attente n'est pas valide, elle doit être comprise entre"
-" 0 et 216000 secondes."
+"La valeur du délai d'attente n'est pas valide, elle doit être comprise entre "
+"0 et 216000 secondes."
#: engine/core/utils/emailing.py:27
#, python-brace-format
msgid "{settings.PROJECT_NAME} | contact us initiated"
msgstr "{settings.PROJECT_NAME} | nous contacter initié"
-#: engine/core/utils/emailing.py:73
+#: engine/core/utils/emailing.py:81
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order confirmation"
msgstr "{settings.PROJECT_NAME} | confirmation de commande"
-#: engine/core/utils/emailing.py:105
+#: engine/core/utils/emailing.py:115
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order delivered"
msgstr "{settings.PROJECT_NAME} | commande livrée"
-#: engine/core/utils/emailing.py:188
+#: engine/core/utils/emailing.py:203
#, python-brace-format
msgid "{settings.PROJECT_NAME} | promocode granted"
msgstr "{settings.PROJECT_NAME} | promocode accordé"
@@ -3198,14 +3199,14 @@ msgstr "Vous n'êtes pas autorisé à effectuer cette action."
msgid "NOMINATIM_URL must be configured."
msgstr "Le paramètre NOMINATIM_URL doit être configuré !"
-#: engine/core/validators.py:19
+#: engine/core/validators.py:21
#, python-brace-format
msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels"
msgstr ""
"Les dimensions de l'image ne doivent pas dépasser w{max_width} x "
"h{max_height} pixels."
-#: engine/core/views.py:91
+#: engine/core/views.py:105
msgid ""
"Handles the request for the sitemap index and returns an XML response. It "
"ensures the response includes the appropriate content type header for XML."
@@ -3213,28 +3214,28 @@ msgstr ""
"Gère la demande d'index sitemap et renvoie une réponse XML. Il s'assure que "
"la réponse inclut l'en-tête de type de contenu approprié pour XML."
-#: engine/core/views.py:106
+#: engine/core/views.py:120
msgid ""
"Handles the detailed view response for a sitemap. This function processes "
"the request, fetches the appropriate sitemap detail response, and sets the "
"Content-Type header for XML."
msgstr ""
"Gère la réponse détaillée d'un plan du site. Cette fonction traite la "
-"demande, récupère la réponse détaillée appropriée du plan du site et définit"
-" l'en-tête Content-Type pour XML."
+"demande, récupère la réponse détaillée appropriée du plan du site et définit "
+"l'en-tête Content-Type pour XML."
-#: engine/core/views.py:141
+#: engine/core/views.py:156
msgid ""
"Returns a list of supported languages and their corresponding information."
msgstr ""
"Renvoie une liste des langues prises en charge et des informations "
"correspondantes."
-#: engine/core/views.py:173
+#: engine/core/views.py:183
msgid "Returns the parameters of the website as a JSON object."
msgstr "Renvoie les paramètres du site web sous la forme d'un objet JSON."
-#: engine/core/views.py:192
+#: engine/core/views.py:199
msgid ""
"Handles cache operations such as reading and setting cache data with a "
"specified key and timeout."
@@ -3242,11 +3243,11 @@ msgstr ""
"Gère les opérations de cache telles que la lecture et la définition des "
"données de cache avec une clé et un délai spécifiés."
-#: engine/core/views.py:219
+#: engine/core/views.py:221
msgid "Handles `contact us` form submissions."
msgstr "Gère les soumissions du formulaire `contact us`."
-#: engine/core/views.py:240
+#: engine/core/views.py:237
msgid ""
"Handles requests for processing and validating URLs from incoming POST "
"requests."
@@ -3254,79 +3255,88 @@ msgstr ""
"Gère les demandes de traitement et de validation des URL à partir des "
"requêtes POST entrantes."
-#: engine/core/views.py:280
+#: engine/core/views.py:274
msgid "Handles global search queries."
msgstr "Traite les demandes de recherche globales."
-#: engine/core/views.py:295
+#: engine/core/views.py:290
msgid "Handles the logic of buying as a business without registration."
msgstr "Gère la logique de l'achat en tant qu'entreprise sans enregistrement."
-#: engine/core/views.py:332
+#: engine/core/views.py:338
msgid ""
"Handles the downloading of a digital asset associated with an order.\n"
-"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the digital asset file located in the "
+"storage directory of the project. If the file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
msgstr ""
"Gère le téléchargement d'un bien numérique associé à une commande.\n"
-"Cette fonction tente de servir le fichier de ressource numérique situé dans le répertoire de stockage du projet. Si le fichier n'est pas trouvé, une erreur HTTP 404 est générée pour indiquer que la ressource n'est pas disponible."
+"Cette fonction tente de servir le fichier de ressource numérique situé dans "
+"le répertoire de stockage du projet. Si le fichier n'est pas trouvé, une "
+"erreur HTTP 404 est générée pour indiquer que la ressource n'est pas "
+"disponible."
-#: engine/core/views.py:343
+#: engine/core/views.py:349
msgid "order_product_uuid is required"
msgstr "order_product_uuid est obligatoire"
-#: engine/core/views.py:350
+#: engine/core/views.py:356
msgid "order product does not exist"
msgstr "le produit de la commande n'existe pas"
-#: engine/core/views.py:353
+#: engine/core/views.py:359
msgid "you can only download the digital asset once"
msgstr "Vous ne pouvez télécharger le bien numérique qu'une seule fois"
-#: engine/core/views.py:356
+#: engine/core/views.py:363
msgid "the order must be paid before downloading the digital asset"
msgstr "la commande doit être payée avant le téléchargement du bien numérique"
-#: engine/core/views.py:362
+#: engine/core/views.py:370
msgid "the order product does not have a product"
msgstr "Le produit de la commande n'a pas de produit"
-#: engine/core/views.py:399
+#: engine/core/views.py:414
msgid "favicon not found"
msgstr "favicon introuvable"
-#: engine/core/views.py:404
+#: engine/core/views.py:419
msgid ""
"Handles requests for the favicon of a website.\n"
-"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the favicon file located in the static "
+"directory of the project. If the favicon file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
msgstr ""
"Gère les demandes de favicon d'un site web.\n"
-"Cette fonction tente de servir le fichier favicon situé dans le répertoire statique du projet. Si le fichier favicon n'est pas trouvé, une erreur HTTP 404 est générée pour indiquer que la ressource n'est pas disponible."
+"Cette fonction tente de servir le fichier favicon situé dans le répertoire "
+"statique du projet. Si le fichier favicon n'est pas trouvé, une erreur HTTP "
+"404 est générée pour indiquer que la ressource n'est pas disponible."
-#: engine/core/views.py:416
+#: engine/core/views.py:431
msgid ""
-"Redirects the request to the admin index page. The function handles incoming"
-" HTTP requests and redirects them to the Django admin interface index page. "
+"Redirects the request to the admin index page. The function handles incoming "
+"HTTP requests and redirects them to the Django admin interface index page. "
"It uses Django's `redirect` function for handling the HTTP redirection."
msgstr ""
"Redirige la requête vers la page d'index de l'interface d'administration. "
-"Cette fonction gère les requêtes HTTP entrantes et les redirige vers la page"
-" d'index de l'interface d'administration de Django. Elle utilise la fonction"
-" `redirect` de Django pour gérer la redirection HTTP."
+"Cette fonction gère les requêtes HTTP entrantes et les redirige vers la page "
+"d'index de l'interface d'administration de Django. Elle utilise la fonction "
+"`redirect` de Django pour gérer la redirection HTTP."
-#: engine/core/views.py:429
+#: engine/core/views.py:443
msgid "Returns current version of the eVibes. "
msgstr "Renvoie la version actuelle d'eVibes."
-#: engine/core/views.py:623 engine/core/views.py:636
+#: engine/core/views.py:672 engine/core/views.py:687
#, python-format
msgid "Revenue & Orders (last %(days)d)"
msgstr "Recettes et commandes (dernier %(days)d)"
-#: engine/core/views.py:793
+#: engine/core/views.py:868
msgid "Returns custom variables for Dashboard. "
msgstr "Renvoie les variables personnalisées pour le tableau de bord."
-#: engine/core/viewsets.py:136
+#: engine/core/viewsets.py:139
msgid ""
"Defines a viewset for managing Evibes-related operations. The EvibesViewSet "
"class inherits from ModelViewSet and provides functionality for handling "
@@ -3341,13 +3351,12 @@ msgstr ""
"l'action en cours, les autorisations personnalisables et les formats de "
"rendu."
-#: engine/core/viewsets.py:156
+#: engine/core/viewsets.py:160
msgid ""
-"Represents a viewset for managing AttributeGroup objects. Handles operations"
-" related to AttributeGroup, including filtering, serialization, and "
-"retrieval of data. This class is part of the application's API layer and "
-"provides a standardized way to process requests and responses for "
-"AttributeGroup data."
+"Represents a viewset for managing AttributeGroup objects. Handles operations "
+"related to AttributeGroup, including filtering, serialization, and retrieval "
+"of data. This class is part of the application's API layer and provides a "
+"standardized way to process requests and responses for AttributeGroup data."
msgstr ""
"Représente un jeu de vues pour la gestion des objets AttributeGroup. Gère "
"les opérations liées à l'AttributeGroup, notamment le filtrage, la "
@@ -3355,7 +3364,7 @@ msgstr ""
"couche API de l'application et fournit un moyen normalisé de traiter les "
"demandes et les réponses concernant les données de l'AttributeGroup."
-#: engine/core/viewsets.py:175
+#: engine/core/viewsets.py:179
msgid ""
"Handles operations related to Attribute objects within the application. "
"Provides a set of API endpoints to interact with Attribute data. This class "
@@ -3372,22 +3381,21 @@ msgstr ""
"récupération d'informations détaillées ou simplifiées en fonction de la "
"demande."
-#: engine/core/viewsets.py:194
+#: engine/core/viewsets.py:198
msgid ""
"A viewset for managing AttributeValue objects. This viewset provides "
"functionality for listing, retrieving, creating, updating, and deleting "
"AttributeValue objects. It integrates with Django REST Framework's viewset "
-"mechanisms and uses appropriate serializers for different actions. Filtering"
-" capabilities are provided through the DjangoFilterBackend."
+"mechanisms and uses appropriate serializers for different actions. Filtering "
+"capabilities are provided through the DjangoFilterBackend."
msgstr ""
-"Un viewset pour la gestion des objets AttributeValue. Ce viewset fournit des"
-" fonctionnalités pour lister, récupérer, créer, mettre à jour et supprimer "
+"Un viewset pour la gestion des objets AttributeValue. Ce viewset fournit des "
+"fonctionnalités pour lister, récupérer, créer, mettre à jour et supprimer "
"des objets AttributeValue. Il s'intègre aux mécanismes de viewset du cadre "
"REST de Django et utilise les sérialiseurs appropriés pour les différentes "
-"actions. Les capacités de filtrage sont fournies par le backend "
-"DjangoFilter."
+"actions. Les capacités de filtrage sont fournies par le backend DjangoFilter."
-#: engine/core/viewsets.py:213
+#: engine/core/viewsets.py:217
msgid ""
"Manages views for Category-related operations. The CategoryViewSet class is "
"responsible for handling operations related to the Category model in the "
@@ -3396,13 +3404,13 @@ msgid ""
"can access specific data."
msgstr ""
"Gère les vues pour les opérations liées à la catégorie. La classe "
-"CategoryViewSet est responsable de la gestion des opérations liées au modèle"
-" Category dans le système. Elle permet d'extraire, de filtrer et de "
+"CategoryViewSet est responsable de la gestion des opérations liées au modèle "
+"Category dans le système. Elle permet d'extraire, de filtrer et de "
"sérialiser les données relatives aux catégories. Le jeu de vues applique "
"également des permissions pour s'assurer que seuls les utilisateurs "
"autorisés peuvent accéder à des données spécifiques."
-#: engine/core/viewsets.py:326
+#: engine/core/viewsets.py:346
msgid ""
"Represents a viewset for managing Brand instances. This class provides "
"functionality for querying, filtering, and serializing Brand objects. It "
@@ -3411,11 +3419,11 @@ msgid ""
msgstr ""
"Représente un jeu de vues pour la gestion des instances de marque. Cette "
"classe fournit des fonctionnalités d'interrogation, de filtrage et de "
-"sérialisation des objets Brand. Elle utilise le cadre ViewSet de Django pour"
-" simplifier la mise en œuvre des points d'extrémité de l'API pour les objets"
-" Brand."
+"sérialisation des objets Brand. Elle utilise le cadre ViewSet de Django pour "
+"simplifier la mise en œuvre des points d'extrémité de l'API pour les objets "
+"Brand."
-#: engine/core/viewsets.py:438
+#: engine/core/viewsets.py:458
msgid ""
"Manages operations related to the `Product` model in the system. This class "
"provides a viewset for managing products, including their filtering, "
@@ -3430,10 +3438,10 @@ msgstr ""
"sérialisation et les opérations sur des instances spécifiques. Elle s'étend "
"à partir de `EvibesViewSet` pour utiliser des fonctionnalités communes et "
"s'intègre au framework REST de Django pour les opérations API RESTful. Il "
-"comprend des méthodes pour récupérer les détails d'un produit, appliquer des"
-" permissions et accéder aux commentaires connexes d'un produit."
+"comprend des méthodes pour récupérer les détails d'un produit, appliquer des "
+"permissions et accéder aux commentaires connexes d'un produit."
-#: engine/core/viewsets.py:574
+#: engine/core/viewsets.py:605
msgid ""
"Represents a viewset for managing Vendor objects. This viewset allows "
"fetching, filtering, and serializing Vendor data. It defines the queryset, "
@@ -3441,21 +3449,21 @@ msgid ""
"actions. The purpose of this class is to provide streamlined access to "
"Vendor-related resources through the Django REST framework."
msgstr ""
-"Représente un jeu de vues pour la gestion des objets Vendeur. Ce jeu de vues"
-" permet d'extraire, de filtrer et de sérialiser les données relatives aux "
+"Représente un jeu de vues pour la gestion des objets Vendeur. Ce jeu de vues "
+"permet d'extraire, de filtrer et de sérialiser les données relatives aux "
"vendeurs. Il définit l'ensemble de requêtes, les configurations de filtrage "
"et les classes de sérialisation utilisées pour gérer les différentes "
"actions. L'objectif de cette classe est de fournir un accès simplifié aux "
"ressources relatives aux vendeurs par l'intermédiaire du cadre REST de "
"Django."
-#: engine/core/viewsets.py:594
+#: engine/core/viewsets.py:625
msgid ""
"Representation of a view set handling Feedback objects. This class manages "
"operations related to Feedback objects, including listing, filtering, and "
"retrieving details. The purpose of this view set is to provide different "
-"serializers for different actions and implement permission-based handling of"
-" accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
+"serializers for different actions and implement permission-based handling of "
+"accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
"use of Django's filtering system for querying data."
msgstr ""
"Représentation d'un ensemble de vues gérant des objets de retour "
@@ -3467,14 +3475,14 @@ msgstr ""
"la classe de base `EvibesViewSet` et utilise le système de filtrage de "
"Django pour l'interrogation des données."
-#: engine/core/viewsets.py:621
+#: engine/core/viewsets.py:652
msgid ""
"ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes "
"various endpoints for handling order operations such as adding or removing "
-"products, performing purchases for registered as well as unregistered users,"
-" and retrieving the current authenticated user's pending orders. The ViewSet"
-" uses multiple serializers based on the specific action being performed and "
+"products, performing purchases for registered as well as unregistered users, "
+"and retrieving the current authenticated user's pending orders. The ViewSet "
+"uses multiple serializers based on the specific action being performed and "
"enforces permissions accordingly while interacting with order data."
msgstr ""
"ViewSet pour la gestion des commandes et des opérations connexes. Cette "
@@ -3487,26 +3495,26 @@ msgstr ""
"autorisations en conséquence lors de l'interaction avec les données de la "
"commande."
-#: engine/core/viewsets.py:825
+#: engine/core/viewsets.py:914
msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It "
-"includes filtering, permission checks, and serializer switching based on the"
-" requested action. Additionally, it provides a detailed action for handling "
+"includes filtering, permission checks, and serializer switching based on the "
+"requested action. Additionally, it provides a detailed action for handling "
"feedback on OrderProduct instances"
msgstr ""
"Fournit un jeu de vues pour la gestion des entités OrderProduct. Ce jeu de "
"vues permet d'effectuer des opérations CRUD et des actions personnalisées "
"spécifiques au modèle OrderProduct. Il inclut le filtrage, les contrôles de "
-"permission et le changement de sérialiseur en fonction de l'action demandée."
-" En outre, il fournit une action détaillée pour gérer le retour "
+"permission et le changement de sérialiseur en fonction de l'action demandée. "
+"En outre, il fournit une action détaillée pour gérer le retour "
"d'informations sur les instances OrderProduct."
-#: engine/core/viewsets.py:879
+#: engine/core/viewsets.py:974
msgid "Manages operations related to Product images in the application. "
msgstr "Gère les opérations liées aux images des produits dans l'application."
-#: engine/core/viewsets.py:892
+#: engine/core/viewsets.py:988
msgid ""
"Manages the retrieval and handling of PromoCode instances through various "
"API actions."
@@ -3514,20 +3522,20 @@ msgstr ""
"Gère la récupération et le traitement des instances de PromoCode par le "
"biais de diverses actions API."
-#: engine/core/viewsets.py:914
+#: engine/core/viewsets.py:1019
msgid "Represents a view set for managing promotions. "
msgstr "Représente un jeu de vues pour la gestion des promotions."
-#: engine/core/viewsets.py:927
+#: engine/core/viewsets.py:1032
msgid "Handles operations related to Stock data in the system."
msgstr "Gère les opérations liées aux données de stock dans le système."
-#: engine/core/viewsets.py:941
+#: engine/core/viewsets.py:1046
msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the "
-"retrieval, modification, and customization of products within the wish list."
-" This ViewSet facilitates functionality such as adding, removing, and bulk "
+"retrieval, modification, and customization of products within the wish list. "
+"This ViewSet facilitates functionality such as adding, removing, and bulk "
"actions for wishlist products. Permission checks are integrated to ensure "
"that users can only manage their own wishlists unless explicit permissions "
"are granted."
@@ -3535,14 +3543,14 @@ msgstr ""
"Jeu de vues pour la gestion des opérations de la liste de souhaits. Le jeu "
"de vues WishlistViewSet fournit des points d'extrémité pour interagir avec "
"la liste de souhaits d'un utilisateur, permettant la récupération, la "
-"modification et la personnalisation des produits de la liste de souhaits. Ce"
-" jeu de vues facilite les fonctionnalités telles que l'ajout, la suppression"
-" et les actions en bloc pour les produits de la liste de souhaits. Des "
+"modification et la personnalisation des produits de la liste de souhaits. Ce "
+"jeu de vues facilite les fonctionnalités telles que l'ajout, la suppression "
+"et les actions en bloc pour les produits de la liste de souhaits. Des "
"contrôles de permissions sont intégrés pour s'assurer que les utilisateurs "
"ne peuvent gérer que leur propre liste de souhaits, sauf si des permissions "
"explicites sont accordées."
-#: engine/core/viewsets.py:1056
+#: engine/core/viewsets.py:1183
msgid ""
"This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom "
@@ -3551,18 +3559,18 @@ msgid ""
"on the request context."
msgstr ""
"Cette classe fournit une fonctionnalité de viewset pour la gestion des "
-"objets `Address`. La classe AddressViewSet permet d'effectuer des opérations"
-" CRUD, des filtrages et des actions personnalisées liées aux entités "
-"adresse. Elle inclut des comportements spécialisés pour différentes méthodes"
-" HTTP, des dérogations au sérialiseur et une gestion des autorisations basée"
-" sur le contexte de la demande."
+"objets `Address`. La classe AddressViewSet permet d'effectuer des opérations "
+"CRUD, des filtrages et des actions personnalisées liées aux entités adresse. "
+"Elle inclut des comportements spécialisés pour différentes méthodes HTTP, "
+"des dérogations au sérialiseur et une gestion des autorisations basée sur le "
+"contexte de la demande."
-#: engine/core/viewsets.py:1123
+#: engine/core/viewsets.py:1254
#, python-brace-format
msgid "Geocoding error: {e}"
msgstr "Erreur de géocodage : {e}"
-#: engine/core/viewsets.py:1131
+#: engine/core/viewsets.py:1262
msgid ""
"Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing "
diff --git a/engine/core/locale/he_IL/LC_MESSAGES/django.po b/engine/core/locale/he_IL/LC_MESSAGES/django.po
index 7c1df829..adf564c9 100644
--- a/engine/core/locale/he_IL/LC_MESSAGES/django.po
+++ b/engine/core/locale/he_IL/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 22:12+0300\n"
+"POT-Creation-Date: 2025-12-18 19:09+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -25,111 +25,110 @@ msgstr "מזהה ייחודי משמש לזיהוי ודאי של כל אובי
msgid "is active"
msgstr "פעיל"
-#: engine/core/abstract.py:21
+#: engine/core/abstract.py:22
msgid ""
-"if set to false, this object can't be seen by users without needed "
-"permission"
+"if set to false, this object can't be seen by users without needed permission"
msgstr "אם מוגדר כ-false, אובייקט זה לא יהיה גלוי למשתמשים ללא ההרשאה הנדרשת."
-#: engine/core/abstract.py:23 engine/core/choices.py:18
+#: engine/core/abstract.py:26 engine/core/choices.py:18
msgid "created"
msgstr "נוצר"
-#: engine/core/abstract.py:23
+#: engine/core/abstract.py:26
msgid "when the object first appeared on the database"
msgstr "כאשר האובייקט הופיע לראשונה במסד הנתונים"
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "modified"
msgstr "משונה"
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "when the object was last modified"
msgstr "מתי האובייקט נערך לאחרונה"
-#: engine/core/admin.py:85
+#: engine/core/admin.py:94
msgid "translations"
msgstr "תרגומים"
-#: engine/core/admin.py:89
+#: engine/core/admin.py:102
msgid "general"
msgstr "כללי"
-#: engine/core/admin.py:91
+#: engine/core/admin.py:106
msgid "relations"
msgstr "יחסים"
-#: engine/core/admin.py:93
+#: engine/core/admin.py:111
msgid "additional info"
msgstr "מידע נוסף"
-#: engine/core/admin.py:111
+#: engine/core/admin.py:133
msgid "metadata"
msgstr "מטא-נתונים"
-#: engine/core/admin.py:118
+#: engine/core/admin.py:141
msgid "timestamps"
msgstr "חותמות זמן"
-#: engine/core/admin.py:133
+#: engine/core/admin.py:157
#, python-format
msgid "activate selected %(verbose_name_plural)s"
msgstr "הפעל את %(verbose_name_plural)s שנבחר"
-#: engine/core/admin.py:138
+#: engine/core/admin.py:165
msgid "selected items have been activated."
msgstr "הפריטים שנבחרו הופעלו!"
-#: engine/core/admin.py:144
+#: engine/core/admin.py:173
#, python-format
msgid "deactivate selected %(verbose_name_plural)s"
msgstr "השבת את %(verbose_name_plural)s שנבחר"
-#: engine/core/admin.py:149
+#: engine/core/admin.py:183
msgid "selected items have been deactivated."
msgstr "פריטים נבחרים הושבתו!"
-#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586
-#: engine/core/graphene/object_types.py:593 engine/core/models.py:801
-#: engine/core/models.py:809
+#: engine/core/admin.py:195 engine/core/graphene/object_types.py:650
+#: engine/core/graphene/object_types.py:657 engine/core/models.py:824
+#: engine/core/models.py:832
msgid "attribute value"
msgstr "ערך התכונה"
-#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75
-#: engine/core/models.py:810
+#: engine/core/admin.py:196 engine/core/graphene/object_types.py:75
+#: engine/core/models.py:833
msgid "attribute values"
msgstr "ערכי תכונות"
-#: engine/core/admin.py:172
+#: engine/core/admin.py:207
msgid "image"
msgstr "תמונה"
-#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474
+#: engine/core/admin.py:208 engine/core/graphene/object_types.py:527
msgid "images"
msgstr "תמונות"
-#: engine/core/admin.py:184 engine/core/models.py:566
+#: engine/core/admin.py:219 engine/core/models.py:587
msgid "stock"
msgstr "מלאי"
-#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640
+#: engine/core/admin.py:220 engine/core/graphene/object_types.py:710
msgid "stocks"
msgstr "מניות"
-#: engine/core/admin.py:196 engine/core/models.py:1818
+#: engine/core/admin.py:231 engine/core/models.py:1930
msgid "order product"
msgstr "הזמן מוצר"
-#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389
-#: engine/core/models.py:1819
+#: engine/core/admin.py:232 engine/core/graphene/object_types.py:438
+#: engine/core/models.py:1931
msgid "order products"
msgstr "הזמנת מוצרים"
-#: engine/core/admin.py:210 engine/core/admin.py:211
+#: engine/core/admin.py:250 engine/core/admin.py:251
msgid "children"
msgstr "ילדים"
-#: engine/core/admin.py:977
+#: engine/core/admin.py:1059
msgid "Config"
msgstr "תצורה"
@@ -153,8 +152,7 @@ msgstr "נמסר"
msgid "canceled"
msgstr "בוטל"
-#: engine/core/choices.py:8 engine/core/choices.py:16
-#: engine/core/choices.py:24
+#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24
msgid "failed"
msgstr "נכשל"
@@ -182,11 +180,11 @@ msgstr "Momental"
msgid "successful"
msgstr "מוצלח"
-#: engine/core/docs/drf/views.py:31
+#: engine/core/docs/drf/views.py:30
msgid "OpenAPI schema in selected format with selected language"
msgstr "סכימת OpenAPI בפורמט נבחר בשפה נבחרת"
-#: engine/core/docs/drf/views.py:33
+#: engine/core/docs/drf/views.py:32
msgid ""
"OpenApi3 schema for this API. Format can be selected via content "
"negotiation. Language can be selected with Accept-Language and query "
@@ -195,11 +193,11 @@ msgstr ""
"סכימת OpenApi3 עבור ממשק API זה. ניתן לבחור את הפורמט באמצעות משא ומתן על "
"תוכן. ניתן לבחור את השפה באמצעות Accept-Language ופרמטר שאילתה."
-#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37
+#: engine/core/docs/drf/views.py:43 engine/core/graphene/mutations.py:37
msgid "cache I/O"
msgstr "קלט/פלט מטמון"
-#: engine/core/docs/drf/views.py:46
+#: engine/core/docs/drf/views.py:45
msgid ""
"apply only a key to read permitted data from cache.\n"
"apply key, data and timeout with authentication to write data to cache."
@@ -207,996 +205,1006 @@ msgstr ""
"החל רק מפתח לקריאת נתונים מותרים מהמטמון. החל מפתח, נתונים וזמן המתנה עם "
"אימות כדי לכתוב נתונים למטמון."
-#: engine/core/docs/drf/views.py:62
+#: engine/core/docs/drf/views.py:63
msgid "get a list of supported languages"
msgstr "קבל רשימה של השפות הנתמכות"
-#: engine/core/docs/drf/views.py:74
+#: engine/core/docs/drf/views.py:75
msgid "get application's exposable parameters"
msgstr "קבל את הפרמטרים החשופים של היישום"
-#: engine/core/docs/drf/views.py:84
+#: engine/core/docs/drf/views.py:89
msgid "send a message to the support team"
msgstr "שלח הודעה לצוות התמיכה"
-#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57
+#: engine/core/docs/drf/views.py:103 engine/core/graphene/mutations.py:59
msgid "request a CORSed URL"
msgstr "בקש כתובת URL של CORS. מותר להשתמש רק ב-https."
-#: engine/core/docs/drf/views.py:112
+#: engine/core/docs/drf/views.py:119
msgid "Search between products, categories and brands"
msgstr "חפש בין מוצרים, קטגוריות ומותגים"
-#: engine/core/docs/drf/views.py:130
+#: engine/core/docs/drf/views.py:141
msgid "global search endpoint to query across project's tables"
msgstr "נקודת קצה לחיפוש גלובלי לשאילתות בטבלאות הפרויקט"
-#: engine/core/docs/drf/views.py:139
+#: engine/core/docs/drf/views.py:150
msgid "purchase an order as a business"
msgstr "רכשו הזמנה כעסק"
-#: engine/core/docs/drf/views.py:146
+#: engine/core/docs/drf/views.py:158
msgid ""
"purchase an order as a business, using the provided `products` with "
"`product_uuid` and `attributes`."
msgstr ""
"רכשו הזמנה כעסק, באמצעות `products` המסופק עם `product_uuid` ו-`attributes`."
-#: engine/core/docs/drf/views.py:164
+#: engine/core/docs/drf/views.py:177
msgid "download a digital asset from purchased digital order"
msgstr "הורדת נכס דיגיטלי מהזמנה דיגיטלית שנרכשה"
-#: engine/core/docs/drf/viewsets.py:61
+#: engine/core/docs/drf/viewsets.py:65
msgid "list all attribute groups (simple view)"
msgstr "הצג את כל קבוצות התכונות (תצוגה פשוטה)"
-#: engine/core/docs/drf/viewsets.py:68
+#: engine/core/docs/drf/viewsets.py:75
msgid "retrieve a single attribute group (detailed view)"
msgstr "איתור קבוצת תכונות אחת (תצוגה מפורטת)"
-#: engine/core/docs/drf/viewsets.py:75
+#: engine/core/docs/drf/viewsets.py:82
msgid "create an attribute group"
msgstr "צור קבוצת תכונות"
-#: engine/core/docs/drf/viewsets.py:82
+#: engine/core/docs/drf/viewsets.py:92
msgid "delete an attribute group"
msgstr "מחיקת קבוצת תכונות"
-#: engine/core/docs/drf/viewsets.py:89
+#: engine/core/docs/drf/viewsets.py:99
msgid "rewrite an existing attribute group saving non-editables"
msgstr "שכתוב קבוצת תכונות קיימת תוך שמירת תכונות שאינן ניתנות לעריכה"
-#: engine/core/docs/drf/viewsets.py:96
-msgid ""
-"rewrite some fields of an existing attribute group saving non-editables"
+#: engine/core/docs/drf/viewsets.py:107
+msgid "rewrite some fields of an existing attribute group saving non-editables"
msgstr ""
"שכתוב שדות מסוימים בקבוצת תכונות קיימת תוך שמירת תכונות שאינן ניתנות לעריכה"
-#: engine/core/docs/drf/viewsets.py:106
+#: engine/core/docs/drf/viewsets.py:118
msgid "list all attributes (simple view)"
msgstr "הצג את כל התכונות (תצוגה פשוטה)"
-#: engine/core/docs/drf/viewsets.py:113
+#: engine/core/docs/drf/viewsets.py:128
msgid "retrieve a single attribute (detailed view)"
msgstr "איתור תכונה בודדת (תצוגה מפורטת)"
-#: engine/core/docs/drf/viewsets.py:120
+#: engine/core/docs/drf/viewsets.py:135
msgid "create an attribute"
msgstr "צור תכונה"
-#: engine/core/docs/drf/viewsets.py:127
+#: engine/core/docs/drf/viewsets.py:142
msgid "delete an attribute"
msgstr "מחיקת תכונה"
-#: engine/core/docs/drf/viewsets.py:134
+#: engine/core/docs/drf/viewsets.py:149
msgid "rewrite an existing attribute saving non-editables"
msgstr "שכתוב תכונה קיימת תוך שמירת תכונות שאינן ניתנות לעריכה"
-#: engine/core/docs/drf/viewsets.py:141
+#: engine/core/docs/drf/viewsets.py:156
msgid "rewrite some fields of an existing attribute saving non-editables"
msgstr "שכתוב שדות מסוימים של תכונה קיימת תוך שמירת שדות שאינם ניתנים לעריכה"
-#: engine/core/docs/drf/viewsets.py:151
+#: engine/core/docs/drf/viewsets.py:166
msgid "list all attribute values (simple view)"
msgstr "רשימת כל ערכי התכונות (תצוגה פשוטה)"
-#: engine/core/docs/drf/viewsets.py:158
+#: engine/core/docs/drf/viewsets.py:176
msgid "retrieve a single attribute value (detailed view)"
msgstr "איתור ערך תכונה בודד (תצוגה מפורטת)"
-#: engine/core/docs/drf/viewsets.py:165
+#: engine/core/docs/drf/viewsets.py:183
msgid "create an attribute value"
msgstr "צור ערך תכונה"
-#: engine/core/docs/drf/viewsets.py:172
+#: engine/core/docs/drf/viewsets.py:193
msgid "delete an attribute value"
msgstr "מחיקת ערך תכונה"
-#: engine/core/docs/drf/viewsets.py:179
+#: engine/core/docs/drf/viewsets.py:200
msgid "rewrite an existing attribute value saving non-editables"
msgstr "שכתוב ערך תכונה קיים תוך שמירת תכונות שאינן ניתנות לעריכה"
-#: engine/core/docs/drf/viewsets.py:186
-msgid ""
-"rewrite some fields of an existing attribute value saving non-editables"
+#: engine/core/docs/drf/viewsets.py:208
+msgid "rewrite some fields of an existing attribute value saving non-editables"
msgstr ""
"שכתוב שדות מסוימים של ערך תכונה קיים תוך שמירת שדות שאינם ניתנים לעריכה"
-#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197
+#: engine/core/docs/drf/viewsets.py:219 engine/core/docs/drf/viewsets.py:220
msgid "list all categories (simple view)"
msgstr "הצג את כל הקטגוריות (תצוגה פשוטה)"
-#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205
+#: engine/core/docs/drf/viewsets.py:230 engine/core/docs/drf/viewsets.py:231
msgid "retrieve a single category (detailed view)"
msgstr "איתור קטגוריה אחת (תצוגה מפורטת)"
-#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258
+#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:286
msgid "Category UUID or slug"
msgstr "קטגוריה UUID או slug"
-#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221
+#: engine/core/docs/drf/viewsets.py:246 engine/core/docs/drf/viewsets.py:247
msgid "create a category"
msgstr "צור קטגוריה"
-#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229
+#: engine/core/docs/drf/viewsets.py:254 engine/core/docs/drf/viewsets.py:255
msgid "delete a category"
msgstr "מחק קטגוריה"
-#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237
+#: engine/core/docs/drf/viewsets.py:262 engine/core/docs/drf/viewsets.py:263
msgid "rewrite an existing category saving non-editables"
msgstr "שכתוב קטגוריה קיימת תוך שמירת פריטים שאינם ניתנים לעריכה"
-#: engine/core/docs/drf/viewsets.py:244 engine/core/docs/drf/viewsets.py:245
+#: engine/core/docs/drf/viewsets.py:270 engine/core/docs/drf/viewsets.py:272
msgid "rewrite some fields of an existing category saving non-editables"
msgstr "שכתוב שדות מסוימים בקטגוריה קיימת תוך שמירת שדות שאינם ניתנים לעריכה"
-#: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704
-#: engine/core/docs/drf/viewsets.py:988
+#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:1046
#: engine/core/graphene/object_types.py:117
-#: engine/core/graphene/object_types.py:207
-#: engine/core/graphene/object_types.py:482
+#: engine/core/graphene/object_types.py:236
+#: engine/core/graphene/object_types.py:537
msgid "SEO Meta snapshot"
msgstr "תמונת מצב SEO Meta"
-#: engine/core/docs/drf/viewsets.py:253
+#: engine/core/docs/drf/viewsets.py:281
msgid "returns a snapshot of the category's SEO meta data"
msgstr "מחזיר תמונת מצב של מטא-נתוני SEO של הקטגוריה"
-#: engine/core/docs/drf/viewsets.py:274
+#: engine/core/docs/drf/viewsets.py:302
msgid "list all orders (simple view)"
msgstr "הצג את כל הקטגוריות (תצוגה פשוטה)"
-#: engine/core/docs/drf/viewsets.py:275
+#: engine/core/docs/drf/viewsets.py:303
msgid "for non-staff users, only their own orders are returned."
msgstr "למשתמשים שאינם אנשי צוות, מוצגות רק ההזמנות שלהם."
-#: engine/core/docs/drf/viewsets.py:281
+#: engine/core/docs/drf/viewsets.py:309
msgid ""
-"Case-insensitive substring search across human_readable_id, "
-"order_products.product.name, and order_products.product.partnumber"
+"Case-insensitive substring search across human_readable_id, order_products."
+"product.name, and order_products.product.partnumber"
msgstr ""
"חיפוש תת-מחרוזת ללא הבחנה בין אותיות גדולות וקטנות ב-human_readable_id, "
"order_products.product.name ו-order_products.product.partnumber"
-#: engine/core/docs/drf/viewsets.py:288
+#: engine/core/docs/drf/viewsets.py:316
msgid "Filter orders with buy_time >= this ISO 8601 datetime"
msgstr "סנן הזמנות עם buy_time >= תאריך ושעה זה ב-ISO 8601"
-#: engine/core/docs/drf/viewsets.py:293
+#: engine/core/docs/drf/viewsets.py:321
msgid "Filter orders with buy_time <= this ISO 8601 datetime"
msgstr "סנן הזמנות עם buy_time <= תאריך ושעה זה ב-ISO 8601"
-#: engine/core/docs/drf/viewsets.py:298
+#: engine/core/docs/drf/viewsets.py:326
msgid "Filter by exact order UUID"
msgstr "סינון לפי UUID של הזמנה מדויק"
-#: engine/core/docs/drf/viewsets.py:303
+#: engine/core/docs/drf/viewsets.py:331
msgid "Filter by exact human-readable order ID"
msgstr "סינון לפי מספר הזמנה מדויק הניתן לקריאה על ידי בני אדם"
-#: engine/core/docs/drf/viewsets.py:308
+#: engine/core/docs/drf/viewsets.py:336
msgid "Filter by user's email (case-insensitive exact match)"
msgstr ""
"סינון לפי כתובת הדוא\"ל של המשתמש (התאמה מדויקת ללא הבחנה בין אותיות רישיות "
"לאותיות קטנות)"
-#: engine/core/docs/drf/viewsets.py:313
+#: engine/core/docs/drf/viewsets.py:341
msgid "Filter by user's UUID"
msgstr "סינון לפי UUID של המשתמש"
-#: engine/core/docs/drf/viewsets.py:318
+#: engine/core/docs/drf/viewsets.py:347
msgid "Filter by order status (case-insensitive substring match)"
msgstr ""
"סינון לפי סטטוס הזמנה (התאמת תת-מחרוזת ללא הבחנה בין אותיות גדולות וקטנות)"
-#: engine/core/docs/drf/viewsets.py:324
+#: engine/core/docs/drf/viewsets.py:354
msgid ""
-"Order by one of: uuid, human_readable_id, user_email, user, status, created,"
-" modified, buy_time, random. Prefix with '-' for descending (e.g. "
-"'-buy_time')."
+"Order by one of: uuid, human_readable_id, user_email, user, status, created, "
+"modified, buy_time, random. Prefix with '-' for descending (e.g. '-"
+"buy_time')."
msgstr ""
"מיין לפי אחד מהפרמטרים הבאים: uuid, human_readable_id, user_email, user, "
"status, created, modified, buy_time, random. הוסף קידומת '-' עבור מיון יורד "
"(לדוגמה, '-buy_time')."
-#: engine/core/docs/drf/viewsets.py:336
+#: engine/core/docs/drf/viewsets.py:366
msgid "retrieve a single order (detailed view)"
msgstr "איתור קטגוריה אחת (תצוגה מפורטת)"
-#: engine/core/docs/drf/viewsets.py:341
+#: engine/core/docs/drf/viewsets.py:371
msgid "Order UUID or human-readable id"
msgstr "הזמן UUID או מזהה קריא לאדם"
-#: engine/core/docs/drf/viewsets.py:351
+#: engine/core/docs/drf/viewsets.py:381
msgid "create an order"
msgstr "צור תכונה"
-#: engine/core/docs/drf/viewsets.py:352
+#: engine/core/docs/drf/viewsets.py:382
msgid "doesn't work for non-staff users."
msgstr "לא עובד עבור משתמשים שאינם עובדים."
-#: engine/core/docs/drf/viewsets.py:359
+#: engine/core/docs/drf/viewsets.py:389
msgid "delete an order"
msgstr "מחיקת תכונה"
-#: engine/core/docs/drf/viewsets.py:366
+#: engine/core/docs/drf/viewsets.py:396
msgid "rewrite an existing order saving non-editables"
msgstr "שכתוב קטגוריה קיימת תוך שמירת פריטים שאינם ניתנים לעריכה"
-#: engine/core/docs/drf/viewsets.py:373
+#: engine/core/docs/drf/viewsets.py:403
msgid "rewrite some fields of an existing order saving non-editables"
msgstr "שכתוב שדות מסוימים בקטגוריה קיימת תוך שמירת שדות שאינם ניתנים לעריכה"
-#: engine/core/docs/drf/viewsets.py:380
+#: engine/core/docs/drf/viewsets.py:410
msgid "purchase an order"
msgstr "מחיר הרכישה בעת ההזמנה"
-#: engine/core/docs/drf/viewsets.py:382
+#: engine/core/docs/drf/viewsets.py:412
msgid ""
"finalizes the order purchase. if `force_balance` is used, the purchase is "
"completed using the user's balance; if `force_payment` is used, a "
"transaction is initiated."
msgstr ""
-"מסיים את רכישת ההזמנה. אם נעשה שימוש ב-`force_balance`, הרכישה תושלם באמצעות"
-" היתרה של המשתמש; אם נעשה שימוש ב-`force_payment`, תתבצע עסקה."
+"מסיים את רכישת ההזמנה. אם נעשה שימוש ב-`force_balance`, הרכישה תושלם באמצעות "
+"היתרה של המשתמש; אם נעשה שימוש ב-`force_payment`, תתבצע עסקה."
-#: engine/core/docs/drf/viewsets.py:397
+#: engine/core/docs/drf/viewsets.py:427
msgid "retrieve current pending order of a user"
msgstr "איתור הזמנה מושהית נוכחית של משתמש"
-#: engine/core/docs/drf/viewsets.py:398
+#: engine/core/docs/drf/viewsets.py:428
msgid "retrieves a current pending order of an authenticated user"
msgstr "מאתר הזמנה ממתנה נוכחית של משתמש מאומת"
-#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334
+#: engine/core/docs/drf/viewsets.py:438 engine/core/graphene/mutations.py:354
msgid "purchase an order without account creation"
msgstr "לרכוש הזמנה ללא יצירת חשבון"
-#: engine/core/docs/drf/viewsets.py:409
+#: engine/core/docs/drf/viewsets.py:439
msgid "finalizes the order purchase for a non-registered user."
msgstr "מסיים את רכישת ההזמנה עבור משתמש לא רשום."
-#: engine/core/docs/drf/viewsets.py:420
+#: engine/core/docs/drf/viewsets.py:450
msgid "add product to order"
msgstr "הוסף מוצר להזמנה"
-#: engine/core/docs/drf/viewsets.py:421
+#: engine/core/docs/drf/viewsets.py:452
msgid ""
"adds a product to an order using the provided `product_uuid` and "
"`attributes`."
msgstr "מוסיף מוצר להזמנה באמצעות `product_uuid` ו-`attributes` שסופקו."
-#: engine/core/docs/drf/viewsets.py:429
+#: engine/core/docs/drf/viewsets.py:461
msgid "add a list of products to order, quantities will not count"
msgstr "הוסף רשימת מוצרים להזמנה, הכמויות לא ייספרו"
-#: engine/core/docs/drf/viewsets.py:430
+#: engine/core/docs/drf/viewsets.py:463
msgid ""
"adds a list of products to an order using the provided `product_uuid` and "
"`attributes`."
msgstr ""
"מוסיף רשימת מוצרים להזמנה באמצעות `product_uuid` ו-`attributes` שסופקו."
-#: engine/core/docs/drf/viewsets.py:438
+#: engine/core/docs/drf/viewsets.py:472
msgid "remove product from order"
msgstr "הסר מוצר מההזמנה"
-#: engine/core/docs/drf/viewsets.py:439
+#: engine/core/docs/drf/viewsets.py:474
msgid ""
"removes a product from an order using the provided `product_uuid` and "
"`attributes`."
msgstr "מסיר מוצר מהזמנה באמצעות `product_uuid` ו-`attributes` שסופקו."
-#: engine/core/docs/drf/viewsets.py:447
+#: engine/core/docs/drf/viewsets.py:483
msgid "remove product from order, quantities will not count"
msgstr "הסר מוצר מההזמנה, הכמויות לא ייספרו"
-#: engine/core/docs/drf/viewsets.py:448
+#: engine/core/docs/drf/viewsets.py:485
msgid ""
"removes a list of products from an order using the provided `product_uuid` "
"and `attributes`"
-msgstr ""
-"מסיר רשימת מוצרים מהזמנה באמצעות `product_uuid` ו-`attributes` שסופקו."
+msgstr "מסיר רשימת מוצרים מהזמנה באמצעות `product_uuid` ו-`attributes` שסופקו."
-#: engine/core/docs/drf/viewsets.py:459
+#: engine/core/docs/drf/viewsets.py:497
msgid "list all wishlists (simple view)"
msgstr "הצג את כל התכונות (תצוגה פשוטה)"
-#: engine/core/docs/drf/viewsets.py:460
+#: engine/core/docs/drf/viewsets.py:498
msgid "for non-staff users, only their own wishlists are returned."
msgstr "למשתמשים שאינם אנשי צוות, מוצגות רק רשימות המשאלות שלהם."
-#: engine/core/docs/drf/viewsets.py:467
+#: engine/core/docs/drf/viewsets.py:508
msgid "retrieve a single wishlist (detailed view)"
msgstr "איתור תכונה בודדת (תצוגה מפורטת)"
-#: engine/core/docs/drf/viewsets.py:474
+#: engine/core/docs/drf/viewsets.py:515
msgid "create an wishlist"
msgstr "צור תכונה"
-#: engine/core/docs/drf/viewsets.py:475
+#: engine/core/docs/drf/viewsets.py:516
msgid "Doesn't work for non-staff users."
msgstr "לא עובד עבור משתמשים שאינם עובדים."
-#: engine/core/docs/drf/viewsets.py:482
+#: engine/core/docs/drf/viewsets.py:523
msgid "delete an wishlist"
msgstr "מחיקת תכונה"
-#: engine/core/docs/drf/viewsets.py:489
+#: engine/core/docs/drf/viewsets.py:530
msgid "rewrite an existing wishlist saving non-editables"
msgstr "שכתוב תכונה קיימת תוך שמירת תכונות שאינן ניתנות לעריכה"
-#: engine/core/docs/drf/viewsets.py:496
+#: engine/core/docs/drf/viewsets.py:537
msgid "rewrite some fields of an existing wishlist saving non-editables"
msgstr "שכתוב שדות מסוימים של תכונה קיימת תוך שמירת שדות שאינם ניתנים לעריכה"
-#: engine/core/docs/drf/viewsets.py:503
+#: engine/core/docs/drf/viewsets.py:544
msgid "retrieve current pending wishlist of a user"
msgstr "איתור רשימת המשאלות הנוכחית של משתמש"
-#: engine/core/docs/drf/viewsets.py:504
+#: engine/core/docs/drf/viewsets.py:545
msgid "retrieves a current pending wishlist of an authenticated user"
msgstr "מציג רשימת משאלות בהמתנה של משתמש מאומת"
-#: engine/core/docs/drf/viewsets.py:514
+#: engine/core/docs/drf/viewsets.py:555
msgid "add product to wishlist"
msgstr "הוסף מוצר להזמנה"
-#: engine/core/docs/drf/viewsets.py:515
+#: engine/core/docs/drf/viewsets.py:557
msgid "adds a product to an wishlist using the provided `product_uuid`"
msgstr "מוסיף מוצר לרשימת המשאלות באמצעות `product_uuid` שסופק."
-#: engine/core/docs/drf/viewsets.py:523
+#: engine/core/docs/drf/viewsets.py:566
msgid "remove product from wishlist"
msgstr "הסר מוצר מרשימת המשאלות"
-#: engine/core/docs/drf/viewsets.py:524
+#: engine/core/docs/drf/viewsets.py:568
msgid "removes a product from an wishlist using the provided `product_uuid`"
msgstr "מסיר מוצר מרשימת המשאלות באמצעות `product_uuid` שסופק."
-#: engine/core/docs/drf/viewsets.py:532
+#: engine/core/docs/drf/viewsets.py:577
msgid "add many products to wishlist"
msgstr "הוסף מוצרים רבים לרשימת המשאלות"
-#: engine/core/docs/drf/viewsets.py:533
+#: engine/core/docs/drf/viewsets.py:579
msgid "adds many products to an wishlist using the provided `product_uuids`"
msgstr "מוסיף מוצרים רבים לרשימת המשאלות באמצעות `product_uuids` שסופק."
-#: engine/core/docs/drf/viewsets.py:541
+#: engine/core/docs/drf/viewsets.py:588
msgid "remove many products from wishlist"
msgstr "הסר מוצר מההזמנה"
-#: engine/core/docs/drf/viewsets.py:542
+#: engine/core/docs/drf/viewsets.py:590
msgid ""
"removes many products from an wishlist using the provided `product_uuids`"
msgstr "מסיר מוצרים רבים מרשימת המשאלות באמצעות `product_uuids` שסופק."
-#: engine/core/docs/drf/viewsets.py:549
+#: engine/core/docs/drf/viewsets.py:598
msgid ""
"Filter by one or more attribute name/value pairs. \n"
"• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n"
-"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n"
-"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n"
+"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, "
+"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, "
+"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n"
+"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), "
+"`true`/`false` for booleans, integers, floats; otherwise treated as "
+"string. \n"
"• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n"
"Examples: \n"
-"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n"
+"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\","
+"\"bluetooth\"]`, \n"
"`b64-description=icontains-aGVhdC1jb2xk`"
msgstr ""
-"סינון לפי זוגות שם/ערך של תכונה אחת או יותר. • **תחביר**: `attr_name=method-value[;attr2=method2-value2]…` • **שיטות** (ברירת המחדל היא `icontains` אם לא צוין): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` • **הקלדת ערכים**: תחילה מתבצע ניסיון JSON (כך שניתן להעביר רשימות/מילונים), `true`/`false` עבור ערכי בוליאניים, מספרים שלמים, מספרים צפים; אחרת מטופל כמחרוזת. • **Base64**: קידומת עם `b64-` כדי לקודד את הערך הגולמי ב-base64 בטוח ל-URL. \n"
-"דוגמאות: `color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, `b64-description=icontains-aGVhdC1jb2xk`"
+"סינון לפי זוגות שם/ערך של תכונה אחת או יותר. • **תחביר**: `attr_name=method-"
+"value[;attr2=method2-value2]…` • **שיטות** (ברירת המחדל היא `icontains` אם "
+"לא צוין): `iexact`, `exact`, `icontains`, `contains`, `isnull`, "
+"`startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, "
+"`lt`, `lte`, `gt`, `gte`, `in` • **הקלדת ערכים**: תחילה מתבצע ניסיון JSON "
+"(כך שניתן להעביר רשימות/מילונים), `true`/`false` עבור ערכי בוליאניים, מספרים "
+"שלמים, מספרים צפים; אחרת מטופל כמחרוזת. • **Base64**: קידומת עם `b64-` כדי "
+"לקודד את הערך הגולמי ב-base64 בטוח ל-URL. \n"
+"דוגמאות: `color=exact-red`, `size=gt-10`, `features=in-[\"wifi\","
+"\"bluetooth\"]`, `b64-description=icontains-aGVhdC1jb2xk`"
-#: engine/core/docs/drf/viewsets.py:568 engine/core/docs/drf/viewsets.py:569
+#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
msgid "list all products (simple view)"
msgstr "הצג את כל המוצרים (תצוגה פשוטה)"
-#: engine/core/docs/drf/viewsets.py:574
+#: engine/core/docs/drf/viewsets.py:623
msgid "(exact) Product UUID"
msgstr "(מדויק) UUID של המוצר"
-#: engine/core/docs/drf/viewsets.py:581
+#: engine/core/docs/drf/viewsets.py:630
msgid ""
-"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n"
+"Comma-separated list of fields to sort by. Prefix with `-` for "
+"descending. \n"
"**Allowed:** uuid, rating, name, slug, created, modified, price, random"
msgstr ""
-"רשימה של שדות למיון, מופרדים בפסיקים. קידומת `-` למיון יורד. **מותר:** uuid,"
-" rating, name, slug, created, modified, price, random"
+"רשימה של שדות למיון, מופרדים בפסיקים. קידומת `-` למיון יורד. **מותר:** uuid, "
+"rating, name, slug, created, modified, price, random"
-#: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599
+#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
msgid "retrieve a single product (detailed view)"
msgstr "איתור מוצר בודד (תצוגה מפורטת)"
-#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634
-#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672
-#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710
+#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683
+#: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725
+#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763
msgid "Product UUID or slug"
msgstr "UUID או Slug של המוצר"
-#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
+#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
#: engine/core/graphene/dashboard_mutations/product.py:80
#: engine/core/graphene/dashboard_mutations/product.py:118
#: engine/core/graphene/dashboard_mutations/product.py:166
msgid "create a product"
msgstr "צור מוצר"
-#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629
+#: engine/core/docs/drf/viewsets.py:677 engine/core/docs/drf/viewsets.py:678
msgid "rewrite an existing product, preserving non-editable fields"
msgstr "שכתוב מוצר קיים, תוך שמירה על שדות שאינם ניתנים לעריכה"
-#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
+#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:700
msgid ""
"update some fields of an existing product, preserving non-editable fields"
msgstr "עדכן שדות מסוימים של מוצר קיים, תוך שמירה על שדות שאינם ניתנים לעריכה"
-#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
+#: engine/core/docs/drf/viewsets.py:719 engine/core/docs/drf/viewsets.py:720
msgid "delete a product"
msgstr "מחק מוצר"
-#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686
+#: engine/core/docs/drf/viewsets.py:738 engine/core/docs/drf/viewsets.py:739
msgid "lists all permitted feedbacks for a product"
msgstr "מפרט את כל המשובים המותרים עבור מוצר"
-#: engine/core/docs/drf/viewsets.py:705
+#: engine/core/docs/drf/viewsets.py:758
msgid "returns a snapshot of the product's SEO meta data"
msgstr "מחזיר תמונת מצב של מטא-נתוני SEO של המוצר"
-#: engine/core/docs/drf/viewsets.py:726
+#: engine/core/docs/drf/viewsets.py:779
msgid "list all addresses"
msgstr "רשימת כל הכתובות"
-#: engine/core/docs/drf/viewsets.py:736
+#: engine/core/docs/drf/viewsets.py:789
msgid "retrieve a single address"
msgstr "איתור כתובת אחת"
-#: engine/core/docs/drf/viewsets.py:746
+#: engine/core/docs/drf/viewsets.py:799
msgid "create a new address"
msgstr "צור כתובת חדשה"
-#: engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:810
msgid "delete an address"
msgstr "מחק כתובת"
-#: engine/core/docs/drf/viewsets.py:767
+#: engine/core/docs/drf/viewsets.py:820
msgid "update an entire address"
msgstr "עדכון כתובת שלמה"
-#: engine/core/docs/drf/viewsets.py:778
+#: engine/core/docs/drf/viewsets.py:831
msgid "partially update an address"
msgstr "עדכון חלקי של כתובת"
-#: engine/core/docs/drf/viewsets.py:789
+#: engine/core/docs/drf/viewsets.py:842
msgid "autocomplete address suggestions"
msgstr "השלמת כתובת אוטומטית"
-#: engine/core/docs/drf/viewsets.py:794
+#: engine/core/docs/drf/viewsets.py:848
msgid "raw data query string, please append with data from geo-IP endpoint"
msgstr "מחרוזת שאילתת נתונים גולמיים, אנא הוסף נתונים מנקודת הקצה של geo-IP"
-#: engine/core/docs/drf/viewsets.py:800
+#: engine/core/docs/drf/viewsets.py:855
msgid "limit the results amount, 1 < limit < 10, default: 5"
msgstr "מגביל את כמות התוצאות, 1 < limit < 10, ברירת מחדל: 5"
-#: engine/core/docs/drf/viewsets.py:816
+#: engine/core/docs/drf/viewsets.py:871
msgid "list all feedbacks (simple view)"
msgstr "הצג את כל המשובים (תצוגה פשוטה)"
-#: engine/core/docs/drf/viewsets.py:823
+#: engine/core/docs/drf/viewsets.py:881
msgid "retrieve a single feedback (detailed view)"
msgstr "איתור משוב בודד (תצוגה מפורטת)"
-#: engine/core/docs/drf/viewsets.py:830
+#: engine/core/docs/drf/viewsets.py:888
msgid "create a feedback"
msgstr "ליצור משוב"
-#: engine/core/docs/drf/viewsets.py:837
+#: engine/core/docs/drf/viewsets.py:895
msgid "delete a feedback"
msgstr "מחק משוב"
-#: engine/core/docs/drf/viewsets.py:844
+#: engine/core/docs/drf/viewsets.py:902
msgid "rewrite an existing feedback saving non-editables"
msgstr "לשכתב משוב קיים תוך שמירת פריטים שאינם ניתנים לעריכה"
-#: engine/core/docs/drf/viewsets.py:851
+#: engine/core/docs/drf/viewsets.py:909
msgid "rewrite some fields of an existing feedback saving non-editables"
msgstr "לשכתב כמה שדות של משוב קיים תוך שמירת שדות שאינם ניתנים לעריכה"
-#: engine/core/docs/drf/viewsets.py:861
+#: engine/core/docs/drf/viewsets.py:919
msgid "list all order–product relations (simple view)"
msgstr "רשימת כל קשרי ההזמנות-מוצרים (תצוגה פשוטה)"
-#: engine/core/docs/drf/viewsets.py:871
+#: engine/core/docs/drf/viewsets.py:929
msgid "retrieve a single order–product relation (detailed view)"
msgstr "איתור קשר יחיד בין הזמנה למוצר (תצוגה מפורטת)"
-#: engine/core/docs/drf/viewsets.py:881
+#: engine/core/docs/drf/viewsets.py:939
msgid "create a new order–product relation"
msgstr "יצירת קשר חדש בין הזמנה למוצר"
-#: engine/core/docs/drf/viewsets.py:891
+#: engine/core/docs/drf/viewsets.py:949
msgid "replace an existing order–product relation"
msgstr "החלפת קשר בין הזמנה למוצר קיים"
-#: engine/core/docs/drf/viewsets.py:901
+#: engine/core/docs/drf/viewsets.py:959
msgid "partially update an existing order–product relation"
msgstr "עדכון חלקי של קשר בין הזמנה למוצר קיים"
-#: engine/core/docs/drf/viewsets.py:911
+#: engine/core/docs/drf/viewsets.py:969
msgid "delete an order–product relation"
msgstr "מחיקת קשר בין הזמנה למוצר"
-#: engine/core/docs/drf/viewsets.py:921
+#: engine/core/docs/drf/viewsets.py:979
msgid "add or remove feedback on an order–product relation"
msgstr "הוספה או הסרה של משוב על קשר בין הזמנה למוצר"
-#: engine/core/docs/drf/viewsets.py:938
+#: engine/core/docs/drf/viewsets.py:996
msgid "list all brands (simple view)"
msgstr "הצג את כל המותגים (תצוגה פשוטה)"
-#: engine/core/docs/drf/viewsets.py:945
+#: engine/core/docs/drf/viewsets.py:1003
msgid "retrieve a single brand (detailed view)"
msgstr "איתור מותג בודד (תצוגה מפורטת)"
-#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993
+#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051
msgid "Brand UUID or slug"
msgstr "UUID או סלאג של המותג"
-#: engine/core/docs/drf/viewsets.py:960
+#: engine/core/docs/drf/viewsets.py:1018
msgid "create a brand"
msgstr "יצירת מותג"
-#: engine/core/docs/drf/viewsets.py:967
+#: engine/core/docs/drf/viewsets.py:1025
msgid "delete a brand"
msgstr "מחק מותג"
-#: engine/core/docs/drf/viewsets.py:974
+#: engine/core/docs/drf/viewsets.py:1032
msgid "rewrite an existing brand saving non-editables"
msgstr "שכתוב מותג קיים תוך שמירה על אלמנטים שאינם ניתנים לעריכה"
-#: engine/core/docs/drf/viewsets.py:981
+#: engine/core/docs/drf/viewsets.py:1039
msgid "rewrite some fields of an existing brand saving non-editables"
msgstr "שכתוב שדות מסוימים של מותג קיים תוך שמירה על שדות שאינם ניתנים לעריכה"
-#: engine/core/docs/drf/viewsets.py:1006
+#: engine/core/docs/drf/viewsets.py:1064
msgid "list all vendors (simple view)"
msgstr "הצג את כל הספקים (תצוגה פשוטה)"
-#: engine/core/docs/drf/viewsets.py:1013
+#: engine/core/docs/drf/viewsets.py:1074
msgid "retrieve a single vendor (detailed view)"
msgstr "איתור ספק בודד (תצוגה מפורטת)"
-#: engine/core/docs/drf/viewsets.py:1020
+#: engine/core/docs/drf/viewsets.py:1081
msgid "create a vendor"
msgstr "צור ספק"
-#: engine/core/docs/drf/viewsets.py:1027
+#: engine/core/docs/drf/viewsets.py:1088
msgid "delete a vendor"
msgstr "מחק את הספק"
-#: engine/core/docs/drf/viewsets.py:1034
+#: engine/core/docs/drf/viewsets.py:1095
msgid "rewrite an existing vendor saving non-editables"
msgstr "שכתוב ספק קיים תוך שמירת פריטים שאינם ניתנים לעריכה"
-#: engine/core/docs/drf/viewsets.py:1041
+#: engine/core/docs/drf/viewsets.py:1102
msgid "rewrite some fields of an existing vendor saving non-editables"
msgstr "שכתוב שדות מסוימים של ספק קיים תוך שמירת שדות שאינם ניתנים לעריכה"
-#: engine/core/docs/drf/viewsets.py:1051
+#: engine/core/docs/drf/viewsets.py:1112
msgid "list all product images (simple view)"
msgstr "הצג את כל תמונות המוצר (תצוגה פשוטה)"
-#: engine/core/docs/drf/viewsets.py:1058
+#: engine/core/docs/drf/viewsets.py:1122
msgid "retrieve a single product image (detailed view)"
msgstr "איתור תמונה של מוצר בודד (תצוגה מפורטת)"
-#: engine/core/docs/drf/viewsets.py:1065
+#: engine/core/docs/drf/viewsets.py:1129
msgid "create a product image"
msgstr "צור תמונה של המוצר"
-#: engine/core/docs/drf/viewsets.py:1072
+#: engine/core/docs/drf/viewsets.py:1139
msgid "delete a product image"
msgstr "מחיקת תמונת מוצר"
-#: engine/core/docs/drf/viewsets.py:1079
+#: engine/core/docs/drf/viewsets.py:1146
msgid "rewrite an existing product image saving non-editables"
msgstr "שכתוב תמונה קיימת של מוצר תוך שמירת אלמנטים שאינם ניתנים לעריכה"
-#: engine/core/docs/drf/viewsets.py:1086
+#: engine/core/docs/drf/viewsets.py:1154
msgid "rewrite some fields of an existing product image saving non-editables"
msgstr ""
"שכתוב שדות מסוימים בתמונת מוצר קיימת תוך שמירת שדות שאינם ניתנים לעריכה"
-#: engine/core/docs/drf/viewsets.py:1096
+#: engine/core/docs/drf/viewsets.py:1165
msgid "list all promo codes (simple view)"
msgstr "הצג את כל קודי המבצע (תצוגה פשוטה)"
-#: engine/core/docs/drf/viewsets.py:1103
+#: engine/core/docs/drf/viewsets.py:1175
msgid "retrieve a single promo code (detailed view)"
msgstr "איתור קוד קידום מכירות בודד (תצוגה מפורטת)"
-#: engine/core/docs/drf/viewsets.py:1110
+#: engine/core/docs/drf/viewsets.py:1182
msgid "create a promo code"
msgstr "צור קוד קידום מכירות"
-#: engine/core/docs/drf/viewsets.py:1117
+#: engine/core/docs/drf/viewsets.py:1189
msgid "delete a promo code"
msgstr "מחק את קוד המבצע"
-#: engine/core/docs/drf/viewsets.py:1124
+#: engine/core/docs/drf/viewsets.py:1196
msgid "rewrite an existing promo code saving non-editables"
msgstr "שכתוב קוד קידום מכירות קיים תוך שמירה על תוכן שאינו ניתן לעריכה"
-#: engine/core/docs/drf/viewsets.py:1131
+#: engine/core/docs/drf/viewsets.py:1203
msgid "rewrite some fields of an existing promo code saving non-editables"
msgstr ""
"שכתוב שדות מסוימים בקוד קידום מכירות קיים תוך שמירה על שדות שאינם ניתנים "
"לעריכה"
-#: engine/core/docs/drf/viewsets.py:1141
+#: engine/core/docs/drf/viewsets.py:1213
msgid "list all promotions (simple view)"
msgstr "הצג את כל המבצעים (תצוגה פשוטה)"
-#: engine/core/docs/drf/viewsets.py:1148
+#: engine/core/docs/drf/viewsets.py:1223
msgid "retrieve a single promotion (detailed view)"
msgstr "איתור מבצע בודד (תצוגה מפורטת)"
-#: engine/core/docs/drf/viewsets.py:1155
+#: engine/core/docs/drf/viewsets.py:1230
msgid "create a promotion"
msgstr "צור מבצע"
-#: engine/core/docs/drf/viewsets.py:1162
+#: engine/core/docs/drf/viewsets.py:1237
msgid "delete a promotion"
msgstr "מחק מבצע"
-#: engine/core/docs/drf/viewsets.py:1169
+#: engine/core/docs/drf/viewsets.py:1244
msgid "rewrite an existing promotion saving non-editables"
msgstr "שכתוב מבצע קיים תוך שמירת פריטים שאינם ניתנים לעריכה"
-#: engine/core/docs/drf/viewsets.py:1176
+#: engine/core/docs/drf/viewsets.py:1251
msgid "rewrite some fields of an existing promotion saving non-editables"
msgstr "שכתוב שדות מסוימים של מבצע קיים תוך שמירת שדות שאינם ניתנים לעריכה"
-#: engine/core/docs/drf/viewsets.py:1186
+#: engine/core/docs/drf/viewsets.py:1261
msgid "list all stocks (simple view)"
msgstr "הצג את כל המניות (תצוגה פשוטה)"
-#: engine/core/docs/drf/viewsets.py:1193
+#: engine/core/docs/drf/viewsets.py:1268
msgid "retrieve a single stock (detailed view)"
msgstr "איתור מניה בודדת (תצוגה מפורטת)"
-#: engine/core/docs/drf/viewsets.py:1200
+#: engine/core/docs/drf/viewsets.py:1275
msgid "create a stock record"
msgstr "צור רישום מלאי"
-#: engine/core/docs/drf/viewsets.py:1207
+#: engine/core/docs/drf/viewsets.py:1282
msgid "delete a stock record"
msgstr "מחיקת רשומת מלאי"
-#: engine/core/docs/drf/viewsets.py:1214
+#: engine/core/docs/drf/viewsets.py:1289
msgid "rewrite an existing stock record saving non-editables"
msgstr "שכתוב רשומת מלאי קיימת תוך שמירת פריטים שאינם ניתנים לעריכה"
-#: engine/core/docs/drf/viewsets.py:1221
+#: engine/core/docs/drf/viewsets.py:1297
msgid "rewrite some fields of an existing stock record saving non-editables"
msgstr ""
"שכתוב שדות מסוימים ברשומת מלאי קיימת תוך שמירת שדות שאינם ניתנים לעריכה"
-#: engine/core/docs/drf/viewsets.py:1231
+#: engine/core/docs/drf/viewsets.py:1308
msgid "list all product tags (simple view)"
msgstr "הצג את כל תגי המוצר (תצוגה פשוטה)"
-#: engine/core/docs/drf/viewsets.py:1238
+#: engine/core/docs/drf/viewsets.py:1318
msgid "retrieve a single product tag (detailed view)"
msgstr "איתור תגית מוצר בודדת (תצוגה מפורטת)"
-#: engine/core/docs/drf/viewsets.py:1245
+#: engine/core/docs/drf/viewsets.py:1325
msgid "create a product tag"
msgstr "צור תגית מוצר"
-#: engine/core/docs/drf/viewsets.py:1252
+#: engine/core/docs/drf/viewsets.py:1335
msgid "delete a product tag"
msgstr "מחק תווית מוצר"
-#: engine/core/docs/drf/viewsets.py:1259
+#: engine/core/docs/drf/viewsets.py:1342
msgid "rewrite an existing product tag saving non-editables"
msgstr "שכתוב תגית מוצר קיימת תוך שמירת תוכן שאינו ניתן לעריכה"
-#: engine/core/docs/drf/viewsets.py:1266
+#: engine/core/docs/drf/viewsets.py:1350
msgid "rewrite some fields of an existing product tag saving non-editables"
-msgstr ""
-"שכתוב שדות מסוימים בתגית מוצר קיימת תוך שמירת שדות שאינם ניתנים לעריכה"
+msgstr "שכתוב שדות מסוימים בתגית מוצר קיימת תוך שמירת שדות שאינם ניתנים לעריכה"
-#: engine/core/elasticsearch/__init__.py:122
-#: engine/core/elasticsearch/__init__.py:570
+#: engine/core/elasticsearch/__init__.py:127
+#: engine/core/elasticsearch/__init__.py:627
msgid "no search term provided."
msgstr "לא צויין מונח חיפוש."
-#: engine/core/filters.py:69 engine/core/filters.py:426
-#: engine/core/filters.py:553
+#: engine/core/filters.py:78 engine/core/filters.py:484
+#: engine/core/filters.py:625
msgid "Search"
msgstr "חיפוש"
-#: engine/core/filters.py:70 engine/core/filters.py:583
-#: engine/core/filters.py:612
+#: engine/core/filters.py:79 engine/core/filters.py:662
+#: engine/core/filters.py:691
msgid "UUID"
msgstr "UUID"
-#: engine/core/filters.py:71 engine/core/filters.py:428
-#: engine/core/filters.py:555
+#: engine/core/filters.py:80 engine/core/filters.py:487
+#: engine/core/filters.py:627
msgid "Name"
msgstr "שם"
-#: engine/core/filters.py:72 engine/core/filters.py:557
+#: engine/core/filters.py:82 engine/core/filters.py:630
msgid "Categories"
msgstr "קטגוריות"
-#: engine/core/filters.py:74
+#: engine/core/filters.py:86
msgid "Categories Slugs"
msgstr "קטגוריות שבלולים"
-#: engine/core/filters.py:75 engine/core/filters.py:436
+#: engine/core/filters.py:88 engine/core/filters.py:495
msgid "Tags"
msgstr "תגיות"
-#: engine/core/filters.py:76
+#: engine/core/filters.py:90
msgid "Min Price"
msgstr "מחיר מינימום"
-#: engine/core/filters.py:77
+#: engine/core/filters.py:93
msgid "Max Price"
msgstr "מחיר מקסימלי"
-#: engine/core/filters.py:78
+#: engine/core/filters.py:95
msgid "Is Active"
msgstr "פעיל"
-#: engine/core/filters.py:79
+#: engine/core/filters.py:96
msgid "Brand"
msgstr "מותג"
-#: engine/core/filters.py:80
+#: engine/core/filters.py:97
msgid "Attributes"
msgstr "תכונות"
-#: engine/core/filters.py:81
+#: engine/core/filters.py:99
msgid "Quantity"
msgstr "כמות"
-#: engine/core/filters.py:82 engine/core/filters.py:430
-#: engine/core/filters.py:556 engine/core/models.py:321
-#: engine/core/models.py:489 engine/core/models.py:644
+#: engine/core/filters.py:101 engine/core/filters.py:489
+#: engine/core/filters.py:628 engine/core/models.py:327
+#: engine/core/models.py:508 engine/core/models.py:665
msgid "Slug"
msgstr "שבלול"
-#: engine/core/filters.py:83
+#: engine/core/filters.py:102
msgid "Is Digital"
msgstr "האם דיגיטלי"
-#: engine/core/filters.py:84
+#: engine/core/filters.py:104
msgid "Include sub-categories"
msgstr "כלול תת-קטגוריות"
-#: engine/core/filters.py:87
+#: engine/core/filters.py:108
msgid "Include personal ordered"
msgstr "כלול מוצרים שהוזמנו באופן אישי"
-#: engine/core/filters.py:89 engine/core/models.py:648
+#: engine/core/filters.py:110 engine/core/models.py:669
msgid "SKU"
msgstr "מספר קטלוגי"
-#: engine/core/filters.py:184
+#: engine/core/filters.py:212
msgid "there must be a category_uuid to use include_subcategories flag"
msgstr "חייב להיות category_uuid כדי להשתמש בדגל include_subcategories"
-#: engine/core/filters.py:353
+#: engine/core/filters.py:398
msgid "Search (ID, product name or part number)"
msgstr "חיפוש (מזהה, שם מוצר או מספר חלק)"
-#: engine/core/filters.py:356
+#: engine/core/filters.py:402
msgid "Bought after (inclusive)"
msgstr "נקנה לאחר (כולל)"
-#: engine/core/filters.py:357
+#: engine/core/filters.py:405
msgid "Bought before (inclusive)"
msgstr "נקנה לפני כן (כולל)"
-#: engine/core/filters.py:360 engine/core/filters.py:407
-#: engine/core/filters.py:614
+#: engine/core/filters.py:410 engine/core/filters.py:461
+#: engine/core/filters.py:696
msgid "User email"
msgstr "דוא\"ל המשתמש"
-#: engine/core/filters.py:361 engine/core/filters.py:408
-#: engine/core/filters.py:592 engine/core/filters.py:613
+#: engine/core/filters.py:413 engine/core/filters.py:464
+#: engine/core/filters.py:671 engine/core/filters.py:693
msgid "User UUID"
msgstr "UUID של המשתמש"
-#: engine/core/filters.py:362
+#: engine/core/filters.py:415
msgid "Status"
msgstr "סטטוס"
-#: engine/core/filters.py:366
+#: engine/core/filters.py:419
msgid "Human Readable ID"
msgstr "מזהה קריא על ידי בני אדם"
-#: engine/core/filters.py:429
+#: engine/core/filters.py:488
msgid "Parent"
msgstr "הורה"
-#: engine/core/filters.py:433
+#: engine/core/filters.py:492
msgid "Whole category(has at least 1 product or not)"
msgstr "קטגוריה שלמה (יש לפחות מוצר אחד או לא)"
-#: engine/core/filters.py:437
+#: engine/core/filters.py:496
msgid "Level"
msgstr "רמה"
-#: engine/core/filters.py:587
+#: engine/core/filters.py:666
msgid "Product UUID"
msgstr "UUID של המוצר"
-#: engine/core/graphene/mutations.py:40
+#: engine/core/graphene/mutations.py:41
msgid "key to look for in or set into the cache"
msgstr "מפתח לחיפוש או להגדרה במטמון"
-#: engine/core/graphene/mutations.py:41
+#: engine/core/graphene/mutations.py:43
msgid "data to store in cache"
msgstr "נתונים לאחסון במטמון"
-#: engine/core/graphene/mutations.py:44
+#: engine/core/graphene/mutations.py:46
msgid "timeout in seconds to set the data for into the cache"
msgstr "פסק זמן בשניות להגדרת הנתונים במטמון"
-#: engine/core/graphene/mutations.py:47
+#: engine/core/graphene/mutations.py:49
msgid "cached data"
msgstr "נתונים במטמון"
-#: engine/core/graphene/mutations.py:62
+#: engine/core/graphene/mutations.py:64
msgid "camelized JSON data from the requested URL"
msgstr "נתוני JSON שעברו קמלאיזציה מה-URL המבוקש"
-#: engine/core/graphene/mutations.py:67 engine/core/views.py:257
+#: engine/core/graphene/mutations.py:69 engine/core/views.py:249
msgid "only URLs starting with http(s):// are allowed"
msgstr "רק כתובות URL המתחילות ב-http(s):// מותרות"
-#: engine/core/graphene/mutations.py:83
+#: engine/core/graphene/mutations.py:87
msgid "add a product to the order"
msgstr "הוסף מוצר להזמנה"
-#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131
-#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287
+#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139
+#: engine/core/graphene/mutations.py:255 engine/core/graphene/mutations.py:307
#, python-brace-format
msgid "order {order_uuid} not found"
msgstr "ההזמנה {order_uuid} לא נמצאה!"
-#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159
+#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167
msgid "remove a product from the order"
msgstr "הסר מוצר מההזמנה"
-#: engine/core/graphene/mutations.py:137
+#: engine/core/graphene/mutations.py:145
msgid "remove all products from the order"
msgstr "הסר את כל המוצרים מההזמנה"
-#: engine/core/graphene/mutations.py:182
+#: engine/core/graphene/mutations.py:190
msgid "buy an order"
msgstr "קנה הזמנה"
-#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265
+#: engine/core/graphene/mutations.py:221 engine/core/graphene/mutations.py:283
msgid "please provide either order_uuid or order_hr_id - mutually exclusive"
msgstr "אנא ספק את order_uuid או order_hr_id - אחד מהם בלבד!"
-#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501
-#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712
+#: engine/core/graphene/mutations.py:250 engine/core/graphene/mutations.py:525
+#: engine/core/graphene/mutations.py:574 engine/core/viewsets.py:753
msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr "סוג שגוי הגיע משיטת order.buy(): {type(instance)!s}"
-#: engine/core/graphene/mutations.py:245
+#: engine/core/graphene/mutations.py:261
msgid "perform an action on a list of products in the order"
msgstr "בצע פעולה ברשימת המוצרים בהזמנה"
-#: engine/core/graphene/mutations.py:250
+#: engine/core/graphene/mutations.py:266
msgid "remove/add"
msgstr "הסר/הוסף"
-#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323
+#: engine/core/graphene/mutations.py:302 engine/core/graphene/mutations.py:343
msgid "action must be either add or remove"
msgstr "הפעולה חייבת להיות \"הוספה\" או \"הסרה\"!"
-#: engine/core/graphene/mutations.py:293
+#: engine/core/graphene/mutations.py:313
msgid "perform an action on a list of products in the wishlist"
msgstr "בצע פעולה ברשימת המוצרים ברשימת המשאלות"
-#: engine/core/graphene/mutations.py:311
+#: engine/core/graphene/mutations.py:331
msgid "please provide wishlist_uuid value"
msgstr "אנא ספק את הערך `wishlist_uuid`."
-#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404
-#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460
-#: engine/core/graphene/mutations.py:504
+#: engine/core/graphene/mutations.py:348 engine/core/graphene/mutations.py:424
+#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480
+#: engine/core/graphene/mutations.py:530
#, python-brace-format
msgid "wishlist {wishlist_uuid} not found"
msgstr "רשימת המשאלות {wishlist_uuid} לא נמצאה!"
-#: engine/core/graphene/mutations.py:382
+#: engine/core/graphene/mutations.py:402
msgid "add a product to the wishlist"
msgstr "הוסף מוצר להזמנה"
-#: engine/core/graphene/mutations.py:410
+#: engine/core/graphene/mutations.py:430
msgid "remove a product from the wishlist"
msgstr "הסר מוצר מההזמנה"
-#: engine/core/graphene/mutations.py:438
+#: engine/core/graphene/mutations.py:458
msgid "remove all products from the wishlist"
msgstr "הסר מוצר מההזמנה"
-#: engine/core/graphene/mutations.py:466
+#: engine/core/graphene/mutations.py:486
msgid "buy all products from the wishlist"
msgstr "הסר מוצר מההזמנה"
-#: engine/core/graphene/mutations.py:510
+#: engine/core/graphene/mutations.py:536
msgid "buy a product"
msgstr "קנה הזמנה"
-#: engine/core/graphene/mutations.py:516
+#: engine/core/graphene/mutations.py:543
msgid ""
-"please send the attributes as the string formatted like "
-"attr1=value1,attr2=value2"
+"please send the attributes as the string formatted like attr1=value1,"
+"attr2=value2"
msgstr "אנא שלחו את התכונות כמחרוזת מעוצבת כך: attr1=value1,attr2=value2"
-#: engine/core/graphene/mutations.py:549
+#: engine/core/graphene/mutations.py:581
msgid "add or delete a feedback for orderproduct"
msgstr "הוספה או מחיקה של משוב עבור המוצר שהוזמן"
-#: engine/core/graphene/mutations.py:573
+#: engine/core/graphene/mutations.py:607
msgid "action must be either `add` or `remove`"
msgstr "הפעולה חייבת להיות `add` או `remove`!"
-#: engine/core/graphene/mutations.py:576
+#: engine/core/graphene/mutations.py:610
#, python-brace-format
msgid "order product {order_product_uuid} not found"
msgstr "המוצר {order_product_uuid} לא נמצא!"
-#: engine/core/graphene/mutations.py:582
+#: engine/core/graphene/mutations.py:617
msgid "original address string provided by the user"
msgstr "מחרוזת הכתובת המקורית שסופקה על ידי המשתמש"
-#: engine/core/graphene/mutations.py:618 engine/core/models.py:955
-#: engine/core/models.py:968 engine/core/models.py:1383
-#: engine/core/models.py:1412 engine/core/models.py:1437
-#: engine/core/viewsets.py:715
+#: engine/core/graphene/mutations.py:654 engine/core/models.py:978
+#: engine/core/models.py:991 engine/core/models.py:1435
+#: engine/core/models.py:1466 engine/core/models.py:1497
+#: engine/core/viewsets.py:760
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr "{name} אינו קיים: {uuid}!"
-#: engine/core/graphene/mutations.py:632
+#: engine/core/graphene/mutations.py:668
msgid "limit must be between 1 and 10"
msgstr "הגבול חייב להיות בין 1 ל-10"
-#: engine/core/graphene/mutations.py:681
+#: engine/core/graphene/mutations.py:717
msgid "elasticsearch - works like a charm"
msgstr "ElasticSearch - עובד כמו קסם"
#: engine/core/graphene/object_types.py:82
-#: engine/core/graphene/object_types.py:370
-#: engine/core/graphene/object_types.py:417 engine/core/models.py:772
-#: engine/core/models.py:1250 engine/core/models.py:1897
+#: engine/core/graphene/object_types.py:417
+#: engine/core/graphene/object_types.py:468 engine/core/models.py:795
+#: engine/core/models.py:1289 engine/core/models.py:2021
msgid "attributes"
msgstr "תכונות"
@@ -1209,141 +1217,140 @@ msgid "groups of attributes"
msgstr "קבוצות תכונות"
#: engine/core/graphene/object_types.py:116
-#: engine/core/graphene/object_types.py:193
-#: engine/core/graphene/object_types.py:223 engine/core/models.py:432
+#: engine/core/graphene/object_types.py:214
+#: engine/core/graphene/object_types.py:252 engine/core/models.py:451
msgid "categories"
msgstr "קטגוריות"
-#: engine/core/graphene/object_types.py:124 engine/core/models.py:503
+#: engine/core/graphene/object_types.py:132 engine/core/models.py:522
msgid "brands"
msgstr "מותגים"
-#: engine/core/graphene/object_types.py:195
+#: engine/core/graphene/object_types.py:216
msgid "category image url"
msgstr "קטגוריות"
-#: engine/core/graphene/object_types.py:196
-#: engine/core/graphene/object_types.py:317 engine/core/models.py:283
+#: engine/core/graphene/object_types.py:217
+#: engine/core/graphene/object_types.py:362 engine/core/models.py:289
msgid "markup percentage"
msgstr "אחוז הסימון"
-#: engine/core/graphene/object_types.py:199
+#: engine/core/graphene/object_types.py:221
msgid "which attributes and values can be used for filtering this category."
msgstr "אילו תכונות וערכים ניתן להשתמש בהם לסינון קטגוריה זו."
-#: engine/core/graphene/object_types.py:203
-msgid ""
-"minimum and maximum prices for products in this category, if available."
+#: engine/core/graphene/object_types.py:227
+msgid "minimum and maximum prices for products in this category, if available."
msgstr "מחירים מינימליים ומקסימליים עבור מוצרים בקטגוריה זו, אם זמינים."
-#: engine/core/graphene/object_types.py:205
+#: engine/core/graphene/object_types.py:231
msgid "tags for this category"
msgstr "תגיות עבור קטגוריה זו"
-#: engine/core/graphene/object_types.py:206
+#: engine/core/graphene/object_types.py:234
msgid "products in this category"
msgstr "מוצרים בקטגוריה זו"
-#: engine/core/graphene/object_types.py:324 engine/core/models.py:188
+#: engine/core/graphene/object_types.py:369 engine/core/models.py:194
msgid "vendors"
msgstr "ספקים"
-#: engine/core/graphene/object_types.py:328
+#: engine/core/graphene/object_types.py:373
msgid "Latitude (Y coordinate)"
msgstr "קו רוחב (קואורדינטת Y)"
-#: engine/core/graphene/object_types.py:329
+#: engine/core/graphene/object_types.py:374
msgid "Longitude (X coordinate)"
msgstr "אורך (קואורדינטת X)"
-#: engine/core/graphene/object_types.py:358
+#: engine/core/graphene/object_types.py:403
msgid "comment"
msgstr "איך"
-#: engine/core/graphene/object_types.py:359
-#: engine/core/graphene/object_types.py:483
+#: engine/core/graphene/object_types.py:405
+#: engine/core/graphene/object_types.py:539
msgid "rating value from 1 to 10, inclusive, or 0 if not set."
msgstr "ערך דירוג בין 1 ל-10, כולל, או 0 אם לא הוגדר."
-#: engine/core/graphene/object_types.py:366
+#: engine/core/graphene/object_types.py:413
msgid "represents feedback from a user."
msgstr "מייצג משוב ממשתמש."
-#: engine/core/graphene/object_types.py:371
-#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244
+#: engine/core/graphene/object_types.py:418
+#: engine/core/graphene/object_types.py:469 engine/core/models.py:1283
msgid "notifications"
msgstr "הודעות"
-#: engine/core/graphene/object_types.py:372
+#: engine/core/graphene/object_types.py:420
msgid "download url for this order product if applicable"
msgstr "כתובת URL להורדת המוצר שהוזמן, אם רלוונטי"
-#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736
+#: engine/core/graphene/object_types.py:422 engine/core/models.py:1848
msgid "feedback"
msgstr "משוב"
-#: engine/core/graphene/object_types.py:407
+#: engine/core/graphene/object_types.py:456
msgid "a list of order products in this order"
msgstr "רשימת המוצרים בהזמנה זו"
-#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214
+#: engine/core/graphene/object_types.py:458 engine/core/models.py:1253
msgid "billing address"
msgstr "כתובת לחיוב"
-#: engine/core/graphene/object_types.py:412
+#: engine/core/graphene/object_types.py:462
msgid ""
"shipping address for this order, leave blank if same as billing address or "
"if not applicable"
msgstr ""
"כתובת משלוח עבור הזמנה זו, השאר ריק אם זהה לכתובת החיוב או אם לא רלוונטי"
-#: engine/core/graphene/object_types.py:414
+#: engine/core/graphene/object_types.py:465
msgid "total price of this order"
msgstr "המחיר הכולל של הזמנה זו"
-#: engine/core/graphene/object_types.py:415
+#: engine/core/graphene/object_types.py:466
msgid "total quantity of products in order"
msgstr "כמות המוצרים הכוללת בהזמנה"
-#: engine/core/graphene/object_types.py:416
+#: engine/core/graphene/object_types.py:467
msgid "are all products in the order digital"
msgstr "האם כל המוצרים בהזמנה הם דיגיטליים?"
-#: engine/core/graphene/object_types.py:419
+#: engine/core/graphene/object_types.py:471
msgid "transactions for this order"
msgstr "עסקאות עבור הזמנה זו"
-#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278
+#: engine/core/graphene/object_types.py:491 engine/core/models.py:1317
msgid "orders"
msgstr "הזמנות"
-#: engine/core/graphene/object_types.py:459
+#: engine/core/graphene/object_types.py:512
msgid "image url"
msgstr "כתובת URL של התמונה"
-#: engine/core/graphene/object_types.py:466
+#: engine/core/graphene/object_types.py:519
msgid "product's images"
msgstr "תמונות המוצר"
-#: engine/core/graphene/object_types.py:473 engine/core/models.py:431
-#: engine/core/models.py:586
+#: engine/core/graphene/object_types.py:526 engine/core/models.py:450
+#: engine/core/models.py:607
msgid "category"
msgstr "קטגוריה"
-#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737
+#: engine/core/graphene/object_types.py:528 engine/core/models.py:1849
msgid "feedbacks"
msgstr "משובים"
-#: engine/core/graphene/object_types.py:476 engine/core/models.py:502
-#: engine/core/models.py:595
+#: engine/core/graphene/object_types.py:529 engine/core/models.py:521
+#: engine/core/models.py:616
msgid "brand"
msgstr "מותג"
-#: engine/core/graphene/object_types.py:477 engine/core/models.py:106
+#: engine/core/graphene/object_types.py:531 engine/core/models.py:106
msgid "attribute groups"
msgstr "קבוצות תכונות"
-#: engine/core/graphene/object_types.py:478
+#: engine/core/graphene/object_types.py:533
#: engine/core/templates/digital_order_created_email.html:111
#: engine/core/templates/digital_order_delivered_email.html:109
#: engine/core/templates/shipped_order_created_email.html:109
@@ -1351,7 +1358,7 @@ msgstr "קבוצות תכונות"
msgid "price"
msgstr "מחיר"
-#: engine/core/graphene/object_types.py:479
+#: engine/core/graphene/object_types.py:534
#: engine/core/templates/digital_order_created_email.html:110
#: engine/core/templates/digital_order_delivered_email.html:108
#: engine/core/templates/shipped_order_created_email.html:108
@@ -1359,39 +1366,39 @@ msgstr "מחיר"
msgid "quantity"
msgstr "כמות"
-#: engine/core/graphene/object_types.py:480
+#: engine/core/graphene/object_types.py:535
msgid "number of feedbacks"
msgstr "מספר המשובים"
-#: engine/core/graphene/object_types.py:481
+#: engine/core/graphene/object_types.py:536
msgid "only available for personal orders"
msgstr "מוצרים זמינים רק להזמנות אישיות"
-#: engine/core/graphene/object_types.py:484
+#: engine/core/graphene/object_types.py:541
msgid "discount price"
msgstr "מחיר מוזל"
-#: engine/core/graphene/object_types.py:508 engine/core/models.py:658
+#: engine/core/graphene/object_types.py:565 engine/core/models.py:679
msgid "products"
msgstr "מוצרים"
-#: engine/core/graphene/object_types.py:611
+#: engine/core/graphene/object_types.py:675
msgid "promocodes"
msgstr "קודי קידום מכירות"
-#: engine/core/graphene/object_types.py:621
+#: engine/core/graphene/object_types.py:690
msgid "products on sale"
msgstr "מוצרים במבצע"
-#: engine/core/graphene/object_types.py:628 engine/core/models.py:904
+#: engine/core/graphene/object_types.py:698 engine/core/models.py:927
msgid "promotions"
msgstr "מבצעים"
-#: engine/core/graphene/object_types.py:632 engine/core/models.py:187
+#: engine/core/graphene/object_types.py:702 engine/core/models.py:193
msgid "vendor"
msgstr "ספק"
-#: engine/core/graphene/object_types.py:633 engine/core/models.py:657
+#: engine/core/graphene/object_types.py:703 engine/core/models.py:678
#: engine/core/templates/digital_order_created_email.html:109
#: engine/core/templates/digital_order_delivered_email.html:107
#: engine/core/templates/shipped_order_created_email.html:107
@@ -1399,98 +1406,98 @@ msgstr "ספק"
msgid "product"
msgstr "מוצר"
-#: engine/core/graphene/object_types.py:644 engine/core/models.py:927
+#: engine/core/graphene/object_types.py:715 engine/core/models.py:950
msgid "wishlisted products"
msgstr "מוצרים ברשימת המשאלות"
-#: engine/core/graphene/object_types.py:650 engine/core/models.py:944
+#: engine/core/graphene/object_types.py:722 engine/core/models.py:967
msgid "wishlists"
msgstr "רשימות משאלות"
-#: engine/core/graphene/object_types.py:654
+#: engine/core/graphene/object_types.py:727
msgid "tagged products"
msgstr "מוצרים מתויגים"
-#: engine/core/graphene/object_types.py:661 engine/core/models.py:224
-#: engine/core/models.py:601
+#: engine/core/graphene/object_types.py:735 engine/core/models.py:230
+#: engine/core/models.py:622
msgid "product tags"
msgstr "תגיות מוצר"
-#: engine/core/graphene/object_types.py:665
+#: engine/core/graphene/object_types.py:740
msgid "tagged categories"
msgstr "קטגוריות מתויגות"
-#: engine/core/graphene/object_types.py:672
+#: engine/core/graphene/object_types.py:748
msgid "categories tags"
msgstr "תגיות קטגוריות"
-#: engine/core/graphene/object_types.py:676
+#: engine/core/graphene/object_types.py:752
msgid "project name"
msgstr "שם הפרויקט"
-#: engine/core/graphene/object_types.py:677
+#: engine/core/graphene/object_types.py:753
msgid "company name"
msgstr "שם החברה"
-#: engine/core/graphene/object_types.py:678
+#: engine/core/graphene/object_types.py:754
msgid "company address"
msgstr "כתובת החברה"
-#: engine/core/graphene/object_types.py:679
+#: engine/core/graphene/object_types.py:755
msgid "company phone number"
msgstr "מספר הטלפון של החברה"
-#: engine/core/graphene/object_types.py:680
+#: engine/core/graphene/object_types.py:758
msgid "email from, sometimes it must be used instead of host user value"
msgstr "'email from', לעיתים יש להשתמש בו במקום בערך המשתמש המארח"
-#: engine/core/graphene/object_types.py:681
+#: engine/core/graphene/object_types.py:761
msgid "email host user"
msgstr "משתמש מארח דוא\"ל"
-#: engine/core/graphene/object_types.py:682
+#: engine/core/graphene/object_types.py:762
msgid "maximum amount for payment"
msgstr "סכום מקסימלי לתשלום"
-#: engine/core/graphene/object_types.py:683
+#: engine/core/graphene/object_types.py:763
msgid "minimum amount for payment"
msgstr "סכום מינימום לתשלום"
-#: engine/core/graphene/object_types.py:684
+#: engine/core/graphene/object_types.py:764
msgid "analytics data"
msgstr "נתוני ניתוח"
-#: engine/core/graphene/object_types.py:685
+#: engine/core/graphene/object_types.py:765
msgid "advertisement data"
msgstr "נתוני פרסום"
-#: engine/core/graphene/object_types.py:688
+#: engine/core/graphene/object_types.py:768
msgid "company configuration"
msgstr "תצורה"
-#: engine/core/graphene/object_types.py:692
+#: engine/core/graphene/object_types.py:772
msgid "language code"
msgstr "קוד שפה"
-#: engine/core/graphene/object_types.py:693
+#: engine/core/graphene/object_types.py:773
msgid "language name"
msgstr "שם השפה"
-#: engine/core/graphene/object_types.py:694
+#: engine/core/graphene/object_types.py:774
msgid "language flag, if exists :)"
msgstr "דגל השפה, אם קיים :)"
-#: engine/core/graphene/object_types.py:697
+#: engine/core/graphene/object_types.py:777
msgid "supported languages"
msgstr "קבל רשימה של השפות הנתמכות"
-#: engine/core/graphene/object_types.py:728
-#: engine/core/graphene/object_types.py:729
-#: engine/core/graphene/object_types.py:730
+#: engine/core/graphene/object_types.py:809
+#: engine/core/graphene/object_types.py:812
+#: engine/core/graphene/object_types.py:815
msgid "products search results"
msgstr "תוצאות חיפוש מוצרים"
-#: engine/core/graphene/object_types.py:731
+#: engine/core/graphene/object_types.py:817
msgid "posts search results"
msgstr "תוצאות חיפוש מוצרים"
@@ -1517,7 +1524,7 @@ msgstr "קבוצת תכונות הורה"
msgid "attribute group's name"
msgstr "שם קבוצת התכונות"
-#: engine/core/models.py:105 engine/core/models.py:734
+#: engine/core/models.py:105 engine/core/models.py:755
msgid "attribute group"
msgstr "קבוצת תכונות"
@@ -1537,47 +1544,47 @@ msgstr ""
"הנרכשים מהספק. מודל זה גם מתחזק מטא-נתונים ואילוצים נוספים, מה שהופך אותו "
"מתאים לשימוש במערכות המקיימות אינטראקציה עם ספקים צד שלישי."
-#: engine/core/models.py:124
+#: engine/core/models.py:125
msgid "stores credentials and endpoints required for vendor communication"
msgstr "מאחסן את פרטי ההזדהות ונקודות הקצה הנדרשים לתקשורת API של הספק"
-#: engine/core/models.py:125
+#: engine/core/models.py:127
msgid "authentication info"
msgstr "מידע אימות"
-#: engine/core/models.py:130
+#: engine/core/models.py:132
msgid "define the markup for products retrieved from this vendor"
msgstr "הגדר את הסימון עבור מוצרים שנרכשו מספק זה"
-#: engine/core/models.py:131
+#: engine/core/models.py:133
msgid "vendor markup percentage"
msgstr "אחוז תוספת הספק"
-#: engine/core/models.py:135
+#: engine/core/models.py:137
msgid "name of this vendor"
msgstr "שם הספק הזה"
-#: engine/core/models.py:136
+#: engine/core/models.py:138
msgid "vendor name"
msgstr "שם הספק"
-#: engine/core/models.py:147
+#: engine/core/models.py:153
msgid "response file"
msgstr "קובץ תגובה"
-#: engine/core/models.py:148
+#: engine/core/models.py:154
msgid "vendor's last processing response"
msgstr "תגובת העיבוד האחרונה של הספק"
-#: engine/core/models.py:154
+#: engine/core/models.py:160
msgid "vendor's integration file path"
msgstr "נתיב קובץ האינטגרציה של הספק"
-#: engine/core/models.py:155
+#: engine/core/models.py:161
msgid "integration path"
msgstr "נתיב אינטגרציה"
-#: engine/core/models.py:197
+#: engine/core/models.py:203
msgid ""
"Represents a product tag used for classifying or identifying products. The "
"ProductTag class is designed to uniquely identify and classify products "
@@ -1587,48 +1594,48 @@ msgid ""
msgstr ""
"מייצג תגית מוצר המשמשת לסיווג או זיהוי מוצרים. מחלקת ProductTag נועדה לזהות "
"ולסווג מוצרים באופן ייחודי באמצעות שילוב של מזהה תגית פנימי ושם תצוגה "
-"ידידותי למשתמש. היא תומכת בפעולות המיוצאות באמצעות mixins ומספקת התאמה אישית"
-" של מטא-נתונים למטרות ניהוליות."
+"ידידותי למשתמש. היא תומכת בפעולות המיוצאות באמצעות mixins ומספקת התאמה אישית "
+"של מטא-נתונים למטרות ניהוליות."
-#: engine/core/models.py:209 engine/core/models.py:240
+#: engine/core/models.py:215 engine/core/models.py:246
msgid "internal tag identifier for the product tag"
msgstr "מזהה תווית פנימי עבור תווית המוצר"
-#: engine/core/models.py:210 engine/core/models.py:241
+#: engine/core/models.py:216 engine/core/models.py:247
msgid "tag name"
msgstr "שם היום"
-#: engine/core/models.py:214 engine/core/models.py:245
+#: engine/core/models.py:220 engine/core/models.py:251
msgid "user-friendly name for the product tag"
msgstr "שם ידידותי למשתמש עבור תווית המוצר"
-#: engine/core/models.py:215 engine/core/models.py:246
+#: engine/core/models.py:221 engine/core/models.py:252
msgid "tag display name"
msgstr "שם תצוגה של התג"
-#: engine/core/models.py:223
+#: engine/core/models.py:229
msgid "product tag"
msgstr "תגית מוצר"
-#: engine/core/models.py:229
+#: engine/core/models.py:235
msgid ""
"Represents a category tag used for products. This class models a category "
"tag that can be used to associate and classify products. It includes "
"attributes for an internal tag identifier and a user-friendly display name."
msgstr ""
"מייצג תווית קטגוריה המשמשת למוצרים. מחלקה זו מדגמת תווית קטגוריה שניתן "
-"להשתמש בה כדי לקשר ולסווג מוצרים. היא כוללת תכונות עבור מזהה תווית פנימי ושם"
-" תצוגה ידידותי למשתמש."
+"להשתמש בה כדי לקשר ולסווג מוצרים. היא כוללת תכונות עבור מזהה תווית פנימי ושם "
+"תצוגה ידידותי למשתמש."
-#: engine/core/models.py:254
+#: engine/core/models.py:260
msgid "category tag"
msgstr "תגית קטגוריה"
-#: engine/core/models.py:255 engine/core/models.py:327
+#: engine/core/models.py:261 engine/core/models.py:333
msgid "category tags"
msgstr "תגיות קטגוריה"
-#: engine/core/models.py:260
+#: engine/core/models.py:266
msgid ""
"Represents a category entity to organize and group related items in a "
"hierarchical structure. Categories may have hierarchical relationships with "
@@ -1647,106 +1654,105 @@ msgstr ""
"דומות אחרות בתוך יישום, ומאפשרת למשתמשים או למנהלים לציין את השם, התיאור "
"וההיררכיה של הקטגוריות, וכן להקצות תכונות כגון תמונות, תגיות או עדיפות."
-#: engine/core/models.py:274
+#: engine/core/models.py:280
msgid "upload an image representing this category"
msgstr "העלה תמונה המייצגת קטגוריה זו"
-#: engine/core/models.py:277
+#: engine/core/models.py:283
msgid "category image"
msgstr "תמונה בקטגוריה"
-#: engine/core/models.py:282
+#: engine/core/models.py:288
msgid "define a markup percentage for products in this category"
msgstr "הגדר אחוז תוספת מחיר עבור מוצרים בקטגוריה זו"
-#: engine/core/models.py:291
+#: engine/core/models.py:297
msgid "parent of this category to form a hierarchical structure"
msgstr "הורה של קטגוריה זו כדי ליצור מבנה היררכי"
-#: engine/core/models.py:292
+#: engine/core/models.py:298
msgid "parent category"
msgstr "קטגוריה ראשית"
-#: engine/core/models.py:297
+#: engine/core/models.py:303
msgid "category name"
msgstr "שם הקטגוריה"
-#: engine/core/models.py:298
+#: engine/core/models.py:304
msgid "provide a name for this category"
msgstr "ציין שם לקטגוריה זו"
-#: engine/core/models.py:305
+#: engine/core/models.py:311
msgid "add a detailed description for this category"
msgstr "הוסף תיאור מפורט לקטגוריה זו"
-#: engine/core/models.py:306
+#: engine/core/models.py:312
msgid "category description"
msgstr "תיאור הקטגוריה"
-#: engine/core/models.py:326
+#: engine/core/models.py:332
msgid "tags that help describe or group this category"
msgstr "תגיות המסייעות לתאר או לקבץ קטגוריה זו"
-#: engine/core/models.py:333 engine/core/models.py:495
+#: engine/core/models.py:339 engine/core/models.py:514
msgid "priority"
msgstr "עדיפות"
-#: engine/core/models.py:438
+#: engine/core/models.py:457
msgid ""
"Represents a Brand object in the system. This class handles information and "
"attributes related to a brand, including its name, logos, description, "
"associated categories, a unique slug, and priority order. It allows for the "
-"organization and representation of brand-related data within the "
-"application."
+"organization and representation of brand-related data within the application."
msgstr ""
-"מייצג אובייקט מותג במערכת. מחלקה זו מטפלת במידע ובתכונות הקשורים למותג, כולל"
-" שמו, לוגואים, תיאור, קטגוריות קשורות, סלוגן ייחודי וסדר עדיפות. היא מאפשרת "
+"מייצג אובייקט מותג במערכת. מחלקה זו מטפלת במידע ובתכונות הקשורים למותג, כולל "
+"שמו, לוגואים, תיאור, קטגוריות קשורות, סלוגן ייחודי וסדר עדיפות. היא מאפשרת "
"ארגון וייצוג של נתונים הקשורים למותג בתוך היישום."
-#: engine/core/models.py:448
+#: engine/core/models.py:467
msgid "name of this brand"
msgstr "שם המותג"
-#: engine/core/models.py:449
+#: engine/core/models.py:468
msgid "brand name"
msgstr "שם המותג"
-#: engine/core/models.py:456
+#: engine/core/models.py:475
msgid "upload a logo representing this brand"
msgstr "העלה לוגו המייצג את המותג הזה"
-#: engine/core/models.py:458
+#: engine/core/models.py:477
msgid "brand small image"
msgstr "תמונה קטנה של המותג"
-#: engine/core/models.py:464
+#: engine/core/models.py:483
msgid "upload a big logo representing this brand"
msgstr "העלה לוגו גדול המייצג את המותג הזה"
-#: engine/core/models.py:466
+#: engine/core/models.py:485
msgid "brand big image"
msgstr "תמונה גדולה של המותג"
-#: engine/core/models.py:471
+#: engine/core/models.py:490
msgid "add a detailed description of the brand"
msgstr "הוסף תיאור מפורט של המותג"
-#: engine/core/models.py:472
+#: engine/core/models.py:491
msgid "brand description"
msgstr "תיאור המותג"
-#: engine/core/models.py:477
+#: engine/core/models.py:496
msgid "optional categories that this brand is associated with"
msgstr "קטגוריות אופציונליות שהמותג הזה קשור אליהן"
-#: engine/core/models.py:478
+#: engine/core/models.py:497
msgid "associated categories"
msgstr "קטגוריות"
-#: engine/core/models.py:508
+#: engine/core/models.py:527
msgid ""
-"Represents the stock of a product managed in the system. This class provides"
-" details about the relationship between vendors, products, and their stock "
+"Represents the stock of a product managed in the system. This class provides "
+"details about the relationship between vendors, products, and their stock "
"information, as well as inventory-related properties like price, purchase "
"price, quantity, SKU, and digital assets. It is part of the inventory "
"management system to allow tracking and evaluation of products available "
@@ -1757,72 +1763,72 @@ msgstr ""
"רכישה, כמות, SKU ונכסים דיגיטליים. היא מהווה חלק ממערכת ניהול המלאי ומאפשרת "
"מעקב והערכה של מוצרים הזמינים מספקים שונים."
-#: engine/core/models.py:520
+#: engine/core/models.py:539
msgid "the vendor supplying this product stock"
msgstr "הספק המספק את מלאי המוצר הזה"
-#: engine/core/models.py:521
+#: engine/core/models.py:540
msgid "associated vendor"
msgstr "ספק נלווה"
-#: engine/core/models.py:525
+#: engine/core/models.py:544
msgid "final price to the customer after markups"
msgstr "המחיר הסופי ללקוח לאחר תוספות"
-#: engine/core/models.py:526
+#: engine/core/models.py:545
msgid "selling price"
msgstr "מחיר המכירה"
-#: engine/core/models.py:531
+#: engine/core/models.py:550
msgid "the product associated with this stock entry"
msgstr "המוצר הקשור לרישום המלאי הזה"
-#: engine/core/models.py:532 engine/core/models.py:797
-#: engine/core/models.py:843 engine/core/models.py:1792
+#: engine/core/models.py:551 engine/core/models.py:820
+#: engine/core/models.py:866 engine/core/models.py:1904
msgid "associated product"
msgstr "מוצר נלווה"
-#: engine/core/models.py:539
+#: engine/core/models.py:558
msgid "the price paid to the vendor for this product"
msgstr "המחיר ששולם למוכר עבור מוצר זה"
-#: engine/core/models.py:540
+#: engine/core/models.py:559
msgid "vendor purchase price"
msgstr "מחיר הרכישה של הספק"
-#: engine/core/models.py:544
+#: engine/core/models.py:563
msgid "available quantity of the product in stock"
msgstr "כמות המוצר הזמינה במלאי"
-#: engine/core/models.py:545
+#: engine/core/models.py:564
msgid "quantity in stock"
msgstr "כמות במלאי"
-#: engine/core/models.py:549
+#: engine/core/models.py:568
msgid "vendor-assigned SKU for identifying the product"
msgstr "SKU שהוקצה על ידי הספק לזיהוי המוצר"
-#: engine/core/models.py:550
+#: engine/core/models.py:569
msgid "vendor sku"
msgstr "מק\"ט הספק"
-#: engine/core/models.py:556
+#: engine/core/models.py:575
msgid "digital file associated with this stock if applicable"
msgstr "קובץ דיגיטלי הקשור למלאי זה, אם רלוונטי"
-#: engine/core/models.py:557
+#: engine/core/models.py:576
msgid "digital file"
msgstr "קובץ דיגיטלי"
-#: engine/core/models.py:560
+#: engine/core/models.py:580
msgid "system attributes"
msgstr "מאפייני המערכת"
-#: engine/core/models.py:567
+#: engine/core/models.py:588
msgid "stock entries"
msgstr "רישומים במלאי"
-#: engine/core/models.py:572
+#: engine/core/models.py:593
msgid ""
"Represents a product with attributes such as category, brand, tags, digital "
"status, name, description, part number, and slug. Provides related utility "
@@ -1834,158 +1840,157 @@ msgid ""
"product data and its associated information within an application."
msgstr ""
"מייצג מוצר עם תכונות כגון קטגוריה, מותג, תגיות, סטטוס דיגיטלי, שם, תיאור, "
-"מספר חלק ו-slug. מספק תכונות שירות נלוות לאחזור דירוגים, ספירת משובים, מחיר,"
-" כמות והזמנות סה\"כ. מיועד לשימוש במערכת המטפלת במסחר אלקטרוני או בניהול "
+"מספר חלק ו-slug. מספק תכונות שירות נלוות לאחזור דירוגים, ספירת משובים, מחיר, "
+"כמות והזמנות סה\"כ. מיועד לשימוש במערכת המטפלת במסחר אלקטרוני או בניהול "
"מלאי. מחלקה זו מתקשרת עם מודלים נלווים (כגון קטגוריה, מותג ותגית מוצר) "
-"ומנהלת את המטמון עבור תכונות הנגישות בתדירות גבוהה כדי לשפר את הביצועים. הוא"
-" משמש להגדרה ולעיבוד נתוני מוצר והמידע הקשור אליו בתוך יישום."
+"ומנהלת את המטמון עבור תכונות הנגישות בתדירות גבוהה כדי לשפר את הביצועים. הוא "
+"משמש להגדרה ולעיבוד נתוני מוצר והמידע הקשור אליו בתוך יישום."
-#: engine/core/models.py:585
+#: engine/core/models.py:606
msgid "category this product belongs to"
msgstr "הקטגוריה אליה שייך מוצר זה"
-#: engine/core/models.py:594
+#: engine/core/models.py:615
msgid "optionally associate this product with a brand"
msgstr "באופן אופציונלי, ניתן לשייך מוצר זה למותג"
-#: engine/core/models.py:600
+#: engine/core/models.py:621
msgid "tags that help describe or group this product"
msgstr "תגיות המסייעות לתאר או לקבץ מוצר זה"
-#: engine/core/models.py:605
+#: engine/core/models.py:626
msgid "indicates whether this product is digitally delivered"
msgstr "מציין אם מוצר זה נמסר באופן דיגיטלי"
-#: engine/core/models.py:606
+#: engine/core/models.py:627
msgid "is product digital"
msgstr "האם המוצר הוא דיגיטלי?"
-#: engine/core/models.py:612
+#: engine/core/models.py:633
msgid "provide a clear identifying name for the product"
msgstr "ספק שם מזהה ברור למוצר"
-#: engine/core/models.py:613
+#: engine/core/models.py:634
msgid "product name"
msgstr "שם המוצר"
-#: engine/core/models.py:619 engine/core/models.py:892
+#: engine/core/models.py:640 engine/core/models.py:915
msgid "add a detailed description of the product"
msgstr "הוסף תיאור מפורט של המוצר"
-#: engine/core/models.py:620
+#: engine/core/models.py:641
msgid "product description"
msgstr "תיאור המוצר"
-#: engine/core/models.py:627
+#: engine/core/models.py:648
msgid "part number for this product"
msgstr "מספר חלק עבור מוצר זה"
-#: engine/core/models.py:628
+#: engine/core/models.py:649
msgid "part number"
msgstr "מספר חלק"
-#: engine/core/models.py:647
+#: engine/core/models.py:668
msgid "stock keeping unit for this product"
msgstr "יחידת אחסון מלאי עבור מוצר זה"
-#: engine/core/models.py:720
+#: engine/core/models.py:741
msgid ""
"Represents an attribute in the system. This class is used to define and "
"manage attributes, which are customizable pieces of data that can be "
"associated with other entities. Attributes have associated categories, "
-"groups, value types, and names. The model supports multiple types of values,"
-" including string, integer, float, boolean, array, and object. This allows "
+"groups, value types, and names. The model supports multiple types of values, "
+"including string, integer, float, boolean, array, and object. This allows "
"for dynamic and flexible data structuring."
msgstr ""
"מייצג תכונה במערכת. מחלקה זו משמשת להגדרת תכונות ולניהולן. תכונות הן נתונים "
-"הניתנים להתאמה אישית, שניתן לקשר לישויות אחרות. לתכונות יש קטגוריות, קבוצות,"
-" סוגי ערכים ושמות משויכים. המודל תומך בסוגים רבים של ערכים, כולל מחרוזת, "
-"מספר שלם, מספר צף, בוליאני, מערך ואובייקט. הדבר מאפשר בניית נתונים דינמית "
-"וגמישה."
+"הניתנים להתאמה אישית, שניתן לקשר לישויות אחרות. לתכונות יש קטגוריות, קבוצות, "
+"סוגי ערכים ושמות משויכים. המודל תומך בסוגים רבים של ערכים, כולל מחרוזת, מספר "
+"שלם, מספר צף, בוליאני, מערך ואובייקט. הדבר מאפשר בניית נתונים דינמית וגמישה."
-#: engine/core/models.py:733
+#: engine/core/models.py:754
msgid "group of this attribute"
msgstr "קבוצה של תכונה זו"
-#: engine/core/models.py:739
+#: engine/core/models.py:760
msgid "string"
msgstr "מחרוזת"
-#: engine/core/models.py:740
+#: engine/core/models.py:761
msgid "integer"
msgstr "יושרה"
-#: engine/core/models.py:741
+#: engine/core/models.py:762
msgid "float"
msgstr "צף"
-#: engine/core/models.py:742
+#: engine/core/models.py:763
msgid "boolean"
msgstr "בוליאני"
-#: engine/core/models.py:743
+#: engine/core/models.py:764
msgid "array"
msgstr "מערך"
-#: engine/core/models.py:744
+#: engine/core/models.py:765
msgid "object"
msgstr "אובייקט"
-#: engine/core/models.py:746
+#: engine/core/models.py:767
msgid "type of the attribute's value"
msgstr "סוג ערך התכונה"
-#: engine/core/models.py:747
+#: engine/core/models.py:768
msgid "value type"
msgstr "סוג ערך"
-#: engine/core/models.py:752
+#: engine/core/models.py:773
msgid "name of this attribute"
msgstr "שם התכונה הזו"
-#: engine/core/models.py:753
+#: engine/core/models.py:774
msgid "attribute's name"
msgstr "שם התכונה"
-#: engine/core/models.py:758
+#: engine/core/models.py:779
msgid "is filterable"
msgstr "ניתן לסינון"
-#: engine/core/models.py:759
+#: engine/core/models.py:781
msgid "designates whether this attribute can be used for filtering or not"
msgstr "מציין אם ניתן להשתמש בתכונה זו לצורך סינון או לא"
-#: engine/core/models.py:771 engine/core/models.py:789
+#: engine/core/models.py:794 engine/core/models.py:812
#: engine/core/templates/digital_order_delivered_email.html:134
msgid "attribute"
msgstr "תכונה"
-#: engine/core/models.py:777
+#: engine/core/models.py:800
msgid ""
-"Represents a specific value for an attribute that is linked to a product. It"
-" links the 'attribute' to a unique 'value', allowing better organization and"
-" dynamic representation of product characteristics."
+"Represents a specific value for an attribute that is linked to a product. It "
+"links the 'attribute' to a unique 'value', allowing better organization and "
+"dynamic representation of product characteristics."
msgstr ""
"מייצג ערך ספציפי עבור תכונה המקושרת למוצר. הוא מקשר את ה\"תכונה\" ל\"ערך\" "
"ייחודי, ומאפשר ארגון טוב יותר וייצוג דינמי של מאפייני המוצר."
-#: engine/core/models.py:788
+#: engine/core/models.py:811
msgid "attribute of this value"
msgstr "תכונה של ערך זה"
-#: engine/core/models.py:796
+#: engine/core/models.py:819
msgid "the specific product associated with this attribute's value"
msgstr "המוצר הספציפי הקשור לערך של תכונה זו"
-#: engine/core/models.py:802
+#: engine/core/models.py:825
msgid "the specific value for this attribute"
msgstr "הערך הספציפי עבור תכונה זו"
-#: engine/core/models.py:815
+#: engine/core/models.py:838
msgid ""
"Represents a product image associated with a product in the system. This "
-"class is designed to manage images for products, including functionality for"
-" uploading image files, associating them with specific products, and "
+"class is designed to manage images for products, including functionality for "
+"uploading image files, associating them with specific products, and "
"determining their display order. It also includes an accessibility feature "
"with alternative text for the images."
msgstr ""
@@ -1993,85 +1998,85 @@ msgstr ""
"כולל פונקציונליות להעלאת קבצי תמונה, שיוכם למוצרים ספציפיים וקביעת סדר "
"התצוגה שלהם. היא כוללת גם תכונת נגישות עם טקסט חלופי לתמונות."
-#: engine/core/models.py:826
+#: engine/core/models.py:849
msgid "provide alternative text for the image for accessibility"
msgstr "ספק טקסט חלופי לתמונה לצורך נגישות"
-#: engine/core/models.py:827
+#: engine/core/models.py:850
msgid "image alt text"
msgstr "טקסט חלופי לתמונה"
-#: engine/core/models.py:830
+#: engine/core/models.py:853
msgid "upload the image file for this product"
msgstr "העלה את קובץ התמונה עבור מוצר זה"
-#: engine/core/models.py:831 engine/core/models.py:862
+#: engine/core/models.py:854 engine/core/models.py:885
msgid "product image"
msgstr "תמונת מוצר"
-#: engine/core/models.py:836
+#: engine/core/models.py:859
msgid "determines the order in which images are displayed"
msgstr "קובע את סדר הצגת התמונות"
-#: engine/core/models.py:837
+#: engine/core/models.py:860
msgid "display priority"
msgstr "עדיפות תצוגה"
-#: engine/core/models.py:842
+#: engine/core/models.py:865
msgid "the product that this image represents"
msgstr "המוצר שהדימוי הזה מייצג"
-#: engine/core/models.py:863
+#: engine/core/models.py:886
msgid "product images"
msgstr "תמונות מוצרים"
-#: engine/core/models.py:868
+#: engine/core/models.py:891
msgid ""
"Represents a promotional campaign for products with a discount. This class "
"is used to define and manage promotional campaigns that offer a percentage-"
"based discount for products. The class includes attributes for setting the "
"discount rate, providing details about the promotion, and linking it to the "
-"applicable products. It integrates with the product catalog to determine the"
-" affected items in the campaign."
+"applicable products. It integrates with the product catalog to determine the "
+"affected items in the campaign."
msgstr ""
"מייצג קמפיין קידום מכירות למוצרים בהנחה. מחלקה זו משמשת להגדרת וניהול "
"קמפיינים לקידום מכירות המציעים הנחה באחוזים על מוצרים. המחלקה כוללת תכונות "
"להגדרת שיעור ההנחה, מתן פרטים על המבצע וקישורו למוצרים הרלוונטיים. היא "
"משתלבת בקטלוג המוצרים כדי לקבוע את הפריטים המושפעים בקמפיין."
-#: engine/core/models.py:880
+#: engine/core/models.py:903
msgid "percentage discount for the selected products"
msgstr "אחוז ההנחה עבור המוצרים שנבחרו"
-#: engine/core/models.py:881
+#: engine/core/models.py:904
msgid "discount percentage"
msgstr "אחוז ההנחה"
-#: engine/core/models.py:886
+#: engine/core/models.py:909
msgid "provide a unique name for this promotion"
msgstr "ציין שם ייחודי לקידום מכירות זה"
-#: engine/core/models.py:887
+#: engine/core/models.py:910
msgid "promotion name"
msgstr "שם המבצע"
-#: engine/core/models.py:893
+#: engine/core/models.py:916
msgid "promotion description"
msgstr "תיאור המבצע"
-#: engine/core/models.py:898
+#: engine/core/models.py:921
msgid "select which products are included in this promotion"
msgstr "בחר אילו מוצרים כלולים במבצע זה"
-#: engine/core/models.py:899
+#: engine/core/models.py:922
msgid "included products"
msgstr "מוצרים כלולים"
-#: engine/core/models.py:903
+#: engine/core/models.py:926
msgid "promotion"
msgstr "קידום"
-#: engine/core/models.py:914
+#: engine/core/models.py:937
msgid ""
"Represents a user's wishlist for storing and managing desired products. The "
"class provides functionality to manage a collection of products, supporting "
@@ -2082,120 +2087,119 @@ msgstr ""
"פונקציונליות לניהול אוסף מוצרים, תומכת בפעולות כגון הוספה והסרה של מוצרים, "
"וכן תומכת בפעולות להוספה והסרה של מספר מוצרים בבת אחת."
-#: engine/core/models.py:926
+#: engine/core/models.py:949
msgid "products that the user has marked as wanted"
msgstr "מוצרים שהמשתמש סימן כנחשקים"
-#: engine/core/models.py:934
+#: engine/core/models.py:957
msgid "user who owns this wishlist"
msgstr "המשתמש שבבעלותו רשימת המשאלות הזו"
-#: engine/core/models.py:935
+#: engine/core/models.py:958
msgid "wishlist owner"
msgstr "בעל רשימת המשאלות"
-#: engine/core/models.py:943
+#: engine/core/models.py:966
msgid "wishlist"
msgstr "רשימת משאלות"
-#: engine/core/models.py:985
+#: engine/core/models.py:1008
msgid ""
"Represents a documentary record tied to a product. This class is used to "
"store information about documentaries related to specific products, "
"including file uploads and their metadata. It contains methods and "
"properties to handle the file type and storage path for the documentary "
-"files. It extends functionality from specific mixins and provides additional"
-" custom features."
+"files. It extends functionality from specific mixins and provides additional "
+"custom features."
msgstr ""
"מייצג תיעוד הקשור למוצר. מחלקה זו משמשת לאחסון מידע על תיעוד הקשור למוצרים "
"ספציפיים, כולל העלאת קבצים ומטא-נתונים שלהם. היא מכילה שיטות ותכונות לטיפול "
"בסוג הקובץ ובנתיב האחסון של קבצי התיעוד. היא מרחיבה את הפונקציונליות של "
"מיקסים ספציפיים ומספקת תכונות מותאמות אישית נוספות."
-#: engine/core/models.py:998
+#: engine/core/models.py:1023
msgid "documentary"
msgstr "סרט תיעודי"
-#: engine/core/models.py:999
+#: engine/core/models.py:1024
msgid "documentaries"
msgstr "סרטים תיעודיים"
-#: engine/core/models.py:1009
+#: engine/core/models.py:1034
msgid "unresolved"
msgstr "לא פתור"
-#: engine/core/models.py:1014
+#: engine/core/models.py:1039
msgid ""
-"Represents an address entity that includes location details and associations"
-" with a user. Provides functionality for geographic and address data "
-"storage, as well as integration with geocoding services. This class is "
-"designed to store detailed address information including components like "
-"street, city, region, country, and geolocation (longitude and latitude). It "
-"supports integration with geocoding APIs, enabling the storage of raw API "
-"responses for further processing or inspection. The class also allows "
-"associating an address with a user, facilitating personalized data handling."
+"Represents an address entity that includes location details and associations "
+"with a user. Provides functionality for geographic and address data storage, "
+"as well as integration with geocoding services. This class is designed to "
+"store detailed address information including components like street, city, "
+"region, country, and geolocation (longitude and latitude). It supports "
+"integration with geocoding APIs, enabling the storage of raw API responses "
+"for further processing or inspection. The class also allows associating an "
+"address with a user, facilitating personalized data handling."
msgstr ""
"מייצג ישות כתובת הכוללת פרטים על מיקום וקשרים עם משתמש. מספק פונקציונליות "
"לאחסון נתונים גיאוגרפיים וכתובות, וכן אינטגרציה עם שירותי קידוד גיאוגרפי. "
-"מחלקה זו נועדה לאחסן מידע מפורט על כתובות, כולל רכיבים כגון רחוב, עיר, אזור,"
-" מדינה ומיקום גיאוגרפי (קו אורך וקו רוחב). היא תומכת באינטגרציה עם ממשקי API"
-" לקידוד גיאוגרפי, ומאפשרת אחסון של תגובות API גולמיות לעיבוד או בדיקה "
-"נוספים. הסוג גם מאפשר לקשר כתובת למשתמש, מה שמקל על טיפול בנתונים מותאמים "
-"אישית."
+"מחלקה זו נועדה לאחסן מידע מפורט על כתובות, כולל רכיבים כגון רחוב, עיר, אזור, "
+"מדינה ומיקום גיאוגרפי (קו אורך וקו רוחב). היא תומכת באינטגרציה עם ממשקי API "
+"לקידוד גיאוגרפי, ומאפשרת אחסון של תגובות API גולמיות לעיבוד או בדיקה נוספים. "
+"הסוג גם מאפשר לקשר כתובת למשתמש, מה שמקל על טיפול בנתונים מותאמים אישית."
-#: engine/core/models.py:1029
+#: engine/core/models.py:1054
msgid "address line for the customer"
msgstr "שורת כתובת עבור הלקוח"
-#: engine/core/models.py:1030
+#: engine/core/models.py:1055
msgid "address line"
msgstr "שורת כתובת"
-#: engine/core/models.py:1032
+#: engine/core/models.py:1057
msgid "street"
msgstr "רחוב"
-#: engine/core/models.py:1033
+#: engine/core/models.py:1058
msgid "district"
msgstr "מחוז"
-#: engine/core/models.py:1034
+#: engine/core/models.py:1059
msgid "city"
msgstr "עיר"
-#: engine/core/models.py:1035
+#: engine/core/models.py:1060
msgid "region"
msgstr "אזור"
-#: engine/core/models.py:1036
+#: engine/core/models.py:1061
msgid "postal code"
msgstr "מיקוד"
-#: engine/core/models.py:1037
+#: engine/core/models.py:1062
msgid "country"
msgstr "מדינה"
-#: engine/core/models.py:1044
+#: engine/core/models.py:1069
msgid "geolocation point: (longitude, latitude)"
msgstr "נקודת מיקום גיאוגרפי (אורך, רוחב)"
-#: engine/core/models.py:1047
+#: engine/core/models.py:1075
msgid "full JSON response from geocoder for this address"
msgstr "תגובה JSON מלאה מ-geocoder עבור כתובת זו"
-#: engine/core/models.py:1052
+#: engine/core/models.py:1081
msgid "stored JSON response from the geocoding service"
msgstr "תגובת JSON שמורה משירות הגיאו-קידוד"
-#: engine/core/models.py:1060
+#: engine/core/models.py:1091
msgid "address"
msgstr "כתובת"
-#: engine/core/models.py:1061
+#: engine/core/models.py:1092
msgid "addresses"
msgstr "כתובות"
-#: engine/core/models.py:1073
+#: engine/core/models.py:1104
msgid ""
"Represents a promotional code that can be used for discounts, managing its "
"validity, type of discount, and application. The PromoCode class stores "
@@ -2207,233 +2211,233 @@ msgstr ""
"מייצג קוד קידום מכירות שניתן להשתמש בו לקבלת הנחות, לניהול תוקפו, סוג ההנחה "
"והשימוש בו. מחלקת PromoCode מאחסנת פרטים אודות קוד קידום מכירות, כולל המזהה "
"הייחודי שלו, מאפייני ההנחה (סכום או אחוז), תקופת התוקף, המשתמש המשויך (אם "
-"יש) ומצב השימוש בו. היא כוללת פונקציונליות לאימות והחלת קוד הקידום על הזמנה,"
-" תוך הקפדה על עמידה באילוצים."
+"יש) ומצב השימוש בו. היא כוללת פונקציונליות לאימות והחלת קוד הקידום על הזמנה, "
+"תוך הקפדה על עמידה באילוצים."
-#: engine/core/models.py:1087
+#: engine/core/models.py:1118
msgid "unique code used by a user to redeem a discount"
msgstr "קוד ייחודי המשמש את המשתמש למימוש הנחה"
-#: engine/core/models.py:1088
+#: engine/core/models.py:1119
msgid "promo code identifier"
msgstr "מזהה קוד קידום מכירות"
-#: engine/core/models.py:1095
+#: engine/core/models.py:1126
msgid "fixed discount amount applied if percent is not used"
msgstr "סכום הנחה קבוע המוחל אם לא נעשה שימוש באחוזים"
-#: engine/core/models.py:1096
+#: engine/core/models.py:1127
msgid "fixed discount amount"
msgstr "סכום הנחה קבוע"
-#: engine/core/models.py:1102
+#: engine/core/models.py:1133
msgid "percentage discount applied if fixed amount is not used"
msgstr "אחוז ההנחה שיחול אם לא ייעשה שימוש בסכום הקבוע"
-#: engine/core/models.py:1103
+#: engine/core/models.py:1134
msgid "percentage discount"
msgstr "אחוז ההנחה"
-#: engine/core/models.py:1108
+#: engine/core/models.py:1139
msgid "timestamp when the promocode expires"
msgstr "חותמת זמן לתוקף הקוד המקדם מכירות"
-#: engine/core/models.py:1109
+#: engine/core/models.py:1140
msgid "end validity time"
msgstr "תוקף הסוף"
-#: engine/core/models.py:1114
+#: engine/core/models.py:1145
msgid "timestamp from which this promocode is valid"
msgstr "תאריך התחילה של תוקף קוד המבצע"
-#: engine/core/models.py:1115
+#: engine/core/models.py:1146
msgid "start validity time"
msgstr "תחילת תוקף"
-#: engine/core/models.py:1120
+#: engine/core/models.py:1151
msgid "timestamp when the promocode was used, blank if not used yet"
msgstr "חותמת זמן שבה נעשה שימוש בקוד המבצע, ריק אם טרם נעשה בו שימוש"
-#: engine/core/models.py:1121
+#: engine/core/models.py:1152
msgid "usage timestamp"
msgstr "חותמת זמן שימוש"
-#: engine/core/models.py:1126
+#: engine/core/models.py:1157
msgid "user assigned to this promocode if applicable"
msgstr "משתמש שהוקצה לקוד קידום מכירות זה, אם רלוונטי"
-#: engine/core/models.py:1127
+#: engine/core/models.py:1158
msgid "assigned user"
msgstr "משתמש שהוקצה"
-#: engine/core/models.py:1134
+#: engine/core/models.py:1165
msgid "promo code"
msgstr "קוד קידום מכירות"
-#: engine/core/models.py:1135
+#: engine/core/models.py:1166
msgid "promo codes"
msgstr "קודי קידום מכירות"
-#: engine/core/models.py:1150
+#: engine/core/models.py:1182
msgid ""
"only one type of discount should be defined (amount or percent), but not "
"both or neither."
msgstr ""
"יש להגדיר סוג הנחה אחד בלבד (סכום או אחוז), אך לא את שניהם או אף אחד מהם."
-#: engine/core/models.py:1171
+#: engine/core/models.py:1204
msgid "promocode already used"
msgstr "קוד המבצע כבר נוצל"
-#: engine/core/models.py:1187
+#: engine/core/models.py:1226
#, python-brace-format
msgid "invalid discount type for promocode {self.uuid}"
msgstr "סוג הנחה לא חוקי עבור קוד קידום מכירות {self.uuid}!"
-#: engine/core/models.py:1196
+#: engine/core/models.py:1235
msgid ""
"Represents an order placed by a user. This class models an order within the "
"application, including its various attributes such as billing and shipping "
-"information, status, associated user, notifications, and related operations."
-" Orders can have associated products, promotions can be applied, addresses "
+"information, status, associated user, notifications, and related operations. "
+"Orders can have associated products, promotions can be applied, addresses "
"set, and shipping or billing details updated. Equally, functionality "
"supports managing the products in the order lifecycle."
msgstr ""
"מייצג הזמנה שבוצעה על ידי משתמש. מחלקה זו מדמה הזמנה בתוך היישום, כולל "
"תכונותיה השונות כגון פרטי חיוב ומשלוח, סטטוס, משתמש קשור, התראות ופעולות "
"נלוות. להזמנות יכולות להיות מוצרים נלווים, ניתן להחיל עליהן מבצעים, להגדיר "
-"כתובות ולעדכן פרטי משלוח או חיוב. כמו כן, הפונקציונליות תומכת בניהול המוצרים"
-" במחזור החיים של ההזמנה."
+"כתובות ולעדכן פרטי משלוח או חיוב. כמו כן, הפונקציונליות תומכת בניהול המוצרים "
+"במחזור החיים של ההזמנה."
-#: engine/core/models.py:1213
+#: engine/core/models.py:1252
msgid "the billing address used for this order"
msgstr "כתובת החיוב המשמשת להזמנה זו"
-#: engine/core/models.py:1221
+#: engine/core/models.py:1260
msgid "optional promo code applied to this order"
msgstr "קוד קידום מכירות אופציונלי שהוחל על הזמנה זו"
-#: engine/core/models.py:1222
+#: engine/core/models.py:1261
msgid "applied promo code"
msgstr "קוד קידום מכירות שהוחל"
-#: engine/core/models.py:1230
+#: engine/core/models.py:1269
msgid "the shipping address used for this order"
msgstr "כתובת המשלוח המשמשת להזמנה זו"
-#: engine/core/models.py:1231
+#: engine/core/models.py:1270
msgid "shipping address"
msgstr "כתובת למשלוח"
-#: engine/core/models.py:1237
+#: engine/core/models.py:1276
msgid "current status of the order in its lifecycle"
msgstr "הסטטוס הנוכחי של ההזמנה במחזור החיים שלה"
-#: engine/core/models.py:1238
+#: engine/core/models.py:1277
msgid "order status"
msgstr "סטטוס ההזמנה"
-#: engine/core/models.py:1243 engine/core/models.py:1769
+#: engine/core/models.py:1282 engine/core/models.py:1881
msgid "json structure of notifications to display to users"
msgstr ""
"מבנה JSON של הודעות שיוצגו למשתמשים, בממשק המשתמש המנהלי נעשה שימוש בתצוגת "
"טבלה."
-#: engine/core/models.py:1249
+#: engine/core/models.py:1288
msgid "json representation of order attributes for this order"
msgstr "ייצוג JSON של תכונות ההזמנה עבור הזמנה זו"
-#: engine/core/models.py:1255
+#: engine/core/models.py:1294
msgid "the user who placed the order"
msgstr "המשתמש שהזמין את ההזמנה"
-#: engine/core/models.py:1256
+#: engine/core/models.py:1295
msgid "user"
msgstr "משתמש"
-#: engine/core/models.py:1262
+#: engine/core/models.py:1301
msgid "the timestamp when the order was finalized"
msgstr "החותמת הזמן שבה הושלמה ההזמנה"
-#: engine/core/models.py:1263
+#: engine/core/models.py:1302
msgid "buy time"
msgstr "לקנות זמן"
-#: engine/core/models.py:1270
+#: engine/core/models.py:1309
msgid "a human-readable identifier for the order"
msgstr "מזהה קריא לאדם עבור ההזמנה"
-#: engine/core/models.py:1271
+#: engine/core/models.py:1310
msgid "human readable id"
msgstr "מזהה קריא על ידי בני אדם"
-#: engine/core/models.py:1277
+#: engine/core/models.py:1316
msgid "order"
msgstr "הזמנה"
-#: engine/core/models.py:1319
+#: engine/core/models.py:1363
msgid "a user must have only one pending order at a time"
msgstr "למשתמש יכול להיות רק הזמנה אחת בהמתנה בכל פעם!"
-#: engine/core/models.py:1351
+#: engine/core/models.py:1396
msgid "you cannot add products to an order that is not a pending one"
msgstr "לא ניתן להוסיף מוצרים להזמנה שאינה בהמתנה."
-#: engine/core/models.py:1356
+#: engine/core/models.py:1402
msgid "you cannot add inactive products to order"
msgstr "לא ניתן להוסיף מוצרים לא פעילים להזמנה"
-#: engine/core/models.py:1373
+#: engine/core/models.py:1424
msgid "you cannot add more products than available in stock"
msgstr "לא ניתן להוסיף מוצרים מעבר למלאי הזמין"
-#: engine/core/models.py:1395 engine/core/models.py:1420
-#: engine/core/models.py:1428
+#: engine/core/models.py:1448 engine/core/models.py:1477
+#: engine/core/models.py:1487
msgid "you cannot remove products from an order that is not a pending one"
msgstr "לא ניתן להסיר מוצרים מהזמנה שאינה בהמתנה."
-#: engine/core/models.py:1416
+#: engine/core/models.py:1472
#, python-brace-format
msgid "{name} does not exist with query <{query}>"
msgstr "{name} אינו קיים בשאילתה <{query}>!"
-#: engine/core/models.py:1448
+#: engine/core/models.py:1511
msgid "promocode does not exist"
msgstr "קוד קידום מכירות אינו קיים"
-#: engine/core/models.py:1454
+#: engine/core/models.py:1526
msgid "you can only buy physical products with shipping address specified"
msgstr "ניתן לרכוש מוצרים פיזיים רק עם ציון כתובת משלוח!"
-#: engine/core/models.py:1473
+#: engine/core/models.py:1547
msgid "address does not exist"
msgstr "הכתובת אינה קיימת"
-#: engine/core/models.py:1494 engine/core/models.py:1563
+#: engine/core/models.py:1569 engine/core/models.py:1648
msgid "you can not buy at this moment, please try again in a few minutes"
msgstr "לא ניתן לבצע רכישה כרגע, אנא נסה שוב בעוד מספר דקות."
-#: engine/core/models.py:1497 engine/core/models.py:1559
+#: engine/core/models.py:1575 engine/core/models.py:1641
msgid "invalid force value"
msgstr "ערך כוח לא חוקי"
-#: engine/core/models.py:1503 engine/core/models.py:1566
+#: engine/core/models.py:1581 engine/core/models.py:1652
msgid "you cannot purchase an empty order!"
msgstr "אי אפשר לרכוש הזמנה ריקה!"
-#: engine/core/models.py:1522
+#: engine/core/models.py:1602
msgid "you cannot buy an order without a user"
msgstr "אי אפשר לקנות הזמנה בלי משתמש!"
-#: engine/core/models.py:1536
+#: engine/core/models.py:1616
msgid "a user without a balance cannot buy with balance"
msgstr "משתמש ללא יתרה לא יכול לקנות עם יתרה!"
-#: engine/core/models.py:1541
+#: engine/core/models.py:1622
msgid "insufficient funds to complete the order"
msgstr "אין מספיק כסף כדי להשלים את ההזמנה"
-#: engine/core/models.py:1575
+#: engine/core/models.py:1663
msgid ""
"you cannot buy without registration, please provide the following "
"information: customer name, customer email, customer phone number"
@@ -2441,13 +2445,13 @@ msgstr ""
"אינך יכול לרכוש ללא רישום, אנא ספק את הפרטים הבאים: שם הלקוח, דוא\"ל הלקוח, "
"מספר הטלפון של הלקוח"
-#: engine/core/models.py:1584
+#: engine/core/models.py:1674
#, python-brace-format
msgid ""
"invalid payment method: {payment_method} from {available_payment_methods}"
msgstr "אמצעי תשלום לא חוקי: {payment_method} מ-{available_payment_methods}!"
-#: engine/core/models.py:1699
+#: engine/core/models.py:1805
msgid ""
"Manages user feedback for products. This class is designed to capture and "
"store user feedback for specific products that they have purchased. It "
@@ -2457,35 +2461,34 @@ msgid ""
msgstr ""
"מנהל משוב משתמשים על מוצרים. מחלקה זו נועדה לאסוף ולאחסן משוב משתמשים על "
"מוצרים ספציפיים שרכשו. היא מכילה תכונות לאחסון הערות משתמשים, הפניה למוצר "
-"הקשור בהזמנה ודירוג שהוקצה על ידי המשתמש. המחלקה משתמשת בשדות מסד נתונים כדי"
-" למדל ולנהל ביעילות נתוני משוב."
+"הקשור בהזמנה ודירוג שהוקצה על ידי המשתמש. המחלקה משתמשת בשדות מסד נתונים כדי "
+"למדל ולנהל ביעילות נתוני משוב."
-#: engine/core/models.py:1711
+#: engine/core/models.py:1817
msgid "user-provided comments about their experience with the product"
msgstr "הערות שסיפקו המשתמשים על חווייתם עם המוצר"
-#: engine/core/models.py:1712
+#: engine/core/models.py:1818
msgid "feedback comments"
msgstr "הערות משוב"
-#: engine/core/models.py:1719
-msgid ""
-"references the specific product in an order that this feedback is about"
+#: engine/core/models.py:1826
+msgid "references the specific product in an order that this feedback is about"
msgstr "מתייחס למוצר הספציפי בהזמנה שעליה מתייחס משוב זה."
-#: engine/core/models.py:1720
+#: engine/core/models.py:1828
msgid "related order product"
msgstr "מוצר בהזמנה קשורה"
-#: engine/core/models.py:1725
+#: engine/core/models.py:1833
msgid "user-assigned rating for the product"
msgstr "דירוג שהוקצה על ידי המשתמש למוצר"
-#: engine/core/models.py:1726
+#: engine/core/models.py:1834
msgid "product rating"
msgstr "דירוג מוצר"
-#: engine/core/models.py:1742
+#: engine/core/models.py:1854
msgid ""
"Represents products associated with orders and their attributes. The "
"OrderProduct model maintains information about a product that is part of an "
@@ -2497,138 +2500,138 @@ msgid ""
"download URL for digital products. The model integrates with the Order and "
"Product models and stores a reference to them."
msgstr ""
-"מייצג מוצרים הקשורים להזמנות ותכונותיהם. מודל OrderProduct שומר מידע על מוצר"
-" שהוא חלק מהזמנה, כולל פרטים כגון מחיר הרכישה, כמות, תכונות המוצר ומצב. הוא "
+"מייצג מוצרים הקשורים להזמנות ותכונותיהם. מודל OrderProduct שומר מידע על מוצר "
+"שהוא חלק מהזמנה, כולל פרטים כגון מחיר הרכישה, כמות, תכונות המוצר ומצב. הוא "
"מנהל התראות למשתמש ולמנהלים ומטפל בפעולות כגון החזרת יתרת המוצר או הוספת "
"משוב. מודל זה מספק גם שיטות ותכונות התומכות בלוגיקה עסקית, כגון חישוב המחיר "
"הכולל או יצירת כתובת URL להורדה עבור מוצרים דיגיטליים. המודל משתלב עם מודלי "
"Order ו-Product ומאחסן הפניה אליהם."
-#: engine/core/models.py:1757
+#: engine/core/models.py:1869
msgid "the price paid by the customer for this product at purchase time"
msgstr "המחיר ששילם הלקוח עבור מוצר זה בעת הרכישה"
-#: engine/core/models.py:1758
+#: engine/core/models.py:1870
msgid "purchase price at order time"
msgstr "מחיר הרכישה בעת ההזמנה"
-#: engine/core/models.py:1763
+#: engine/core/models.py:1875
msgid "internal comments for admins about this ordered product"
msgstr "הערות פנימיות למנהלים אודות מוצר זה שהוזמן"
-#: engine/core/models.py:1764
+#: engine/core/models.py:1876
msgid "internal comments"
msgstr "הערות פנימיות"
-#: engine/core/models.py:1770
+#: engine/core/models.py:1882
msgid "user notifications"
msgstr "הודעות למשתמשים"
-#: engine/core/models.py:1775
+#: engine/core/models.py:1887
msgid "json representation of this item's attributes"
msgstr "ייצוג JSON של תכונות פריט זה"
-#: engine/core/models.py:1776
+#: engine/core/models.py:1888
msgid "ordered product attributes"
msgstr "תכונות המוצר שהוזמן"
-#: engine/core/models.py:1781
+#: engine/core/models.py:1893
msgid "reference to the parent order that contains this product"
msgstr "הפניה להזמנה הראשית המכילה מוצר זה"
-#: engine/core/models.py:1782
+#: engine/core/models.py:1894
msgid "parent order"
msgstr "הזמנת הורים"
-#: engine/core/models.py:1791
+#: engine/core/models.py:1903
msgid "the specific product associated with this order line"
msgstr "המוצר הספציפי הקשור לשורת הזמנה זו"
-#: engine/core/models.py:1798
+#: engine/core/models.py:1910
msgid "quantity of this specific product in the order"
msgstr "כמות המוצר הספציפי הזה בהזמנה"
-#: engine/core/models.py:1799
+#: engine/core/models.py:1911
msgid "product quantity"
msgstr "כמות המוצר"
-#: engine/core/models.py:1806
+#: engine/core/models.py:1918
msgid "current status of this product in the order"
msgstr "הסטטוס הנוכחי של מוצר זה בהזמנה"
-#: engine/core/models.py:1807
+#: engine/core/models.py:1919
msgid "product line status"
msgstr "סטטוס קו המוצרים"
-#: engine/core/models.py:1872
+#: engine/core/models.py:1986
msgid "order product must have an order"
msgstr "המוצר בהזמנה חייב להיות קשור להזמנה!"
-#: engine/core/models.py:1874
+#: engine/core/models.py:1988
#, python-brace-format
msgid "wrong action specified for feedback: {action}"
msgstr "פעולה שגויה שצוינה עבור משוב: {action}!"
-#: engine/core/models.py:1888
+#: engine/core/models.py:2005
msgid "you cannot feedback an order which is not received"
msgstr "אינך יכול להחזיר הזמנה שלא התקבלה"
-#: engine/core/models.py:1894
+#: engine/core/models.py:2014
msgid "name"
msgstr "שם"
-#: engine/core/models.py:1895
+#: engine/core/models.py:2016
msgid "URL of the integration"
msgstr "כתובת ה-URL של האינטגרציה"
-#: engine/core/models.py:1896
+#: engine/core/models.py:2019
msgid "authentication credentials"
msgstr "אישורי אימות"
-#: engine/core/models.py:1918
+#: engine/core/models.py:2042
msgid "you can only have one default CRM provider"
msgstr "ניתן להגדיר ספק CRM ברירת מחדל אחד בלבד"
-#: engine/core/models.py:1928
+#: engine/core/models.py:2052
msgid "CRM"
msgstr "CRM"
-#: engine/core/models.py:1929
+#: engine/core/models.py:2053
msgid "CRMs"
msgstr "CRM"
-#: engine/core/models.py:1941
+#: engine/core/models.py:2069
msgid "order CRM link"
msgstr "קישור CRM של ההזמנה"
-#: engine/core/models.py:1942
+#: engine/core/models.py:2070
msgid "orders CRM links"
msgstr "קישורי CRM של הזמנות"
-#: engine/core/models.py:1947
+#: engine/core/models.py:2075
msgid ""
"Represents the downloading functionality for digital assets associated with "
"orders. The DigitalAssetDownload class provides the ability to manage and "
"access downloads related to order products. It maintains information about "
-"the associated order product, the number of downloads, and whether the asset"
-" is publicly visible. It includes a method to generate a URL for downloading"
-" the asset when the associated order is in a completed status."
+"the associated order product, the number of downloads, and whether the asset "
+"is publicly visible. It includes a method to generate a URL for downloading "
+"the asset when the associated order is in a completed status."
msgstr ""
"מייצג את פונקציונליות ההורדה של נכסים דיגיטליים הקשורים להזמנות. מחלקת "
"DigitalAssetDownload מספקת את היכולת לנהל ולהיכנס להורדות הקשורות למוצרים "
-"שהוזמנו. היא שומרת מידע על המוצר שהוזמן, מספר ההורדות והאם הנכס גלוי לציבור."
-" היא כוללת שיטה ליצירת כתובת URL להורדת הנכס כאשר ההזמנה הקשורה נמצאת במצב "
+"שהוזמנו. היא שומרת מידע על המוצר שהוזמן, מספר ההורדות והאם הנכס גלוי לציבור. "
+"היא כוללת שיטה ליצירת כתובת URL להורדת הנכס כאשר ההזמנה הקשורה נמצאת במצב "
"'הושלמה'."
-#: engine/core/models.py:1961
+#: engine/core/models.py:2091
msgid "download"
msgstr "הורדה"
-#: engine/core/models.py:1962
+#: engine/core/models.py:2092
msgid "downloads"
msgstr "הורדות"
-#: engine/core/serializers/utility.py:89
+#: engine/core/serializers/utility.py:91
msgid ""
"you must provide a comment, rating, and order product uuid to add feedback."
msgstr "עליך לספק תגובה, דירוג ומספר זיהוי מוצר (uuid) כדי להוסיף משוב."
@@ -2823,11 +2826,12 @@ msgstr "שלום %(order.user.first_name)s,"
#, python-format
msgid ""
"thank you for your order #%(order.pk)s! we are pleased to inform you that\n"
-" we have taken your order into work. below are the details of your\n"
+" we have taken your order into work. below are "
+"the details of your\n"
" order:"
msgstr ""
-"תודה על הזמנתך #%(order.pk)s! אנו שמחים להודיע לך שהזמנתך נכנסה לעיבוד. להלן"
-" פרטי הזמנתך:"
+"תודה על הזמנתך #%(order.pk)s! אנו שמחים להודיע לך שהזמנתך נכנסה לעיבוד. להלן "
+"פרטי הזמנתך:"
#: engine/core/templates/digital_order_created_email.html:112
#: engine/core/templates/digital_order_delivered_email.html:110
@@ -2928,7 +2932,8 @@ msgstr "תודה על שהייתכם איתנו! הענקנו לכם קוד קי
#: engine/core/templates/shipped_order_created_email.html:101
#: engine/core/templates/shipped_order_delivered_email.html:101
msgid ""
-"thank you for your order! we are pleased to confirm your purchase. below are\n"
+"thank you for your order! we are pleased to confirm your purchase. below "
+"are\n"
" the details of your order:"
msgstr "תודה על הזמנתך! אנו שמחים לאשר את רכישתך. להלן פרטי הזמנתך:"
@@ -2955,11 +2960,11 @@ msgid ""
" reserved"
msgstr "כל הזכויות שמורות"
-#: engine/core/utils/caching.py:44
+#: engine/core/utils/caching.py:48
msgid "both data and timeout are required"
msgstr "נדרשים הן הנתונים והן זמן ההמתנה"
-#: engine/core/utils/caching.py:46
+#: engine/core/utils/caching.py:51
msgid "invalid timeout value, it must be between 0 and 216000 seconds"
msgstr "ערך זמן המתנה לא חוקי, הוא חייב להיות בין 0 ל-216000 שניות"
@@ -2968,17 +2973,17 @@ msgstr "ערך זמן המתנה לא חוקי, הוא חייב להיות בי
msgid "{settings.PROJECT_NAME} | contact us initiated"
msgstr "{settings.PROJECT_NAME} | צור קשר יוזם"
-#: engine/core/utils/emailing.py:73
+#: engine/core/utils/emailing.py:81
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order confirmation"
msgstr "{settings.PROJECT_NAME} | אישור הזמנה"
-#: engine/core/utils/emailing.py:105
+#: engine/core/utils/emailing.py:115
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order delivered"
msgstr "{settings.PROJECT_NAME} | הזמנה נמסרה"
-#: engine/core/utils/emailing.py:188
+#: engine/core/utils/emailing.py:203
#, python-brace-format
msgid "{settings.PROJECT_NAME} | promocode granted"
msgstr "{settings.PROJECT_NAME} | קוד קידום מכירות מוענק"
@@ -2991,20 +2996,20 @@ msgstr "אין לך הרשאה לבצע פעולה זו."
msgid "NOMINATIM_URL must be configured."
msgstr "יש להגדיר את הפרמטר NOMINATIM_URL!"
-#: engine/core/validators.py:19
+#: engine/core/validators.py:21
#, python-brace-format
msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels"
msgstr "מידות התמונה לא יעלו על w{max_width} x h{max_height} פיקסלים!"
-#: engine/core/views.py:91
+#: engine/core/views.py:105
msgid ""
"Handles the request for the sitemap index and returns an XML response. It "
"ensures the response includes the appropriate content type header for XML."
msgstr ""
-"מטפל בבקשה לאינדקס מפת האתר ומחזיר תגובה בפורמט XML. הוא מבטיח שהתגובה תכלול"
-" את כותרת סוג התוכן המתאימה ל-XML."
+"מטפל בבקשה לאינדקס מפת האתר ומחזיר תגובה בפורמט XML. הוא מבטיח שהתגובה תכלול "
+"את כותרת סוג התוכן המתאימה ל-XML."
-#: engine/core/views.py:106
+#: engine/core/views.py:120
msgid ""
"Handles the detailed view response for a sitemap. This function processes "
"the request, fetches the appropriate sitemap detail response, and sets the "
@@ -3013,106 +3018,110 @@ msgstr ""
"מטפל בתגובה לתצוגה מפורטת של מפת אתר. פונקציה זו מעבדת את הבקשה, משיגה את "
"התגובה המתאימה לפרטי מפת האתר, וקובעת את כותרת Content-Type עבור XML."
-#: engine/core/views.py:141
+#: engine/core/views.py:156
msgid ""
"Returns a list of supported languages and their corresponding information."
msgstr "מחזיר רשימה של שפות נתמכות והמידע המתאים להן."
-#: engine/core/views.py:173
+#: engine/core/views.py:183
msgid "Returns the parameters of the website as a JSON object."
msgstr "מחזיר את הפרמטרים של האתר כאובייקט JSON."
-#: engine/core/views.py:192
+#: engine/core/views.py:199
msgid ""
"Handles cache operations such as reading and setting cache data with a "
"specified key and timeout."
msgstr ""
"מטפל בפעולות מטמון כגון קריאה והגדרת נתוני מטמון עם מפתח וזמן המתנה מוגדרים."
-#: engine/core/views.py:219
+#: engine/core/views.py:221
msgid "Handles `contact us` form submissions."
msgstr "מטפל בהגשת טפסי \"צור קשר\"."
-#: engine/core/views.py:240
+#: engine/core/views.py:237
msgid ""
"Handles requests for processing and validating URLs from incoming POST "
"requests."
msgstr "מטפל בבקשות לעיבוד ואימות כתובות URL מבקשות POST נכנסות."
-#: engine/core/views.py:280
+#: engine/core/views.py:274
msgid "Handles global search queries."
msgstr "מטפל בשאילתות חיפוש גלובליות."
-#: engine/core/views.py:295
+#: engine/core/views.py:290
msgid "Handles the logic of buying as a business without registration."
msgstr "מטפל בהיגיון הרכישה כעסק ללא רישום."
-#: engine/core/views.py:332
+#: engine/core/views.py:338
msgid ""
"Handles the downloading of a digital asset associated with an order.\n"
-"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the digital asset file located in the "
+"storage directory of the project. If the file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
msgstr ""
"מטפל בהורדת נכס דיגיטלי הקשור להזמנה. פונקציה זו מנסה להציג את קובץ הנכס "
"הדיגיטלי הנמצא בספריית האחסון של הפרויקט. אם הקובץ לא נמצא, מתקבלת שגיאת "
"HTTP 404 המציינת שהמשאב אינו זמין."
-#: engine/core/views.py:343
+#: engine/core/views.py:349
msgid "order_product_uuid is required"
msgstr "order_product_uuid נדרש"
-#: engine/core/views.py:350
+#: engine/core/views.py:356
msgid "order product does not exist"
msgstr "המוצר שהוזמן אינו קיים"
-#: engine/core/views.py:353
+#: engine/core/views.py:359
msgid "you can only download the digital asset once"
msgstr "ניתן להוריד את הנכס הדיגיטלי פעם אחת בלבד"
-#: engine/core/views.py:356
+#: engine/core/views.py:363
msgid "the order must be paid before downloading the digital asset"
msgstr "יש לשלם את ההזמנה לפני הורדת הנכס הדיגיטלי"
-#: engine/core/views.py:362
+#: engine/core/views.py:370
msgid "the order product does not have a product"
msgstr "למוצר ההזמנה אין מוצר"
-#: engine/core/views.py:399
+#: engine/core/views.py:414
msgid "favicon not found"
msgstr "לא נמצא סמל מועדף"
-#: engine/core/views.py:404
+#: engine/core/views.py:419
msgid ""
"Handles requests for the favicon of a website.\n"
-"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the favicon file located in the static "
+"directory of the project. If the favicon file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
msgstr ""
"מטפל בבקשות לסמל המועדף של אתר אינטרנט. פונקציה זו מנסה להציג את קובץ הסמל "
"המועדף הנמצא בספרייה הסטטית של הפרויקט. אם קובץ הסמל המועדף לא נמצא, מתקבלת "
"שגיאת HTTP 404 המציינת שהמשאב אינו זמין."
-#: engine/core/views.py:416
+#: engine/core/views.py:431
msgid ""
-"Redirects the request to the admin index page. The function handles incoming"
-" HTTP requests and redirects them to the Django admin interface index page. "
+"Redirects the request to the admin index page. The function handles incoming "
+"HTTP requests and redirects them to the Django admin interface index page. "
"It uses Django's `redirect` function for handling the HTTP redirection."
msgstr ""
-"מנתב את הבקשה לדף האינדקס של המנהל. הפונקציה מטפלת בבקשות HTTP נכנסות ומנתבת"
-" אותן לדף האינדקס של ממשק המנהל של Django. היא משתמשת בפונקציית `redirect` "
-"של Django לטיפול בהפניה HTTP."
+"מנתב את הבקשה לדף האינדקס של המנהל. הפונקציה מטפלת בבקשות HTTP נכנסות ומנתבת "
+"אותן לדף האינדקס של ממשק המנהל של Django. היא משתמשת בפונקציית `redirect` של "
+"Django לטיפול בהפניה HTTP."
-#: engine/core/views.py:429
+#: engine/core/views.py:443
msgid "Returns current version of the eVibes. "
msgstr "מחזיר את הגרסה הנוכחית של eVibes."
-#: engine/core/views.py:623 engine/core/views.py:636
+#: engine/core/views.py:672 engine/core/views.py:687
#, python-format
msgid "Revenue & Orders (last %(days)d)"
msgstr "הכנסות והזמנות (אחרון %(days)d)"
-#: engine/core/views.py:793
+#: engine/core/views.py:868
msgid "Returns custom variables for Dashboard. "
msgstr "מחזיר משתנים מותאמים אישית עבור לוח המחוונים."
-#: engine/core/viewsets.py:136
+#: engine/core/viewsets.py:139
msgid ""
"Defines a viewset for managing Evibes-related operations. The EvibesViewSet "
"class inherits from ModelViewSet and provides functionality for handling "
@@ -3120,25 +3129,24 @@ msgid ""
"serializer classes based on the current action, customizable permissions, "
"and rendering formats."
msgstr ""
-"מגדיר קבוצת תצוגות לניהול פעולות הקשורות ל-Evibes. מחלקת EvibesViewSet יורשת"
-" מ-ModelViewSet ומספקת פונקציונליות לטיפול בפעולות ובפעולות על ישויות "
-"Evibes. היא כוללת תמיכה במחלוקות סריאליזציה דינמיות המבוססות על הפעולה "
-"הנוכחית, הרשאות הניתנות להתאמה אישית ופורמטים של עיבוד."
+"מגדיר קבוצת תצוגות לניהול פעולות הקשורות ל-Evibes. מחלקת EvibesViewSet יורשת "
+"מ-ModelViewSet ומספקת פונקציונליות לטיפול בפעולות ובפעולות על ישויות Evibes. "
+"היא כוללת תמיכה במחלוקות סריאליזציה דינמיות המבוססות על הפעולה הנוכחית, "
+"הרשאות הניתנות להתאמה אישית ופורמטים של עיבוד."
-#: engine/core/viewsets.py:156
+#: engine/core/viewsets.py:160
msgid ""
-"Represents a viewset for managing AttributeGroup objects. Handles operations"
-" related to AttributeGroup, including filtering, serialization, and "
-"retrieval of data. This class is part of the application's API layer and "
-"provides a standardized way to process requests and responses for "
-"AttributeGroup data."
+"Represents a viewset for managing AttributeGroup objects. Handles operations "
+"related to AttributeGroup, including filtering, serialization, and retrieval "
+"of data. This class is part of the application's API layer and provides a "
+"standardized way to process requests and responses for AttributeGroup data."
msgstr ""
"מייצג קבוצת תצוגות לניהול אובייקטי AttributeGroup. מטפל בפעולות הקשורות "
"ל-AttributeGroup, כולל סינון, סידור סדרתי ואחזור נתונים. מחלקה זו היא חלק "
"משכבת ה-API של היישום ומספקת דרך סטנדרטית לעיבוד בקשות ותגובות עבור נתוני "
"AttributeGroup."
-#: engine/core/viewsets.py:175
+#: engine/core/viewsets.py:179
msgid ""
"Handles operations related to Attribute objects within the application. "
"Provides a set of API endpoints to interact with Attribute data. This class "
@@ -3152,20 +3160,20 @@ msgstr ""
"של אובייקטי Attribute, ומאפשרת שליטה דינמית על הנתונים המוחזרים, כגון סינון "
"לפי שדות ספציפיים או אחזור מידע מפורט לעומת מידע מפושט, בהתאם לבקשה."
-#: engine/core/viewsets.py:194
+#: engine/core/viewsets.py:198
msgid ""
"A viewset for managing AttributeValue objects. This viewset provides "
"functionality for listing, retrieving, creating, updating, and deleting "
"AttributeValue objects. It integrates with Django REST Framework's viewset "
-"mechanisms and uses appropriate serializers for different actions. Filtering"
-" capabilities are provided through the DjangoFilterBackend."
+"mechanisms and uses appropriate serializers for different actions. Filtering "
+"capabilities are provided through the DjangoFilterBackend."
msgstr ""
"סט תצוגה לניהול אובייקטי AttributeValue. סט תצוגה זה מספק פונקציונליות "
"לרישום, אחזור, יצירה, עדכון ומחיקה של אובייקטי AttributeValue. הוא משתלב "
"במנגנוני סט התצוגה של Django REST Framework ומשתמש בממירים מתאימים לפעולות "
"שונות. יכולות סינון מסופקות באמצעות DjangoFilterBackend."
-#: engine/core/viewsets.py:213
+#: engine/core/viewsets.py:217
msgid ""
"Manages views for Category-related operations. The CategoryViewSet class is "
"responsible for handling operations related to the Category model in the "
@@ -3178,7 +3186,7 @@ msgstr ""
"וסידור נתוני קטגוריות. מערך התצוגות גם אוכף הרשאות כדי להבטיח שרק משתמשים "
"מורשים יוכלו לגשת לנתונים ספציפיים."
-#: engine/core/viewsets.py:326
+#: engine/core/viewsets.py:346
msgid ""
"Represents a viewset for managing Brand instances. This class provides "
"functionality for querying, filtering, and serializing Brand objects. It "
@@ -3189,7 +3197,7 @@ msgstr ""
"לשאילתה, סינון וסידור אובייקטים של מותג. היא משתמשת במערך ViewSet של Django "
"כדי לפשט את היישום של נקודות קצה API לאובייקטים של מותג."
-#: engine/core/viewsets.py:438
+#: engine/core/viewsets.py:458
msgid ""
"Manages operations related to the `Product` model in the system. This class "
"provides a viewset for managing products, including their filtering, "
@@ -3199,13 +3207,13 @@ msgid ""
"product details, applying permissions, and accessing related feedback of a "
"product."
msgstr ""
-"מנהל פעולות הקשורות למודל `Product` במערכת. מחלקה זו מספקת מערך תצוגה לניהול"
-" מוצרים, כולל סינון, סידור סדרתי ופעולות על מופעים ספציפיים. היא מרחיבה את "
-"`EvibesViewSet` כדי להשתמש בפונקציונליות משותפת ומשתלבת עם מסגרת Django REST"
-" עבור פעולות RESTful API. כוללת שיטות לאחזור פרטי מוצר, החלת הרשאות וגישה "
+"מנהל פעולות הקשורות למודל `Product` במערכת. מחלקה זו מספקת מערך תצוגה לניהול "
+"מוצרים, כולל סינון, סידור סדרתי ופעולות על מופעים ספציפיים. היא מרחיבה את "
+"`EvibesViewSet` כדי להשתמש בפונקציונליות משותפת ומשתלבת עם מסגרת Django REST "
+"עבור פעולות RESTful API. כוללת שיטות לאחזור פרטי מוצר, החלת הרשאות וגישה "
"למשוב הקשור למוצר."
-#: engine/core/viewsets.py:574
+#: engine/core/viewsets.py:605
msgid ""
"Represents a viewset for managing Vendor objects. This viewset allows "
"fetching, filtering, and serializing Vendor data. It defines the queryset, "
@@ -3214,48 +3222,48 @@ msgid ""
"Vendor-related resources through the Django REST framework."
msgstr ""
"מייצג קבוצת תצוגות לניהול אובייקטי ספק. קבוצת תצוגות זו מאפשרת לאחזר, לסנן "
-"ולסדר נתוני ספק. היא מגדירה את קבוצת השאילתות, תצורות המסננים ומחלקות הסידור"
-" המשמשות לטיפול בפעולות שונות. מטרת מחלקה זו היא לספק גישה יעילה למשאבים "
+"ולסדר נתוני ספק. היא מגדירה את קבוצת השאילתות, תצורות המסננים ומחלקות הסידור "
+"המשמשות לטיפול בפעולות שונות. מטרת מחלקה זו היא לספק גישה יעילה למשאבים "
"הקשורים לספק באמצעות מסגרת Django REST."
-#: engine/core/viewsets.py:594
+#: engine/core/viewsets.py:625
msgid ""
"Representation of a view set handling Feedback objects. This class manages "
"operations related to Feedback objects, including listing, filtering, and "
"retrieving details. The purpose of this view set is to provide different "
-"serializers for different actions and implement permission-based handling of"
-" accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
+"serializers for different actions and implement permission-based handling of "
+"accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
"use of Django's filtering system for querying data."
msgstr ""
"ייצוג של קבוצת תצוגה המטפלת באובייקטי משוב. מחלקה זו מנהלת פעולות הקשורות "
-"לאובייקטי משוב, כולל רישום, סינון ואחזור פרטים. מטרת קבוצת תצוגה זו היא לספק"
-" סדרנים שונים לפעולות שונות וליישם טיפול מבוסס הרשאות באובייקטי משוב נגישים."
-" היא מרחיבה את `EvibesViewSet` הבסיסי ומשתמשת במערכת הסינון של Django "
-"לשאילתת נתונים."
+"לאובייקטי משוב, כולל רישום, סינון ואחזור פרטים. מטרת קבוצת תצוגה זו היא לספק "
+"סדרנים שונים לפעולות שונות וליישם טיפול מבוסס הרשאות באובייקטי משוב נגישים. "
+"היא מרחיבה את `EvibesViewSet` הבסיסי ומשתמשת במערכת הסינון של Django לשאילתת "
+"נתונים."
-#: engine/core/viewsets.py:621
+#: engine/core/viewsets.py:652
msgid ""
"ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes "
"various endpoints for handling order operations such as adding or removing "
-"products, performing purchases for registered as well as unregistered users,"
-" and retrieving the current authenticated user's pending orders. The ViewSet"
-" uses multiple serializers based on the specific action being performed and "
+"products, performing purchases for registered as well as unregistered users, "
+"and retrieving the current authenticated user's pending orders. The ViewSet "
+"uses multiple serializers based on the specific action being performed and "
"enforces permissions accordingly while interacting with order data."
msgstr ""
"ViewSet לניהול הזמנות ופעולות נלוות. מחלקה זו מספקת פונקציונליות לאחזור, "
-"שינוי וניהול אובייקטי הזמנה. היא כוללת נקודות קצה שונות לטיפול בפעולות הזמנה"
-" כגון הוספה או הסרה של מוצרים, ביצוע רכישות עבור משתמשים רשומים ולא רשומים, "
+"שינוי וניהול אובייקטי הזמנה. היא כוללת נקודות קצה שונות לטיפול בפעולות הזמנה "
+"כגון הוספה או הסרה של מוצרים, ביצוע רכישות עבור משתמשים רשומים ולא רשומים, "
"ואחזור הזמנות ממתנות של המשתמש המאושר הנוכחי. ViewSet משתמש במספר סדרנים "
"בהתאם לפעולה הספציפית המתבצעת ומאכוף הרשאות בהתאם בעת אינטראקציה עם נתוני "
"הזמנה."
-#: engine/core/viewsets.py:825
+#: engine/core/viewsets.py:914
msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It "
-"includes filtering, permission checks, and serializer switching based on the"
-" requested action. Additionally, it provides a detailed action for handling "
+"includes filtering, permission checks, and serializer switching based on the "
+"requested action. Additionally, it provides a detailed action for handling "
"feedback on OrderProduct instances"
msgstr ""
"מספק סט תצוגה לניהול ישויות OrderProduct. סט תצוגה זה מאפשר פעולות CRUD "
@@ -3263,30 +3271,30 @@ msgstr ""
"הרשאות והחלפת סריאלייזר בהתאם לפעולה המבוקשת. בנוסף, הוא מספק פעולה מפורטת "
"לטיפול במשוב על מופעים של OrderProduct."
-#: engine/core/viewsets.py:879
+#: engine/core/viewsets.py:974
msgid "Manages operations related to Product images in the application. "
msgstr "מנהל פעולות הקשורות לתמונות מוצרים ביישום."
-#: engine/core/viewsets.py:892
+#: engine/core/viewsets.py:988
msgid ""
"Manages the retrieval and handling of PromoCode instances through various "
"API actions."
msgstr "מנהל את אחזור וטיפול במקרי PromoCode באמצעות פעולות API שונות."
-#: engine/core/viewsets.py:914
+#: engine/core/viewsets.py:1019
msgid "Represents a view set for managing promotions. "
msgstr "מייצג קבוצת תצוגות לניהול מבצעים."
-#: engine/core/viewsets.py:927
+#: engine/core/viewsets.py:1032
msgid "Handles operations related to Stock data in the system."
msgstr "מטפל בפעולות הקשורות לנתוני המלאי במערכת."
-#: engine/core/viewsets.py:941
+#: engine/core/viewsets.py:1046
msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the "
-"retrieval, modification, and customization of products within the wish list."
-" This ViewSet facilitates functionality such as adding, removing, and bulk "
+"retrieval, modification, and customization of products within the wish list. "
+"This ViewSet facilitates functionality such as adding, removing, and bulk "
"actions for wishlist products. Permission checks are integrated to ensure "
"that users can only manage their own wishlists unless explicit permissions "
"are granted."
@@ -3298,7 +3306,7 @@ msgstr ""
"שמשתמשים יוכלו לנהל רק את רשימות המשאלות שלהם, אלא אם כן ניתנו הרשאות "
"מפורשות."
-#: engine/core/viewsets.py:1056
+#: engine/core/viewsets.py:1183
msgid ""
"This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom "
@@ -3311,12 +3319,12 @@ msgstr ""
"לישויות כתובת. היא כוללת התנהגויות מיוחדות עבור שיטות HTTP שונות, עקיפת "
"סריאלייזר וטיפול בהרשאות בהתבסס על הקשר הבקשה."
-#: engine/core/viewsets.py:1123
+#: engine/core/viewsets.py:1254
#, python-brace-format
msgid "Geocoding error: {e}"
msgstr "שגיאת קידוד גיאוגרפי: {e}"
-#: engine/core/viewsets.py:1131
+#: engine/core/viewsets.py:1262
msgid ""
"Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing "
diff --git a/engine/core/locale/hi_IN/LC_MESSAGES/django.po b/engine/core/locale/hi_IN/LC_MESSAGES/django.po
index 2898d6a5..86ead85e 100644
--- a/engine/core/locale/hi_IN/LC_MESSAGES/django.po
+++ b/engine/core/locale/hi_IN/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 22:12+0300\n"
+"POT-Creation-Date: 2025-12-18 19:09+0300\n"
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: LANGUAGE \n"
@@ -28,110 +28,110 @@ msgstr ""
msgid "is active"
msgstr ""
-#: engine/core/abstract.py:21
+#: engine/core/abstract.py:22
msgid ""
"if set to false, this object can't be seen by users without needed permission"
msgstr ""
-#: engine/core/abstract.py:23 engine/core/choices.py:18
+#: engine/core/abstract.py:26 engine/core/choices.py:18
msgid "created"
msgstr ""
-#: engine/core/abstract.py:23
+#: engine/core/abstract.py:26
msgid "when the object first appeared on the database"
msgstr ""
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "modified"
msgstr ""
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "when the object was last modified"
msgstr ""
-#: engine/core/admin.py:85
+#: engine/core/admin.py:94
msgid "translations"
msgstr ""
-#: engine/core/admin.py:89
+#: engine/core/admin.py:102
msgid "general"
msgstr ""
-#: engine/core/admin.py:91
+#: engine/core/admin.py:106
msgid "relations"
msgstr ""
-#: engine/core/admin.py:93
+#: engine/core/admin.py:111
msgid "additional info"
msgstr ""
-#: engine/core/admin.py:111
+#: engine/core/admin.py:133
msgid "metadata"
msgstr ""
-#: engine/core/admin.py:118
+#: engine/core/admin.py:141
msgid "timestamps"
msgstr ""
-#: engine/core/admin.py:133
+#: engine/core/admin.py:157
#, python-format
msgid "activate selected %(verbose_name_plural)s"
msgstr ""
-#: engine/core/admin.py:138
+#: engine/core/admin.py:165
msgid "selected items have been activated."
msgstr ""
-#: engine/core/admin.py:144
+#: engine/core/admin.py:173
#, python-format
msgid "deactivate selected %(verbose_name_plural)s"
msgstr ""
-#: engine/core/admin.py:149
+#: engine/core/admin.py:183
msgid "selected items have been deactivated."
msgstr ""
-#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586
-#: engine/core/graphene/object_types.py:593 engine/core/models.py:801
-#: engine/core/models.py:809
+#: engine/core/admin.py:195 engine/core/graphene/object_types.py:650
+#: engine/core/graphene/object_types.py:657 engine/core/models.py:824
+#: engine/core/models.py:832
msgid "attribute value"
msgstr ""
-#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75
-#: engine/core/models.py:810
+#: engine/core/admin.py:196 engine/core/graphene/object_types.py:75
+#: engine/core/models.py:833
msgid "attribute values"
msgstr ""
-#: engine/core/admin.py:172
+#: engine/core/admin.py:207
msgid "image"
msgstr ""
-#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474
+#: engine/core/admin.py:208 engine/core/graphene/object_types.py:527
msgid "images"
msgstr ""
-#: engine/core/admin.py:184 engine/core/models.py:566
+#: engine/core/admin.py:219 engine/core/models.py:587
msgid "stock"
msgstr ""
-#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640
+#: engine/core/admin.py:220 engine/core/graphene/object_types.py:710
msgid "stocks"
msgstr ""
-#: engine/core/admin.py:196 engine/core/models.py:1818
+#: engine/core/admin.py:231 engine/core/models.py:1930
msgid "order product"
msgstr ""
-#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389
-#: engine/core/models.py:1819
+#: engine/core/admin.py:232 engine/core/graphene/object_types.py:438
+#: engine/core/models.py:1931
msgid "order products"
msgstr ""
-#: engine/core/admin.py:210 engine/core/admin.py:211
+#: engine/core/admin.py:250 engine/core/admin.py:251
msgid "children"
msgstr ""
-#: engine/core/admin.py:977
+#: engine/core/admin.py:1059
msgid "Config"
msgstr ""
@@ -183,395 +183,395 @@ msgstr ""
msgid "successful"
msgstr ""
-#: engine/core/docs/drf/views.py:31
+#: engine/core/docs/drf/views.py:30
msgid "OpenAPI schema in selected format with selected language"
msgstr ""
-#: engine/core/docs/drf/views.py:33
+#: engine/core/docs/drf/views.py:32
msgid ""
"OpenApi3 schema for this API. Format can be selected via content "
"negotiation. Language can be selected with Accept-Language and query "
"parameter both."
msgstr ""
-#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37
+#: engine/core/docs/drf/views.py:43 engine/core/graphene/mutations.py:37
msgid "cache I/O"
msgstr ""
-#: engine/core/docs/drf/views.py:46
+#: engine/core/docs/drf/views.py:45
msgid ""
"apply only a key to read permitted data from cache.\n"
"apply key, data and timeout with authentication to write data to cache."
msgstr ""
-#: engine/core/docs/drf/views.py:62
+#: engine/core/docs/drf/views.py:63
msgid "get a list of supported languages"
msgstr ""
-#: engine/core/docs/drf/views.py:74
+#: engine/core/docs/drf/views.py:75
msgid "get application's exposable parameters"
msgstr ""
-#: engine/core/docs/drf/views.py:84
+#: engine/core/docs/drf/views.py:89
msgid "send a message to the support team"
msgstr ""
-#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57
+#: engine/core/docs/drf/views.py:103 engine/core/graphene/mutations.py:59
msgid "request a CORSed URL"
msgstr ""
-#: engine/core/docs/drf/views.py:112
+#: engine/core/docs/drf/views.py:119
msgid "Search between products, categories and brands"
msgstr ""
-#: engine/core/docs/drf/views.py:130
+#: engine/core/docs/drf/views.py:141
msgid "global search endpoint to query across project's tables"
msgstr ""
-#: engine/core/docs/drf/views.py:139
+#: engine/core/docs/drf/views.py:150
msgid "purchase an order as a business"
msgstr ""
-#: engine/core/docs/drf/views.py:146
+#: engine/core/docs/drf/views.py:158
msgid ""
"purchase an order as a business, using the provided `products` with "
"`product_uuid` and `attributes`."
msgstr ""
-#: engine/core/docs/drf/views.py:164
+#: engine/core/docs/drf/views.py:177
msgid "download a digital asset from purchased digital order"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:61
+#: engine/core/docs/drf/viewsets.py:65
msgid "list all attribute groups (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:68
+#: engine/core/docs/drf/viewsets.py:75
msgid "retrieve a single attribute group (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:75
+#: engine/core/docs/drf/viewsets.py:82
msgid "create an attribute group"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:82
+#: engine/core/docs/drf/viewsets.py:92
msgid "delete an attribute group"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:89
+#: engine/core/docs/drf/viewsets.py:99
msgid "rewrite an existing attribute group saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:96
+#: engine/core/docs/drf/viewsets.py:107
msgid "rewrite some fields of an existing attribute group saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:106
+#: engine/core/docs/drf/viewsets.py:118
msgid "list all attributes (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:113
+#: engine/core/docs/drf/viewsets.py:128
msgid "retrieve a single attribute (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:120
+#: engine/core/docs/drf/viewsets.py:135
msgid "create an attribute"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:127
+#: engine/core/docs/drf/viewsets.py:142
msgid "delete an attribute"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:134
+#: engine/core/docs/drf/viewsets.py:149
msgid "rewrite an existing attribute saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:141
+#: engine/core/docs/drf/viewsets.py:156
msgid "rewrite some fields of an existing attribute saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:151
+#: engine/core/docs/drf/viewsets.py:166
msgid "list all attribute values (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:158
+#: engine/core/docs/drf/viewsets.py:176
msgid "retrieve a single attribute value (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:165
+#: engine/core/docs/drf/viewsets.py:183
msgid "create an attribute value"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:172
+#: engine/core/docs/drf/viewsets.py:193
msgid "delete an attribute value"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:179
+#: engine/core/docs/drf/viewsets.py:200
msgid "rewrite an existing attribute value saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:186
+#: engine/core/docs/drf/viewsets.py:208
msgid "rewrite some fields of an existing attribute value saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197
+#: engine/core/docs/drf/viewsets.py:219 engine/core/docs/drf/viewsets.py:220
msgid "list all categories (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205
+#: engine/core/docs/drf/viewsets.py:230 engine/core/docs/drf/viewsets.py:231
msgid "retrieve a single category (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258
+#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:286
msgid "Category UUID or slug"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221
+#: engine/core/docs/drf/viewsets.py:246 engine/core/docs/drf/viewsets.py:247
msgid "create a category"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229
+#: engine/core/docs/drf/viewsets.py:254 engine/core/docs/drf/viewsets.py:255
msgid "delete a category"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237
+#: engine/core/docs/drf/viewsets.py:262 engine/core/docs/drf/viewsets.py:263
msgid "rewrite an existing category saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:244 engine/core/docs/drf/viewsets.py:245
+#: engine/core/docs/drf/viewsets.py:270 engine/core/docs/drf/viewsets.py:272
msgid "rewrite some fields of an existing category saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704
-#: engine/core/docs/drf/viewsets.py:988
+#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:1046
#: engine/core/graphene/object_types.py:117
-#: engine/core/graphene/object_types.py:207
-#: engine/core/graphene/object_types.py:482
+#: engine/core/graphene/object_types.py:236
+#: engine/core/graphene/object_types.py:537
msgid "SEO Meta snapshot"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:253
+#: engine/core/docs/drf/viewsets.py:281
msgid "returns a snapshot of the category's SEO meta data"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:274
+#: engine/core/docs/drf/viewsets.py:302
msgid "list all orders (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:275
+#: engine/core/docs/drf/viewsets.py:303
msgid "for non-staff users, only their own orders are returned."
msgstr ""
-#: engine/core/docs/drf/viewsets.py:281
+#: engine/core/docs/drf/viewsets.py:309
msgid ""
"Case-insensitive substring search across human_readable_id, order_products."
"product.name, and order_products.product.partnumber"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:288
+#: engine/core/docs/drf/viewsets.py:316
msgid "Filter orders with buy_time >= this ISO 8601 datetime"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:293
+#: engine/core/docs/drf/viewsets.py:321
msgid "Filter orders with buy_time <= this ISO 8601 datetime"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:298
+#: engine/core/docs/drf/viewsets.py:326
msgid "Filter by exact order UUID"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:303
+#: engine/core/docs/drf/viewsets.py:331
msgid "Filter by exact human-readable order ID"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:308
+#: engine/core/docs/drf/viewsets.py:336
msgid "Filter by user's email (case-insensitive exact match)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:313
+#: engine/core/docs/drf/viewsets.py:341
msgid "Filter by user's UUID"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:318
+#: engine/core/docs/drf/viewsets.py:347
msgid "Filter by order status (case-insensitive substring match)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:324
+#: engine/core/docs/drf/viewsets.py:354
msgid ""
"Order by one of: uuid, human_readable_id, user_email, user, status, created, "
"modified, buy_time, random. Prefix with '-' for descending (e.g. '-"
"buy_time')."
msgstr ""
-#: engine/core/docs/drf/viewsets.py:336
+#: engine/core/docs/drf/viewsets.py:366
msgid "retrieve a single order (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:341
+#: engine/core/docs/drf/viewsets.py:371
msgid "Order UUID or human-readable id"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:351
+#: engine/core/docs/drf/viewsets.py:381
msgid "create an order"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:352
+#: engine/core/docs/drf/viewsets.py:382
msgid "doesn't work for non-staff users."
msgstr ""
-#: engine/core/docs/drf/viewsets.py:359
+#: engine/core/docs/drf/viewsets.py:389
msgid "delete an order"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:366
+#: engine/core/docs/drf/viewsets.py:396
msgid "rewrite an existing order saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:373
+#: engine/core/docs/drf/viewsets.py:403
msgid "rewrite some fields of an existing order saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:380
+#: engine/core/docs/drf/viewsets.py:410
msgid "purchase an order"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:382
+#: engine/core/docs/drf/viewsets.py:412
msgid ""
"finalizes the order purchase. if `force_balance` is used, the purchase is "
"completed using the user's balance; if `force_payment` is used, a "
"transaction is initiated."
msgstr ""
-#: engine/core/docs/drf/viewsets.py:397
+#: engine/core/docs/drf/viewsets.py:427
msgid "retrieve current pending order of a user"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:398
+#: engine/core/docs/drf/viewsets.py:428
msgid "retrieves a current pending order of an authenticated user"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334
+#: engine/core/docs/drf/viewsets.py:438 engine/core/graphene/mutations.py:354
msgid "purchase an order without account creation"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:409
+#: engine/core/docs/drf/viewsets.py:439
msgid "finalizes the order purchase for a non-registered user."
msgstr ""
-#: engine/core/docs/drf/viewsets.py:420
+#: engine/core/docs/drf/viewsets.py:450
msgid "add product to order"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:421
+#: engine/core/docs/drf/viewsets.py:452
msgid ""
"adds a product to an order using the provided `product_uuid` and "
"`attributes`."
msgstr ""
-#: engine/core/docs/drf/viewsets.py:429
+#: engine/core/docs/drf/viewsets.py:461
msgid "add a list of products to order, quantities will not count"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:430
+#: engine/core/docs/drf/viewsets.py:463
msgid ""
"adds a list of products to an order using the provided `product_uuid` and "
"`attributes`."
msgstr ""
-#: engine/core/docs/drf/viewsets.py:438
+#: engine/core/docs/drf/viewsets.py:472
msgid "remove product from order"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:439
+#: engine/core/docs/drf/viewsets.py:474
msgid ""
"removes a product from an order using the provided `product_uuid` and "
"`attributes`."
msgstr ""
-#: engine/core/docs/drf/viewsets.py:447
+#: engine/core/docs/drf/viewsets.py:483
msgid "remove product from order, quantities will not count"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:448
+#: engine/core/docs/drf/viewsets.py:485
msgid ""
"removes a list of products from an order using the provided `product_uuid` "
"and `attributes`"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:459
+#: engine/core/docs/drf/viewsets.py:497
msgid "list all wishlists (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:460
+#: engine/core/docs/drf/viewsets.py:498
msgid "for non-staff users, only their own wishlists are returned."
msgstr ""
-#: engine/core/docs/drf/viewsets.py:467
+#: engine/core/docs/drf/viewsets.py:508
msgid "retrieve a single wishlist (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:474
+#: engine/core/docs/drf/viewsets.py:515
msgid "create an wishlist"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:475
+#: engine/core/docs/drf/viewsets.py:516
msgid "Doesn't work for non-staff users."
msgstr ""
-#: engine/core/docs/drf/viewsets.py:482
+#: engine/core/docs/drf/viewsets.py:523
msgid "delete an wishlist"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:489
+#: engine/core/docs/drf/viewsets.py:530
msgid "rewrite an existing wishlist saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:496
+#: engine/core/docs/drf/viewsets.py:537
msgid "rewrite some fields of an existing wishlist saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:503
+#: engine/core/docs/drf/viewsets.py:544
msgid "retrieve current pending wishlist of a user"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:504
+#: engine/core/docs/drf/viewsets.py:545
msgid "retrieves a current pending wishlist of an authenticated user"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:514
+#: engine/core/docs/drf/viewsets.py:555
msgid "add product to wishlist"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:515
+#: engine/core/docs/drf/viewsets.py:557
msgid "adds a product to an wishlist using the provided `product_uuid`"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:523
+#: engine/core/docs/drf/viewsets.py:566
msgid "remove product from wishlist"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:524
+#: engine/core/docs/drf/viewsets.py:568
msgid "removes a product from an wishlist using the provided `product_uuid`"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:532
+#: engine/core/docs/drf/viewsets.py:577
msgid "add many products to wishlist"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:533
+#: engine/core/docs/drf/viewsets.py:579
msgid "adds many products to an wishlist using the provided `product_uuids`"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:541
+#: engine/core/docs/drf/viewsets.py:588
msgid "remove many products from wishlist"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:542
+#: engine/core/docs/drf/viewsets.py:590
msgid ""
"removes many products from an wishlist using the provided `product_uuids`"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:549
+#: engine/core/docs/drf/viewsets.py:598
msgid ""
"Filter by one or more attribute name/value pairs. \n"
"• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n"
@@ -588,592 +588,592 @@ msgid ""
"`b64-description=icontains-aGVhdC1jb2xk`"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:568 engine/core/docs/drf/viewsets.py:569
+#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
msgid "list all products (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:574
+#: engine/core/docs/drf/viewsets.py:623
msgid "(exact) Product UUID"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:581
+#: engine/core/docs/drf/viewsets.py:630
msgid ""
"Comma-separated list of fields to sort by. Prefix with `-` for "
"descending. \n"
"**Allowed:** uuid, rating, name, slug, created, modified, price, random"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599
+#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
msgid "retrieve a single product (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634
-#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672
-#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710
+#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683
+#: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725
+#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763
msgid "Product UUID or slug"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
+#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
#: engine/core/graphene/dashboard_mutations/product.py:80
#: engine/core/graphene/dashboard_mutations/product.py:118
#: engine/core/graphene/dashboard_mutations/product.py:166
msgid "create a product"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629
+#: engine/core/docs/drf/viewsets.py:677 engine/core/docs/drf/viewsets.py:678
msgid "rewrite an existing product, preserving non-editable fields"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
+#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:700
msgid ""
"update some fields of an existing product, preserving non-editable fields"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
+#: engine/core/docs/drf/viewsets.py:719 engine/core/docs/drf/viewsets.py:720
msgid "delete a product"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686
+#: engine/core/docs/drf/viewsets.py:738 engine/core/docs/drf/viewsets.py:739
msgid "lists all permitted feedbacks for a product"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:705
+#: engine/core/docs/drf/viewsets.py:758
msgid "returns a snapshot of the product's SEO meta data"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:726
+#: engine/core/docs/drf/viewsets.py:779
msgid "list all addresses"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:736
+#: engine/core/docs/drf/viewsets.py:789
msgid "retrieve a single address"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:746
+#: engine/core/docs/drf/viewsets.py:799
msgid "create a new address"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:810
msgid "delete an address"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:767
+#: engine/core/docs/drf/viewsets.py:820
msgid "update an entire address"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:778
+#: engine/core/docs/drf/viewsets.py:831
msgid "partially update an address"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:789
+#: engine/core/docs/drf/viewsets.py:842
msgid "autocomplete address suggestions"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:794
+#: engine/core/docs/drf/viewsets.py:848
msgid "raw data query string, please append with data from geo-IP endpoint"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:800
+#: engine/core/docs/drf/viewsets.py:855
msgid "limit the results amount, 1 < limit < 10, default: 5"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:816
+#: engine/core/docs/drf/viewsets.py:871
msgid "list all feedbacks (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:823
+#: engine/core/docs/drf/viewsets.py:881
msgid "retrieve a single feedback (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:830
+#: engine/core/docs/drf/viewsets.py:888
msgid "create a feedback"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:837
+#: engine/core/docs/drf/viewsets.py:895
msgid "delete a feedback"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:844
+#: engine/core/docs/drf/viewsets.py:902
msgid "rewrite an existing feedback saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:851
+#: engine/core/docs/drf/viewsets.py:909
msgid "rewrite some fields of an existing feedback saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:861
+#: engine/core/docs/drf/viewsets.py:919
msgid "list all order–product relations (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:871
+#: engine/core/docs/drf/viewsets.py:929
msgid "retrieve a single order–product relation (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:881
+#: engine/core/docs/drf/viewsets.py:939
msgid "create a new order–product relation"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:891
+#: engine/core/docs/drf/viewsets.py:949
msgid "replace an existing order–product relation"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:901
+#: engine/core/docs/drf/viewsets.py:959
msgid "partially update an existing order–product relation"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:911
+#: engine/core/docs/drf/viewsets.py:969
msgid "delete an order–product relation"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:921
+#: engine/core/docs/drf/viewsets.py:979
msgid "add or remove feedback on an order–product relation"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:938
+#: engine/core/docs/drf/viewsets.py:996
msgid "list all brands (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:945
+#: engine/core/docs/drf/viewsets.py:1003
msgid "retrieve a single brand (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993
+#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051
msgid "Brand UUID or slug"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:960
+#: engine/core/docs/drf/viewsets.py:1018
msgid "create a brand"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:967
+#: engine/core/docs/drf/viewsets.py:1025
msgid "delete a brand"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:974
+#: engine/core/docs/drf/viewsets.py:1032
msgid "rewrite an existing brand saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:981
+#: engine/core/docs/drf/viewsets.py:1039
msgid "rewrite some fields of an existing brand saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1006
+#: engine/core/docs/drf/viewsets.py:1064
msgid "list all vendors (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1013
+#: engine/core/docs/drf/viewsets.py:1074
msgid "retrieve a single vendor (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1020
+#: engine/core/docs/drf/viewsets.py:1081
msgid "create a vendor"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1027
+#: engine/core/docs/drf/viewsets.py:1088
msgid "delete a vendor"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1034
+#: engine/core/docs/drf/viewsets.py:1095
msgid "rewrite an existing vendor saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1041
+#: engine/core/docs/drf/viewsets.py:1102
msgid "rewrite some fields of an existing vendor saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1051
+#: engine/core/docs/drf/viewsets.py:1112
msgid "list all product images (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1058
+#: engine/core/docs/drf/viewsets.py:1122
msgid "retrieve a single product image (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1065
+#: engine/core/docs/drf/viewsets.py:1129
msgid "create a product image"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1072
+#: engine/core/docs/drf/viewsets.py:1139
msgid "delete a product image"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1079
+#: engine/core/docs/drf/viewsets.py:1146
msgid "rewrite an existing product image saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1086
+#: engine/core/docs/drf/viewsets.py:1154
msgid "rewrite some fields of an existing product image saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1096
+#: engine/core/docs/drf/viewsets.py:1165
msgid "list all promo codes (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1103
+#: engine/core/docs/drf/viewsets.py:1175
msgid "retrieve a single promo code (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1110
+#: engine/core/docs/drf/viewsets.py:1182
msgid "create a promo code"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1117
+#: engine/core/docs/drf/viewsets.py:1189
msgid "delete a promo code"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1124
+#: engine/core/docs/drf/viewsets.py:1196
msgid "rewrite an existing promo code saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1131
+#: engine/core/docs/drf/viewsets.py:1203
msgid "rewrite some fields of an existing promo code saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1141
+#: engine/core/docs/drf/viewsets.py:1213
msgid "list all promotions (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1148
+#: engine/core/docs/drf/viewsets.py:1223
msgid "retrieve a single promotion (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1155
+#: engine/core/docs/drf/viewsets.py:1230
msgid "create a promotion"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1162
+#: engine/core/docs/drf/viewsets.py:1237
msgid "delete a promotion"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1169
+#: engine/core/docs/drf/viewsets.py:1244
msgid "rewrite an existing promotion saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1176
+#: engine/core/docs/drf/viewsets.py:1251
msgid "rewrite some fields of an existing promotion saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1186
+#: engine/core/docs/drf/viewsets.py:1261
msgid "list all stocks (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1193
+#: engine/core/docs/drf/viewsets.py:1268
msgid "retrieve a single stock (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1200
+#: engine/core/docs/drf/viewsets.py:1275
msgid "create a stock record"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1207
+#: engine/core/docs/drf/viewsets.py:1282
msgid "delete a stock record"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1214
+#: engine/core/docs/drf/viewsets.py:1289
msgid "rewrite an existing stock record saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1221
+#: engine/core/docs/drf/viewsets.py:1297
msgid "rewrite some fields of an existing stock record saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1231
+#: engine/core/docs/drf/viewsets.py:1308
msgid "list all product tags (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1238
+#: engine/core/docs/drf/viewsets.py:1318
msgid "retrieve a single product tag (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1245
+#: engine/core/docs/drf/viewsets.py:1325
msgid "create a product tag"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1252
+#: engine/core/docs/drf/viewsets.py:1335
msgid "delete a product tag"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1259
+#: engine/core/docs/drf/viewsets.py:1342
msgid "rewrite an existing product tag saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1266
+#: engine/core/docs/drf/viewsets.py:1350
msgid "rewrite some fields of an existing product tag saving non-editables"
msgstr ""
-#: engine/core/elasticsearch/__init__.py:122
-#: engine/core/elasticsearch/__init__.py:570
+#: engine/core/elasticsearch/__init__.py:127
+#: engine/core/elasticsearch/__init__.py:627
msgid "no search term provided."
msgstr ""
-#: engine/core/filters.py:69 engine/core/filters.py:426
-#: engine/core/filters.py:553
+#: engine/core/filters.py:78 engine/core/filters.py:484
+#: engine/core/filters.py:625
msgid "Search"
msgstr ""
-#: engine/core/filters.py:70 engine/core/filters.py:583
-#: engine/core/filters.py:612
+#: engine/core/filters.py:79 engine/core/filters.py:662
+#: engine/core/filters.py:691
msgid "UUID"
msgstr ""
-#: engine/core/filters.py:71 engine/core/filters.py:428
-#: engine/core/filters.py:555
+#: engine/core/filters.py:80 engine/core/filters.py:487
+#: engine/core/filters.py:627
msgid "Name"
msgstr ""
-#: engine/core/filters.py:72 engine/core/filters.py:557
+#: engine/core/filters.py:82 engine/core/filters.py:630
msgid "Categories"
msgstr ""
-#: engine/core/filters.py:74
+#: engine/core/filters.py:86
msgid "Categories Slugs"
msgstr ""
-#: engine/core/filters.py:75 engine/core/filters.py:436
+#: engine/core/filters.py:88 engine/core/filters.py:495
msgid "Tags"
msgstr ""
-#: engine/core/filters.py:76
+#: engine/core/filters.py:90
msgid "Min Price"
msgstr ""
-#: engine/core/filters.py:77
+#: engine/core/filters.py:93
msgid "Max Price"
msgstr ""
-#: engine/core/filters.py:78
+#: engine/core/filters.py:95
msgid "Is Active"
msgstr ""
-#: engine/core/filters.py:79
+#: engine/core/filters.py:96
msgid "Brand"
msgstr ""
-#: engine/core/filters.py:80
+#: engine/core/filters.py:97
msgid "Attributes"
msgstr ""
-#: engine/core/filters.py:81
+#: engine/core/filters.py:99
msgid "Quantity"
msgstr ""
-#: engine/core/filters.py:82 engine/core/filters.py:430
-#: engine/core/filters.py:556 engine/core/models.py:321
-#: engine/core/models.py:489 engine/core/models.py:644
+#: engine/core/filters.py:101 engine/core/filters.py:489
+#: engine/core/filters.py:628 engine/core/models.py:327
+#: engine/core/models.py:508 engine/core/models.py:665
msgid "Slug"
msgstr ""
-#: engine/core/filters.py:83
+#: engine/core/filters.py:102
msgid "Is Digital"
msgstr ""
-#: engine/core/filters.py:84
+#: engine/core/filters.py:104
msgid "Include sub-categories"
msgstr ""
-#: engine/core/filters.py:87
+#: engine/core/filters.py:108
msgid "Include personal ordered"
msgstr ""
-#: engine/core/filters.py:89 engine/core/models.py:648
+#: engine/core/filters.py:110 engine/core/models.py:669
msgid "SKU"
msgstr ""
-#: engine/core/filters.py:184
+#: engine/core/filters.py:212
msgid "there must be a category_uuid to use include_subcategories flag"
msgstr ""
-#: engine/core/filters.py:353
+#: engine/core/filters.py:398
msgid "Search (ID, product name or part number)"
msgstr ""
-#: engine/core/filters.py:356
+#: engine/core/filters.py:402
msgid "Bought after (inclusive)"
msgstr ""
-#: engine/core/filters.py:357
+#: engine/core/filters.py:405
msgid "Bought before (inclusive)"
msgstr ""
-#: engine/core/filters.py:360 engine/core/filters.py:407
-#: engine/core/filters.py:614
+#: engine/core/filters.py:410 engine/core/filters.py:461
+#: engine/core/filters.py:696
msgid "User email"
msgstr ""
-#: engine/core/filters.py:361 engine/core/filters.py:408
-#: engine/core/filters.py:592 engine/core/filters.py:613
+#: engine/core/filters.py:413 engine/core/filters.py:464
+#: engine/core/filters.py:671 engine/core/filters.py:693
msgid "User UUID"
msgstr ""
-#: engine/core/filters.py:362
+#: engine/core/filters.py:415
msgid "Status"
msgstr ""
-#: engine/core/filters.py:366
+#: engine/core/filters.py:419
msgid "Human Readable ID"
msgstr ""
-#: engine/core/filters.py:429
+#: engine/core/filters.py:488
msgid "Parent"
msgstr ""
-#: engine/core/filters.py:433
+#: engine/core/filters.py:492
msgid "Whole category(has at least 1 product or not)"
msgstr ""
-#: engine/core/filters.py:437
+#: engine/core/filters.py:496
msgid "Level"
msgstr ""
-#: engine/core/filters.py:587
+#: engine/core/filters.py:666
msgid "Product UUID"
msgstr ""
-#: engine/core/graphene/mutations.py:40
+#: engine/core/graphene/mutations.py:41
msgid "key to look for in or set into the cache"
msgstr ""
-#: engine/core/graphene/mutations.py:41
+#: engine/core/graphene/mutations.py:43
msgid "data to store in cache"
msgstr ""
-#: engine/core/graphene/mutations.py:44
+#: engine/core/graphene/mutations.py:46
msgid "timeout in seconds to set the data for into the cache"
msgstr ""
-#: engine/core/graphene/mutations.py:47
+#: engine/core/graphene/mutations.py:49
msgid "cached data"
msgstr ""
-#: engine/core/graphene/mutations.py:62
+#: engine/core/graphene/mutations.py:64
msgid "camelized JSON data from the requested URL"
msgstr ""
-#: engine/core/graphene/mutations.py:67 engine/core/views.py:257
+#: engine/core/graphene/mutations.py:69 engine/core/views.py:249
msgid "only URLs starting with http(s):// are allowed"
msgstr ""
-#: engine/core/graphene/mutations.py:83
+#: engine/core/graphene/mutations.py:87
msgid "add a product to the order"
msgstr ""
-#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131
-#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287
+#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139
+#: engine/core/graphene/mutations.py:255 engine/core/graphene/mutations.py:307
#, python-brace-format
msgid "order {order_uuid} not found"
msgstr ""
-#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159
+#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167
msgid "remove a product from the order"
msgstr ""
-#: engine/core/graphene/mutations.py:137
+#: engine/core/graphene/mutations.py:145
msgid "remove all products from the order"
msgstr ""
-#: engine/core/graphene/mutations.py:182
+#: engine/core/graphene/mutations.py:190
msgid "buy an order"
msgstr ""
-#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265
+#: engine/core/graphene/mutations.py:221 engine/core/graphene/mutations.py:283
msgid "please provide either order_uuid or order_hr_id - mutually exclusive"
msgstr ""
-#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501
-#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712
+#: engine/core/graphene/mutations.py:250 engine/core/graphene/mutations.py:525
+#: engine/core/graphene/mutations.py:574 engine/core/viewsets.py:753
msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr ""
-#: engine/core/graphene/mutations.py:245
+#: engine/core/graphene/mutations.py:261
msgid "perform an action on a list of products in the order"
msgstr ""
-#: engine/core/graphene/mutations.py:250
+#: engine/core/graphene/mutations.py:266
msgid "remove/add"
msgstr ""
-#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323
+#: engine/core/graphene/mutations.py:302 engine/core/graphene/mutations.py:343
msgid "action must be either add or remove"
msgstr ""
-#: engine/core/graphene/mutations.py:293
+#: engine/core/graphene/mutations.py:313
msgid "perform an action on a list of products in the wishlist"
msgstr ""
-#: engine/core/graphene/mutations.py:311
+#: engine/core/graphene/mutations.py:331
msgid "please provide wishlist_uuid value"
msgstr ""
-#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404
-#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460
-#: engine/core/graphene/mutations.py:504
+#: engine/core/graphene/mutations.py:348 engine/core/graphene/mutations.py:424
+#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480
+#: engine/core/graphene/mutations.py:530
#, python-brace-format
msgid "wishlist {wishlist_uuid} not found"
msgstr ""
-#: engine/core/graphene/mutations.py:382
+#: engine/core/graphene/mutations.py:402
msgid "add a product to the wishlist"
msgstr ""
-#: engine/core/graphene/mutations.py:410
+#: engine/core/graphene/mutations.py:430
msgid "remove a product from the wishlist"
msgstr ""
-#: engine/core/graphene/mutations.py:438
+#: engine/core/graphene/mutations.py:458
msgid "remove all products from the wishlist"
msgstr ""
-#: engine/core/graphene/mutations.py:466
+#: engine/core/graphene/mutations.py:486
msgid "buy all products from the wishlist"
msgstr ""
-#: engine/core/graphene/mutations.py:510
+#: engine/core/graphene/mutations.py:536
msgid "buy a product"
msgstr ""
-#: engine/core/graphene/mutations.py:516
+#: engine/core/graphene/mutations.py:543
msgid ""
"please send the attributes as the string formatted like attr1=value1,"
"attr2=value2"
msgstr ""
-#: engine/core/graphene/mutations.py:549
+#: engine/core/graphene/mutations.py:581
msgid "add or delete a feedback for orderproduct"
msgstr ""
-#: engine/core/graphene/mutations.py:573
+#: engine/core/graphene/mutations.py:607
msgid "action must be either `add` or `remove`"
msgstr ""
-#: engine/core/graphene/mutations.py:576
+#: engine/core/graphene/mutations.py:610
#, python-brace-format
msgid "order product {order_product_uuid} not found"
msgstr ""
-#: engine/core/graphene/mutations.py:582
+#: engine/core/graphene/mutations.py:617
msgid "original address string provided by the user"
msgstr ""
-#: engine/core/graphene/mutations.py:618 engine/core/models.py:955
-#: engine/core/models.py:968 engine/core/models.py:1383
-#: engine/core/models.py:1412 engine/core/models.py:1437
-#: engine/core/viewsets.py:715
+#: engine/core/graphene/mutations.py:654 engine/core/models.py:978
+#: engine/core/models.py:991 engine/core/models.py:1435
+#: engine/core/models.py:1466 engine/core/models.py:1497
+#: engine/core/viewsets.py:760
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr ""
-#: engine/core/graphene/mutations.py:632
+#: engine/core/graphene/mutations.py:668
msgid "limit must be between 1 and 10"
msgstr ""
-#: engine/core/graphene/mutations.py:681
+#: engine/core/graphene/mutations.py:717
msgid "elasticsearch - works like a charm"
msgstr ""
#: engine/core/graphene/object_types.py:82
-#: engine/core/graphene/object_types.py:370
-#: engine/core/graphene/object_types.py:417 engine/core/models.py:772
-#: engine/core/models.py:1250 engine/core/models.py:1897
+#: engine/core/graphene/object_types.py:417
+#: engine/core/graphene/object_types.py:468 engine/core/models.py:795
+#: engine/core/models.py:1289 engine/core/models.py:2021
msgid "attributes"
msgstr ""
@@ -1186,139 +1186,139 @@ msgid "groups of attributes"
msgstr ""
#: engine/core/graphene/object_types.py:116
-#: engine/core/graphene/object_types.py:193
-#: engine/core/graphene/object_types.py:223 engine/core/models.py:432
+#: engine/core/graphene/object_types.py:214
+#: engine/core/graphene/object_types.py:252 engine/core/models.py:451
msgid "categories"
msgstr ""
-#: engine/core/graphene/object_types.py:124 engine/core/models.py:503
+#: engine/core/graphene/object_types.py:132 engine/core/models.py:522
msgid "brands"
msgstr ""
-#: engine/core/graphene/object_types.py:195
+#: engine/core/graphene/object_types.py:216
msgid "category image url"
msgstr ""
-#: engine/core/graphene/object_types.py:196
-#: engine/core/graphene/object_types.py:317 engine/core/models.py:283
+#: engine/core/graphene/object_types.py:217
+#: engine/core/graphene/object_types.py:362 engine/core/models.py:289
msgid "markup percentage"
msgstr ""
-#: engine/core/graphene/object_types.py:199
+#: engine/core/graphene/object_types.py:221
msgid "which attributes and values can be used for filtering this category."
msgstr ""
-#: engine/core/graphene/object_types.py:203
+#: engine/core/graphene/object_types.py:227
msgid "minimum and maximum prices for products in this category, if available."
msgstr ""
-#: engine/core/graphene/object_types.py:205
+#: engine/core/graphene/object_types.py:231
msgid "tags for this category"
msgstr ""
-#: engine/core/graphene/object_types.py:206
+#: engine/core/graphene/object_types.py:234
msgid "products in this category"
msgstr ""
-#: engine/core/graphene/object_types.py:324 engine/core/models.py:188
+#: engine/core/graphene/object_types.py:369 engine/core/models.py:194
msgid "vendors"
msgstr ""
-#: engine/core/graphene/object_types.py:328
+#: engine/core/graphene/object_types.py:373
msgid "Latitude (Y coordinate)"
msgstr ""
-#: engine/core/graphene/object_types.py:329
+#: engine/core/graphene/object_types.py:374
msgid "Longitude (X coordinate)"
msgstr ""
-#: engine/core/graphene/object_types.py:358
+#: engine/core/graphene/object_types.py:403
msgid "comment"
msgstr ""
-#: engine/core/graphene/object_types.py:359
-#: engine/core/graphene/object_types.py:483
+#: engine/core/graphene/object_types.py:405
+#: engine/core/graphene/object_types.py:539
msgid "rating value from 1 to 10, inclusive, or 0 if not set."
msgstr ""
-#: engine/core/graphene/object_types.py:366
+#: engine/core/graphene/object_types.py:413
msgid "represents feedback from a user."
msgstr ""
-#: engine/core/graphene/object_types.py:371
-#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244
+#: engine/core/graphene/object_types.py:418
+#: engine/core/graphene/object_types.py:469 engine/core/models.py:1283
msgid "notifications"
msgstr ""
-#: engine/core/graphene/object_types.py:372
+#: engine/core/graphene/object_types.py:420
msgid "download url for this order product if applicable"
msgstr ""
-#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736
+#: engine/core/graphene/object_types.py:422 engine/core/models.py:1848
msgid "feedback"
msgstr ""
-#: engine/core/graphene/object_types.py:407
+#: engine/core/graphene/object_types.py:456
msgid "a list of order products in this order"
msgstr ""
-#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214
+#: engine/core/graphene/object_types.py:458 engine/core/models.py:1253
msgid "billing address"
msgstr ""
-#: engine/core/graphene/object_types.py:412
+#: engine/core/graphene/object_types.py:462
msgid ""
"shipping address for this order, leave blank if same as billing address or "
"if not applicable"
msgstr ""
-#: engine/core/graphene/object_types.py:414
+#: engine/core/graphene/object_types.py:465
msgid "total price of this order"
msgstr ""
-#: engine/core/graphene/object_types.py:415
+#: engine/core/graphene/object_types.py:466
msgid "total quantity of products in order"
msgstr ""
-#: engine/core/graphene/object_types.py:416
+#: engine/core/graphene/object_types.py:467
msgid "are all products in the order digital"
msgstr ""
-#: engine/core/graphene/object_types.py:419
+#: engine/core/graphene/object_types.py:471
msgid "transactions for this order"
msgstr ""
-#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278
+#: engine/core/graphene/object_types.py:491 engine/core/models.py:1317
msgid "orders"
msgstr ""
-#: engine/core/graphene/object_types.py:459
+#: engine/core/graphene/object_types.py:512
msgid "image url"
msgstr ""
-#: engine/core/graphene/object_types.py:466
+#: engine/core/graphene/object_types.py:519
msgid "product's images"
msgstr ""
-#: engine/core/graphene/object_types.py:473 engine/core/models.py:431
-#: engine/core/models.py:586
+#: engine/core/graphene/object_types.py:526 engine/core/models.py:450
+#: engine/core/models.py:607
msgid "category"
msgstr ""
-#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737
+#: engine/core/graphene/object_types.py:528 engine/core/models.py:1849
msgid "feedbacks"
msgstr ""
-#: engine/core/graphene/object_types.py:476 engine/core/models.py:502
-#: engine/core/models.py:595
+#: engine/core/graphene/object_types.py:529 engine/core/models.py:521
+#: engine/core/models.py:616
msgid "brand"
msgstr ""
-#: engine/core/graphene/object_types.py:477 engine/core/models.py:106
+#: engine/core/graphene/object_types.py:531 engine/core/models.py:106
msgid "attribute groups"
msgstr ""
-#: engine/core/graphene/object_types.py:478
+#: engine/core/graphene/object_types.py:533
#: engine/core/templates/digital_order_created_email.html:111
#: engine/core/templates/digital_order_delivered_email.html:109
#: engine/core/templates/shipped_order_created_email.html:109
@@ -1326,7 +1326,7 @@ msgstr ""
msgid "price"
msgstr ""
-#: engine/core/graphene/object_types.py:479
+#: engine/core/graphene/object_types.py:534
#: engine/core/templates/digital_order_created_email.html:110
#: engine/core/templates/digital_order_delivered_email.html:108
#: engine/core/templates/shipped_order_created_email.html:108
@@ -1334,39 +1334,39 @@ msgstr ""
msgid "quantity"
msgstr ""
-#: engine/core/graphene/object_types.py:480
+#: engine/core/graphene/object_types.py:535
msgid "number of feedbacks"
msgstr ""
-#: engine/core/graphene/object_types.py:481
+#: engine/core/graphene/object_types.py:536
msgid "only available for personal orders"
msgstr ""
-#: engine/core/graphene/object_types.py:484
+#: engine/core/graphene/object_types.py:541
msgid "discount price"
msgstr ""
-#: engine/core/graphene/object_types.py:508 engine/core/models.py:658
+#: engine/core/graphene/object_types.py:565 engine/core/models.py:679
msgid "products"
msgstr ""
-#: engine/core/graphene/object_types.py:611
+#: engine/core/graphene/object_types.py:675
msgid "promocodes"
msgstr ""
-#: engine/core/graphene/object_types.py:621
+#: engine/core/graphene/object_types.py:690
msgid "products on sale"
msgstr ""
-#: engine/core/graphene/object_types.py:628 engine/core/models.py:904
+#: engine/core/graphene/object_types.py:698 engine/core/models.py:927
msgid "promotions"
msgstr ""
-#: engine/core/graphene/object_types.py:632 engine/core/models.py:187
+#: engine/core/graphene/object_types.py:702 engine/core/models.py:193
msgid "vendor"
msgstr ""
-#: engine/core/graphene/object_types.py:633 engine/core/models.py:657
+#: engine/core/graphene/object_types.py:703 engine/core/models.py:678
#: engine/core/templates/digital_order_created_email.html:109
#: engine/core/templates/digital_order_delivered_email.html:107
#: engine/core/templates/shipped_order_created_email.html:107
@@ -1374,98 +1374,98 @@ msgstr ""
msgid "product"
msgstr ""
-#: engine/core/graphene/object_types.py:644 engine/core/models.py:927
+#: engine/core/graphene/object_types.py:715 engine/core/models.py:950
msgid "wishlisted products"
msgstr ""
-#: engine/core/graphene/object_types.py:650 engine/core/models.py:944
+#: engine/core/graphene/object_types.py:722 engine/core/models.py:967
msgid "wishlists"
msgstr ""
-#: engine/core/graphene/object_types.py:654
+#: engine/core/graphene/object_types.py:727
msgid "tagged products"
msgstr ""
-#: engine/core/graphene/object_types.py:661 engine/core/models.py:224
-#: engine/core/models.py:601
+#: engine/core/graphene/object_types.py:735 engine/core/models.py:230
+#: engine/core/models.py:622
msgid "product tags"
msgstr ""
-#: engine/core/graphene/object_types.py:665
+#: engine/core/graphene/object_types.py:740
msgid "tagged categories"
msgstr ""
-#: engine/core/graphene/object_types.py:672
+#: engine/core/graphene/object_types.py:748
msgid "categories tags"
msgstr ""
-#: engine/core/graphene/object_types.py:676
+#: engine/core/graphene/object_types.py:752
msgid "project name"
msgstr ""
-#: engine/core/graphene/object_types.py:677
+#: engine/core/graphene/object_types.py:753
msgid "company name"
msgstr ""
-#: engine/core/graphene/object_types.py:678
+#: engine/core/graphene/object_types.py:754
msgid "company address"
msgstr ""
-#: engine/core/graphene/object_types.py:679
+#: engine/core/graphene/object_types.py:755
msgid "company phone number"
msgstr ""
-#: engine/core/graphene/object_types.py:680
+#: engine/core/graphene/object_types.py:758
msgid "email from, sometimes it must be used instead of host user value"
msgstr ""
-#: engine/core/graphene/object_types.py:681
+#: engine/core/graphene/object_types.py:761
msgid "email host user"
msgstr ""
-#: engine/core/graphene/object_types.py:682
+#: engine/core/graphene/object_types.py:762
msgid "maximum amount for payment"
msgstr ""
-#: engine/core/graphene/object_types.py:683
+#: engine/core/graphene/object_types.py:763
msgid "minimum amount for payment"
msgstr ""
-#: engine/core/graphene/object_types.py:684
+#: engine/core/graphene/object_types.py:764
msgid "analytics data"
msgstr ""
-#: engine/core/graphene/object_types.py:685
+#: engine/core/graphene/object_types.py:765
msgid "advertisement data"
msgstr ""
-#: engine/core/graphene/object_types.py:688
+#: engine/core/graphene/object_types.py:768
msgid "company configuration"
msgstr ""
-#: engine/core/graphene/object_types.py:692
+#: engine/core/graphene/object_types.py:772
msgid "language code"
msgstr ""
-#: engine/core/graphene/object_types.py:693
+#: engine/core/graphene/object_types.py:773
msgid "language name"
msgstr ""
-#: engine/core/graphene/object_types.py:694
+#: engine/core/graphene/object_types.py:774
msgid "language flag, if exists :)"
msgstr ""
-#: engine/core/graphene/object_types.py:697
+#: engine/core/graphene/object_types.py:777
msgid "supported languages"
msgstr ""
-#: engine/core/graphene/object_types.py:728
-#: engine/core/graphene/object_types.py:729
-#: engine/core/graphene/object_types.py:730
+#: engine/core/graphene/object_types.py:809
+#: engine/core/graphene/object_types.py:812
+#: engine/core/graphene/object_types.py:815
msgid "products search results"
msgstr ""
-#: engine/core/graphene/object_types.py:731
+#: engine/core/graphene/object_types.py:817
msgid "posts search results"
msgstr ""
@@ -1489,7 +1489,7 @@ msgstr ""
msgid "attribute group's name"
msgstr ""
-#: engine/core/models.py:105 engine/core/models.py:734
+#: engine/core/models.py:105 engine/core/models.py:755
msgid "attribute group"
msgstr ""
@@ -1504,47 +1504,47 @@ msgid ""
"use in systems that interact with third-party vendors."
msgstr ""
-#: engine/core/models.py:124
+#: engine/core/models.py:125
msgid "stores credentials and endpoints required for vendor communication"
msgstr ""
-#: engine/core/models.py:125
+#: engine/core/models.py:127
msgid "authentication info"
msgstr ""
-#: engine/core/models.py:130
+#: engine/core/models.py:132
msgid "define the markup for products retrieved from this vendor"
msgstr ""
-#: engine/core/models.py:131
+#: engine/core/models.py:133
msgid "vendor markup percentage"
msgstr ""
-#: engine/core/models.py:135
+#: engine/core/models.py:137
msgid "name of this vendor"
msgstr ""
-#: engine/core/models.py:136
+#: engine/core/models.py:138
msgid "vendor name"
msgstr ""
-#: engine/core/models.py:147
+#: engine/core/models.py:153
msgid "response file"
msgstr ""
-#: engine/core/models.py:148
+#: engine/core/models.py:154
msgid "vendor's last processing response"
msgstr ""
-#: engine/core/models.py:154
+#: engine/core/models.py:160
msgid "vendor's integration file path"
msgstr ""
-#: engine/core/models.py:155
+#: engine/core/models.py:161
msgid "integration path"
msgstr ""
-#: engine/core/models.py:197
+#: engine/core/models.py:203
msgid ""
"Represents a product tag used for classifying or identifying products. The "
"ProductTag class is designed to uniquely identify and classify products "
@@ -1553,42 +1553,42 @@ msgid ""
"metadata customization for administrative purposes."
msgstr ""
-#: engine/core/models.py:209 engine/core/models.py:240
+#: engine/core/models.py:215 engine/core/models.py:246
msgid "internal tag identifier for the product tag"
msgstr ""
-#: engine/core/models.py:210 engine/core/models.py:241
+#: engine/core/models.py:216 engine/core/models.py:247
msgid "tag name"
msgstr ""
-#: engine/core/models.py:214 engine/core/models.py:245
+#: engine/core/models.py:220 engine/core/models.py:251
msgid "user-friendly name for the product tag"
msgstr ""
-#: engine/core/models.py:215 engine/core/models.py:246
+#: engine/core/models.py:221 engine/core/models.py:252
msgid "tag display name"
msgstr ""
-#: engine/core/models.py:223
+#: engine/core/models.py:229
msgid "product tag"
msgstr ""
-#: engine/core/models.py:229
+#: engine/core/models.py:235
msgid ""
"Represents a category tag used for products. This class models a category "
"tag that can be used to associate and classify products. It includes "
"attributes for an internal tag identifier and a user-friendly display name."
msgstr ""
-#: engine/core/models.py:254
+#: engine/core/models.py:260
msgid "category tag"
msgstr ""
-#: engine/core/models.py:255 engine/core/models.py:327
+#: engine/core/models.py:261 engine/core/models.py:333
msgid "category tags"
msgstr ""
-#: engine/core/models.py:260
+#: engine/core/models.py:266
msgid ""
"Represents a category entity to organize and group related items in a "
"hierarchical structure. Categories may have hierarchical relationships with "
@@ -1601,51 +1601,51 @@ msgid ""
"priority."
msgstr ""
-#: engine/core/models.py:274
+#: engine/core/models.py:280
msgid "upload an image representing this category"
msgstr ""
-#: engine/core/models.py:277
+#: engine/core/models.py:283
msgid "category image"
msgstr ""
-#: engine/core/models.py:282
+#: engine/core/models.py:288
msgid "define a markup percentage for products in this category"
msgstr ""
-#: engine/core/models.py:291
+#: engine/core/models.py:297
msgid "parent of this category to form a hierarchical structure"
msgstr ""
-#: engine/core/models.py:292
+#: engine/core/models.py:298
msgid "parent category"
msgstr ""
-#: engine/core/models.py:297
+#: engine/core/models.py:303
msgid "category name"
msgstr ""
-#: engine/core/models.py:298
+#: engine/core/models.py:304
msgid "provide a name for this category"
msgstr ""
-#: engine/core/models.py:305
+#: engine/core/models.py:311
msgid "add a detailed description for this category"
msgstr ""
-#: engine/core/models.py:306
+#: engine/core/models.py:312
msgid "category description"
msgstr ""
-#: engine/core/models.py:326
+#: engine/core/models.py:332
msgid "tags that help describe or group this category"
msgstr ""
-#: engine/core/models.py:333 engine/core/models.py:495
+#: engine/core/models.py:339 engine/core/models.py:514
msgid "priority"
msgstr ""
-#: engine/core/models.py:438
+#: engine/core/models.py:457
msgid ""
"Represents a Brand object in the system. This class handles information and "
"attributes related to a brand, including its name, logos, description, "
@@ -1653,47 +1653,47 @@ msgid ""
"organization and representation of brand-related data within the application."
msgstr ""
-#: engine/core/models.py:448
+#: engine/core/models.py:467
msgid "name of this brand"
msgstr ""
-#: engine/core/models.py:449
+#: engine/core/models.py:468
msgid "brand name"
msgstr ""
-#: engine/core/models.py:456
+#: engine/core/models.py:475
msgid "upload a logo representing this brand"
msgstr ""
-#: engine/core/models.py:458
+#: engine/core/models.py:477
msgid "brand small image"
msgstr ""
-#: engine/core/models.py:464
+#: engine/core/models.py:483
msgid "upload a big logo representing this brand"
msgstr ""
-#: engine/core/models.py:466
+#: engine/core/models.py:485
msgid "brand big image"
msgstr ""
-#: engine/core/models.py:471
+#: engine/core/models.py:490
msgid "add a detailed description of the brand"
msgstr ""
-#: engine/core/models.py:472
+#: engine/core/models.py:491
msgid "brand description"
msgstr ""
-#: engine/core/models.py:477
+#: engine/core/models.py:496
msgid "optional categories that this brand is associated with"
msgstr ""
-#: engine/core/models.py:478
+#: engine/core/models.py:497
msgid "associated categories"
msgstr ""
-#: engine/core/models.py:508
+#: engine/core/models.py:527
msgid ""
"Represents the stock of a product managed in the system. This class provides "
"details about the relationship between vendors, products, and their stock "
@@ -1703,72 +1703,72 @@ msgid ""
"from various vendors."
msgstr ""
-#: engine/core/models.py:520
+#: engine/core/models.py:539
msgid "the vendor supplying this product stock"
msgstr ""
-#: engine/core/models.py:521
+#: engine/core/models.py:540
msgid "associated vendor"
msgstr ""
-#: engine/core/models.py:525
+#: engine/core/models.py:544
msgid "final price to the customer after markups"
msgstr ""
-#: engine/core/models.py:526
+#: engine/core/models.py:545
msgid "selling price"
msgstr ""
-#: engine/core/models.py:531
+#: engine/core/models.py:550
msgid "the product associated with this stock entry"
msgstr ""
-#: engine/core/models.py:532 engine/core/models.py:797
-#: engine/core/models.py:843 engine/core/models.py:1792
+#: engine/core/models.py:551 engine/core/models.py:820
+#: engine/core/models.py:866 engine/core/models.py:1904
msgid "associated product"
msgstr ""
-#: engine/core/models.py:539
+#: engine/core/models.py:558
msgid "the price paid to the vendor for this product"
msgstr ""
-#: engine/core/models.py:540
+#: engine/core/models.py:559
msgid "vendor purchase price"
msgstr ""
-#: engine/core/models.py:544
+#: engine/core/models.py:563
msgid "available quantity of the product in stock"
msgstr ""
-#: engine/core/models.py:545
+#: engine/core/models.py:564
msgid "quantity in stock"
msgstr ""
-#: engine/core/models.py:549
+#: engine/core/models.py:568
msgid "vendor-assigned SKU for identifying the product"
msgstr ""
-#: engine/core/models.py:550
+#: engine/core/models.py:569
msgid "vendor sku"
msgstr ""
-#: engine/core/models.py:556
+#: engine/core/models.py:575
msgid "digital file associated with this stock if applicable"
msgstr ""
-#: engine/core/models.py:557
+#: engine/core/models.py:576
msgid "digital file"
msgstr ""
-#: engine/core/models.py:560
+#: engine/core/models.py:580
msgid "system attributes"
msgstr ""
-#: engine/core/models.py:567
+#: engine/core/models.py:588
msgid "stock entries"
msgstr ""
-#: engine/core/models.py:572
+#: engine/core/models.py:593
msgid ""
"Represents a product with attributes such as category, brand, tags, digital "
"status, name, description, part number, and slug. Provides related utility "
@@ -1780,55 +1780,55 @@ msgid ""
"product data and its associated information within an application."
msgstr ""
-#: engine/core/models.py:585
+#: engine/core/models.py:606
msgid "category this product belongs to"
msgstr ""
-#: engine/core/models.py:594
+#: engine/core/models.py:615
msgid "optionally associate this product with a brand"
msgstr ""
-#: engine/core/models.py:600
+#: engine/core/models.py:621
msgid "tags that help describe or group this product"
msgstr ""
-#: engine/core/models.py:605
+#: engine/core/models.py:626
msgid "indicates whether this product is digitally delivered"
msgstr ""
-#: engine/core/models.py:606
+#: engine/core/models.py:627
msgid "is product digital"
msgstr ""
-#: engine/core/models.py:612
+#: engine/core/models.py:633
msgid "provide a clear identifying name for the product"
msgstr ""
-#: engine/core/models.py:613
+#: engine/core/models.py:634
msgid "product name"
msgstr ""
-#: engine/core/models.py:619 engine/core/models.py:892
+#: engine/core/models.py:640 engine/core/models.py:915
msgid "add a detailed description of the product"
msgstr ""
-#: engine/core/models.py:620
+#: engine/core/models.py:641
msgid "product description"
msgstr ""
-#: engine/core/models.py:627
+#: engine/core/models.py:648
msgid "part number for this product"
msgstr ""
-#: engine/core/models.py:628
+#: engine/core/models.py:649
msgid "part number"
msgstr ""
-#: engine/core/models.py:647
+#: engine/core/models.py:668
msgid "stock keeping unit for this product"
msgstr ""
-#: engine/core/models.py:720
+#: engine/core/models.py:741
msgid ""
"Represents an attribute in the system. This class is used to define and "
"manage attributes, which are customizable pieces of data that can be "
@@ -1838,83 +1838,83 @@ msgid ""
"for dynamic and flexible data structuring."
msgstr ""
-#: engine/core/models.py:733
+#: engine/core/models.py:754
msgid "group of this attribute"
msgstr ""
-#: engine/core/models.py:739
+#: engine/core/models.py:760
msgid "string"
msgstr ""
-#: engine/core/models.py:740
+#: engine/core/models.py:761
msgid "integer"
msgstr ""
-#: engine/core/models.py:741
+#: engine/core/models.py:762
msgid "float"
msgstr ""
-#: engine/core/models.py:742
+#: engine/core/models.py:763
msgid "boolean"
msgstr ""
-#: engine/core/models.py:743
+#: engine/core/models.py:764
msgid "array"
msgstr ""
-#: engine/core/models.py:744
+#: engine/core/models.py:765
msgid "object"
msgstr ""
-#: engine/core/models.py:746
+#: engine/core/models.py:767
msgid "type of the attribute's value"
msgstr ""
-#: engine/core/models.py:747
+#: engine/core/models.py:768
msgid "value type"
msgstr ""
-#: engine/core/models.py:752
+#: engine/core/models.py:773
msgid "name of this attribute"
msgstr ""
-#: engine/core/models.py:753
+#: engine/core/models.py:774
msgid "attribute's name"
msgstr ""
-#: engine/core/models.py:758
+#: engine/core/models.py:779
msgid "is filterable"
msgstr ""
-#: engine/core/models.py:759
+#: engine/core/models.py:781
msgid "designates whether this attribute can be used for filtering or not"
msgstr ""
-#: engine/core/models.py:771 engine/core/models.py:789
+#: engine/core/models.py:794 engine/core/models.py:812
#: engine/core/templates/digital_order_delivered_email.html:134
msgid "attribute"
msgstr ""
-#: engine/core/models.py:777
+#: engine/core/models.py:800
msgid ""
"Represents a specific value for an attribute that is linked to a product. It "
"links the 'attribute' to a unique 'value', allowing better organization and "
"dynamic representation of product characteristics."
msgstr ""
-#: engine/core/models.py:788
+#: engine/core/models.py:811
msgid "attribute of this value"
msgstr ""
-#: engine/core/models.py:796
+#: engine/core/models.py:819
msgid "the specific product associated with this attribute's value"
msgstr ""
-#: engine/core/models.py:802
+#: engine/core/models.py:825
msgid "the specific value for this attribute"
msgstr ""
-#: engine/core/models.py:815
+#: engine/core/models.py:838
msgid ""
"Represents a product image associated with a product in the system. This "
"class is designed to manage images for products, including functionality for "
@@ -1923,39 +1923,39 @@ msgid ""
"with alternative text for the images."
msgstr ""
-#: engine/core/models.py:826
+#: engine/core/models.py:849
msgid "provide alternative text for the image for accessibility"
msgstr ""
-#: engine/core/models.py:827
+#: engine/core/models.py:850
msgid "image alt text"
msgstr ""
-#: engine/core/models.py:830
+#: engine/core/models.py:853
msgid "upload the image file for this product"
msgstr ""
-#: engine/core/models.py:831 engine/core/models.py:862
+#: engine/core/models.py:854 engine/core/models.py:885
msgid "product image"
msgstr ""
-#: engine/core/models.py:836
+#: engine/core/models.py:859
msgid "determines the order in which images are displayed"
msgstr ""
-#: engine/core/models.py:837
+#: engine/core/models.py:860
msgid "display priority"
msgstr ""
-#: engine/core/models.py:842
+#: engine/core/models.py:865
msgid "the product that this image represents"
msgstr ""
-#: engine/core/models.py:863
+#: engine/core/models.py:886
msgid "product images"
msgstr ""
-#: engine/core/models.py:868
+#: engine/core/models.py:891
msgid ""
"Represents a promotional campaign for products with a discount. This class "
"is used to define and manage promotional campaigns that offer a percentage-"
@@ -1965,39 +1965,39 @@ msgid ""
"affected items in the campaign."
msgstr ""
-#: engine/core/models.py:880
+#: engine/core/models.py:903
msgid "percentage discount for the selected products"
msgstr ""
-#: engine/core/models.py:881
+#: engine/core/models.py:904
msgid "discount percentage"
msgstr ""
-#: engine/core/models.py:886
+#: engine/core/models.py:909
msgid "provide a unique name for this promotion"
msgstr ""
-#: engine/core/models.py:887
+#: engine/core/models.py:910
msgid "promotion name"
msgstr ""
-#: engine/core/models.py:893
+#: engine/core/models.py:916
msgid "promotion description"
msgstr ""
-#: engine/core/models.py:898
+#: engine/core/models.py:921
msgid "select which products are included in this promotion"
msgstr ""
-#: engine/core/models.py:899
+#: engine/core/models.py:922
msgid "included products"
msgstr ""
-#: engine/core/models.py:903
+#: engine/core/models.py:926
msgid "promotion"
msgstr ""
-#: engine/core/models.py:914
+#: engine/core/models.py:937
msgid ""
"Represents a user's wishlist for storing and managing desired products. The "
"class provides functionality to manage a collection of products, supporting "
@@ -2005,23 +2005,23 @@ msgid ""
"operations for adding and removing multiple products at once."
msgstr ""
-#: engine/core/models.py:926
+#: engine/core/models.py:949
msgid "products that the user has marked as wanted"
msgstr ""
-#: engine/core/models.py:934
+#: engine/core/models.py:957
msgid "user who owns this wishlist"
msgstr ""
-#: engine/core/models.py:935
+#: engine/core/models.py:958
msgid "wishlist owner"
msgstr ""
-#: engine/core/models.py:943
+#: engine/core/models.py:966
msgid "wishlist"
msgstr ""
-#: engine/core/models.py:985
+#: engine/core/models.py:1008
msgid ""
"Represents a documentary record tied to a product. This class is used to "
"store information about documentaries related to specific products, "
@@ -2031,19 +2031,19 @@ msgid ""
"custom features."
msgstr ""
-#: engine/core/models.py:998
+#: engine/core/models.py:1023
msgid "documentary"
msgstr ""
-#: engine/core/models.py:999
+#: engine/core/models.py:1024
msgid "documentaries"
msgstr ""
-#: engine/core/models.py:1009
+#: engine/core/models.py:1034
msgid "unresolved"
msgstr ""
-#: engine/core/models.py:1014
+#: engine/core/models.py:1039
msgid ""
"Represents an address entity that includes location details and associations "
"with a user. Provides functionality for geographic and address data storage, "
@@ -2055,59 +2055,59 @@ msgid ""
"address with a user, facilitating personalized data handling."
msgstr ""
-#: engine/core/models.py:1029
+#: engine/core/models.py:1054
msgid "address line for the customer"
msgstr ""
-#: engine/core/models.py:1030
+#: engine/core/models.py:1055
msgid "address line"
msgstr ""
-#: engine/core/models.py:1032
+#: engine/core/models.py:1057
msgid "street"
msgstr ""
-#: engine/core/models.py:1033
+#: engine/core/models.py:1058
msgid "district"
msgstr ""
-#: engine/core/models.py:1034
+#: engine/core/models.py:1059
msgid "city"
msgstr ""
-#: engine/core/models.py:1035
+#: engine/core/models.py:1060
msgid "region"
msgstr ""
-#: engine/core/models.py:1036
+#: engine/core/models.py:1061
msgid "postal code"
msgstr ""
-#: engine/core/models.py:1037
+#: engine/core/models.py:1062
msgid "country"
msgstr ""
-#: engine/core/models.py:1044
+#: engine/core/models.py:1069
msgid "geolocation point: (longitude, latitude)"
msgstr ""
-#: engine/core/models.py:1047
+#: engine/core/models.py:1075
msgid "full JSON response from geocoder for this address"
msgstr ""
-#: engine/core/models.py:1052
+#: engine/core/models.py:1081
msgid "stored JSON response from the geocoding service"
msgstr ""
-#: engine/core/models.py:1060
+#: engine/core/models.py:1091
msgid "address"
msgstr ""
-#: engine/core/models.py:1061
+#: engine/core/models.py:1092
msgid "addresses"
msgstr ""
-#: engine/core/models.py:1073
+#: engine/core/models.py:1104
msgid ""
"Represents a promotional code that can be used for discounts, managing its "
"validity, type of discount, and application. The PromoCode class stores "
@@ -2117,86 +2117,86 @@ msgid ""
"apply the promo code to an order while ensuring constraints are met."
msgstr ""
-#: engine/core/models.py:1087
+#: engine/core/models.py:1118
msgid "unique code used by a user to redeem a discount"
msgstr ""
-#: engine/core/models.py:1088
+#: engine/core/models.py:1119
msgid "promo code identifier"
msgstr ""
-#: engine/core/models.py:1095
+#: engine/core/models.py:1126
msgid "fixed discount amount applied if percent is not used"
msgstr ""
-#: engine/core/models.py:1096
+#: engine/core/models.py:1127
msgid "fixed discount amount"
msgstr ""
-#: engine/core/models.py:1102
+#: engine/core/models.py:1133
msgid "percentage discount applied if fixed amount is not used"
msgstr ""
-#: engine/core/models.py:1103
+#: engine/core/models.py:1134
msgid "percentage discount"
msgstr ""
-#: engine/core/models.py:1108
+#: engine/core/models.py:1139
msgid "timestamp when the promocode expires"
msgstr ""
-#: engine/core/models.py:1109
+#: engine/core/models.py:1140
msgid "end validity time"
msgstr ""
-#: engine/core/models.py:1114
+#: engine/core/models.py:1145
msgid "timestamp from which this promocode is valid"
msgstr ""
-#: engine/core/models.py:1115
+#: engine/core/models.py:1146
msgid "start validity time"
msgstr ""
-#: engine/core/models.py:1120
+#: engine/core/models.py:1151
msgid "timestamp when the promocode was used, blank if not used yet"
msgstr ""
-#: engine/core/models.py:1121
+#: engine/core/models.py:1152
msgid "usage timestamp"
msgstr ""
-#: engine/core/models.py:1126
+#: engine/core/models.py:1157
msgid "user assigned to this promocode if applicable"
msgstr ""
-#: engine/core/models.py:1127
+#: engine/core/models.py:1158
msgid "assigned user"
msgstr ""
-#: engine/core/models.py:1134
+#: engine/core/models.py:1165
msgid "promo code"
msgstr ""
-#: engine/core/models.py:1135
+#: engine/core/models.py:1166
msgid "promo codes"
msgstr ""
-#: engine/core/models.py:1150
+#: engine/core/models.py:1182
msgid ""
"only one type of discount should be defined (amount or percent), but not "
"both or neither."
msgstr ""
-#: engine/core/models.py:1171
+#: engine/core/models.py:1204
msgid "promocode already used"
msgstr ""
-#: engine/core/models.py:1187
+#: engine/core/models.py:1226
#, python-brace-format
msgid "invalid discount type for promocode {self.uuid}"
msgstr ""
-#: engine/core/models.py:1196
+#: engine/core/models.py:1235
msgid ""
"Represents an order placed by a user. This class models an order within the "
"application, including its various attributes such as billing and shipping "
@@ -2206,145 +2206,145 @@ msgid ""
"supports managing the products in the order lifecycle."
msgstr ""
-#: engine/core/models.py:1213
+#: engine/core/models.py:1252
msgid "the billing address used for this order"
msgstr ""
-#: engine/core/models.py:1221
+#: engine/core/models.py:1260
msgid "optional promo code applied to this order"
msgstr ""
-#: engine/core/models.py:1222
+#: engine/core/models.py:1261
msgid "applied promo code"
msgstr ""
-#: engine/core/models.py:1230
+#: engine/core/models.py:1269
msgid "the shipping address used for this order"
msgstr ""
-#: engine/core/models.py:1231
+#: engine/core/models.py:1270
msgid "shipping address"
msgstr ""
-#: engine/core/models.py:1237
+#: engine/core/models.py:1276
msgid "current status of the order in its lifecycle"
msgstr ""
-#: engine/core/models.py:1238
+#: engine/core/models.py:1277
msgid "order status"
msgstr ""
-#: engine/core/models.py:1243 engine/core/models.py:1769
+#: engine/core/models.py:1282 engine/core/models.py:1881
msgid "json structure of notifications to display to users"
msgstr ""
-#: engine/core/models.py:1249
+#: engine/core/models.py:1288
msgid "json representation of order attributes for this order"
msgstr ""
-#: engine/core/models.py:1255
+#: engine/core/models.py:1294
msgid "the user who placed the order"
msgstr ""
-#: engine/core/models.py:1256
+#: engine/core/models.py:1295
msgid "user"
msgstr ""
-#: engine/core/models.py:1262
+#: engine/core/models.py:1301
msgid "the timestamp when the order was finalized"
msgstr ""
-#: engine/core/models.py:1263
+#: engine/core/models.py:1302
msgid "buy time"
msgstr ""
-#: engine/core/models.py:1270
+#: engine/core/models.py:1309
msgid "a human-readable identifier for the order"
msgstr ""
-#: engine/core/models.py:1271
+#: engine/core/models.py:1310
msgid "human readable id"
msgstr ""
-#: engine/core/models.py:1277
+#: engine/core/models.py:1316
msgid "order"
msgstr ""
-#: engine/core/models.py:1319
+#: engine/core/models.py:1363
msgid "a user must have only one pending order at a time"
msgstr ""
-#: engine/core/models.py:1351
+#: engine/core/models.py:1396
msgid "you cannot add products to an order that is not a pending one"
msgstr ""
-#: engine/core/models.py:1356
+#: engine/core/models.py:1402
msgid "you cannot add inactive products to order"
msgstr ""
-#: engine/core/models.py:1373
+#: engine/core/models.py:1424
msgid "you cannot add more products than available in stock"
msgstr ""
-#: engine/core/models.py:1395 engine/core/models.py:1420
-#: engine/core/models.py:1428
+#: engine/core/models.py:1448 engine/core/models.py:1477
+#: engine/core/models.py:1487
msgid "you cannot remove products from an order that is not a pending one"
msgstr ""
-#: engine/core/models.py:1416
+#: engine/core/models.py:1472
#, python-brace-format
msgid "{name} does not exist with query <{query}>"
msgstr ""
-#: engine/core/models.py:1448
+#: engine/core/models.py:1511
msgid "promocode does not exist"
msgstr ""
-#: engine/core/models.py:1454
+#: engine/core/models.py:1526
msgid "you can only buy physical products with shipping address specified"
msgstr ""
-#: engine/core/models.py:1473
+#: engine/core/models.py:1547
msgid "address does not exist"
msgstr ""
-#: engine/core/models.py:1494 engine/core/models.py:1563
+#: engine/core/models.py:1569 engine/core/models.py:1648
msgid "you can not buy at this moment, please try again in a few minutes"
msgstr ""
-#: engine/core/models.py:1497 engine/core/models.py:1559
+#: engine/core/models.py:1575 engine/core/models.py:1641
msgid "invalid force value"
msgstr ""
-#: engine/core/models.py:1503 engine/core/models.py:1566
+#: engine/core/models.py:1581 engine/core/models.py:1652
msgid "you cannot purchase an empty order!"
msgstr ""
-#: engine/core/models.py:1522
+#: engine/core/models.py:1602
msgid "you cannot buy an order without a user"
msgstr ""
-#: engine/core/models.py:1536
+#: engine/core/models.py:1616
msgid "a user without a balance cannot buy with balance"
msgstr ""
-#: engine/core/models.py:1541
+#: engine/core/models.py:1622
msgid "insufficient funds to complete the order"
msgstr ""
-#: engine/core/models.py:1575
+#: engine/core/models.py:1663
msgid ""
"you cannot buy without registration, please provide the following "
"information: customer name, customer email, customer phone number"
msgstr ""
-#: engine/core/models.py:1584
+#: engine/core/models.py:1674
#, python-brace-format
msgid ""
"invalid payment method: {payment_method} from {available_payment_methods}"
msgstr ""
-#: engine/core/models.py:1699
+#: engine/core/models.py:1805
msgid ""
"Manages user feedback for products. This class is designed to capture and "
"store user feedback for specific products that they have purchased. It "
@@ -2353,31 +2353,31 @@ msgid ""
"fields to effectively model and manage feedback data."
msgstr ""
-#: engine/core/models.py:1711
+#: engine/core/models.py:1817
msgid "user-provided comments about their experience with the product"
msgstr ""
-#: engine/core/models.py:1712
+#: engine/core/models.py:1818
msgid "feedback comments"
msgstr ""
-#: engine/core/models.py:1719
+#: engine/core/models.py:1826
msgid "references the specific product in an order that this feedback is about"
msgstr ""
-#: engine/core/models.py:1720
+#: engine/core/models.py:1828
msgid "related order product"
msgstr ""
-#: engine/core/models.py:1725
+#: engine/core/models.py:1833
msgid "user-assigned rating for the product"
msgstr ""
-#: engine/core/models.py:1726
+#: engine/core/models.py:1834
msgid "product rating"
msgstr ""
-#: engine/core/models.py:1742
+#: engine/core/models.py:1854
msgid ""
"Represents products associated with orders and their attributes. The "
"OrderProduct model maintains information about a product that is part of an "
@@ -2390,108 +2390,108 @@ msgid ""
"Product models and stores a reference to them."
msgstr ""
-#: engine/core/models.py:1757
+#: engine/core/models.py:1869
msgid "the price paid by the customer for this product at purchase time"
msgstr ""
-#: engine/core/models.py:1758
+#: engine/core/models.py:1870
msgid "purchase price at order time"
msgstr ""
-#: engine/core/models.py:1763
+#: engine/core/models.py:1875
msgid "internal comments for admins about this ordered product"
msgstr ""
-#: engine/core/models.py:1764
+#: engine/core/models.py:1876
msgid "internal comments"
msgstr ""
-#: engine/core/models.py:1770
+#: engine/core/models.py:1882
msgid "user notifications"
msgstr ""
-#: engine/core/models.py:1775
+#: engine/core/models.py:1887
msgid "json representation of this item's attributes"
msgstr ""
-#: engine/core/models.py:1776
+#: engine/core/models.py:1888
msgid "ordered product attributes"
msgstr ""
-#: engine/core/models.py:1781
+#: engine/core/models.py:1893
msgid "reference to the parent order that contains this product"
msgstr ""
-#: engine/core/models.py:1782
+#: engine/core/models.py:1894
msgid "parent order"
msgstr ""
-#: engine/core/models.py:1791
+#: engine/core/models.py:1903
msgid "the specific product associated with this order line"
msgstr ""
-#: engine/core/models.py:1798
+#: engine/core/models.py:1910
msgid "quantity of this specific product in the order"
msgstr ""
-#: engine/core/models.py:1799
+#: engine/core/models.py:1911
msgid "product quantity"
msgstr ""
-#: engine/core/models.py:1806
+#: engine/core/models.py:1918
msgid "current status of this product in the order"
msgstr ""
-#: engine/core/models.py:1807
+#: engine/core/models.py:1919
msgid "product line status"
msgstr ""
-#: engine/core/models.py:1872
+#: engine/core/models.py:1986
msgid "order product must have an order"
msgstr ""
-#: engine/core/models.py:1874
+#: engine/core/models.py:1988
#, python-brace-format
msgid "wrong action specified for feedback: {action}"
msgstr ""
-#: engine/core/models.py:1888
+#: engine/core/models.py:2005
msgid "you cannot feedback an order which is not received"
msgstr ""
-#: engine/core/models.py:1894
+#: engine/core/models.py:2014
msgid "name"
msgstr ""
-#: engine/core/models.py:1895
+#: engine/core/models.py:2016
msgid "URL of the integration"
msgstr ""
-#: engine/core/models.py:1896
+#: engine/core/models.py:2019
msgid "authentication credentials"
msgstr ""
-#: engine/core/models.py:1918
+#: engine/core/models.py:2042
msgid "you can only have one default CRM provider"
msgstr ""
-#: engine/core/models.py:1928
+#: engine/core/models.py:2052
msgid "CRM"
msgstr ""
-#: engine/core/models.py:1929
+#: engine/core/models.py:2053
msgid "CRMs"
msgstr ""
-#: engine/core/models.py:1941
+#: engine/core/models.py:2069
msgid "order CRM link"
msgstr ""
-#: engine/core/models.py:1942
+#: engine/core/models.py:2070
msgid "orders CRM links"
msgstr ""
-#: engine/core/models.py:1947
+#: engine/core/models.py:2075
msgid ""
"Represents the downloading functionality for digital assets associated with "
"orders. The DigitalAssetDownload class provides the ability to manage and "
@@ -2501,15 +2501,15 @@ msgid ""
"the asset when the associated order is in a completed status."
msgstr ""
-#: engine/core/models.py:1961
+#: engine/core/models.py:2091
msgid "download"
msgstr ""
-#: engine/core/models.py:1962
+#: engine/core/models.py:2092
msgid "downloads"
msgstr ""
-#: engine/core/serializers/utility.py:89
+#: engine/core/serializers/utility.py:91
msgid ""
"you must provide a comment, rating, and order product uuid to add feedback."
msgstr ""
@@ -2835,11 +2835,11 @@ msgid ""
" reserved"
msgstr ""
-#: engine/core/utils/caching.py:44
+#: engine/core/utils/caching.py:48
msgid "both data and timeout are required"
msgstr ""
-#: engine/core/utils/caching.py:46
+#: engine/core/utils/caching.py:51
msgid "invalid timeout value, it must be between 0 and 216000 seconds"
msgstr ""
@@ -2848,17 +2848,17 @@ msgstr ""
msgid "{settings.PROJECT_NAME} | contact us initiated"
msgstr ""
-#: engine/core/utils/emailing.py:73
+#: engine/core/utils/emailing.py:81
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order confirmation"
msgstr ""
-#: engine/core/utils/emailing.py:105
+#: engine/core/utils/emailing.py:115
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order delivered"
msgstr ""
-#: engine/core/utils/emailing.py:188
+#: engine/core/utils/emailing.py:203
#, python-brace-format
msgid "{settings.PROJECT_NAME} | promocode granted"
msgstr ""
@@ -2871,58 +2871,58 @@ msgstr ""
msgid "NOMINATIM_URL must be configured."
msgstr ""
-#: engine/core/validators.py:19
+#: engine/core/validators.py:21
#, python-brace-format
msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels"
msgstr ""
-#: engine/core/views.py:91
+#: engine/core/views.py:105
msgid ""
"Handles the request for the sitemap index and returns an XML response. It "
"ensures the response includes the appropriate content type header for XML."
msgstr ""
-#: engine/core/views.py:106
+#: engine/core/views.py:120
msgid ""
"Handles the detailed view response for a sitemap. This function processes "
"the request, fetches the appropriate sitemap detail response, and sets the "
"Content-Type header for XML."
msgstr ""
-#: engine/core/views.py:141
+#: engine/core/views.py:156
msgid ""
"Returns a list of supported languages and their corresponding information."
msgstr ""
-#: engine/core/views.py:173
+#: engine/core/views.py:183
msgid "Returns the parameters of the website as a JSON object."
msgstr ""
-#: engine/core/views.py:192
+#: engine/core/views.py:199
msgid ""
"Handles cache operations such as reading and setting cache data with a "
"specified key and timeout."
msgstr ""
-#: engine/core/views.py:219
+#: engine/core/views.py:221
msgid "Handles `contact us` form submissions."
msgstr ""
-#: engine/core/views.py:240
+#: engine/core/views.py:237
msgid ""
"Handles requests for processing and validating URLs from incoming POST "
"requests."
msgstr ""
-#: engine/core/views.py:280
+#: engine/core/views.py:274
msgid "Handles global search queries."
msgstr ""
-#: engine/core/views.py:295
+#: engine/core/views.py:290
msgid "Handles the logic of buying as a business without registration."
msgstr ""
-#: engine/core/views.py:332
+#: engine/core/views.py:338
msgid ""
"Handles the downloading of a digital asset associated with an order.\n"
"This function attempts to serve the digital asset file located in the "
@@ -2930,31 +2930,31 @@ msgid ""
"error is raised to indicate the resource is unavailable."
msgstr ""
-#: engine/core/views.py:343
+#: engine/core/views.py:349
msgid "order_product_uuid is required"
msgstr ""
-#: engine/core/views.py:350
+#: engine/core/views.py:356
msgid "order product does not exist"
msgstr ""
-#: engine/core/views.py:353
+#: engine/core/views.py:359
msgid "you can only download the digital asset once"
msgstr ""
-#: engine/core/views.py:356
+#: engine/core/views.py:363
msgid "the order must be paid before downloading the digital asset"
msgstr ""
-#: engine/core/views.py:362
+#: engine/core/views.py:370
msgid "the order product does not have a product"
msgstr ""
-#: engine/core/views.py:399
+#: engine/core/views.py:414
msgid "favicon not found"
msgstr ""
-#: engine/core/views.py:404
+#: engine/core/views.py:419
msgid ""
"Handles requests for the favicon of a website.\n"
"This function attempts to serve the favicon file located in the static "
@@ -2962,27 +2962,27 @@ msgid ""
"error is raised to indicate the resource is unavailable."
msgstr ""
-#: engine/core/views.py:416
+#: engine/core/views.py:431
msgid ""
"Redirects the request to the admin index page. The function handles incoming "
"HTTP requests and redirects them to the Django admin interface index page. "
"It uses Django's `redirect` function for handling the HTTP redirection."
msgstr ""
-#: engine/core/views.py:429
+#: engine/core/views.py:443
msgid "Returns current version of the eVibes. "
msgstr ""
-#: engine/core/views.py:623 engine/core/views.py:636
+#: engine/core/views.py:672 engine/core/views.py:687
#, python-format
msgid "Revenue & Orders (last %(days)d)"
msgstr ""
-#: engine/core/views.py:793
+#: engine/core/views.py:868
msgid "Returns custom variables for Dashboard. "
msgstr ""
-#: engine/core/viewsets.py:136
+#: engine/core/viewsets.py:139
msgid ""
"Defines a viewset for managing Evibes-related operations. The EvibesViewSet "
"class inherits from ModelViewSet and provides functionality for handling "
@@ -2991,7 +2991,7 @@ msgid ""
"and rendering formats."
msgstr ""
-#: engine/core/viewsets.py:156
+#: engine/core/viewsets.py:160
msgid ""
"Represents a viewset for managing AttributeGroup objects. Handles operations "
"related to AttributeGroup, including filtering, serialization, and retrieval "
@@ -2999,7 +2999,7 @@ msgid ""
"standardized way to process requests and responses for AttributeGroup data."
msgstr ""
-#: engine/core/viewsets.py:175
+#: engine/core/viewsets.py:179
msgid ""
"Handles operations related to Attribute objects within the application. "
"Provides a set of API endpoints to interact with Attribute data. This class "
@@ -3009,7 +3009,7 @@ msgid ""
"depending on the request."
msgstr ""
-#: engine/core/viewsets.py:194
+#: engine/core/viewsets.py:198
msgid ""
"A viewset for managing AttributeValue objects. This viewset provides "
"functionality for listing, retrieving, creating, updating, and deleting "
@@ -3018,7 +3018,7 @@ msgid ""
"capabilities are provided through the DjangoFilterBackend."
msgstr ""
-#: engine/core/viewsets.py:213
+#: engine/core/viewsets.py:217
msgid ""
"Manages views for Category-related operations. The CategoryViewSet class is "
"responsible for handling operations related to the Category model in the "
@@ -3027,7 +3027,7 @@ msgid ""
"can access specific data."
msgstr ""
-#: engine/core/viewsets.py:326
+#: engine/core/viewsets.py:346
msgid ""
"Represents a viewset for managing Brand instances. This class provides "
"functionality for querying, filtering, and serializing Brand objects. It "
@@ -3035,7 +3035,7 @@ msgid ""
"endpoints for Brand objects."
msgstr ""
-#: engine/core/viewsets.py:438
+#: engine/core/viewsets.py:458
msgid ""
"Manages operations related to the `Product` model in the system. This class "
"provides a viewset for managing products, including their filtering, "
@@ -3046,7 +3046,7 @@ msgid ""
"product."
msgstr ""
-#: engine/core/viewsets.py:574
+#: engine/core/viewsets.py:605
msgid ""
"Represents a viewset for managing Vendor objects. This viewset allows "
"fetching, filtering, and serializing Vendor data. It defines the queryset, "
@@ -3055,7 +3055,7 @@ msgid ""
"Vendor-related resources through the Django REST framework."
msgstr ""
-#: engine/core/viewsets.py:594
+#: engine/core/viewsets.py:625
msgid ""
"Representation of a view set handling Feedback objects. This class manages "
"operations related to Feedback objects, including listing, filtering, and "
@@ -3065,7 +3065,7 @@ msgid ""
"use of Django's filtering system for querying data."
msgstr ""
-#: engine/core/viewsets.py:621
+#: engine/core/viewsets.py:652
msgid ""
"ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes "
@@ -3076,7 +3076,7 @@ msgid ""
"enforces permissions accordingly while interacting with order data."
msgstr ""
-#: engine/core/viewsets.py:825
+#: engine/core/viewsets.py:914
msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It "
@@ -3085,25 +3085,25 @@ msgid ""
"feedback on OrderProduct instances"
msgstr ""
-#: engine/core/viewsets.py:879
+#: engine/core/viewsets.py:974
msgid "Manages operations related to Product images in the application. "
msgstr ""
-#: engine/core/viewsets.py:892
+#: engine/core/viewsets.py:988
msgid ""
"Manages the retrieval and handling of PromoCode instances through various "
"API actions."
msgstr ""
-#: engine/core/viewsets.py:914
+#: engine/core/viewsets.py:1019
msgid "Represents a view set for managing promotions. "
msgstr ""
-#: engine/core/viewsets.py:927
+#: engine/core/viewsets.py:1032
msgid "Handles operations related to Stock data in the system."
msgstr ""
-#: engine/core/viewsets.py:941
+#: engine/core/viewsets.py:1046
msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the "
@@ -3114,7 +3114,7 @@ msgid ""
"are granted."
msgstr ""
-#: engine/core/viewsets.py:1056
+#: engine/core/viewsets.py:1183
msgid ""
"This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom "
@@ -3123,12 +3123,12 @@ msgid ""
"on the request context."
msgstr ""
-#: engine/core/viewsets.py:1123
+#: engine/core/viewsets.py:1254
#, python-brace-format
msgid "Geocoding error: {e}"
msgstr ""
-#: engine/core/viewsets.py:1131
+#: engine/core/viewsets.py:1262
msgid ""
"Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing "
diff --git a/engine/core/locale/hr_HR/LC_MESSAGES/django.po b/engine/core/locale/hr_HR/LC_MESSAGES/django.po
index 7faa342c..fcf8e2f6 100644
--- a/engine/core/locale/hr_HR/LC_MESSAGES/django.po
+++ b/engine/core/locale/hr_HR/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 22:12+0300\n"
+"POT-Creation-Date: 2025-12-18 19:09+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -28,110 +28,110 @@ msgstr ""
msgid "is active"
msgstr ""
-#: engine/core/abstract.py:21
+#: engine/core/abstract.py:22
msgid ""
"if set to false, this object can't be seen by users without needed permission"
msgstr ""
-#: engine/core/abstract.py:23 engine/core/choices.py:18
+#: engine/core/abstract.py:26 engine/core/choices.py:18
msgid "created"
msgstr ""
-#: engine/core/abstract.py:23
+#: engine/core/abstract.py:26
msgid "when the object first appeared on the database"
msgstr ""
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "modified"
msgstr ""
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "when the object was last modified"
msgstr ""
-#: engine/core/admin.py:85
+#: engine/core/admin.py:94
msgid "translations"
msgstr ""
-#: engine/core/admin.py:89
+#: engine/core/admin.py:102
msgid "general"
msgstr ""
-#: engine/core/admin.py:91
+#: engine/core/admin.py:106
msgid "relations"
msgstr ""
-#: engine/core/admin.py:93
+#: engine/core/admin.py:111
msgid "additional info"
msgstr ""
-#: engine/core/admin.py:111
+#: engine/core/admin.py:133
msgid "metadata"
msgstr ""
-#: engine/core/admin.py:118
+#: engine/core/admin.py:141
msgid "timestamps"
msgstr ""
-#: engine/core/admin.py:133
+#: engine/core/admin.py:157
#, python-format
msgid "activate selected %(verbose_name_plural)s"
msgstr ""
-#: engine/core/admin.py:138
+#: engine/core/admin.py:165
msgid "selected items have been activated."
msgstr ""
-#: engine/core/admin.py:144
+#: engine/core/admin.py:173
#, python-format
msgid "deactivate selected %(verbose_name_plural)s"
msgstr ""
-#: engine/core/admin.py:149
+#: engine/core/admin.py:183
msgid "selected items have been deactivated."
msgstr ""
-#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586
-#: engine/core/graphene/object_types.py:593 engine/core/models.py:801
-#: engine/core/models.py:809
+#: engine/core/admin.py:195 engine/core/graphene/object_types.py:650
+#: engine/core/graphene/object_types.py:657 engine/core/models.py:824
+#: engine/core/models.py:832
msgid "attribute value"
msgstr ""
-#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75
-#: engine/core/models.py:810
+#: engine/core/admin.py:196 engine/core/graphene/object_types.py:75
+#: engine/core/models.py:833
msgid "attribute values"
msgstr ""
-#: engine/core/admin.py:172
+#: engine/core/admin.py:207
msgid "image"
msgstr ""
-#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474
+#: engine/core/admin.py:208 engine/core/graphene/object_types.py:527
msgid "images"
msgstr ""
-#: engine/core/admin.py:184 engine/core/models.py:566
+#: engine/core/admin.py:219 engine/core/models.py:587
msgid "stock"
msgstr ""
-#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640
+#: engine/core/admin.py:220 engine/core/graphene/object_types.py:710
msgid "stocks"
msgstr ""
-#: engine/core/admin.py:196 engine/core/models.py:1818
+#: engine/core/admin.py:231 engine/core/models.py:1930
msgid "order product"
msgstr ""
-#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389
-#: engine/core/models.py:1819
+#: engine/core/admin.py:232 engine/core/graphene/object_types.py:438
+#: engine/core/models.py:1931
msgid "order products"
msgstr ""
-#: engine/core/admin.py:210 engine/core/admin.py:211
+#: engine/core/admin.py:250 engine/core/admin.py:251
msgid "children"
msgstr ""
-#: engine/core/admin.py:977
+#: engine/core/admin.py:1059
msgid "Config"
msgstr ""
@@ -183,395 +183,395 @@ msgstr ""
msgid "successful"
msgstr ""
-#: engine/core/docs/drf/views.py:31
+#: engine/core/docs/drf/views.py:30
msgid "OpenAPI schema in selected format with selected language"
msgstr ""
-#: engine/core/docs/drf/views.py:33
+#: engine/core/docs/drf/views.py:32
msgid ""
"OpenApi3 schema for this API. Format can be selected via content "
"negotiation. Language can be selected with Accept-Language and query "
"parameter both."
msgstr ""
-#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37
+#: engine/core/docs/drf/views.py:43 engine/core/graphene/mutations.py:37
msgid "cache I/O"
msgstr ""
-#: engine/core/docs/drf/views.py:46
+#: engine/core/docs/drf/views.py:45
msgid ""
"apply only a key to read permitted data from cache.\n"
"apply key, data and timeout with authentication to write data to cache."
msgstr ""
-#: engine/core/docs/drf/views.py:62
+#: engine/core/docs/drf/views.py:63
msgid "get a list of supported languages"
msgstr ""
-#: engine/core/docs/drf/views.py:74
+#: engine/core/docs/drf/views.py:75
msgid "get application's exposable parameters"
msgstr ""
-#: engine/core/docs/drf/views.py:84
+#: engine/core/docs/drf/views.py:89
msgid "send a message to the support team"
msgstr ""
-#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57
+#: engine/core/docs/drf/views.py:103 engine/core/graphene/mutations.py:59
msgid "request a CORSed URL"
msgstr ""
-#: engine/core/docs/drf/views.py:112
+#: engine/core/docs/drf/views.py:119
msgid "Search between products, categories and brands"
msgstr ""
-#: engine/core/docs/drf/views.py:130
+#: engine/core/docs/drf/views.py:141
msgid "global search endpoint to query across project's tables"
msgstr ""
-#: engine/core/docs/drf/views.py:139
+#: engine/core/docs/drf/views.py:150
msgid "purchase an order as a business"
msgstr ""
-#: engine/core/docs/drf/views.py:146
+#: engine/core/docs/drf/views.py:158
msgid ""
"purchase an order as a business, using the provided `products` with "
"`product_uuid` and `attributes`."
msgstr ""
-#: engine/core/docs/drf/views.py:164
+#: engine/core/docs/drf/views.py:177
msgid "download a digital asset from purchased digital order"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:61
+#: engine/core/docs/drf/viewsets.py:65
msgid "list all attribute groups (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:68
+#: engine/core/docs/drf/viewsets.py:75
msgid "retrieve a single attribute group (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:75
+#: engine/core/docs/drf/viewsets.py:82
msgid "create an attribute group"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:82
+#: engine/core/docs/drf/viewsets.py:92
msgid "delete an attribute group"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:89
+#: engine/core/docs/drf/viewsets.py:99
msgid "rewrite an existing attribute group saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:96
+#: engine/core/docs/drf/viewsets.py:107
msgid "rewrite some fields of an existing attribute group saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:106
+#: engine/core/docs/drf/viewsets.py:118
msgid "list all attributes (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:113
+#: engine/core/docs/drf/viewsets.py:128
msgid "retrieve a single attribute (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:120
+#: engine/core/docs/drf/viewsets.py:135
msgid "create an attribute"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:127
+#: engine/core/docs/drf/viewsets.py:142
msgid "delete an attribute"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:134
+#: engine/core/docs/drf/viewsets.py:149
msgid "rewrite an existing attribute saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:141
+#: engine/core/docs/drf/viewsets.py:156
msgid "rewrite some fields of an existing attribute saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:151
+#: engine/core/docs/drf/viewsets.py:166
msgid "list all attribute values (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:158
+#: engine/core/docs/drf/viewsets.py:176
msgid "retrieve a single attribute value (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:165
+#: engine/core/docs/drf/viewsets.py:183
msgid "create an attribute value"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:172
+#: engine/core/docs/drf/viewsets.py:193
msgid "delete an attribute value"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:179
+#: engine/core/docs/drf/viewsets.py:200
msgid "rewrite an existing attribute value saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:186
+#: engine/core/docs/drf/viewsets.py:208
msgid "rewrite some fields of an existing attribute value saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197
+#: engine/core/docs/drf/viewsets.py:219 engine/core/docs/drf/viewsets.py:220
msgid "list all categories (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205
+#: engine/core/docs/drf/viewsets.py:230 engine/core/docs/drf/viewsets.py:231
msgid "retrieve a single category (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258
+#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:286
msgid "Category UUID or slug"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221
+#: engine/core/docs/drf/viewsets.py:246 engine/core/docs/drf/viewsets.py:247
msgid "create a category"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229
+#: engine/core/docs/drf/viewsets.py:254 engine/core/docs/drf/viewsets.py:255
msgid "delete a category"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237
+#: engine/core/docs/drf/viewsets.py:262 engine/core/docs/drf/viewsets.py:263
msgid "rewrite an existing category saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:244 engine/core/docs/drf/viewsets.py:245
+#: engine/core/docs/drf/viewsets.py:270 engine/core/docs/drf/viewsets.py:272
msgid "rewrite some fields of an existing category saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704
-#: engine/core/docs/drf/viewsets.py:988
+#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:1046
#: engine/core/graphene/object_types.py:117
-#: engine/core/graphene/object_types.py:207
-#: engine/core/graphene/object_types.py:482
+#: engine/core/graphene/object_types.py:236
+#: engine/core/graphene/object_types.py:537
msgid "SEO Meta snapshot"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:253
+#: engine/core/docs/drf/viewsets.py:281
msgid "returns a snapshot of the category's SEO meta data"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:274
+#: engine/core/docs/drf/viewsets.py:302
msgid "list all orders (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:275
+#: engine/core/docs/drf/viewsets.py:303
msgid "for non-staff users, only their own orders are returned."
msgstr ""
-#: engine/core/docs/drf/viewsets.py:281
+#: engine/core/docs/drf/viewsets.py:309
msgid ""
"Case-insensitive substring search across human_readable_id, order_products."
"product.name, and order_products.product.partnumber"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:288
+#: engine/core/docs/drf/viewsets.py:316
msgid "Filter orders with buy_time >= this ISO 8601 datetime"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:293
+#: engine/core/docs/drf/viewsets.py:321
msgid "Filter orders with buy_time <= this ISO 8601 datetime"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:298
+#: engine/core/docs/drf/viewsets.py:326
msgid "Filter by exact order UUID"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:303
+#: engine/core/docs/drf/viewsets.py:331
msgid "Filter by exact human-readable order ID"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:308
+#: engine/core/docs/drf/viewsets.py:336
msgid "Filter by user's email (case-insensitive exact match)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:313
+#: engine/core/docs/drf/viewsets.py:341
msgid "Filter by user's UUID"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:318
+#: engine/core/docs/drf/viewsets.py:347
msgid "Filter by order status (case-insensitive substring match)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:324
+#: engine/core/docs/drf/viewsets.py:354
msgid ""
"Order by one of: uuid, human_readable_id, user_email, user, status, created, "
"modified, buy_time, random. Prefix with '-' for descending (e.g. '-"
"buy_time')."
msgstr ""
-#: engine/core/docs/drf/viewsets.py:336
+#: engine/core/docs/drf/viewsets.py:366
msgid "retrieve a single order (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:341
+#: engine/core/docs/drf/viewsets.py:371
msgid "Order UUID or human-readable id"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:351
+#: engine/core/docs/drf/viewsets.py:381
msgid "create an order"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:352
+#: engine/core/docs/drf/viewsets.py:382
msgid "doesn't work for non-staff users."
msgstr ""
-#: engine/core/docs/drf/viewsets.py:359
+#: engine/core/docs/drf/viewsets.py:389
msgid "delete an order"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:366
+#: engine/core/docs/drf/viewsets.py:396
msgid "rewrite an existing order saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:373
+#: engine/core/docs/drf/viewsets.py:403
msgid "rewrite some fields of an existing order saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:380
+#: engine/core/docs/drf/viewsets.py:410
msgid "purchase an order"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:382
+#: engine/core/docs/drf/viewsets.py:412
msgid ""
"finalizes the order purchase. if `force_balance` is used, the purchase is "
"completed using the user's balance; if `force_payment` is used, a "
"transaction is initiated."
msgstr ""
-#: engine/core/docs/drf/viewsets.py:397
+#: engine/core/docs/drf/viewsets.py:427
msgid "retrieve current pending order of a user"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:398
+#: engine/core/docs/drf/viewsets.py:428
msgid "retrieves a current pending order of an authenticated user"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334
+#: engine/core/docs/drf/viewsets.py:438 engine/core/graphene/mutations.py:354
msgid "purchase an order without account creation"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:409
+#: engine/core/docs/drf/viewsets.py:439
msgid "finalizes the order purchase for a non-registered user."
msgstr ""
-#: engine/core/docs/drf/viewsets.py:420
+#: engine/core/docs/drf/viewsets.py:450
msgid "add product to order"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:421
+#: engine/core/docs/drf/viewsets.py:452
msgid ""
"adds a product to an order using the provided `product_uuid` and "
"`attributes`."
msgstr ""
-#: engine/core/docs/drf/viewsets.py:429
+#: engine/core/docs/drf/viewsets.py:461
msgid "add a list of products to order, quantities will not count"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:430
+#: engine/core/docs/drf/viewsets.py:463
msgid ""
"adds a list of products to an order using the provided `product_uuid` and "
"`attributes`."
msgstr ""
-#: engine/core/docs/drf/viewsets.py:438
+#: engine/core/docs/drf/viewsets.py:472
msgid "remove product from order"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:439
+#: engine/core/docs/drf/viewsets.py:474
msgid ""
"removes a product from an order using the provided `product_uuid` and "
"`attributes`."
msgstr ""
-#: engine/core/docs/drf/viewsets.py:447
+#: engine/core/docs/drf/viewsets.py:483
msgid "remove product from order, quantities will not count"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:448
+#: engine/core/docs/drf/viewsets.py:485
msgid ""
"removes a list of products from an order using the provided `product_uuid` "
"and `attributes`"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:459
+#: engine/core/docs/drf/viewsets.py:497
msgid "list all wishlists (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:460
+#: engine/core/docs/drf/viewsets.py:498
msgid "for non-staff users, only their own wishlists are returned."
msgstr ""
-#: engine/core/docs/drf/viewsets.py:467
+#: engine/core/docs/drf/viewsets.py:508
msgid "retrieve a single wishlist (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:474
+#: engine/core/docs/drf/viewsets.py:515
msgid "create an wishlist"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:475
+#: engine/core/docs/drf/viewsets.py:516
msgid "Doesn't work for non-staff users."
msgstr ""
-#: engine/core/docs/drf/viewsets.py:482
+#: engine/core/docs/drf/viewsets.py:523
msgid "delete an wishlist"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:489
+#: engine/core/docs/drf/viewsets.py:530
msgid "rewrite an existing wishlist saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:496
+#: engine/core/docs/drf/viewsets.py:537
msgid "rewrite some fields of an existing wishlist saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:503
+#: engine/core/docs/drf/viewsets.py:544
msgid "retrieve current pending wishlist of a user"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:504
+#: engine/core/docs/drf/viewsets.py:545
msgid "retrieves a current pending wishlist of an authenticated user"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:514
+#: engine/core/docs/drf/viewsets.py:555
msgid "add product to wishlist"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:515
+#: engine/core/docs/drf/viewsets.py:557
msgid "adds a product to an wishlist using the provided `product_uuid`"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:523
+#: engine/core/docs/drf/viewsets.py:566
msgid "remove product from wishlist"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:524
+#: engine/core/docs/drf/viewsets.py:568
msgid "removes a product from an wishlist using the provided `product_uuid`"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:532
+#: engine/core/docs/drf/viewsets.py:577
msgid "add many products to wishlist"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:533
+#: engine/core/docs/drf/viewsets.py:579
msgid "adds many products to an wishlist using the provided `product_uuids`"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:541
+#: engine/core/docs/drf/viewsets.py:588
msgid "remove many products from wishlist"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:542
+#: engine/core/docs/drf/viewsets.py:590
msgid ""
"removes many products from an wishlist using the provided `product_uuids`"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:549
+#: engine/core/docs/drf/viewsets.py:598
msgid ""
"Filter by one or more attribute name/value pairs. \n"
"• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n"
@@ -588,592 +588,592 @@ msgid ""
"`b64-description=icontains-aGVhdC1jb2xk`"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:568 engine/core/docs/drf/viewsets.py:569
+#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
msgid "list all products (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:574
+#: engine/core/docs/drf/viewsets.py:623
msgid "(exact) Product UUID"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:581
+#: engine/core/docs/drf/viewsets.py:630
msgid ""
"Comma-separated list of fields to sort by. Prefix with `-` for "
"descending. \n"
"**Allowed:** uuid, rating, name, slug, created, modified, price, random"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599
+#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
msgid "retrieve a single product (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634
-#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672
-#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710
+#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683
+#: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725
+#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763
msgid "Product UUID or slug"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
+#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
#: engine/core/graphene/dashboard_mutations/product.py:80
#: engine/core/graphene/dashboard_mutations/product.py:118
#: engine/core/graphene/dashboard_mutations/product.py:166
msgid "create a product"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629
+#: engine/core/docs/drf/viewsets.py:677 engine/core/docs/drf/viewsets.py:678
msgid "rewrite an existing product, preserving non-editable fields"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
+#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:700
msgid ""
"update some fields of an existing product, preserving non-editable fields"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
+#: engine/core/docs/drf/viewsets.py:719 engine/core/docs/drf/viewsets.py:720
msgid "delete a product"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686
+#: engine/core/docs/drf/viewsets.py:738 engine/core/docs/drf/viewsets.py:739
msgid "lists all permitted feedbacks for a product"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:705
+#: engine/core/docs/drf/viewsets.py:758
msgid "returns a snapshot of the product's SEO meta data"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:726
+#: engine/core/docs/drf/viewsets.py:779
msgid "list all addresses"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:736
+#: engine/core/docs/drf/viewsets.py:789
msgid "retrieve a single address"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:746
+#: engine/core/docs/drf/viewsets.py:799
msgid "create a new address"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:810
msgid "delete an address"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:767
+#: engine/core/docs/drf/viewsets.py:820
msgid "update an entire address"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:778
+#: engine/core/docs/drf/viewsets.py:831
msgid "partially update an address"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:789
+#: engine/core/docs/drf/viewsets.py:842
msgid "autocomplete address suggestions"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:794
+#: engine/core/docs/drf/viewsets.py:848
msgid "raw data query string, please append with data from geo-IP endpoint"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:800
+#: engine/core/docs/drf/viewsets.py:855
msgid "limit the results amount, 1 < limit < 10, default: 5"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:816
+#: engine/core/docs/drf/viewsets.py:871
msgid "list all feedbacks (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:823
+#: engine/core/docs/drf/viewsets.py:881
msgid "retrieve a single feedback (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:830
+#: engine/core/docs/drf/viewsets.py:888
msgid "create a feedback"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:837
+#: engine/core/docs/drf/viewsets.py:895
msgid "delete a feedback"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:844
+#: engine/core/docs/drf/viewsets.py:902
msgid "rewrite an existing feedback saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:851
+#: engine/core/docs/drf/viewsets.py:909
msgid "rewrite some fields of an existing feedback saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:861
+#: engine/core/docs/drf/viewsets.py:919
msgid "list all order–product relations (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:871
+#: engine/core/docs/drf/viewsets.py:929
msgid "retrieve a single order–product relation (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:881
+#: engine/core/docs/drf/viewsets.py:939
msgid "create a new order–product relation"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:891
+#: engine/core/docs/drf/viewsets.py:949
msgid "replace an existing order–product relation"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:901
+#: engine/core/docs/drf/viewsets.py:959
msgid "partially update an existing order–product relation"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:911
+#: engine/core/docs/drf/viewsets.py:969
msgid "delete an order–product relation"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:921
+#: engine/core/docs/drf/viewsets.py:979
msgid "add or remove feedback on an order–product relation"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:938
+#: engine/core/docs/drf/viewsets.py:996
msgid "list all brands (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:945
+#: engine/core/docs/drf/viewsets.py:1003
msgid "retrieve a single brand (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993
+#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051
msgid "Brand UUID or slug"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:960
+#: engine/core/docs/drf/viewsets.py:1018
msgid "create a brand"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:967
+#: engine/core/docs/drf/viewsets.py:1025
msgid "delete a brand"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:974
+#: engine/core/docs/drf/viewsets.py:1032
msgid "rewrite an existing brand saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:981
+#: engine/core/docs/drf/viewsets.py:1039
msgid "rewrite some fields of an existing brand saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1006
+#: engine/core/docs/drf/viewsets.py:1064
msgid "list all vendors (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1013
+#: engine/core/docs/drf/viewsets.py:1074
msgid "retrieve a single vendor (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1020
+#: engine/core/docs/drf/viewsets.py:1081
msgid "create a vendor"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1027
+#: engine/core/docs/drf/viewsets.py:1088
msgid "delete a vendor"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1034
+#: engine/core/docs/drf/viewsets.py:1095
msgid "rewrite an existing vendor saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1041
+#: engine/core/docs/drf/viewsets.py:1102
msgid "rewrite some fields of an existing vendor saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1051
+#: engine/core/docs/drf/viewsets.py:1112
msgid "list all product images (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1058
+#: engine/core/docs/drf/viewsets.py:1122
msgid "retrieve a single product image (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1065
+#: engine/core/docs/drf/viewsets.py:1129
msgid "create a product image"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1072
+#: engine/core/docs/drf/viewsets.py:1139
msgid "delete a product image"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1079
+#: engine/core/docs/drf/viewsets.py:1146
msgid "rewrite an existing product image saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1086
+#: engine/core/docs/drf/viewsets.py:1154
msgid "rewrite some fields of an existing product image saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1096
+#: engine/core/docs/drf/viewsets.py:1165
msgid "list all promo codes (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1103
+#: engine/core/docs/drf/viewsets.py:1175
msgid "retrieve a single promo code (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1110
+#: engine/core/docs/drf/viewsets.py:1182
msgid "create a promo code"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1117
+#: engine/core/docs/drf/viewsets.py:1189
msgid "delete a promo code"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1124
+#: engine/core/docs/drf/viewsets.py:1196
msgid "rewrite an existing promo code saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1131
+#: engine/core/docs/drf/viewsets.py:1203
msgid "rewrite some fields of an existing promo code saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1141
+#: engine/core/docs/drf/viewsets.py:1213
msgid "list all promotions (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1148
+#: engine/core/docs/drf/viewsets.py:1223
msgid "retrieve a single promotion (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1155
+#: engine/core/docs/drf/viewsets.py:1230
msgid "create a promotion"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1162
+#: engine/core/docs/drf/viewsets.py:1237
msgid "delete a promotion"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1169
+#: engine/core/docs/drf/viewsets.py:1244
msgid "rewrite an existing promotion saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1176
+#: engine/core/docs/drf/viewsets.py:1251
msgid "rewrite some fields of an existing promotion saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1186
+#: engine/core/docs/drf/viewsets.py:1261
msgid "list all stocks (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1193
+#: engine/core/docs/drf/viewsets.py:1268
msgid "retrieve a single stock (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1200
+#: engine/core/docs/drf/viewsets.py:1275
msgid "create a stock record"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1207
+#: engine/core/docs/drf/viewsets.py:1282
msgid "delete a stock record"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1214
+#: engine/core/docs/drf/viewsets.py:1289
msgid "rewrite an existing stock record saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1221
+#: engine/core/docs/drf/viewsets.py:1297
msgid "rewrite some fields of an existing stock record saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1231
+#: engine/core/docs/drf/viewsets.py:1308
msgid "list all product tags (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1238
+#: engine/core/docs/drf/viewsets.py:1318
msgid "retrieve a single product tag (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1245
+#: engine/core/docs/drf/viewsets.py:1325
msgid "create a product tag"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1252
+#: engine/core/docs/drf/viewsets.py:1335
msgid "delete a product tag"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1259
+#: engine/core/docs/drf/viewsets.py:1342
msgid "rewrite an existing product tag saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1266
+#: engine/core/docs/drf/viewsets.py:1350
msgid "rewrite some fields of an existing product tag saving non-editables"
msgstr ""
-#: engine/core/elasticsearch/__init__.py:122
-#: engine/core/elasticsearch/__init__.py:570
+#: engine/core/elasticsearch/__init__.py:127
+#: engine/core/elasticsearch/__init__.py:627
msgid "no search term provided."
msgstr ""
-#: engine/core/filters.py:69 engine/core/filters.py:426
-#: engine/core/filters.py:553
+#: engine/core/filters.py:78 engine/core/filters.py:484
+#: engine/core/filters.py:625
msgid "Search"
msgstr ""
-#: engine/core/filters.py:70 engine/core/filters.py:583
-#: engine/core/filters.py:612
+#: engine/core/filters.py:79 engine/core/filters.py:662
+#: engine/core/filters.py:691
msgid "UUID"
msgstr ""
-#: engine/core/filters.py:71 engine/core/filters.py:428
-#: engine/core/filters.py:555
+#: engine/core/filters.py:80 engine/core/filters.py:487
+#: engine/core/filters.py:627
msgid "Name"
msgstr ""
-#: engine/core/filters.py:72 engine/core/filters.py:557
+#: engine/core/filters.py:82 engine/core/filters.py:630
msgid "Categories"
msgstr ""
-#: engine/core/filters.py:74
+#: engine/core/filters.py:86
msgid "Categories Slugs"
msgstr ""
-#: engine/core/filters.py:75 engine/core/filters.py:436
+#: engine/core/filters.py:88 engine/core/filters.py:495
msgid "Tags"
msgstr ""
-#: engine/core/filters.py:76
+#: engine/core/filters.py:90
msgid "Min Price"
msgstr ""
-#: engine/core/filters.py:77
+#: engine/core/filters.py:93
msgid "Max Price"
msgstr ""
-#: engine/core/filters.py:78
+#: engine/core/filters.py:95
msgid "Is Active"
msgstr ""
-#: engine/core/filters.py:79
+#: engine/core/filters.py:96
msgid "Brand"
msgstr ""
-#: engine/core/filters.py:80
+#: engine/core/filters.py:97
msgid "Attributes"
msgstr ""
-#: engine/core/filters.py:81
+#: engine/core/filters.py:99
msgid "Quantity"
msgstr ""
-#: engine/core/filters.py:82 engine/core/filters.py:430
-#: engine/core/filters.py:556 engine/core/models.py:321
-#: engine/core/models.py:489 engine/core/models.py:644
+#: engine/core/filters.py:101 engine/core/filters.py:489
+#: engine/core/filters.py:628 engine/core/models.py:327
+#: engine/core/models.py:508 engine/core/models.py:665
msgid "Slug"
msgstr ""
-#: engine/core/filters.py:83
+#: engine/core/filters.py:102
msgid "Is Digital"
msgstr ""
-#: engine/core/filters.py:84
+#: engine/core/filters.py:104
msgid "Include sub-categories"
msgstr ""
-#: engine/core/filters.py:87
+#: engine/core/filters.py:108
msgid "Include personal ordered"
msgstr ""
-#: engine/core/filters.py:89 engine/core/models.py:648
+#: engine/core/filters.py:110 engine/core/models.py:669
msgid "SKU"
msgstr ""
-#: engine/core/filters.py:184
+#: engine/core/filters.py:212
msgid "there must be a category_uuid to use include_subcategories flag"
msgstr ""
-#: engine/core/filters.py:353
+#: engine/core/filters.py:398
msgid "Search (ID, product name or part number)"
msgstr ""
-#: engine/core/filters.py:356
+#: engine/core/filters.py:402
msgid "Bought after (inclusive)"
msgstr ""
-#: engine/core/filters.py:357
+#: engine/core/filters.py:405
msgid "Bought before (inclusive)"
msgstr ""
-#: engine/core/filters.py:360 engine/core/filters.py:407
-#: engine/core/filters.py:614
+#: engine/core/filters.py:410 engine/core/filters.py:461
+#: engine/core/filters.py:696
msgid "User email"
msgstr ""
-#: engine/core/filters.py:361 engine/core/filters.py:408
-#: engine/core/filters.py:592 engine/core/filters.py:613
+#: engine/core/filters.py:413 engine/core/filters.py:464
+#: engine/core/filters.py:671 engine/core/filters.py:693
msgid "User UUID"
msgstr ""
-#: engine/core/filters.py:362
+#: engine/core/filters.py:415
msgid "Status"
msgstr ""
-#: engine/core/filters.py:366
+#: engine/core/filters.py:419
msgid "Human Readable ID"
msgstr ""
-#: engine/core/filters.py:429
+#: engine/core/filters.py:488
msgid "Parent"
msgstr ""
-#: engine/core/filters.py:433
+#: engine/core/filters.py:492
msgid "Whole category(has at least 1 product or not)"
msgstr ""
-#: engine/core/filters.py:437
+#: engine/core/filters.py:496
msgid "Level"
msgstr ""
-#: engine/core/filters.py:587
+#: engine/core/filters.py:666
msgid "Product UUID"
msgstr ""
-#: engine/core/graphene/mutations.py:40
+#: engine/core/graphene/mutations.py:41
msgid "key to look for in or set into the cache"
msgstr ""
-#: engine/core/graphene/mutations.py:41
+#: engine/core/graphene/mutations.py:43
msgid "data to store in cache"
msgstr ""
-#: engine/core/graphene/mutations.py:44
+#: engine/core/graphene/mutations.py:46
msgid "timeout in seconds to set the data for into the cache"
msgstr ""
-#: engine/core/graphene/mutations.py:47
+#: engine/core/graphene/mutations.py:49
msgid "cached data"
msgstr ""
-#: engine/core/graphene/mutations.py:62
+#: engine/core/graphene/mutations.py:64
msgid "camelized JSON data from the requested URL"
msgstr ""
-#: engine/core/graphene/mutations.py:67 engine/core/views.py:257
+#: engine/core/graphene/mutations.py:69 engine/core/views.py:249
msgid "only URLs starting with http(s):// are allowed"
msgstr ""
-#: engine/core/graphene/mutations.py:83
+#: engine/core/graphene/mutations.py:87
msgid "add a product to the order"
msgstr ""
-#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131
-#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287
+#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139
+#: engine/core/graphene/mutations.py:255 engine/core/graphene/mutations.py:307
#, python-brace-format
msgid "order {order_uuid} not found"
msgstr ""
-#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159
+#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167
msgid "remove a product from the order"
msgstr ""
-#: engine/core/graphene/mutations.py:137
+#: engine/core/graphene/mutations.py:145
msgid "remove all products from the order"
msgstr ""
-#: engine/core/graphene/mutations.py:182
+#: engine/core/graphene/mutations.py:190
msgid "buy an order"
msgstr ""
-#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265
+#: engine/core/graphene/mutations.py:221 engine/core/graphene/mutations.py:283
msgid "please provide either order_uuid or order_hr_id - mutually exclusive"
msgstr ""
-#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501
-#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712
+#: engine/core/graphene/mutations.py:250 engine/core/graphene/mutations.py:525
+#: engine/core/graphene/mutations.py:574 engine/core/viewsets.py:753
msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr ""
-#: engine/core/graphene/mutations.py:245
+#: engine/core/graphene/mutations.py:261
msgid "perform an action on a list of products in the order"
msgstr ""
-#: engine/core/graphene/mutations.py:250
+#: engine/core/graphene/mutations.py:266
msgid "remove/add"
msgstr ""
-#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323
+#: engine/core/graphene/mutations.py:302 engine/core/graphene/mutations.py:343
msgid "action must be either add or remove"
msgstr ""
-#: engine/core/graphene/mutations.py:293
+#: engine/core/graphene/mutations.py:313
msgid "perform an action on a list of products in the wishlist"
msgstr ""
-#: engine/core/graphene/mutations.py:311
+#: engine/core/graphene/mutations.py:331
msgid "please provide wishlist_uuid value"
msgstr ""
-#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404
-#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460
-#: engine/core/graphene/mutations.py:504
+#: engine/core/graphene/mutations.py:348 engine/core/graphene/mutations.py:424
+#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480
+#: engine/core/graphene/mutations.py:530
#, python-brace-format
msgid "wishlist {wishlist_uuid} not found"
msgstr ""
-#: engine/core/graphene/mutations.py:382
+#: engine/core/graphene/mutations.py:402
msgid "add a product to the wishlist"
msgstr ""
-#: engine/core/graphene/mutations.py:410
+#: engine/core/graphene/mutations.py:430
msgid "remove a product from the wishlist"
msgstr ""
-#: engine/core/graphene/mutations.py:438
+#: engine/core/graphene/mutations.py:458
msgid "remove all products from the wishlist"
msgstr ""
-#: engine/core/graphene/mutations.py:466
+#: engine/core/graphene/mutations.py:486
msgid "buy all products from the wishlist"
msgstr ""
-#: engine/core/graphene/mutations.py:510
+#: engine/core/graphene/mutations.py:536
msgid "buy a product"
msgstr ""
-#: engine/core/graphene/mutations.py:516
+#: engine/core/graphene/mutations.py:543
msgid ""
"please send the attributes as the string formatted like attr1=value1,"
"attr2=value2"
msgstr ""
-#: engine/core/graphene/mutations.py:549
+#: engine/core/graphene/mutations.py:581
msgid "add or delete a feedback for orderproduct"
msgstr ""
-#: engine/core/graphene/mutations.py:573
+#: engine/core/graphene/mutations.py:607
msgid "action must be either `add` or `remove`"
msgstr ""
-#: engine/core/graphene/mutations.py:576
+#: engine/core/graphene/mutations.py:610
#, python-brace-format
msgid "order product {order_product_uuid} not found"
msgstr ""
-#: engine/core/graphene/mutations.py:582
+#: engine/core/graphene/mutations.py:617
msgid "original address string provided by the user"
msgstr ""
-#: engine/core/graphene/mutations.py:618 engine/core/models.py:955
-#: engine/core/models.py:968 engine/core/models.py:1383
-#: engine/core/models.py:1412 engine/core/models.py:1437
-#: engine/core/viewsets.py:715
+#: engine/core/graphene/mutations.py:654 engine/core/models.py:978
+#: engine/core/models.py:991 engine/core/models.py:1435
+#: engine/core/models.py:1466 engine/core/models.py:1497
+#: engine/core/viewsets.py:760
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr ""
-#: engine/core/graphene/mutations.py:632
+#: engine/core/graphene/mutations.py:668
msgid "limit must be between 1 and 10"
msgstr ""
-#: engine/core/graphene/mutations.py:681
+#: engine/core/graphene/mutations.py:717
msgid "elasticsearch - works like a charm"
msgstr ""
#: engine/core/graphene/object_types.py:82
-#: engine/core/graphene/object_types.py:370
-#: engine/core/graphene/object_types.py:417 engine/core/models.py:772
-#: engine/core/models.py:1250 engine/core/models.py:1897
+#: engine/core/graphene/object_types.py:417
+#: engine/core/graphene/object_types.py:468 engine/core/models.py:795
+#: engine/core/models.py:1289 engine/core/models.py:2021
msgid "attributes"
msgstr ""
@@ -1186,139 +1186,139 @@ msgid "groups of attributes"
msgstr ""
#: engine/core/graphene/object_types.py:116
-#: engine/core/graphene/object_types.py:193
-#: engine/core/graphene/object_types.py:223 engine/core/models.py:432
+#: engine/core/graphene/object_types.py:214
+#: engine/core/graphene/object_types.py:252 engine/core/models.py:451
msgid "categories"
msgstr ""
-#: engine/core/graphene/object_types.py:124 engine/core/models.py:503
+#: engine/core/graphene/object_types.py:132 engine/core/models.py:522
msgid "brands"
msgstr ""
-#: engine/core/graphene/object_types.py:195
+#: engine/core/graphene/object_types.py:216
msgid "category image url"
msgstr ""
-#: engine/core/graphene/object_types.py:196
-#: engine/core/graphene/object_types.py:317 engine/core/models.py:283
+#: engine/core/graphene/object_types.py:217
+#: engine/core/graphene/object_types.py:362 engine/core/models.py:289
msgid "markup percentage"
msgstr ""
-#: engine/core/graphene/object_types.py:199
+#: engine/core/graphene/object_types.py:221
msgid "which attributes and values can be used for filtering this category."
msgstr ""
-#: engine/core/graphene/object_types.py:203
+#: engine/core/graphene/object_types.py:227
msgid "minimum and maximum prices for products in this category, if available."
msgstr ""
-#: engine/core/graphene/object_types.py:205
+#: engine/core/graphene/object_types.py:231
msgid "tags for this category"
msgstr ""
-#: engine/core/graphene/object_types.py:206
+#: engine/core/graphene/object_types.py:234
msgid "products in this category"
msgstr ""
-#: engine/core/graphene/object_types.py:324 engine/core/models.py:188
+#: engine/core/graphene/object_types.py:369 engine/core/models.py:194
msgid "vendors"
msgstr ""
-#: engine/core/graphene/object_types.py:328
+#: engine/core/graphene/object_types.py:373
msgid "Latitude (Y coordinate)"
msgstr ""
-#: engine/core/graphene/object_types.py:329
+#: engine/core/graphene/object_types.py:374
msgid "Longitude (X coordinate)"
msgstr ""
-#: engine/core/graphene/object_types.py:358
+#: engine/core/graphene/object_types.py:403
msgid "comment"
msgstr ""
-#: engine/core/graphene/object_types.py:359
-#: engine/core/graphene/object_types.py:483
+#: engine/core/graphene/object_types.py:405
+#: engine/core/graphene/object_types.py:539
msgid "rating value from 1 to 10, inclusive, or 0 if not set."
msgstr ""
-#: engine/core/graphene/object_types.py:366
+#: engine/core/graphene/object_types.py:413
msgid "represents feedback from a user."
msgstr ""
-#: engine/core/graphene/object_types.py:371
-#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244
+#: engine/core/graphene/object_types.py:418
+#: engine/core/graphene/object_types.py:469 engine/core/models.py:1283
msgid "notifications"
msgstr ""
-#: engine/core/graphene/object_types.py:372
+#: engine/core/graphene/object_types.py:420
msgid "download url for this order product if applicable"
msgstr ""
-#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736
+#: engine/core/graphene/object_types.py:422 engine/core/models.py:1848
msgid "feedback"
msgstr ""
-#: engine/core/graphene/object_types.py:407
+#: engine/core/graphene/object_types.py:456
msgid "a list of order products in this order"
msgstr ""
-#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214
+#: engine/core/graphene/object_types.py:458 engine/core/models.py:1253
msgid "billing address"
msgstr ""
-#: engine/core/graphene/object_types.py:412
+#: engine/core/graphene/object_types.py:462
msgid ""
"shipping address for this order, leave blank if same as billing address or "
"if not applicable"
msgstr ""
-#: engine/core/graphene/object_types.py:414
+#: engine/core/graphene/object_types.py:465
msgid "total price of this order"
msgstr ""
-#: engine/core/graphene/object_types.py:415
+#: engine/core/graphene/object_types.py:466
msgid "total quantity of products in order"
msgstr ""
-#: engine/core/graphene/object_types.py:416
+#: engine/core/graphene/object_types.py:467
msgid "are all products in the order digital"
msgstr ""
-#: engine/core/graphene/object_types.py:419
+#: engine/core/graphene/object_types.py:471
msgid "transactions for this order"
msgstr ""
-#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278
+#: engine/core/graphene/object_types.py:491 engine/core/models.py:1317
msgid "orders"
msgstr ""
-#: engine/core/graphene/object_types.py:459
+#: engine/core/graphene/object_types.py:512
msgid "image url"
msgstr ""
-#: engine/core/graphene/object_types.py:466
+#: engine/core/graphene/object_types.py:519
msgid "product's images"
msgstr ""
-#: engine/core/graphene/object_types.py:473 engine/core/models.py:431
-#: engine/core/models.py:586
+#: engine/core/graphene/object_types.py:526 engine/core/models.py:450
+#: engine/core/models.py:607
msgid "category"
msgstr ""
-#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737
+#: engine/core/graphene/object_types.py:528 engine/core/models.py:1849
msgid "feedbacks"
msgstr ""
-#: engine/core/graphene/object_types.py:476 engine/core/models.py:502
-#: engine/core/models.py:595
+#: engine/core/graphene/object_types.py:529 engine/core/models.py:521
+#: engine/core/models.py:616
msgid "brand"
msgstr ""
-#: engine/core/graphene/object_types.py:477 engine/core/models.py:106
+#: engine/core/graphene/object_types.py:531 engine/core/models.py:106
msgid "attribute groups"
msgstr ""
-#: engine/core/graphene/object_types.py:478
+#: engine/core/graphene/object_types.py:533
#: engine/core/templates/digital_order_created_email.html:111
#: engine/core/templates/digital_order_delivered_email.html:109
#: engine/core/templates/shipped_order_created_email.html:109
@@ -1326,7 +1326,7 @@ msgstr ""
msgid "price"
msgstr ""
-#: engine/core/graphene/object_types.py:479
+#: engine/core/graphene/object_types.py:534
#: engine/core/templates/digital_order_created_email.html:110
#: engine/core/templates/digital_order_delivered_email.html:108
#: engine/core/templates/shipped_order_created_email.html:108
@@ -1334,39 +1334,39 @@ msgstr ""
msgid "quantity"
msgstr ""
-#: engine/core/graphene/object_types.py:480
+#: engine/core/graphene/object_types.py:535
msgid "number of feedbacks"
msgstr ""
-#: engine/core/graphene/object_types.py:481
+#: engine/core/graphene/object_types.py:536
msgid "only available for personal orders"
msgstr ""
-#: engine/core/graphene/object_types.py:484
+#: engine/core/graphene/object_types.py:541
msgid "discount price"
msgstr ""
-#: engine/core/graphene/object_types.py:508 engine/core/models.py:658
+#: engine/core/graphene/object_types.py:565 engine/core/models.py:679
msgid "products"
msgstr ""
-#: engine/core/graphene/object_types.py:611
+#: engine/core/graphene/object_types.py:675
msgid "promocodes"
msgstr ""
-#: engine/core/graphene/object_types.py:621
+#: engine/core/graphene/object_types.py:690
msgid "products on sale"
msgstr ""
-#: engine/core/graphene/object_types.py:628 engine/core/models.py:904
+#: engine/core/graphene/object_types.py:698 engine/core/models.py:927
msgid "promotions"
msgstr ""
-#: engine/core/graphene/object_types.py:632 engine/core/models.py:187
+#: engine/core/graphene/object_types.py:702 engine/core/models.py:193
msgid "vendor"
msgstr ""
-#: engine/core/graphene/object_types.py:633 engine/core/models.py:657
+#: engine/core/graphene/object_types.py:703 engine/core/models.py:678
#: engine/core/templates/digital_order_created_email.html:109
#: engine/core/templates/digital_order_delivered_email.html:107
#: engine/core/templates/shipped_order_created_email.html:107
@@ -1374,98 +1374,98 @@ msgstr ""
msgid "product"
msgstr ""
-#: engine/core/graphene/object_types.py:644 engine/core/models.py:927
+#: engine/core/graphene/object_types.py:715 engine/core/models.py:950
msgid "wishlisted products"
msgstr ""
-#: engine/core/graphene/object_types.py:650 engine/core/models.py:944
+#: engine/core/graphene/object_types.py:722 engine/core/models.py:967
msgid "wishlists"
msgstr ""
-#: engine/core/graphene/object_types.py:654
+#: engine/core/graphene/object_types.py:727
msgid "tagged products"
msgstr ""
-#: engine/core/graphene/object_types.py:661 engine/core/models.py:224
-#: engine/core/models.py:601
+#: engine/core/graphene/object_types.py:735 engine/core/models.py:230
+#: engine/core/models.py:622
msgid "product tags"
msgstr ""
-#: engine/core/graphene/object_types.py:665
+#: engine/core/graphene/object_types.py:740
msgid "tagged categories"
msgstr ""
-#: engine/core/graphene/object_types.py:672
+#: engine/core/graphene/object_types.py:748
msgid "categories tags"
msgstr ""
-#: engine/core/graphene/object_types.py:676
+#: engine/core/graphene/object_types.py:752
msgid "project name"
msgstr ""
-#: engine/core/graphene/object_types.py:677
+#: engine/core/graphene/object_types.py:753
msgid "company name"
msgstr ""
-#: engine/core/graphene/object_types.py:678
+#: engine/core/graphene/object_types.py:754
msgid "company address"
msgstr ""
-#: engine/core/graphene/object_types.py:679
+#: engine/core/graphene/object_types.py:755
msgid "company phone number"
msgstr ""
-#: engine/core/graphene/object_types.py:680
+#: engine/core/graphene/object_types.py:758
msgid "email from, sometimes it must be used instead of host user value"
msgstr ""
-#: engine/core/graphene/object_types.py:681
+#: engine/core/graphene/object_types.py:761
msgid "email host user"
msgstr ""
-#: engine/core/graphene/object_types.py:682
+#: engine/core/graphene/object_types.py:762
msgid "maximum amount for payment"
msgstr ""
-#: engine/core/graphene/object_types.py:683
+#: engine/core/graphene/object_types.py:763
msgid "minimum amount for payment"
msgstr ""
-#: engine/core/graphene/object_types.py:684
+#: engine/core/graphene/object_types.py:764
msgid "analytics data"
msgstr ""
-#: engine/core/graphene/object_types.py:685
+#: engine/core/graphene/object_types.py:765
msgid "advertisement data"
msgstr ""
-#: engine/core/graphene/object_types.py:688
+#: engine/core/graphene/object_types.py:768
msgid "company configuration"
msgstr ""
-#: engine/core/graphene/object_types.py:692
+#: engine/core/graphene/object_types.py:772
msgid "language code"
msgstr ""
-#: engine/core/graphene/object_types.py:693
+#: engine/core/graphene/object_types.py:773
msgid "language name"
msgstr ""
-#: engine/core/graphene/object_types.py:694
+#: engine/core/graphene/object_types.py:774
msgid "language flag, if exists :)"
msgstr ""
-#: engine/core/graphene/object_types.py:697
+#: engine/core/graphene/object_types.py:777
msgid "supported languages"
msgstr ""
-#: engine/core/graphene/object_types.py:728
-#: engine/core/graphene/object_types.py:729
-#: engine/core/graphene/object_types.py:730
+#: engine/core/graphene/object_types.py:809
+#: engine/core/graphene/object_types.py:812
+#: engine/core/graphene/object_types.py:815
msgid "products search results"
msgstr ""
-#: engine/core/graphene/object_types.py:731
+#: engine/core/graphene/object_types.py:817
msgid "posts search results"
msgstr ""
@@ -1489,7 +1489,7 @@ msgstr ""
msgid "attribute group's name"
msgstr ""
-#: engine/core/models.py:105 engine/core/models.py:734
+#: engine/core/models.py:105 engine/core/models.py:755
msgid "attribute group"
msgstr ""
@@ -1504,47 +1504,47 @@ msgid ""
"use in systems that interact with third-party vendors."
msgstr ""
-#: engine/core/models.py:124
+#: engine/core/models.py:125
msgid "stores credentials and endpoints required for vendor communication"
msgstr ""
-#: engine/core/models.py:125
+#: engine/core/models.py:127
msgid "authentication info"
msgstr ""
-#: engine/core/models.py:130
+#: engine/core/models.py:132
msgid "define the markup for products retrieved from this vendor"
msgstr ""
-#: engine/core/models.py:131
+#: engine/core/models.py:133
msgid "vendor markup percentage"
msgstr ""
-#: engine/core/models.py:135
+#: engine/core/models.py:137
msgid "name of this vendor"
msgstr ""
-#: engine/core/models.py:136
+#: engine/core/models.py:138
msgid "vendor name"
msgstr ""
-#: engine/core/models.py:147
+#: engine/core/models.py:153
msgid "response file"
msgstr ""
-#: engine/core/models.py:148
+#: engine/core/models.py:154
msgid "vendor's last processing response"
msgstr ""
-#: engine/core/models.py:154
+#: engine/core/models.py:160
msgid "vendor's integration file path"
msgstr ""
-#: engine/core/models.py:155
+#: engine/core/models.py:161
msgid "integration path"
msgstr ""
-#: engine/core/models.py:197
+#: engine/core/models.py:203
msgid ""
"Represents a product tag used for classifying or identifying products. The "
"ProductTag class is designed to uniquely identify and classify products "
@@ -1553,42 +1553,42 @@ msgid ""
"metadata customization for administrative purposes."
msgstr ""
-#: engine/core/models.py:209 engine/core/models.py:240
+#: engine/core/models.py:215 engine/core/models.py:246
msgid "internal tag identifier for the product tag"
msgstr ""
-#: engine/core/models.py:210 engine/core/models.py:241
+#: engine/core/models.py:216 engine/core/models.py:247
msgid "tag name"
msgstr ""
-#: engine/core/models.py:214 engine/core/models.py:245
+#: engine/core/models.py:220 engine/core/models.py:251
msgid "user-friendly name for the product tag"
msgstr ""
-#: engine/core/models.py:215 engine/core/models.py:246
+#: engine/core/models.py:221 engine/core/models.py:252
msgid "tag display name"
msgstr ""
-#: engine/core/models.py:223
+#: engine/core/models.py:229
msgid "product tag"
msgstr ""
-#: engine/core/models.py:229
+#: engine/core/models.py:235
msgid ""
"Represents a category tag used for products. This class models a category "
"tag that can be used to associate and classify products. It includes "
"attributes for an internal tag identifier and a user-friendly display name."
msgstr ""
-#: engine/core/models.py:254
+#: engine/core/models.py:260
msgid "category tag"
msgstr ""
-#: engine/core/models.py:255 engine/core/models.py:327
+#: engine/core/models.py:261 engine/core/models.py:333
msgid "category tags"
msgstr ""
-#: engine/core/models.py:260
+#: engine/core/models.py:266
msgid ""
"Represents a category entity to organize and group related items in a "
"hierarchical structure. Categories may have hierarchical relationships with "
@@ -1601,51 +1601,51 @@ msgid ""
"priority."
msgstr ""
-#: engine/core/models.py:274
+#: engine/core/models.py:280
msgid "upload an image representing this category"
msgstr ""
-#: engine/core/models.py:277
+#: engine/core/models.py:283
msgid "category image"
msgstr ""
-#: engine/core/models.py:282
+#: engine/core/models.py:288
msgid "define a markup percentage for products in this category"
msgstr ""
-#: engine/core/models.py:291
+#: engine/core/models.py:297
msgid "parent of this category to form a hierarchical structure"
msgstr ""
-#: engine/core/models.py:292
+#: engine/core/models.py:298
msgid "parent category"
msgstr ""
-#: engine/core/models.py:297
+#: engine/core/models.py:303
msgid "category name"
msgstr ""
-#: engine/core/models.py:298
+#: engine/core/models.py:304
msgid "provide a name for this category"
msgstr ""
-#: engine/core/models.py:305
+#: engine/core/models.py:311
msgid "add a detailed description for this category"
msgstr ""
-#: engine/core/models.py:306
+#: engine/core/models.py:312
msgid "category description"
msgstr ""
-#: engine/core/models.py:326
+#: engine/core/models.py:332
msgid "tags that help describe or group this category"
msgstr ""
-#: engine/core/models.py:333 engine/core/models.py:495
+#: engine/core/models.py:339 engine/core/models.py:514
msgid "priority"
msgstr ""
-#: engine/core/models.py:438
+#: engine/core/models.py:457
msgid ""
"Represents a Brand object in the system. This class handles information and "
"attributes related to a brand, including its name, logos, description, "
@@ -1653,47 +1653,47 @@ msgid ""
"organization and representation of brand-related data within the application."
msgstr ""
-#: engine/core/models.py:448
+#: engine/core/models.py:467
msgid "name of this brand"
msgstr ""
-#: engine/core/models.py:449
+#: engine/core/models.py:468
msgid "brand name"
msgstr ""
-#: engine/core/models.py:456
+#: engine/core/models.py:475
msgid "upload a logo representing this brand"
msgstr ""
-#: engine/core/models.py:458
+#: engine/core/models.py:477
msgid "brand small image"
msgstr ""
-#: engine/core/models.py:464
+#: engine/core/models.py:483
msgid "upload a big logo representing this brand"
msgstr ""
-#: engine/core/models.py:466
+#: engine/core/models.py:485
msgid "brand big image"
msgstr ""
-#: engine/core/models.py:471
+#: engine/core/models.py:490
msgid "add a detailed description of the brand"
msgstr ""
-#: engine/core/models.py:472
+#: engine/core/models.py:491
msgid "brand description"
msgstr ""
-#: engine/core/models.py:477
+#: engine/core/models.py:496
msgid "optional categories that this brand is associated with"
msgstr ""
-#: engine/core/models.py:478
+#: engine/core/models.py:497
msgid "associated categories"
msgstr ""
-#: engine/core/models.py:508
+#: engine/core/models.py:527
msgid ""
"Represents the stock of a product managed in the system. This class provides "
"details about the relationship between vendors, products, and their stock "
@@ -1703,72 +1703,72 @@ msgid ""
"from various vendors."
msgstr ""
-#: engine/core/models.py:520
+#: engine/core/models.py:539
msgid "the vendor supplying this product stock"
msgstr ""
-#: engine/core/models.py:521
+#: engine/core/models.py:540
msgid "associated vendor"
msgstr ""
-#: engine/core/models.py:525
+#: engine/core/models.py:544
msgid "final price to the customer after markups"
msgstr ""
-#: engine/core/models.py:526
+#: engine/core/models.py:545
msgid "selling price"
msgstr ""
-#: engine/core/models.py:531
+#: engine/core/models.py:550
msgid "the product associated with this stock entry"
msgstr ""
-#: engine/core/models.py:532 engine/core/models.py:797
-#: engine/core/models.py:843 engine/core/models.py:1792
+#: engine/core/models.py:551 engine/core/models.py:820
+#: engine/core/models.py:866 engine/core/models.py:1904
msgid "associated product"
msgstr ""
-#: engine/core/models.py:539
+#: engine/core/models.py:558
msgid "the price paid to the vendor for this product"
msgstr ""
-#: engine/core/models.py:540
+#: engine/core/models.py:559
msgid "vendor purchase price"
msgstr ""
-#: engine/core/models.py:544
+#: engine/core/models.py:563
msgid "available quantity of the product in stock"
msgstr ""
-#: engine/core/models.py:545
+#: engine/core/models.py:564
msgid "quantity in stock"
msgstr ""
-#: engine/core/models.py:549
+#: engine/core/models.py:568
msgid "vendor-assigned SKU for identifying the product"
msgstr ""
-#: engine/core/models.py:550
+#: engine/core/models.py:569
msgid "vendor sku"
msgstr ""
-#: engine/core/models.py:556
+#: engine/core/models.py:575
msgid "digital file associated with this stock if applicable"
msgstr ""
-#: engine/core/models.py:557
+#: engine/core/models.py:576
msgid "digital file"
msgstr ""
-#: engine/core/models.py:560
+#: engine/core/models.py:580
msgid "system attributes"
msgstr ""
-#: engine/core/models.py:567
+#: engine/core/models.py:588
msgid "stock entries"
msgstr ""
-#: engine/core/models.py:572
+#: engine/core/models.py:593
msgid ""
"Represents a product with attributes such as category, brand, tags, digital "
"status, name, description, part number, and slug. Provides related utility "
@@ -1780,55 +1780,55 @@ msgid ""
"product data and its associated information within an application."
msgstr ""
-#: engine/core/models.py:585
+#: engine/core/models.py:606
msgid "category this product belongs to"
msgstr ""
-#: engine/core/models.py:594
+#: engine/core/models.py:615
msgid "optionally associate this product with a brand"
msgstr ""
-#: engine/core/models.py:600
+#: engine/core/models.py:621
msgid "tags that help describe or group this product"
msgstr ""
-#: engine/core/models.py:605
+#: engine/core/models.py:626
msgid "indicates whether this product is digitally delivered"
msgstr ""
-#: engine/core/models.py:606
+#: engine/core/models.py:627
msgid "is product digital"
msgstr ""
-#: engine/core/models.py:612
+#: engine/core/models.py:633
msgid "provide a clear identifying name for the product"
msgstr ""
-#: engine/core/models.py:613
+#: engine/core/models.py:634
msgid "product name"
msgstr ""
-#: engine/core/models.py:619 engine/core/models.py:892
+#: engine/core/models.py:640 engine/core/models.py:915
msgid "add a detailed description of the product"
msgstr ""
-#: engine/core/models.py:620
+#: engine/core/models.py:641
msgid "product description"
msgstr ""
-#: engine/core/models.py:627
+#: engine/core/models.py:648
msgid "part number for this product"
msgstr ""
-#: engine/core/models.py:628
+#: engine/core/models.py:649
msgid "part number"
msgstr ""
-#: engine/core/models.py:647
+#: engine/core/models.py:668
msgid "stock keeping unit for this product"
msgstr ""
-#: engine/core/models.py:720
+#: engine/core/models.py:741
msgid ""
"Represents an attribute in the system. This class is used to define and "
"manage attributes, which are customizable pieces of data that can be "
@@ -1838,83 +1838,83 @@ msgid ""
"for dynamic and flexible data structuring."
msgstr ""
-#: engine/core/models.py:733
+#: engine/core/models.py:754
msgid "group of this attribute"
msgstr ""
-#: engine/core/models.py:739
+#: engine/core/models.py:760
msgid "string"
msgstr ""
-#: engine/core/models.py:740
+#: engine/core/models.py:761
msgid "integer"
msgstr ""
-#: engine/core/models.py:741
+#: engine/core/models.py:762
msgid "float"
msgstr ""
-#: engine/core/models.py:742
+#: engine/core/models.py:763
msgid "boolean"
msgstr ""
-#: engine/core/models.py:743
+#: engine/core/models.py:764
msgid "array"
msgstr ""
-#: engine/core/models.py:744
+#: engine/core/models.py:765
msgid "object"
msgstr ""
-#: engine/core/models.py:746
+#: engine/core/models.py:767
msgid "type of the attribute's value"
msgstr ""
-#: engine/core/models.py:747
+#: engine/core/models.py:768
msgid "value type"
msgstr ""
-#: engine/core/models.py:752
+#: engine/core/models.py:773
msgid "name of this attribute"
msgstr ""
-#: engine/core/models.py:753
+#: engine/core/models.py:774
msgid "attribute's name"
msgstr ""
-#: engine/core/models.py:758
+#: engine/core/models.py:779
msgid "is filterable"
msgstr ""
-#: engine/core/models.py:759
+#: engine/core/models.py:781
msgid "designates whether this attribute can be used for filtering or not"
msgstr ""
-#: engine/core/models.py:771 engine/core/models.py:789
+#: engine/core/models.py:794 engine/core/models.py:812
#: engine/core/templates/digital_order_delivered_email.html:134
msgid "attribute"
msgstr ""
-#: engine/core/models.py:777
+#: engine/core/models.py:800
msgid ""
"Represents a specific value for an attribute that is linked to a product. It "
"links the 'attribute' to a unique 'value', allowing better organization and "
"dynamic representation of product characteristics."
msgstr ""
-#: engine/core/models.py:788
+#: engine/core/models.py:811
msgid "attribute of this value"
msgstr ""
-#: engine/core/models.py:796
+#: engine/core/models.py:819
msgid "the specific product associated with this attribute's value"
msgstr ""
-#: engine/core/models.py:802
+#: engine/core/models.py:825
msgid "the specific value for this attribute"
msgstr ""
-#: engine/core/models.py:815
+#: engine/core/models.py:838
msgid ""
"Represents a product image associated with a product in the system. This "
"class is designed to manage images for products, including functionality for "
@@ -1923,39 +1923,39 @@ msgid ""
"with alternative text for the images."
msgstr ""
-#: engine/core/models.py:826
+#: engine/core/models.py:849
msgid "provide alternative text for the image for accessibility"
msgstr ""
-#: engine/core/models.py:827
+#: engine/core/models.py:850
msgid "image alt text"
msgstr ""
-#: engine/core/models.py:830
+#: engine/core/models.py:853
msgid "upload the image file for this product"
msgstr ""
-#: engine/core/models.py:831 engine/core/models.py:862
+#: engine/core/models.py:854 engine/core/models.py:885
msgid "product image"
msgstr ""
-#: engine/core/models.py:836
+#: engine/core/models.py:859
msgid "determines the order in which images are displayed"
msgstr ""
-#: engine/core/models.py:837
+#: engine/core/models.py:860
msgid "display priority"
msgstr ""
-#: engine/core/models.py:842
+#: engine/core/models.py:865
msgid "the product that this image represents"
msgstr ""
-#: engine/core/models.py:863
+#: engine/core/models.py:886
msgid "product images"
msgstr ""
-#: engine/core/models.py:868
+#: engine/core/models.py:891
msgid ""
"Represents a promotional campaign for products with a discount. This class "
"is used to define and manage promotional campaigns that offer a percentage-"
@@ -1965,39 +1965,39 @@ msgid ""
"affected items in the campaign."
msgstr ""
-#: engine/core/models.py:880
+#: engine/core/models.py:903
msgid "percentage discount for the selected products"
msgstr ""
-#: engine/core/models.py:881
+#: engine/core/models.py:904
msgid "discount percentage"
msgstr ""
-#: engine/core/models.py:886
+#: engine/core/models.py:909
msgid "provide a unique name for this promotion"
msgstr ""
-#: engine/core/models.py:887
+#: engine/core/models.py:910
msgid "promotion name"
msgstr ""
-#: engine/core/models.py:893
+#: engine/core/models.py:916
msgid "promotion description"
msgstr ""
-#: engine/core/models.py:898
+#: engine/core/models.py:921
msgid "select which products are included in this promotion"
msgstr ""
-#: engine/core/models.py:899
+#: engine/core/models.py:922
msgid "included products"
msgstr ""
-#: engine/core/models.py:903
+#: engine/core/models.py:926
msgid "promotion"
msgstr ""
-#: engine/core/models.py:914
+#: engine/core/models.py:937
msgid ""
"Represents a user's wishlist for storing and managing desired products. The "
"class provides functionality to manage a collection of products, supporting "
@@ -2005,23 +2005,23 @@ msgid ""
"operations for adding and removing multiple products at once."
msgstr ""
-#: engine/core/models.py:926
+#: engine/core/models.py:949
msgid "products that the user has marked as wanted"
msgstr ""
-#: engine/core/models.py:934
+#: engine/core/models.py:957
msgid "user who owns this wishlist"
msgstr ""
-#: engine/core/models.py:935
+#: engine/core/models.py:958
msgid "wishlist owner"
msgstr ""
-#: engine/core/models.py:943
+#: engine/core/models.py:966
msgid "wishlist"
msgstr ""
-#: engine/core/models.py:985
+#: engine/core/models.py:1008
msgid ""
"Represents a documentary record tied to a product. This class is used to "
"store information about documentaries related to specific products, "
@@ -2031,19 +2031,19 @@ msgid ""
"custom features."
msgstr ""
-#: engine/core/models.py:998
+#: engine/core/models.py:1023
msgid "documentary"
msgstr ""
-#: engine/core/models.py:999
+#: engine/core/models.py:1024
msgid "documentaries"
msgstr ""
-#: engine/core/models.py:1009
+#: engine/core/models.py:1034
msgid "unresolved"
msgstr ""
-#: engine/core/models.py:1014
+#: engine/core/models.py:1039
msgid ""
"Represents an address entity that includes location details and associations "
"with a user. Provides functionality for geographic and address data storage, "
@@ -2055,59 +2055,59 @@ msgid ""
"address with a user, facilitating personalized data handling."
msgstr ""
-#: engine/core/models.py:1029
+#: engine/core/models.py:1054
msgid "address line for the customer"
msgstr ""
-#: engine/core/models.py:1030
+#: engine/core/models.py:1055
msgid "address line"
msgstr ""
-#: engine/core/models.py:1032
+#: engine/core/models.py:1057
msgid "street"
msgstr ""
-#: engine/core/models.py:1033
+#: engine/core/models.py:1058
msgid "district"
msgstr ""
-#: engine/core/models.py:1034
+#: engine/core/models.py:1059
msgid "city"
msgstr ""
-#: engine/core/models.py:1035
+#: engine/core/models.py:1060
msgid "region"
msgstr ""
-#: engine/core/models.py:1036
+#: engine/core/models.py:1061
msgid "postal code"
msgstr ""
-#: engine/core/models.py:1037
+#: engine/core/models.py:1062
msgid "country"
msgstr ""
-#: engine/core/models.py:1044
+#: engine/core/models.py:1069
msgid "geolocation point: (longitude, latitude)"
msgstr ""
-#: engine/core/models.py:1047
+#: engine/core/models.py:1075
msgid "full JSON response from geocoder for this address"
msgstr ""
-#: engine/core/models.py:1052
+#: engine/core/models.py:1081
msgid "stored JSON response from the geocoding service"
msgstr ""
-#: engine/core/models.py:1060
+#: engine/core/models.py:1091
msgid "address"
msgstr ""
-#: engine/core/models.py:1061
+#: engine/core/models.py:1092
msgid "addresses"
msgstr ""
-#: engine/core/models.py:1073
+#: engine/core/models.py:1104
msgid ""
"Represents a promotional code that can be used for discounts, managing its "
"validity, type of discount, and application. The PromoCode class stores "
@@ -2117,86 +2117,86 @@ msgid ""
"apply the promo code to an order while ensuring constraints are met."
msgstr ""
-#: engine/core/models.py:1087
+#: engine/core/models.py:1118
msgid "unique code used by a user to redeem a discount"
msgstr ""
-#: engine/core/models.py:1088
+#: engine/core/models.py:1119
msgid "promo code identifier"
msgstr ""
-#: engine/core/models.py:1095
+#: engine/core/models.py:1126
msgid "fixed discount amount applied if percent is not used"
msgstr ""
-#: engine/core/models.py:1096
+#: engine/core/models.py:1127
msgid "fixed discount amount"
msgstr ""
-#: engine/core/models.py:1102
+#: engine/core/models.py:1133
msgid "percentage discount applied if fixed amount is not used"
msgstr ""
-#: engine/core/models.py:1103
+#: engine/core/models.py:1134
msgid "percentage discount"
msgstr ""
-#: engine/core/models.py:1108
+#: engine/core/models.py:1139
msgid "timestamp when the promocode expires"
msgstr ""
-#: engine/core/models.py:1109
+#: engine/core/models.py:1140
msgid "end validity time"
msgstr ""
-#: engine/core/models.py:1114
+#: engine/core/models.py:1145
msgid "timestamp from which this promocode is valid"
msgstr ""
-#: engine/core/models.py:1115
+#: engine/core/models.py:1146
msgid "start validity time"
msgstr ""
-#: engine/core/models.py:1120
+#: engine/core/models.py:1151
msgid "timestamp when the promocode was used, blank if not used yet"
msgstr ""
-#: engine/core/models.py:1121
+#: engine/core/models.py:1152
msgid "usage timestamp"
msgstr ""
-#: engine/core/models.py:1126
+#: engine/core/models.py:1157
msgid "user assigned to this promocode if applicable"
msgstr ""
-#: engine/core/models.py:1127
+#: engine/core/models.py:1158
msgid "assigned user"
msgstr ""
-#: engine/core/models.py:1134
+#: engine/core/models.py:1165
msgid "promo code"
msgstr ""
-#: engine/core/models.py:1135
+#: engine/core/models.py:1166
msgid "promo codes"
msgstr ""
-#: engine/core/models.py:1150
+#: engine/core/models.py:1182
msgid ""
"only one type of discount should be defined (amount or percent), but not "
"both or neither."
msgstr ""
-#: engine/core/models.py:1171
+#: engine/core/models.py:1204
msgid "promocode already used"
msgstr ""
-#: engine/core/models.py:1187
+#: engine/core/models.py:1226
#, python-brace-format
msgid "invalid discount type for promocode {self.uuid}"
msgstr ""
-#: engine/core/models.py:1196
+#: engine/core/models.py:1235
msgid ""
"Represents an order placed by a user. This class models an order within the "
"application, including its various attributes such as billing and shipping "
@@ -2206,145 +2206,145 @@ msgid ""
"supports managing the products in the order lifecycle."
msgstr ""
-#: engine/core/models.py:1213
+#: engine/core/models.py:1252
msgid "the billing address used for this order"
msgstr ""
-#: engine/core/models.py:1221
+#: engine/core/models.py:1260
msgid "optional promo code applied to this order"
msgstr ""
-#: engine/core/models.py:1222
+#: engine/core/models.py:1261
msgid "applied promo code"
msgstr ""
-#: engine/core/models.py:1230
+#: engine/core/models.py:1269
msgid "the shipping address used for this order"
msgstr ""
-#: engine/core/models.py:1231
+#: engine/core/models.py:1270
msgid "shipping address"
msgstr ""
-#: engine/core/models.py:1237
+#: engine/core/models.py:1276
msgid "current status of the order in its lifecycle"
msgstr ""
-#: engine/core/models.py:1238
+#: engine/core/models.py:1277
msgid "order status"
msgstr ""
-#: engine/core/models.py:1243 engine/core/models.py:1769
+#: engine/core/models.py:1282 engine/core/models.py:1881
msgid "json structure of notifications to display to users"
msgstr ""
-#: engine/core/models.py:1249
+#: engine/core/models.py:1288
msgid "json representation of order attributes for this order"
msgstr ""
-#: engine/core/models.py:1255
+#: engine/core/models.py:1294
msgid "the user who placed the order"
msgstr ""
-#: engine/core/models.py:1256
+#: engine/core/models.py:1295
msgid "user"
msgstr ""
-#: engine/core/models.py:1262
+#: engine/core/models.py:1301
msgid "the timestamp when the order was finalized"
msgstr ""
-#: engine/core/models.py:1263
+#: engine/core/models.py:1302
msgid "buy time"
msgstr ""
-#: engine/core/models.py:1270
+#: engine/core/models.py:1309
msgid "a human-readable identifier for the order"
msgstr ""
-#: engine/core/models.py:1271
+#: engine/core/models.py:1310
msgid "human readable id"
msgstr ""
-#: engine/core/models.py:1277
+#: engine/core/models.py:1316
msgid "order"
msgstr ""
-#: engine/core/models.py:1319
+#: engine/core/models.py:1363
msgid "a user must have only one pending order at a time"
msgstr ""
-#: engine/core/models.py:1351
+#: engine/core/models.py:1396
msgid "you cannot add products to an order that is not a pending one"
msgstr ""
-#: engine/core/models.py:1356
+#: engine/core/models.py:1402
msgid "you cannot add inactive products to order"
msgstr ""
-#: engine/core/models.py:1373
+#: engine/core/models.py:1424
msgid "you cannot add more products than available in stock"
msgstr ""
-#: engine/core/models.py:1395 engine/core/models.py:1420
-#: engine/core/models.py:1428
+#: engine/core/models.py:1448 engine/core/models.py:1477
+#: engine/core/models.py:1487
msgid "you cannot remove products from an order that is not a pending one"
msgstr ""
-#: engine/core/models.py:1416
+#: engine/core/models.py:1472
#, python-brace-format
msgid "{name} does not exist with query <{query}>"
msgstr ""
-#: engine/core/models.py:1448
+#: engine/core/models.py:1511
msgid "promocode does not exist"
msgstr ""
-#: engine/core/models.py:1454
+#: engine/core/models.py:1526
msgid "you can only buy physical products with shipping address specified"
msgstr ""
-#: engine/core/models.py:1473
+#: engine/core/models.py:1547
msgid "address does not exist"
msgstr ""
-#: engine/core/models.py:1494 engine/core/models.py:1563
+#: engine/core/models.py:1569 engine/core/models.py:1648
msgid "you can not buy at this moment, please try again in a few minutes"
msgstr ""
-#: engine/core/models.py:1497 engine/core/models.py:1559
+#: engine/core/models.py:1575 engine/core/models.py:1641
msgid "invalid force value"
msgstr ""
-#: engine/core/models.py:1503 engine/core/models.py:1566
+#: engine/core/models.py:1581 engine/core/models.py:1652
msgid "you cannot purchase an empty order!"
msgstr ""
-#: engine/core/models.py:1522
+#: engine/core/models.py:1602
msgid "you cannot buy an order without a user"
msgstr ""
-#: engine/core/models.py:1536
+#: engine/core/models.py:1616
msgid "a user without a balance cannot buy with balance"
msgstr ""
-#: engine/core/models.py:1541
+#: engine/core/models.py:1622
msgid "insufficient funds to complete the order"
msgstr ""
-#: engine/core/models.py:1575
+#: engine/core/models.py:1663
msgid ""
"you cannot buy without registration, please provide the following "
"information: customer name, customer email, customer phone number"
msgstr ""
-#: engine/core/models.py:1584
+#: engine/core/models.py:1674
#, python-brace-format
msgid ""
"invalid payment method: {payment_method} from {available_payment_methods}"
msgstr ""
-#: engine/core/models.py:1699
+#: engine/core/models.py:1805
msgid ""
"Manages user feedback for products. This class is designed to capture and "
"store user feedback for specific products that they have purchased. It "
@@ -2353,31 +2353,31 @@ msgid ""
"fields to effectively model and manage feedback data."
msgstr ""
-#: engine/core/models.py:1711
+#: engine/core/models.py:1817
msgid "user-provided comments about their experience with the product"
msgstr ""
-#: engine/core/models.py:1712
+#: engine/core/models.py:1818
msgid "feedback comments"
msgstr ""
-#: engine/core/models.py:1719
+#: engine/core/models.py:1826
msgid "references the specific product in an order that this feedback is about"
msgstr ""
-#: engine/core/models.py:1720
+#: engine/core/models.py:1828
msgid "related order product"
msgstr ""
-#: engine/core/models.py:1725
+#: engine/core/models.py:1833
msgid "user-assigned rating for the product"
msgstr ""
-#: engine/core/models.py:1726
+#: engine/core/models.py:1834
msgid "product rating"
msgstr ""
-#: engine/core/models.py:1742
+#: engine/core/models.py:1854
msgid ""
"Represents products associated with orders and their attributes. The "
"OrderProduct model maintains information about a product that is part of an "
@@ -2390,108 +2390,108 @@ msgid ""
"Product models and stores a reference to them."
msgstr ""
-#: engine/core/models.py:1757
+#: engine/core/models.py:1869
msgid "the price paid by the customer for this product at purchase time"
msgstr ""
-#: engine/core/models.py:1758
+#: engine/core/models.py:1870
msgid "purchase price at order time"
msgstr ""
-#: engine/core/models.py:1763
+#: engine/core/models.py:1875
msgid "internal comments for admins about this ordered product"
msgstr ""
-#: engine/core/models.py:1764
+#: engine/core/models.py:1876
msgid "internal comments"
msgstr ""
-#: engine/core/models.py:1770
+#: engine/core/models.py:1882
msgid "user notifications"
msgstr ""
-#: engine/core/models.py:1775
+#: engine/core/models.py:1887
msgid "json representation of this item's attributes"
msgstr ""
-#: engine/core/models.py:1776
+#: engine/core/models.py:1888
msgid "ordered product attributes"
msgstr ""
-#: engine/core/models.py:1781
+#: engine/core/models.py:1893
msgid "reference to the parent order that contains this product"
msgstr ""
-#: engine/core/models.py:1782
+#: engine/core/models.py:1894
msgid "parent order"
msgstr ""
-#: engine/core/models.py:1791
+#: engine/core/models.py:1903
msgid "the specific product associated with this order line"
msgstr ""
-#: engine/core/models.py:1798
+#: engine/core/models.py:1910
msgid "quantity of this specific product in the order"
msgstr ""
-#: engine/core/models.py:1799
+#: engine/core/models.py:1911
msgid "product quantity"
msgstr ""
-#: engine/core/models.py:1806
+#: engine/core/models.py:1918
msgid "current status of this product in the order"
msgstr ""
-#: engine/core/models.py:1807
+#: engine/core/models.py:1919
msgid "product line status"
msgstr ""
-#: engine/core/models.py:1872
+#: engine/core/models.py:1986
msgid "order product must have an order"
msgstr ""
-#: engine/core/models.py:1874
+#: engine/core/models.py:1988
#, python-brace-format
msgid "wrong action specified for feedback: {action}"
msgstr ""
-#: engine/core/models.py:1888
+#: engine/core/models.py:2005
msgid "you cannot feedback an order which is not received"
msgstr ""
-#: engine/core/models.py:1894
+#: engine/core/models.py:2014
msgid "name"
msgstr ""
-#: engine/core/models.py:1895
+#: engine/core/models.py:2016
msgid "URL of the integration"
msgstr ""
-#: engine/core/models.py:1896
+#: engine/core/models.py:2019
msgid "authentication credentials"
msgstr ""
-#: engine/core/models.py:1918
+#: engine/core/models.py:2042
msgid "you can only have one default CRM provider"
msgstr ""
-#: engine/core/models.py:1928
+#: engine/core/models.py:2052
msgid "CRM"
msgstr ""
-#: engine/core/models.py:1929
+#: engine/core/models.py:2053
msgid "CRMs"
msgstr ""
-#: engine/core/models.py:1941
+#: engine/core/models.py:2069
msgid "order CRM link"
msgstr ""
-#: engine/core/models.py:1942
+#: engine/core/models.py:2070
msgid "orders CRM links"
msgstr ""
-#: engine/core/models.py:1947
+#: engine/core/models.py:2075
msgid ""
"Represents the downloading functionality for digital assets associated with "
"orders. The DigitalAssetDownload class provides the ability to manage and "
@@ -2501,15 +2501,15 @@ msgid ""
"the asset when the associated order is in a completed status."
msgstr ""
-#: engine/core/models.py:1961
+#: engine/core/models.py:2091
msgid "download"
msgstr ""
-#: engine/core/models.py:1962
+#: engine/core/models.py:2092
msgid "downloads"
msgstr ""
-#: engine/core/serializers/utility.py:89
+#: engine/core/serializers/utility.py:91
msgid ""
"you must provide a comment, rating, and order product uuid to add feedback."
msgstr ""
@@ -2835,11 +2835,11 @@ msgid ""
" reserved"
msgstr ""
-#: engine/core/utils/caching.py:44
+#: engine/core/utils/caching.py:48
msgid "both data and timeout are required"
msgstr ""
-#: engine/core/utils/caching.py:46
+#: engine/core/utils/caching.py:51
msgid "invalid timeout value, it must be between 0 and 216000 seconds"
msgstr ""
@@ -2848,17 +2848,17 @@ msgstr ""
msgid "{settings.PROJECT_NAME} | contact us initiated"
msgstr ""
-#: engine/core/utils/emailing.py:73
+#: engine/core/utils/emailing.py:81
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order confirmation"
msgstr ""
-#: engine/core/utils/emailing.py:105
+#: engine/core/utils/emailing.py:115
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order delivered"
msgstr ""
-#: engine/core/utils/emailing.py:188
+#: engine/core/utils/emailing.py:203
#, python-brace-format
msgid "{settings.PROJECT_NAME} | promocode granted"
msgstr ""
@@ -2871,58 +2871,58 @@ msgstr ""
msgid "NOMINATIM_URL must be configured."
msgstr ""
-#: engine/core/validators.py:19
+#: engine/core/validators.py:21
#, python-brace-format
msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels"
msgstr ""
-#: engine/core/views.py:91
+#: engine/core/views.py:105
msgid ""
"Handles the request for the sitemap index and returns an XML response. It "
"ensures the response includes the appropriate content type header for XML."
msgstr ""
-#: engine/core/views.py:106
+#: engine/core/views.py:120
msgid ""
"Handles the detailed view response for a sitemap. This function processes "
"the request, fetches the appropriate sitemap detail response, and sets the "
"Content-Type header for XML."
msgstr ""
-#: engine/core/views.py:141
+#: engine/core/views.py:156
msgid ""
"Returns a list of supported languages and their corresponding information."
msgstr ""
-#: engine/core/views.py:173
+#: engine/core/views.py:183
msgid "Returns the parameters of the website as a JSON object."
msgstr ""
-#: engine/core/views.py:192
+#: engine/core/views.py:199
msgid ""
"Handles cache operations such as reading and setting cache data with a "
"specified key and timeout."
msgstr ""
-#: engine/core/views.py:219
+#: engine/core/views.py:221
msgid "Handles `contact us` form submissions."
msgstr ""
-#: engine/core/views.py:240
+#: engine/core/views.py:237
msgid ""
"Handles requests for processing and validating URLs from incoming POST "
"requests."
msgstr ""
-#: engine/core/views.py:280
+#: engine/core/views.py:274
msgid "Handles global search queries."
msgstr ""
-#: engine/core/views.py:295
+#: engine/core/views.py:290
msgid "Handles the logic of buying as a business without registration."
msgstr ""
-#: engine/core/views.py:332
+#: engine/core/views.py:338
msgid ""
"Handles the downloading of a digital asset associated with an order.\n"
"This function attempts to serve the digital asset file located in the "
@@ -2930,31 +2930,31 @@ msgid ""
"error is raised to indicate the resource is unavailable."
msgstr ""
-#: engine/core/views.py:343
+#: engine/core/views.py:349
msgid "order_product_uuid is required"
msgstr ""
-#: engine/core/views.py:350
+#: engine/core/views.py:356
msgid "order product does not exist"
msgstr ""
-#: engine/core/views.py:353
+#: engine/core/views.py:359
msgid "you can only download the digital asset once"
msgstr ""
-#: engine/core/views.py:356
+#: engine/core/views.py:363
msgid "the order must be paid before downloading the digital asset"
msgstr ""
-#: engine/core/views.py:362
+#: engine/core/views.py:370
msgid "the order product does not have a product"
msgstr ""
-#: engine/core/views.py:399
+#: engine/core/views.py:414
msgid "favicon not found"
msgstr ""
-#: engine/core/views.py:404
+#: engine/core/views.py:419
msgid ""
"Handles requests for the favicon of a website.\n"
"This function attempts to serve the favicon file located in the static "
@@ -2962,27 +2962,27 @@ msgid ""
"error is raised to indicate the resource is unavailable."
msgstr ""
-#: engine/core/views.py:416
+#: engine/core/views.py:431
msgid ""
"Redirects the request to the admin index page. The function handles incoming "
"HTTP requests and redirects them to the Django admin interface index page. "
"It uses Django's `redirect` function for handling the HTTP redirection."
msgstr ""
-#: engine/core/views.py:429
+#: engine/core/views.py:443
msgid "Returns current version of the eVibes. "
msgstr ""
-#: engine/core/views.py:623 engine/core/views.py:636
+#: engine/core/views.py:672 engine/core/views.py:687
#, python-format
msgid "Revenue & Orders (last %(days)d)"
msgstr ""
-#: engine/core/views.py:793
+#: engine/core/views.py:868
msgid "Returns custom variables for Dashboard. "
msgstr ""
-#: engine/core/viewsets.py:136
+#: engine/core/viewsets.py:139
msgid ""
"Defines a viewset for managing Evibes-related operations. The EvibesViewSet "
"class inherits from ModelViewSet and provides functionality for handling "
@@ -2991,7 +2991,7 @@ msgid ""
"and rendering formats."
msgstr ""
-#: engine/core/viewsets.py:156
+#: engine/core/viewsets.py:160
msgid ""
"Represents a viewset for managing AttributeGroup objects. Handles operations "
"related to AttributeGroup, including filtering, serialization, and retrieval "
@@ -2999,7 +2999,7 @@ msgid ""
"standardized way to process requests and responses for AttributeGroup data."
msgstr ""
-#: engine/core/viewsets.py:175
+#: engine/core/viewsets.py:179
msgid ""
"Handles operations related to Attribute objects within the application. "
"Provides a set of API endpoints to interact with Attribute data. This class "
@@ -3009,7 +3009,7 @@ msgid ""
"depending on the request."
msgstr ""
-#: engine/core/viewsets.py:194
+#: engine/core/viewsets.py:198
msgid ""
"A viewset for managing AttributeValue objects. This viewset provides "
"functionality for listing, retrieving, creating, updating, and deleting "
@@ -3018,7 +3018,7 @@ msgid ""
"capabilities are provided through the DjangoFilterBackend."
msgstr ""
-#: engine/core/viewsets.py:213
+#: engine/core/viewsets.py:217
msgid ""
"Manages views for Category-related operations. The CategoryViewSet class is "
"responsible for handling operations related to the Category model in the "
@@ -3027,7 +3027,7 @@ msgid ""
"can access specific data."
msgstr ""
-#: engine/core/viewsets.py:326
+#: engine/core/viewsets.py:346
msgid ""
"Represents a viewset for managing Brand instances. This class provides "
"functionality for querying, filtering, and serializing Brand objects. It "
@@ -3035,7 +3035,7 @@ msgid ""
"endpoints for Brand objects."
msgstr ""
-#: engine/core/viewsets.py:438
+#: engine/core/viewsets.py:458
msgid ""
"Manages operations related to the `Product` model in the system. This class "
"provides a viewset for managing products, including their filtering, "
@@ -3046,7 +3046,7 @@ msgid ""
"product."
msgstr ""
-#: engine/core/viewsets.py:574
+#: engine/core/viewsets.py:605
msgid ""
"Represents a viewset for managing Vendor objects. This viewset allows "
"fetching, filtering, and serializing Vendor data. It defines the queryset, "
@@ -3055,7 +3055,7 @@ msgid ""
"Vendor-related resources through the Django REST framework."
msgstr ""
-#: engine/core/viewsets.py:594
+#: engine/core/viewsets.py:625
msgid ""
"Representation of a view set handling Feedback objects. This class manages "
"operations related to Feedback objects, including listing, filtering, and "
@@ -3065,7 +3065,7 @@ msgid ""
"use of Django's filtering system for querying data."
msgstr ""
-#: engine/core/viewsets.py:621
+#: engine/core/viewsets.py:652
msgid ""
"ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes "
@@ -3076,7 +3076,7 @@ msgid ""
"enforces permissions accordingly while interacting with order data."
msgstr ""
-#: engine/core/viewsets.py:825
+#: engine/core/viewsets.py:914
msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It "
@@ -3085,25 +3085,25 @@ msgid ""
"feedback on OrderProduct instances"
msgstr ""
-#: engine/core/viewsets.py:879
+#: engine/core/viewsets.py:974
msgid "Manages operations related to Product images in the application. "
msgstr ""
-#: engine/core/viewsets.py:892
+#: engine/core/viewsets.py:988
msgid ""
"Manages the retrieval and handling of PromoCode instances through various "
"API actions."
msgstr ""
-#: engine/core/viewsets.py:914
+#: engine/core/viewsets.py:1019
msgid "Represents a view set for managing promotions. "
msgstr ""
-#: engine/core/viewsets.py:927
+#: engine/core/viewsets.py:1032
msgid "Handles operations related to Stock data in the system."
msgstr ""
-#: engine/core/viewsets.py:941
+#: engine/core/viewsets.py:1046
msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the "
@@ -3114,7 +3114,7 @@ msgid ""
"are granted."
msgstr ""
-#: engine/core/viewsets.py:1056
+#: engine/core/viewsets.py:1183
msgid ""
"This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom "
@@ -3123,12 +3123,12 @@ msgid ""
"on the request context."
msgstr ""
-#: engine/core/viewsets.py:1123
+#: engine/core/viewsets.py:1254
#, python-brace-format
msgid "Geocoding error: {e}"
msgstr ""
-#: engine/core/viewsets.py:1131
+#: engine/core/viewsets.py:1262
msgid ""
"Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing "
diff --git a/engine/core/locale/id_ID/LC_MESSAGES/django.po b/engine/core/locale/id_ID/LC_MESSAGES/django.po
index 0998411f..2e6b54a8 100644
--- a/engine/core/locale/id_ID/LC_MESSAGES/django.po
+++ b/engine/core/locale/id_ID/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 22:12+0300\n"
+"POT-Creation-Date: 2025-12-18 19:09+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -19,120 +19,118 @@ msgstr "ID unik"
#: engine/core/abstract.py:13
msgid "unique id is used to surely identify any database object"
-msgstr ""
-"ID unik digunakan untuk mengidentifikasi objek basis data secara pasti"
+msgstr "ID unik digunakan untuk mengidentifikasi objek basis data secara pasti"
#: engine/core/abstract.py:20
msgid "is active"
msgstr "Aktif"
-#: engine/core/abstract.py:21
+#: engine/core/abstract.py:22
msgid ""
-"if set to false, this object can't be seen by users without needed "
-"permission"
+"if set to false, this object can't be seen by users without needed permission"
msgstr ""
"Jika diset ke false, objek ini tidak dapat dilihat oleh pengguna tanpa izin "
"yang diperlukan"
-#: engine/core/abstract.py:23 engine/core/choices.py:18
+#: engine/core/abstract.py:26 engine/core/choices.py:18
msgid "created"
msgstr "Dibuat"
-#: engine/core/abstract.py:23
+#: engine/core/abstract.py:26
msgid "when the object first appeared on the database"
msgstr "Saat objek pertama kali muncul di database"
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "modified"
msgstr "Dimodifikasi"
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "when the object was last modified"
msgstr "Kapan objek terakhir kali diedit"
-#: engine/core/admin.py:85
+#: engine/core/admin.py:94
msgid "translations"
msgstr "Terjemahan"
-#: engine/core/admin.py:89
+#: engine/core/admin.py:102
msgid "general"
msgstr "Umum"
-#: engine/core/admin.py:91
+#: engine/core/admin.py:106
msgid "relations"
msgstr "Hubungan"
-#: engine/core/admin.py:93
+#: engine/core/admin.py:111
msgid "additional info"
msgstr "info tambahan"
-#: engine/core/admin.py:111
+#: engine/core/admin.py:133
msgid "metadata"
msgstr "Metadata"
-#: engine/core/admin.py:118
+#: engine/core/admin.py:141
msgid "timestamps"
msgstr "Stempel waktu"
-#: engine/core/admin.py:133
+#: engine/core/admin.py:157
#, python-format
msgid "activate selected %(verbose_name_plural)s"
msgstr "Aktifkan %(verbose_name_plural)s yang dipilih"
-#: engine/core/admin.py:138
+#: engine/core/admin.py:165
msgid "selected items have been activated."
msgstr "Item yang dipilih telah diaktifkan!"
-#: engine/core/admin.py:144
+#: engine/core/admin.py:173
#, python-format
msgid "deactivate selected %(verbose_name_plural)s"
msgstr "Menonaktifkan %(verbose_name_plural)s yang dipilih"
-#: engine/core/admin.py:149
+#: engine/core/admin.py:183
msgid "selected items have been deactivated."
msgstr "Item yang dipilih telah dinonaktifkan!"
-#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586
-#: engine/core/graphene/object_types.py:593 engine/core/models.py:801
-#: engine/core/models.py:809
+#: engine/core/admin.py:195 engine/core/graphene/object_types.py:650
+#: engine/core/graphene/object_types.py:657 engine/core/models.py:824
+#: engine/core/models.py:832
msgid "attribute value"
msgstr "Nilai Atribut"
-#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75
-#: engine/core/models.py:810
+#: engine/core/admin.py:196 engine/core/graphene/object_types.py:75
+#: engine/core/models.py:833
msgid "attribute values"
msgstr "Nilai Atribut"
-#: engine/core/admin.py:172
+#: engine/core/admin.py:207
msgid "image"
msgstr "Gambar"
-#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474
+#: engine/core/admin.py:208 engine/core/graphene/object_types.py:527
msgid "images"
msgstr "Gambar"
-#: engine/core/admin.py:184 engine/core/models.py:566
+#: engine/core/admin.py:219 engine/core/models.py:587
msgid "stock"
msgstr "Stok"
-#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640
+#: engine/core/admin.py:220 engine/core/graphene/object_types.py:710
msgid "stocks"
msgstr "Saham"
-#: engine/core/admin.py:196 engine/core/models.py:1818
+#: engine/core/admin.py:231 engine/core/models.py:1930
msgid "order product"
msgstr "Pesan Produk"
-#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389
-#: engine/core/models.py:1819
+#: engine/core/admin.py:232 engine/core/graphene/object_types.py:438
+#: engine/core/models.py:1931
msgid "order products"
msgstr "Pesan Produk"
-#: engine/core/admin.py:210 engine/core/admin.py:211
+#: engine/core/admin.py:250 engine/core/admin.py:251
msgid "children"
msgstr "Anak-anak"
-#: engine/core/admin.py:977
+#: engine/core/admin.py:1059
msgid "Config"
msgstr "Konfigurasi"
@@ -156,8 +154,7 @@ msgstr "Disampaikan."
msgid "canceled"
msgstr "Dibatalkan"
-#: engine/core/choices.py:8 engine/core/choices.py:16
-#: engine/core/choices.py:24
+#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24
msgid "failed"
msgstr "Gagal"
@@ -185,61 +182,62 @@ msgstr "Momental"
msgid "successful"
msgstr "Berhasil"
-#: engine/core/docs/drf/views.py:31
+#: engine/core/docs/drf/views.py:30
msgid "OpenAPI schema in selected format with selected language"
msgstr "Skema OpenAPI dalam format yang dipilih dengan bahasa yang dipilih"
-#: engine/core/docs/drf/views.py:33
+#: engine/core/docs/drf/views.py:32
msgid ""
"OpenApi3 schema for this API. Format can be selected via content "
"negotiation. Language can be selected with Accept-Language and query "
"parameter both."
msgstr ""
-"Skema OpenApi3 untuk API ini. Format dapat dipilih melalui negosiasi konten."
-" Bahasa dapat dipilih dengan parameter Accept-Language dan parameter kueri."
+"Skema OpenApi3 untuk API ini. Format dapat dipilih melalui negosiasi konten. "
+"Bahasa dapat dipilih dengan parameter Accept-Language dan parameter kueri."
-#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37
+#: engine/core/docs/drf/views.py:43 engine/core/graphene/mutations.py:37
msgid "cache I/O"
msgstr "I/O Cache"
-#: engine/core/docs/drf/views.py:46
+#: engine/core/docs/drf/views.py:45
msgid ""
"apply only a key to read permitted data from cache.\n"
"apply key, data and timeout with authentication to write data to cache."
msgstr ""
"Terapkan hanya kunci untuk membaca data yang diizinkan dari cache.\n"
-"Menerapkan kunci, data, dan batas waktu dengan autentikasi untuk menulis data ke cache."
+"Menerapkan kunci, data, dan batas waktu dengan autentikasi untuk menulis "
+"data ke cache."
-#: engine/core/docs/drf/views.py:62
+#: engine/core/docs/drf/views.py:63
msgid "get a list of supported languages"
msgstr "Dapatkan daftar bahasa yang didukung"
-#: engine/core/docs/drf/views.py:74
+#: engine/core/docs/drf/views.py:75
msgid "get application's exposable parameters"
msgstr "Dapatkan parameter aplikasi yang dapat diekspos"
-#: engine/core/docs/drf/views.py:84
+#: engine/core/docs/drf/views.py:89
msgid "send a message to the support team"
msgstr "Kirim pesan ke tim dukungan"
-#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57
+#: engine/core/docs/drf/views.py:103 engine/core/graphene/mutations.py:59
msgid "request a CORSed URL"
msgstr "Meminta URL CORSed. Hanya https yang diizinkan."
-#: engine/core/docs/drf/views.py:112
+#: engine/core/docs/drf/views.py:119
msgid "Search between products, categories and brands"
msgstr "Mencari di antara produk, kategori, dan merek"
-#: engine/core/docs/drf/views.py:130
+#: engine/core/docs/drf/views.py:141
msgid "global search endpoint to query across project's tables"
msgstr ""
"Titik akhir pencarian global untuk melakukan kueri di seluruh tabel proyek"
-#: engine/core/docs/drf/views.py:139
+#: engine/core/docs/drf/views.py:150
msgid "purchase an order as a business"
msgstr "Beli pesanan sebagai Bisnis"
-#: engine/core/docs/drf/views.py:146
+#: engine/core/docs/drf/views.py:158
msgid ""
"purchase an order as a business, using the provided `products` with "
"`product_uuid` and `attributes`."
@@ -247,236 +245,233 @@ msgstr ""
"Beli pesanan sebagai bisnis, menggunakan `produk` yang disediakan dengan "
"`product_uuid` dan `atribut`."
-#: engine/core/docs/drf/views.py:164
+#: engine/core/docs/drf/views.py:177
msgid "download a digital asset from purchased digital order"
msgstr "mengunduh aset digital dari pesanan digital yang dibeli"
-#: engine/core/docs/drf/viewsets.py:61
+#: engine/core/docs/drf/viewsets.py:65
msgid "list all attribute groups (simple view)"
msgstr "Buat daftar semua grup atribut (tampilan sederhana)"
-#: engine/core/docs/drf/viewsets.py:68
+#: engine/core/docs/drf/viewsets.py:75
msgid "retrieve a single attribute group (detailed view)"
msgstr "Mengambil grup atribut tunggal (tampilan detail)"
-#: engine/core/docs/drf/viewsets.py:75
+#: engine/core/docs/drf/viewsets.py:82
msgid "create an attribute group"
msgstr "Membuat grup atribut"
-#: engine/core/docs/drf/viewsets.py:82
+#: engine/core/docs/drf/viewsets.py:92
msgid "delete an attribute group"
msgstr "Menghapus grup atribut"
-#: engine/core/docs/drf/viewsets.py:89
+#: engine/core/docs/drf/viewsets.py:99
msgid "rewrite an existing attribute group saving non-editables"
msgstr ""
"Menulis ulang grup atribut yang sudah ada dan menyimpan grup yang tidak "
"dapat diedit"
-#: engine/core/docs/drf/viewsets.py:96
-msgid ""
-"rewrite some fields of an existing attribute group saving non-editables"
+#: engine/core/docs/drf/viewsets.py:107
+msgid "rewrite some fields of an existing attribute group saving non-editables"
msgstr ""
"Menulis ulang beberapa bidang dari grup atribut yang sudah ada sehingga "
"tidak dapat diedit"
-#: engine/core/docs/drf/viewsets.py:106
+#: engine/core/docs/drf/viewsets.py:118
msgid "list all attributes (simple view)"
msgstr "Daftar semua atribut (tampilan sederhana)"
-#: engine/core/docs/drf/viewsets.py:113
+#: engine/core/docs/drf/viewsets.py:128
msgid "retrieve a single attribute (detailed view)"
msgstr "Mengambil atribut tunggal (tampilan detail)"
-#: engine/core/docs/drf/viewsets.py:120
+#: engine/core/docs/drf/viewsets.py:135
msgid "create an attribute"
msgstr "Membuat atribut"
-#: engine/core/docs/drf/viewsets.py:127
+#: engine/core/docs/drf/viewsets.py:142
msgid "delete an attribute"
msgstr "Menghapus atribut"
-#: engine/core/docs/drf/viewsets.py:134
+#: engine/core/docs/drf/viewsets.py:149
msgid "rewrite an existing attribute saving non-editables"
msgstr ""
"Menulis ulang atribut yang sudah ada dengan menyimpan atribut yang tidak "
"dapat diedit"
-#: engine/core/docs/drf/viewsets.py:141
+#: engine/core/docs/drf/viewsets.py:156
msgid "rewrite some fields of an existing attribute saving non-editables"
msgstr ""
"Menulis ulang beberapa bidang dari atribut yang sudah ada sehingga tidak "
"dapat diedit"
-#: engine/core/docs/drf/viewsets.py:151
+#: engine/core/docs/drf/viewsets.py:166
msgid "list all attribute values (simple view)"
msgstr "Daftar semua nilai atribut (tampilan sederhana)"
-#: engine/core/docs/drf/viewsets.py:158
+#: engine/core/docs/drf/viewsets.py:176
msgid "retrieve a single attribute value (detailed view)"
msgstr "Mengambil nilai atribut tunggal (tampilan detail)"
-#: engine/core/docs/drf/viewsets.py:165
+#: engine/core/docs/drf/viewsets.py:183
msgid "create an attribute value"
msgstr "Membuat nilai atribut"
-#: engine/core/docs/drf/viewsets.py:172
+#: engine/core/docs/drf/viewsets.py:193
msgid "delete an attribute value"
msgstr "Menghapus nilai atribut"
-#: engine/core/docs/drf/viewsets.py:179
+#: engine/core/docs/drf/viewsets.py:200
msgid "rewrite an existing attribute value saving non-editables"
msgstr ""
"Menulis ulang nilai atribut yang sudah ada dan menyimpan nilai yang tidak "
"dapat diedit"
-#: engine/core/docs/drf/viewsets.py:186
-msgid ""
-"rewrite some fields of an existing attribute value saving non-editables"
+#: engine/core/docs/drf/viewsets.py:208
+msgid "rewrite some fields of an existing attribute value saving non-editables"
msgstr ""
"Menulis ulang beberapa bidang dari nilai atribut yang sudah ada sehingga "
"tidak dapat diedit"
-#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197
+#: engine/core/docs/drf/viewsets.py:219 engine/core/docs/drf/viewsets.py:220
msgid "list all categories (simple view)"
msgstr "Daftar semua kategori (tampilan sederhana)"
-#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205
+#: engine/core/docs/drf/viewsets.py:230 engine/core/docs/drf/viewsets.py:231
msgid "retrieve a single category (detailed view)"
msgstr "Mengambil satu kategori (tampilan detail)"
-#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258
+#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:286
msgid "Category UUID or slug"
msgstr "Kategori UUID atau siput"
-#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221
+#: engine/core/docs/drf/viewsets.py:246 engine/core/docs/drf/viewsets.py:247
msgid "create a category"
msgstr "Membuat kategori"
-#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229
+#: engine/core/docs/drf/viewsets.py:254 engine/core/docs/drf/viewsets.py:255
msgid "delete a category"
msgstr "Menghapus kategori"
-#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237
+#: engine/core/docs/drf/viewsets.py:262 engine/core/docs/drf/viewsets.py:263
msgid "rewrite an existing category saving non-editables"
msgstr ""
"Menulis ulang kategori yang sudah ada dan menyimpan kategori yang tidak "
"dapat diedit"
-#: engine/core/docs/drf/viewsets.py:244 engine/core/docs/drf/viewsets.py:245
+#: engine/core/docs/drf/viewsets.py:270 engine/core/docs/drf/viewsets.py:272
msgid "rewrite some fields of an existing category saving non-editables"
msgstr ""
"Menulis ulang beberapa bidang dari kategori yang sudah ada sehingga tidak "
"dapat diedit"
-#: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704
-#: engine/core/docs/drf/viewsets.py:988
+#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:1046
#: engine/core/graphene/object_types.py:117
-#: engine/core/graphene/object_types.py:207
-#: engine/core/graphene/object_types.py:482
+#: engine/core/graphene/object_types.py:236
+#: engine/core/graphene/object_types.py:537
msgid "SEO Meta snapshot"
msgstr "Cuplikan Meta SEO"
-#: engine/core/docs/drf/viewsets.py:253
+#: engine/core/docs/drf/viewsets.py:281
msgid "returns a snapshot of the category's SEO meta data"
msgstr "Mengembalikan cuplikan data meta SEO kategori"
-#: engine/core/docs/drf/viewsets.py:274
+#: engine/core/docs/drf/viewsets.py:302
msgid "list all orders (simple view)"
msgstr "Daftar semua kategori (tampilan sederhana)"
-#: engine/core/docs/drf/viewsets.py:275
+#: engine/core/docs/drf/viewsets.py:303
msgid "for non-staff users, only their own orders are returned."
msgstr ""
"Untuk pengguna non-staf, hanya pesanan mereka sendiri yang dikembalikan."
-#: engine/core/docs/drf/viewsets.py:281
+#: engine/core/docs/drf/viewsets.py:309
msgid ""
-"Case-insensitive substring search across human_readable_id, "
-"order_products.product.name, and order_products.product.partnumber"
+"Case-insensitive substring search across human_readable_id, order_products."
+"product.name, and order_products.product.partnumber"
msgstr ""
"Pencarian substring yang tidak peka huruf besar/kecil di human_readable_id, "
"order_produk.product.name, dan order_produk.product.partnumber"
-#: engine/core/docs/drf/viewsets.py:288
+#: engine/core/docs/drf/viewsets.py:316
msgid "Filter orders with buy_time >= this ISO 8601 datetime"
msgstr "Filter pesanan dengan waktu_beli >= waktu_data ISO 8601 ini"
-#: engine/core/docs/drf/viewsets.py:293
+#: engine/core/docs/drf/viewsets.py:321
msgid "Filter orders with buy_time <= this ISO 8601 datetime"
msgstr "Filter pesanan dengan waktu_beli <= waktu_data ISO 8601 ini"
-#: engine/core/docs/drf/viewsets.py:298
+#: engine/core/docs/drf/viewsets.py:326
msgid "Filter by exact order UUID"
msgstr "Filter berdasarkan urutan yang tepat UUID"
-#: engine/core/docs/drf/viewsets.py:303
+#: engine/core/docs/drf/viewsets.py:331
msgid "Filter by exact human-readable order ID"
msgstr "Filter berdasarkan ID pesanan yang dapat dibaca manusia"
-#: engine/core/docs/drf/viewsets.py:308
+#: engine/core/docs/drf/viewsets.py:336
msgid "Filter by user's email (case-insensitive exact match)"
msgstr ""
-"Filter berdasarkan email pengguna (pencocokan persis tanpa huruf besar-"
-"kecil)"
+"Filter berdasarkan email pengguna (pencocokan persis tanpa huruf besar-kecil)"
-#: engine/core/docs/drf/viewsets.py:313
+#: engine/core/docs/drf/viewsets.py:341
msgid "Filter by user's UUID"
msgstr "Memfilter berdasarkan UUID pengguna"
-#: engine/core/docs/drf/viewsets.py:318
+#: engine/core/docs/drf/viewsets.py:347
msgid "Filter by order status (case-insensitive substring match)"
msgstr ""
"Filter berdasarkan status pesanan (pencocokan substring yang tidak peka "
"huruf besar-kecil)"
-#: engine/core/docs/drf/viewsets.py:324
+#: engine/core/docs/drf/viewsets.py:354
msgid ""
-"Order by one of: uuid, human_readable_id, user_email, user, status, created,"
-" modified, buy_time, random. Prefix with '-' for descending (e.g. "
-"'-buy_time')."
+"Order by one of: uuid, human_readable_id, user_email, user, status, created, "
+"modified, buy_time, random. Prefix with '-' for descending (e.g. '-"
+"buy_time')."
msgstr ""
"Urutkan berdasarkan salah satu dari: uuid, human_readable_id, user_email, "
"user, status, created, modified, buy_time, random. Awalan dengan '-' untuk "
"menurun (contoh: '-buy_time')."
-#: engine/core/docs/drf/viewsets.py:336
+#: engine/core/docs/drf/viewsets.py:366
msgid "retrieve a single order (detailed view)"
msgstr "Mengambil satu kategori (tampilan detail)"
-#: engine/core/docs/drf/viewsets.py:341
+#: engine/core/docs/drf/viewsets.py:371
msgid "Order UUID or human-readable id"
msgstr "Pesan UUID atau id yang dapat dibaca manusia"
-#: engine/core/docs/drf/viewsets.py:351
+#: engine/core/docs/drf/viewsets.py:381
msgid "create an order"
msgstr "Membuat atribut"
-#: engine/core/docs/drf/viewsets.py:352
+#: engine/core/docs/drf/viewsets.py:382
msgid "doesn't work for non-staff users."
msgstr "Tidak dapat digunakan oleh pengguna non-staf."
-#: engine/core/docs/drf/viewsets.py:359
+#: engine/core/docs/drf/viewsets.py:389
msgid "delete an order"
msgstr "Menghapus atribut"
-#: engine/core/docs/drf/viewsets.py:366
+#: engine/core/docs/drf/viewsets.py:396
msgid "rewrite an existing order saving non-editables"
msgstr ""
"Menulis ulang kategori yang sudah ada dan menyimpan kategori yang tidak "
"dapat diedit"
-#: engine/core/docs/drf/viewsets.py:373
+#: engine/core/docs/drf/viewsets.py:403
msgid "rewrite some fields of an existing order saving non-editables"
msgstr ""
"Menulis ulang beberapa bidang dari kategori yang sudah ada sehingga tidak "
"dapat diedit"
-#: engine/core/docs/drf/viewsets.py:380
+#: engine/core/docs/drf/viewsets.py:410
msgid "purchase an order"
msgstr "Harga pembelian pada saat pemesanan"
-#: engine/core/docs/drf/viewsets.py:382
+#: engine/core/docs/drf/viewsets.py:412
msgid ""
"finalizes the order purchase. if `force_balance` is used, the purchase is "
"completed using the user's balance; if `force_payment` is used, a "
@@ -486,27 +481,27 @@ msgstr ""
"diselesaikan menggunakan saldo pengguna; Jika `force_payment` digunakan, "
"transaksi dimulai."
-#: engine/core/docs/drf/viewsets.py:397
+#: engine/core/docs/drf/viewsets.py:427
msgid "retrieve current pending order of a user"
msgstr "mengambil pesanan yang tertunda saat ini dari pengguna"
-#: engine/core/docs/drf/viewsets.py:398
+#: engine/core/docs/drf/viewsets.py:428
msgid "retrieves a current pending order of an authenticated user"
msgstr "mengambil pesanan tertunda saat ini dari pengguna yang diautentikasi"
-#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334
+#: engine/core/docs/drf/viewsets.py:438 engine/core/graphene/mutations.py:354
msgid "purchase an order without account creation"
msgstr "membeli pesanan tanpa pembuatan akun"
-#: engine/core/docs/drf/viewsets.py:409
+#: engine/core/docs/drf/viewsets.py:439
msgid "finalizes the order purchase for a non-registered user."
msgstr "menyelesaikan pembelian pesanan untuk pengguna yang tidak terdaftar."
-#: engine/core/docs/drf/viewsets.py:420
+#: engine/core/docs/drf/viewsets.py:450
msgid "add product to order"
msgstr "Menambahkan produk ke pesanan"
-#: engine/core/docs/drf/viewsets.py:421
+#: engine/core/docs/drf/viewsets.py:452
msgid ""
"adds a product to an order using the provided `product_uuid` and "
"`attributes`."
@@ -514,11 +509,11 @@ msgstr ""
"Menambahkan produk ke pesanan menggunakan `product_uuid` dan `atribut` yang "
"disediakan."
-#: engine/core/docs/drf/viewsets.py:429
+#: engine/core/docs/drf/viewsets.py:461
msgid "add a list of products to order, quantities will not count"
msgstr "Tambahkan daftar produk yang akan dipesan, jumlah tidak akan dihitung"
-#: engine/core/docs/drf/viewsets.py:430
+#: engine/core/docs/drf/viewsets.py:463
msgid ""
"adds a list of products to an order using the provided `product_uuid` and "
"`attributes`."
@@ -526,11 +521,11 @@ msgstr ""
"Menambahkan daftar produk ke pesanan menggunakan `product_uuid` dan "
"`atribut` yang disediakan."
-#: engine/core/docs/drf/viewsets.py:438
+#: engine/core/docs/drf/viewsets.py:472
msgid "remove product from order"
msgstr "Menghapus produk dari pesanan"
-#: engine/core/docs/drf/viewsets.py:439
+#: engine/core/docs/drf/viewsets.py:474
msgid ""
"removes a product from an order using the provided `product_uuid` and "
"`attributes`."
@@ -538,11 +533,11 @@ msgstr ""
"Menghapus produk dari pesanan menggunakan `product_uuid` dan `atribut` yang "
"disediakan."
-#: engine/core/docs/drf/viewsets.py:447
+#: engine/core/docs/drf/viewsets.py:483
msgid "remove product from order, quantities will not count"
msgstr "Menghapus produk dari pesanan, jumlah tidak akan dihitung"
-#: engine/core/docs/drf/viewsets.py:448
+#: engine/core/docs/drf/viewsets.py:485
msgid ""
"removes a list of products from an order using the provided `product_uuid` "
"and `attributes`"
@@ -550,740 +545,753 @@ msgstr ""
"Menghapus daftar produk dari pesanan menggunakan `product_uuid` dan "
"`atribut` yang disediakan."
-#: engine/core/docs/drf/viewsets.py:459
+#: engine/core/docs/drf/viewsets.py:497
msgid "list all wishlists (simple view)"
msgstr "Daftar semua atribut (tampilan sederhana)"
-#: engine/core/docs/drf/viewsets.py:460
+#: engine/core/docs/drf/viewsets.py:498
msgid "for non-staff users, only their own wishlists are returned."
msgstr ""
"Untuk pengguna non-staf, hanya daftar keinginan mereka sendiri yang "
"dikembalikan."
-#: engine/core/docs/drf/viewsets.py:467
+#: engine/core/docs/drf/viewsets.py:508
msgid "retrieve a single wishlist (detailed view)"
msgstr "Mengambil atribut tunggal (tampilan detail)"
-#: engine/core/docs/drf/viewsets.py:474
+#: engine/core/docs/drf/viewsets.py:515
msgid "create an wishlist"
msgstr "Membuat atribut"
-#: engine/core/docs/drf/viewsets.py:475
+#: engine/core/docs/drf/viewsets.py:516
msgid "Doesn't work for non-staff users."
msgstr "Tidak dapat digunakan oleh pengguna non-staf."
-#: engine/core/docs/drf/viewsets.py:482
+#: engine/core/docs/drf/viewsets.py:523
msgid "delete an wishlist"
msgstr "Menghapus atribut"
-#: engine/core/docs/drf/viewsets.py:489
+#: engine/core/docs/drf/viewsets.py:530
msgid "rewrite an existing wishlist saving non-editables"
msgstr ""
"Menulis ulang atribut yang sudah ada dengan menyimpan atribut yang tidak "
"dapat diedit"
-#: engine/core/docs/drf/viewsets.py:496
+#: engine/core/docs/drf/viewsets.py:537
msgid "rewrite some fields of an existing wishlist saving non-editables"
msgstr ""
"Menulis ulang beberapa bidang dari atribut yang sudah ada sehingga tidak "
"dapat diedit"
-#: engine/core/docs/drf/viewsets.py:503
+#: engine/core/docs/drf/viewsets.py:544
msgid "retrieve current pending wishlist of a user"
msgstr "mengambil daftar keinginan yang tertunda dari pengguna saat ini"
-#: engine/core/docs/drf/viewsets.py:504
+#: engine/core/docs/drf/viewsets.py:545
msgid "retrieves a current pending wishlist of an authenticated user"
msgstr ""
"mengambil daftar keinginan yang tertunda saat ini dari pengguna yang "
"diautentikasi"
-#: engine/core/docs/drf/viewsets.py:514
+#: engine/core/docs/drf/viewsets.py:555
msgid "add product to wishlist"
msgstr "Menambahkan produk ke pesanan"
-#: engine/core/docs/drf/viewsets.py:515
+#: engine/core/docs/drf/viewsets.py:557
msgid "adds a product to an wishlist using the provided `product_uuid`"
msgstr ""
"Menambahkan produk ke daftar keinginan menggunakan `product_uuid` yang "
"disediakan"
-#: engine/core/docs/drf/viewsets.py:523
+#: engine/core/docs/drf/viewsets.py:566
msgid "remove product from wishlist"
msgstr "Menghapus produk dari daftar keinginan"
-#: engine/core/docs/drf/viewsets.py:524
+#: engine/core/docs/drf/viewsets.py:568
msgid "removes a product from an wishlist using the provided `product_uuid`"
msgstr ""
"Menghapus produk dari daftar keinginan menggunakan `product_uuid` yang "
"disediakan"
-#: engine/core/docs/drf/viewsets.py:532
+#: engine/core/docs/drf/viewsets.py:577
msgid "add many products to wishlist"
msgstr "Tambahkan banyak produk ke daftar keinginan"
-#: engine/core/docs/drf/viewsets.py:533
+#: engine/core/docs/drf/viewsets.py:579
msgid "adds many products to an wishlist using the provided `product_uuids`"
msgstr ""
"Menambahkan banyak produk ke daftar keinginan menggunakan `product_uuids` "
"yang disediakan"
-#: engine/core/docs/drf/viewsets.py:541
+#: engine/core/docs/drf/viewsets.py:588
msgid "remove many products from wishlist"
msgstr "Menghapus produk dari pesanan"
-#: engine/core/docs/drf/viewsets.py:542
+#: engine/core/docs/drf/viewsets.py:590
msgid ""
"removes many products from an wishlist using the provided `product_uuids`"
msgstr ""
"Menghapus banyak produk dari daftar keinginan menggunakan `product_uuids` "
"yang disediakan"
-#: engine/core/docs/drf/viewsets.py:549
+#: engine/core/docs/drf/viewsets.py:598
msgid ""
"Filter by one or more attribute name/value pairs. \n"
"• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n"
-"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n"
-"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n"
+"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, "
+"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, "
+"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n"
+"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), "
+"`true`/`false` for booleans, integers, floats; otherwise treated as "
+"string. \n"
"• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n"
"Examples: \n"
-"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n"
+"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\","
+"\"bluetooth\"]`, \n"
"`b64-description=icontains-aGVhdC1jb2xk`"
msgstr ""
"Memfilter berdasarkan satu atau beberapa pasangan nama/nilai atribut. \n"
"- **Sintaks**: `attr_name = metode-nilai[;attr2 = metode2-nilai2]...`\n"
-"- **Metode** (default ke `icontains` jika dihilangkan): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`\n"
-"- Pengetikan nilai**: JSON dicoba terlebih dahulu (sehingga Anda dapat mengoper daftar/diktat), `true`/`false` untuk boolean, bilangan bulat, float; jika tidak, maka akan diperlakukan sebagai string. \n"
-"- **Base64**: awalan dengan `b64-` untuk menyandikan base64 yang aman bagi URL untuk menyandikan nilai mentah. \n"
+"- **Metode** (default ke `icontains` jika dihilangkan): `iexact`, `exact`, "
+"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, "
+"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`\n"
+"- Pengetikan nilai**: JSON dicoba terlebih dahulu (sehingga Anda dapat "
+"mengoper daftar/diktat), `true`/`false` untuk boolean, bilangan bulat, "
+"float; jika tidak, maka akan diperlakukan sebagai string. \n"
+"- **Base64**: awalan dengan `b64-` untuk menyandikan base64 yang aman bagi "
+"URL untuk menyandikan nilai mentah. \n"
"Contoh: \n"
-"`warna=merah-pasti`, `ukuran=gt-10`, `fitur=dalam-[\"wifi\", \"bluetooth\"]`,\n"
+"`warna=merah-pasti`, `ukuran=gt-10`, `fitur=dalam-[\"wifi\", "
+"\"bluetooth\"]`,\n"
"`b64-description = berisi-aGVhdC1jb2xk`"
-#: engine/core/docs/drf/viewsets.py:568 engine/core/docs/drf/viewsets.py:569
+#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
msgid "list all products (simple view)"
msgstr "Daftar semua produk (tampilan sederhana)"
-#: engine/core/docs/drf/viewsets.py:574
+#: engine/core/docs/drf/viewsets.py:623
msgid "(exact) Product UUID"
msgstr "UUID Produk (persis)"
-#: engine/core/docs/drf/viewsets.py:581
+#: engine/core/docs/drf/viewsets.py:630
msgid ""
-"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n"
+"Comma-separated list of fields to sort by. Prefix with `-` for "
+"descending. \n"
"**Allowed:** uuid, rating, name, slug, created, modified, price, random"
msgstr ""
-"Daftar bidang yang dipisahkan koma untuk mengurutkan. Awalan dengan `-` untuk mengurutkan. \n"
-"**Diizinkan:** uuid, peringkat, nama, siput, dibuat, dimodifikasi, harga, acak"
+"Daftar bidang yang dipisahkan koma untuk mengurutkan. Awalan dengan `-` "
+"untuk mengurutkan. \n"
+"**Diizinkan:** uuid, peringkat, nama, siput, dibuat, dimodifikasi, harga, "
+"acak"
-#: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599
+#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
msgid "retrieve a single product (detailed view)"
msgstr "Mengambil satu produk (tampilan detail)"
-#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634
-#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672
-#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710
+#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683
+#: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725
+#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763
msgid "Product UUID or slug"
msgstr "UUID Produk atau Siput"
-#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
+#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
#: engine/core/graphene/dashboard_mutations/product.py:80
#: engine/core/graphene/dashboard_mutations/product.py:118
#: engine/core/graphene/dashboard_mutations/product.py:166
msgid "create a product"
msgstr "Membuat produk"
-#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629
+#: engine/core/docs/drf/viewsets.py:677 engine/core/docs/drf/viewsets.py:678
msgid "rewrite an existing product, preserving non-editable fields"
msgstr ""
"Menulis ulang produk yang sudah ada, mempertahankan bidang yang tidak dapat "
"diedit"
-#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
+#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:700
msgid ""
"update some fields of an existing product, preserving non-editable fields"
msgstr ""
"Memperbarui beberapa bidang dari produk yang sudah ada, mempertahankan "
"bidang yang tidak dapat diedit"
-#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
+#: engine/core/docs/drf/viewsets.py:719 engine/core/docs/drf/viewsets.py:720
msgid "delete a product"
msgstr "Menghapus produk"
-#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686
+#: engine/core/docs/drf/viewsets.py:738 engine/core/docs/drf/viewsets.py:739
msgid "lists all permitted feedbacks for a product"
msgstr "mencantumkan semua umpan balik yang diizinkan untuk suatu produk"
-#: engine/core/docs/drf/viewsets.py:705
+#: engine/core/docs/drf/viewsets.py:758
msgid "returns a snapshot of the product's SEO meta data"
msgstr "Mengembalikan cuplikan data meta SEO produk"
-#: engine/core/docs/drf/viewsets.py:726
+#: engine/core/docs/drf/viewsets.py:779
msgid "list all addresses"
msgstr "Daftar semua alamat"
-#: engine/core/docs/drf/viewsets.py:736
+#: engine/core/docs/drf/viewsets.py:789
msgid "retrieve a single address"
msgstr "Mengambil satu alamat"
-#: engine/core/docs/drf/viewsets.py:746
+#: engine/core/docs/drf/viewsets.py:799
msgid "create a new address"
msgstr "Membuat alamat baru"
-#: engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:810
msgid "delete an address"
msgstr "Menghapus alamat"
-#: engine/core/docs/drf/viewsets.py:767
+#: engine/core/docs/drf/viewsets.py:820
msgid "update an entire address"
msgstr "Memperbarui seluruh alamat"
-#: engine/core/docs/drf/viewsets.py:778
+#: engine/core/docs/drf/viewsets.py:831
msgid "partially update an address"
msgstr "Memperbarui sebagian alamat"
-#: engine/core/docs/drf/viewsets.py:789
+#: engine/core/docs/drf/viewsets.py:842
msgid "autocomplete address suggestions"
msgstr "Masukan alamat pelengkapan otomatis"
-#: engine/core/docs/drf/viewsets.py:794
+#: engine/core/docs/drf/viewsets.py:848
msgid "raw data query string, please append with data from geo-IP endpoint"
msgstr ""
-"String kueri data mentah, harap tambahkan dengan data dari titik akhir geo-"
-"IP"
+"String kueri data mentah, harap tambahkan dengan data dari titik akhir geo-IP"
-#: engine/core/docs/drf/viewsets.py:800
+#: engine/core/docs/drf/viewsets.py:855
msgid "limit the results amount, 1 < limit < 10, default: 5"
msgstr "membatasi jumlah hasil, 1 "
msgstr "{name} tidak ada dengan kueri <{query}>!"
-#: engine/core/models.py:1448
+#: engine/core/models.py:1511
msgid "promocode does not exist"
msgstr "Kode promosi tidak ada"
-#: engine/core/models.py:1454
+#: engine/core/models.py:1526
msgid "you can only buy physical products with shipping address specified"
msgstr ""
"Anda hanya dapat membeli produk fisik dengan alamat pengiriman yang "
"ditentukan!"
-#: engine/core/models.py:1473
+#: engine/core/models.py:1547
msgid "address does not exist"
msgstr "Alamat tidak ada"
-#: engine/core/models.py:1494 engine/core/models.py:1563
+#: engine/core/models.py:1569 engine/core/models.py:1648
msgid "you can not buy at this moment, please try again in a few minutes"
msgstr ""
"Anda tidak dapat membeli saat ini, silakan coba lagi dalam beberapa menit."
-#: engine/core/models.py:1497 engine/core/models.py:1559
+#: engine/core/models.py:1575 engine/core/models.py:1641
msgid "invalid force value"
msgstr "Nilai gaya tidak valid"
-#: engine/core/models.py:1503 engine/core/models.py:1566
+#: engine/core/models.py:1581 engine/core/models.py:1652
msgid "you cannot purchase an empty order!"
msgstr "Anda tidak dapat membeli pesanan kosong!"
-#: engine/core/models.py:1522
+#: engine/core/models.py:1602
msgid "you cannot buy an order without a user"
msgstr "Anda tidak dapat membeli pesanan tanpa pengguna!"
-#: engine/core/models.py:1536
+#: engine/core/models.py:1616
msgid "a user without a balance cannot buy with balance"
msgstr "Pengguna tanpa saldo tidak dapat membeli dengan saldo!"
-#: engine/core/models.py:1541
+#: engine/core/models.py:1622
msgid "insufficient funds to complete the order"
msgstr "Dana tidak mencukupi untuk menyelesaikan pesanan"
-#: engine/core/models.py:1575
+#: engine/core/models.py:1663
msgid ""
"you cannot buy without registration, please provide the following "
"information: customer name, customer email, customer phone number"
@@ -2581,7 +2586,7 @@ msgstr ""
"Anda tidak dapat membeli tanpa registrasi, berikan informasi berikut: nama "
"pelanggan, email pelanggan, nomor telepon pelanggan"
-#: engine/core/models.py:1584
+#: engine/core/models.py:1674
#, python-brace-format
msgid ""
"invalid payment method: {payment_method} from {available_payment_methods}"
@@ -2589,7 +2594,7 @@ msgstr ""
"Metode pembayaran tidak valid: {payment_method} dari "
"{available_payment_methods}!"
-#: engine/core/models.py:1699
+#: engine/core/models.py:1805
msgid ""
"Manages user feedback for products. This class is designed to capture and "
"store user feedback for specific products that they have purchased. It "
@@ -2604,33 +2609,32 @@ msgstr ""
"ditetapkan pengguna. Kelas ini menggunakan bidang basis data untuk "
"memodelkan dan mengelola data umpan balik secara efektif."
-#: engine/core/models.py:1711
+#: engine/core/models.py:1817
msgid "user-provided comments about their experience with the product"
msgstr ""
"Komentar yang diberikan pengguna tentang pengalaman mereka dengan produk"
-#: engine/core/models.py:1712
+#: engine/core/models.py:1818
msgid "feedback comments"
msgstr "Komentar umpan balik"
-#: engine/core/models.py:1719
-msgid ""
-"references the specific product in an order that this feedback is about"
+#: engine/core/models.py:1826
+msgid "references the specific product in an order that this feedback is about"
msgstr "Merujuk ke produk tertentu sesuai dengan urutan umpan balik ini"
-#: engine/core/models.py:1720
+#: engine/core/models.py:1828
msgid "related order product"
msgstr "Produk pesanan terkait"
-#: engine/core/models.py:1725
+#: engine/core/models.py:1833
msgid "user-assigned rating for the product"
msgstr "Peringkat yang ditetapkan pengguna untuk produk"
-#: engine/core/models.py:1726
+#: engine/core/models.py:1834
msgid "product rating"
msgstr "Peringkat produk"
-#: engine/core/models.py:1742
+#: engine/core/models.py:1854
msgid ""
"Represents products associated with orders and their attributes. The "
"OrderProduct model maintains information about a product that is part of an "
@@ -2647,122 +2651,122 @@ msgstr ""
"pesanan, termasuk rincian seperti harga pembelian, kuantitas, atribut "
"produk, dan status. Model ini mengelola notifikasi untuk pengguna dan "
"administrator dan menangani operasi seperti mengembalikan saldo produk atau "
-"menambahkan umpan balik. Model ini juga menyediakan metode dan properti yang"
-" mendukung logika bisnis, seperti menghitung harga total atau menghasilkan "
+"menambahkan umpan balik. Model ini juga menyediakan metode dan properti yang "
+"mendukung logika bisnis, seperti menghitung harga total atau menghasilkan "
"URL unduhan untuk produk digital. Model ini terintegrasi dengan model "
"Pesanan dan Produk dan menyimpan referensi ke keduanya."
-#: engine/core/models.py:1757
+#: engine/core/models.py:1869
msgid "the price paid by the customer for this product at purchase time"
msgstr ""
"Harga yang dibayarkan oleh pelanggan untuk produk ini pada saat pembelian"
-#: engine/core/models.py:1758
+#: engine/core/models.py:1870
msgid "purchase price at order time"
msgstr "Harga pembelian pada saat pemesanan"
-#: engine/core/models.py:1763
+#: engine/core/models.py:1875
msgid "internal comments for admins about this ordered product"
msgstr "Komentar internal untuk admin tentang produk yang dipesan ini"
-#: engine/core/models.py:1764
+#: engine/core/models.py:1876
msgid "internal comments"
msgstr "Komentar internal"
-#: engine/core/models.py:1770
+#: engine/core/models.py:1882
msgid "user notifications"
msgstr "Pemberitahuan pengguna"
-#: engine/core/models.py:1775
+#: engine/core/models.py:1887
msgid "json representation of this item's attributes"
msgstr "Representasi JSON dari atribut item ini"
-#: engine/core/models.py:1776
+#: engine/core/models.py:1888
msgid "ordered product attributes"
msgstr "Atribut produk yang dipesan"
-#: engine/core/models.py:1781
+#: engine/core/models.py:1893
msgid "reference to the parent order that contains this product"
msgstr "Referensi ke pesanan induk yang berisi produk ini"
-#: engine/core/models.py:1782
+#: engine/core/models.py:1894
msgid "parent order"
msgstr "Urutan induk"
-#: engine/core/models.py:1791
+#: engine/core/models.py:1903
msgid "the specific product associated with this order line"
msgstr "Produk spesifik yang terkait dengan baris pesanan ini"
-#: engine/core/models.py:1798
+#: engine/core/models.py:1910
msgid "quantity of this specific product in the order"
msgstr "Jumlah produk spesifik ini dalam pesanan"
-#: engine/core/models.py:1799
+#: engine/core/models.py:1911
msgid "product quantity"
msgstr "Kuantitas produk"
-#: engine/core/models.py:1806
+#: engine/core/models.py:1918
msgid "current status of this product in the order"
msgstr "Status saat ini dari produk ini dalam pesanan"
-#: engine/core/models.py:1807
+#: engine/core/models.py:1919
msgid "product line status"
msgstr "Status lini produk"
-#: engine/core/models.py:1872
+#: engine/core/models.py:1986
msgid "order product must have an order"
msgstr "Pesananproduk harus memiliki pesanan terkait!"
-#: engine/core/models.py:1874
+#: engine/core/models.py:1988
#, python-brace-format
msgid "wrong action specified for feedback: {action}"
msgstr "Tindakan yang salah ditentukan untuk umpan balik: {action}!"
-#: engine/core/models.py:1888
+#: engine/core/models.py:2005
msgid "you cannot feedback an order which is not received"
msgstr ""
"Anda tidak dapat memberikan umpan balik atas pesanan yang tidak diterima"
-#: engine/core/models.py:1894
+#: engine/core/models.py:2014
msgid "name"
msgstr "Nama"
-#: engine/core/models.py:1895
+#: engine/core/models.py:2016
msgid "URL of the integration"
msgstr "URL integrasi"
-#: engine/core/models.py:1896
+#: engine/core/models.py:2019
msgid "authentication credentials"
msgstr "Kredensial otentikasi"
-#: engine/core/models.py:1918
+#: engine/core/models.py:2042
msgid "you can only have one default CRM provider"
msgstr "Anda hanya dapat memiliki satu penyedia CRM default"
-#: engine/core/models.py:1928
+#: engine/core/models.py:2052
msgid "CRM"
msgstr "CRM"
-#: engine/core/models.py:1929
+#: engine/core/models.py:2053
msgid "CRMs"
msgstr "CRM"
-#: engine/core/models.py:1941
+#: engine/core/models.py:2069
msgid "order CRM link"
msgstr "Tautan CRM pesanan"
-#: engine/core/models.py:1942
+#: engine/core/models.py:2070
msgid "orders CRM links"
msgstr "Tautan CRM Pesanan"
-#: engine/core/models.py:1947
+#: engine/core/models.py:2075
msgid ""
"Represents the downloading functionality for digital assets associated with "
"orders. The DigitalAssetDownload class provides the ability to manage and "
"access downloads related to order products. It maintains information about "
-"the associated order product, the number of downloads, and whether the asset"
-" is publicly visible. It includes a method to generate a URL for downloading"
-" the asset when the associated order is in a completed status."
+"the associated order product, the number of downloads, and whether the asset "
+"is publicly visible. It includes a method to generate a URL for downloading "
+"the asset when the associated order is in a completed status."
msgstr ""
"Mewakili fungsionalitas pengunduhan untuk aset digital yang terkait dengan "
"pesanan. Kelas DigitalAssetDownload menyediakan kemampuan untuk mengelola "
@@ -2772,15 +2776,15 @@ msgstr ""
"untuk menghasilkan URL untuk mengunduh aset ketika pesanan terkait dalam "
"status selesai."
-#: engine/core/models.py:1961
+#: engine/core/models.py:2091
msgid "download"
msgstr "Unduh"
-#: engine/core/models.py:1962
+#: engine/core/models.py:2092
msgid "downloads"
msgstr "Unduhan"
-#: engine/core/serializers/utility.py:89
+#: engine/core/serializers/utility.py:91
msgid ""
"you must provide a comment, rating, and order product uuid to add feedback."
msgstr ""
@@ -2977,7 +2981,8 @@ msgstr "Halo %(order.user.first_name)s,"
#, python-format
msgid ""
"thank you for your order #%(order.pk)s! we are pleased to inform you that\n"
-" we have taken your order into work. below are the details of your\n"
+" we have taken your order into work. below are "
+"the details of your\n"
" order:"
msgstr ""
"Terima kasih atas pesanan Anda #%(order.pk)s! Dengan senang hati kami "
@@ -3086,13 +3091,15 @@ msgid ""
"Thank you for staying with us! We have granted you with a promocode\n"
" for "
msgstr ""
-"Terima kasih telah tinggal bersama kami! Kami telah memberikan Anda kode promo\n"
+"Terima kasih telah tinggal bersama kami! Kami telah memberikan Anda kode "
+"promo\n"
" untuk"
#: engine/core/templates/shipped_order_created_email.html:101
#: engine/core/templates/shipped_order_delivered_email.html:101
msgid ""
-"thank you for your order! we are pleased to confirm your purchase. below are\n"
+"thank you for your order! we are pleased to confirm your purchase. below "
+"are\n"
" the details of your order:"
msgstr ""
"Terima kasih atas pesanan Anda! Dengan senang hati kami mengkonfirmasi "
@@ -3123,11 +3130,11 @@ msgstr ""
"Semua hak cipta\n"
" dilindungi undang-undang"
-#: engine/core/utils/caching.py:44
+#: engine/core/utils/caching.py:48
msgid "both data and timeout are required"
msgstr "Data dan batas waktu diperlukan"
-#: engine/core/utils/caching.py:46
+#: engine/core/utils/caching.py:51
msgid "invalid timeout value, it must be between 0 and 216000 seconds"
msgstr "Nilai batas waktu tidak valid, harus antara 0 dan 216000 detik"
@@ -3136,17 +3143,17 @@ msgstr "Nilai batas waktu tidak valid, harus antara 0 dan 216000 detik"
msgid "{settings.PROJECT_NAME} | contact us initiated"
msgstr "{settings.PROJECT_NAME} | hubungi kami dimulai"
-#: engine/core/utils/emailing.py:73
+#: engine/core/utils/emailing.py:81
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order confirmation"
msgstr "{settings.PROJECT_NAME} | konfirmasi pesanan"
-#: engine/core/utils/emailing.py:105
+#: engine/core/utils/emailing.py:115
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order delivered"
msgstr "{settings.PROJECT_NAME} | pesanan terkirim"
-#: engine/core/utils/emailing.py:188
+#: engine/core/utils/emailing.py:203
#, python-brace-format
msgid "{settings.PROJECT_NAME} | promocode granted"
msgstr "{settings.PROJECT_NAME} | kode promo diberikan"
@@ -3159,13 +3166,13 @@ msgstr "Anda tidak memiliki izin untuk melakukan tindakan ini."
msgid "NOMINATIM_URL must be configured."
msgstr "Parameter NOMINATIM_URL harus dikonfigurasi!"
-#: engine/core/validators.py:19
+#: engine/core/validators.py:21
#, python-brace-format
msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels"
msgstr ""
"Dimensi gambar tidak boleh melebihi w{max_width} x h{max_height} piksel!"
-#: engine/core/views.py:91
+#: engine/core/views.py:105
msgid ""
"Handles the request for the sitemap index and returns an XML response. It "
"ensures the response includes the appropriate content type header for XML."
@@ -3173,7 +3180,7 @@ msgstr ""
"Menangani permintaan indeks peta situs dan mengembalikan respons XML. "
"Memastikan respons menyertakan header jenis konten yang sesuai untuk XML."
-#: engine/core/views.py:106
+#: engine/core/views.py:120
msgid ""
"Handles the detailed view response for a sitemap. This function processes "
"the request, fetches the appropriate sitemap detail response, and sets the "
@@ -3183,28 +3190,28 @@ msgstr ""
"permintaan, mengambil respons detail peta situs yang sesuai, dan menetapkan "
"header Jenis Konten untuk XML."
-#: engine/core/views.py:141
+#: engine/core/views.py:156
msgid ""
"Returns a list of supported languages and their corresponding information."
msgstr "Mengembalikan daftar bahasa yang didukung dan informasi terkait."
-#: engine/core/views.py:173
+#: engine/core/views.py:183
msgid "Returns the parameters of the website as a JSON object."
msgstr "Mengembalikan parameter situs web sebagai objek JSON."
-#: engine/core/views.py:192
+#: engine/core/views.py:199
msgid ""
"Handles cache operations such as reading and setting cache data with a "
"specified key and timeout."
msgstr ""
-"Menangani operasi cache seperti membaca dan mengatur data cache dengan kunci"
-" dan batas waktu tertentu."
+"Menangani operasi cache seperti membaca dan mengatur data cache dengan kunci "
+"dan batas waktu tertentu."
-#: engine/core/views.py:219
+#: engine/core/views.py:221
msgid "Handles `contact us` form submissions."
msgstr "Menangani pengiriman formulir `hubungi kami`."
-#: engine/core/views.py:240
+#: engine/core/views.py:237
msgid ""
"Handles requests for processing and validating URLs from incoming POST "
"requests."
@@ -3212,58 +3219,66 @@ msgstr ""
"Menangani permintaan untuk memproses dan memvalidasi URL dari permintaan "
"POST yang masuk."
-#: engine/core/views.py:280
+#: engine/core/views.py:274
msgid "Handles global search queries."
msgstr "Menangani kueri penelusuran global."
-#: engine/core/views.py:295
+#: engine/core/views.py:290
msgid "Handles the logic of buying as a business without registration."
msgstr "Menangani logika pembelian sebagai bisnis tanpa registrasi."
-#: engine/core/views.py:332
+#: engine/core/views.py:338
msgid ""
"Handles the downloading of a digital asset associated with an order.\n"
-"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the digital asset file located in the "
+"storage directory of the project. If the file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
msgstr ""
"Menangani pengunduhan aset digital yang terkait dengan pesanan.\n"
-"Fungsi ini mencoba untuk menyajikan file aset digital yang terletak di direktori penyimpanan proyek. Jika file tidak ditemukan, kesalahan HTTP 404 akan muncul untuk mengindikasikan bahwa sumber daya tidak tersedia."
+"Fungsi ini mencoba untuk menyajikan file aset digital yang terletak di "
+"direktori penyimpanan proyek. Jika file tidak ditemukan, kesalahan HTTP 404 "
+"akan muncul untuk mengindikasikan bahwa sumber daya tidak tersedia."
-#: engine/core/views.py:343
+#: engine/core/views.py:349
msgid "order_product_uuid is required"
msgstr "order_product_uuid diperlukan"
-#: engine/core/views.py:350
+#: engine/core/views.py:356
msgid "order product does not exist"
msgstr "produk pesanan tidak ada"
-#: engine/core/views.py:353
+#: engine/core/views.py:359
msgid "you can only download the digital asset once"
msgstr "Anda hanya dapat mengunduh aset digital sekali saja"
-#: engine/core/views.py:356
+#: engine/core/views.py:363
msgid "the order must be paid before downloading the digital asset"
msgstr "pesanan harus dibayar sebelum mengunduh aset digital"
-#: engine/core/views.py:362
+#: engine/core/views.py:370
msgid "the order product does not have a product"
msgstr "Produk pesanan tidak memiliki produk"
-#: engine/core/views.py:399
+#: engine/core/views.py:414
msgid "favicon not found"
msgstr "favicon tidak ditemukan"
-#: engine/core/views.py:404
+#: engine/core/views.py:419
msgid ""
"Handles requests for the favicon of a website.\n"
-"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the favicon file located in the static "
+"directory of the project. If the favicon file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
msgstr ""
"Menangani permintaan favicon dari sebuah situs web.\n"
-"Fungsi ini mencoba menyajikan file favicon yang terletak di direktori statis proyek. Jika file favicon tidak ditemukan, kesalahan HTTP 404 akan dimunculkan untuk mengindikasikan bahwa sumber daya tidak tersedia."
+"Fungsi ini mencoba menyajikan file favicon yang terletak di direktori statis "
+"proyek. Jika file favicon tidak ditemukan, kesalahan HTTP 404 akan "
+"dimunculkan untuk mengindikasikan bahwa sumber daya tidak tersedia."
-#: engine/core/views.py:416
+#: engine/core/views.py:431
msgid ""
-"Redirects the request to the admin index page. The function handles incoming"
-" HTTP requests and redirects them to the Django admin interface index page. "
+"Redirects the request to the admin index page. The function handles incoming "
+"HTTP requests and redirects them to the Django admin interface index page. "
"It uses Django's `redirect` function for handling the HTTP redirection."
msgstr ""
"Mengalihkan permintaan ke halaman indeks admin. Fungsi ini menangani "
@@ -3271,20 +3286,20 @@ msgstr ""
"admin Django. Fungsi ini menggunakan fungsi `redirect` Django untuk "
"menangani pengalihan HTTP."
-#: engine/core/views.py:429
+#: engine/core/views.py:443
msgid "Returns current version of the eVibes. "
msgstr "Mengembalikan versi eVibes saat ini."
-#: engine/core/views.py:623 engine/core/views.py:636
+#: engine/core/views.py:672 engine/core/views.py:687
#, python-format
msgid "Revenue & Orders (last %(days)d)"
msgstr "Pendapatan & Pesanan (terakhir %(days)d)"
-#: engine/core/views.py:793
+#: engine/core/views.py:868
msgid "Returns custom variables for Dashboard. "
msgstr "Mengembalikan variabel khusus untuk Dasbor."
-#: engine/core/viewsets.py:136
+#: engine/core/viewsets.py:139
msgid ""
"Defines a viewset for managing Evibes-related operations. The EvibesViewSet "
"class inherits from ModelViewSet and provides functionality for handling "
@@ -3298,13 +3313,12 @@ msgstr ""
"dukungan untuk kelas serializer dinamis berdasarkan tindakan saat ini, izin "
"yang dapat disesuaikan, dan format rendering."
-#: engine/core/viewsets.py:156
+#: engine/core/viewsets.py:160
msgid ""
-"Represents a viewset for managing AttributeGroup objects. Handles operations"
-" related to AttributeGroup, including filtering, serialization, and "
-"retrieval of data. This class is part of the application's API layer and "
-"provides a standardized way to process requests and responses for "
-"AttributeGroup data."
+"Represents a viewset for managing AttributeGroup objects. Handles operations "
+"related to AttributeGroup, including filtering, serialization, and retrieval "
+"of data. This class is part of the application's API layer and provides a "
+"standardized way to process requests and responses for AttributeGroup data."
msgstr ""
"Mewakili sebuah viewset untuk mengelola objek AttributeGroup. Menangani "
"operasi yang terkait dengan AttributeGroup, termasuk pemfilteran, "
@@ -3312,7 +3326,7 @@ msgstr ""
"API aplikasi dan menyediakan cara standar untuk memproses permintaan dan "
"respons untuk data AttributeGroup."
-#: engine/core/viewsets.py:175
+#: engine/core/viewsets.py:179
msgid ""
"Handles operations related to Attribute objects within the application. "
"Provides a set of API endpoints to interact with Attribute data. This class "
@@ -3328,21 +3342,21 @@ msgstr ""
"seperti pemfilteran berdasarkan bidang tertentu atau mengambil informasi "
"yang terperinci versus yang disederhanakan tergantung pada permintaan."
-#: engine/core/viewsets.py:194
+#: engine/core/viewsets.py:198
msgid ""
"A viewset for managing AttributeValue objects. This viewset provides "
"functionality for listing, retrieving, creating, updating, and deleting "
"AttributeValue objects. It integrates with Django REST Framework's viewset "
-"mechanisms and uses appropriate serializers for different actions. Filtering"
-" capabilities are provided through the DjangoFilterBackend."
+"mechanisms and uses appropriate serializers for different actions. Filtering "
+"capabilities are provided through the DjangoFilterBackend."
msgstr ""
-"Sebuah viewset untuk mengelola objek AttributeValue. Viewset ini menyediakan"
-" fungsionalitas untuk mendaftarkan, mengambil, membuat, memperbarui, dan "
+"Sebuah viewset untuk mengelola objek AttributeValue. Viewset ini menyediakan "
+"fungsionalitas untuk mendaftarkan, mengambil, membuat, memperbarui, dan "
"menghapus objek AttributeValue. Ini terintegrasi dengan mekanisme viewset "
"Django REST Framework dan menggunakan serializer yang sesuai untuk tindakan "
"yang berbeda. Kemampuan pemfilteran disediakan melalui DjangoFilterBackend."
-#: engine/core/viewsets.py:213
+#: engine/core/viewsets.py:217
msgid ""
"Manages views for Category-related operations. The CategoryViewSet class is "
"responsible for handling operations related to the Category model in the "
@@ -3351,12 +3365,12 @@ msgid ""
"can access specific data."
msgstr ""
"Mengelola tampilan untuk operasi terkait Kategori. Kelas CategoryViewSet "
-"bertanggung jawab untuk menangani operasi yang terkait dengan model Kategori"
-" dalam sistem. Kelas ini mendukung pengambilan, pemfilteran, dan serialisasi"
-" data kategori. ViewSet juga memberlakukan izin untuk memastikan bahwa hanya"
-" pengguna yang memiliki izin yang dapat mengakses data tertentu."
+"bertanggung jawab untuk menangani operasi yang terkait dengan model Kategori "
+"dalam sistem. Kelas ini mendukung pengambilan, pemfilteran, dan serialisasi "
+"data kategori. ViewSet juga memberlakukan izin untuk memastikan bahwa hanya "
+"pengguna yang memiliki izin yang dapat mengakses data tertentu."
-#: engine/core/viewsets.py:326
+#: engine/core/viewsets.py:346
msgid ""
"Represents a viewset for managing Brand instances. This class provides "
"functionality for querying, filtering, and serializing Brand objects. It "
@@ -3365,10 +3379,10 @@ msgid ""
msgstr ""
"Mewakili sebuah viewset untuk mengelola instance Brand. Kelas ini "
"menyediakan fungsionalitas untuk melakukan kueri, penyaringan, dan "
-"serialisasi objek Brand. Kelas ini menggunakan kerangka kerja ViewSet Django"
-" untuk menyederhanakan implementasi titik akhir API untuk objek Brand."
+"serialisasi objek Brand. Kelas ini menggunakan kerangka kerja ViewSet Django "
+"untuk menyederhanakan implementasi titik akhir API untuk objek Brand."
-#: engine/core/viewsets.py:438
+#: engine/core/viewsets.py:458
msgid ""
"Manages operations related to the `Product` model in the system. This class "
"provides a viewset for managing products, including their filtering, "
@@ -3379,14 +3393,14 @@ msgid ""
"product."
msgstr ""
"Mengelola operasi yang terkait dengan model `Product` dalam sistem. Kelas "
-"ini menyediakan sebuah viewset untuk mengelola produk, termasuk pemfilteran,"
-" serialisasi, dan operasi pada instance tertentu. Kelas ini diperluas dari "
+"ini menyediakan sebuah viewset untuk mengelola produk, termasuk pemfilteran, "
+"serialisasi, dan operasi pada instance tertentu. Kelas ini diperluas dari "
"`EvibesViewSet` untuk menggunakan fungsionalitas umum dan terintegrasi "
-"dengan kerangka kerja Django REST untuk operasi RESTful API. Termasuk metode"
-" untuk mengambil detail produk, menerapkan izin, dan mengakses umpan balik "
+"dengan kerangka kerja Django REST untuk operasi RESTful API. Termasuk metode "
+"untuk mengambil detail produk, menerapkan izin, dan mengakses umpan balik "
"terkait produk."
-#: engine/core/viewsets.py:574
+#: engine/core/viewsets.py:605
msgid ""
"Represents a viewset for managing Vendor objects. This viewset allows "
"fetching, filtering, and serializing Vendor data. It defines the queryset, "
@@ -3401,31 +3415,31 @@ msgstr ""
"adalah untuk menyediakan akses yang efisien ke sumber daya yang berhubungan "
"dengan Vendor melalui kerangka kerja Django REST."
-#: engine/core/viewsets.py:594
+#: engine/core/viewsets.py:625
msgid ""
"Representation of a view set handling Feedback objects. This class manages "
"operations related to Feedback objects, including listing, filtering, and "
"retrieving details. The purpose of this view set is to provide different "
-"serializers for different actions and implement permission-based handling of"
-" accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
+"serializers for different actions and implement permission-based handling of "
+"accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
"use of Django's filtering system for querying data."
msgstr ""
"Representasi set tampilan yang menangani objek Umpan Balik. Kelas ini "
"mengelola operasi yang terkait dengan objek Umpan Balik, termasuk "
"mendaftarkan, memfilter, dan mengambil detail. Tujuan dari set tampilan ini "
-"adalah untuk menyediakan serializer yang berbeda untuk tindakan yang berbeda"
-" dan mengimplementasikan penanganan berbasis izin untuk objek Umpan Balik "
+"adalah untuk menyediakan serializer yang berbeda untuk tindakan yang berbeda "
+"dan mengimplementasikan penanganan berbasis izin untuk objek Umpan Balik "
"yang dapat diakses. Kelas ini memperluas `EvibesViewSet` dasar dan "
"menggunakan sistem penyaringan Django untuk meminta data."
-#: engine/core/viewsets.py:621
+#: engine/core/viewsets.py:652
msgid ""
"ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes "
"various endpoints for handling order operations such as adding or removing "
-"products, performing purchases for registered as well as unregistered users,"
-" and retrieving the current authenticated user's pending orders. The ViewSet"
-" uses multiple serializers based on the specific action being performed and "
+"products, performing purchases for registered as well as unregistered users, "
+"and retrieving the current authenticated user's pending orders. The ViewSet "
+"uses multiple serializers based on the specific action being performed and "
"enforces permissions accordingly while interacting with order data."
msgstr ""
"ViewSet untuk mengelola pesanan dan operasi terkait. Kelas ini menyediakan "
@@ -3437,12 +3451,12 @@ msgstr ""
"beberapa serializer berdasarkan tindakan spesifik yang dilakukan dan "
"memberlakukan izin yang sesuai saat berinteraksi dengan data pesanan."
-#: engine/core/viewsets.py:825
+#: engine/core/viewsets.py:914
msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It "
-"includes filtering, permission checks, and serializer switching based on the"
-" requested action. Additionally, it provides a detailed action for handling "
+"includes filtering, permission checks, and serializer switching based on the "
+"requested action. Additionally, it provides a detailed action for handling "
"feedback on OrderProduct instances"
msgstr ""
"Menyediakan viewset untuk mengelola entitas OrderProduct. Viewset ini "
@@ -3451,11 +3465,11 @@ msgstr ""
"serializer berdasarkan tindakan yang diminta. Selain itu, ini menyediakan "
"tindakan terperinci untuk menangani umpan balik pada instance OrderProduct"
-#: engine/core/viewsets.py:879
+#: engine/core/viewsets.py:974
msgid "Manages operations related to Product images in the application. "
msgstr "Mengelola operasi yang terkait dengan gambar Produk dalam aplikasi."
-#: engine/core/viewsets.py:892
+#: engine/core/viewsets.py:988
msgid ""
"Manages the retrieval and handling of PromoCode instances through various "
"API actions."
@@ -3463,33 +3477,33 @@ msgstr ""
"Mengelola pengambilan dan penanganan contoh PromoCode melalui berbagai "
"tindakan API."
-#: engine/core/viewsets.py:914
+#: engine/core/viewsets.py:1019
msgid "Represents a view set for managing promotions. "
msgstr "Merupakan set tampilan untuk mengelola promosi."
-#: engine/core/viewsets.py:927
+#: engine/core/viewsets.py:1032
msgid "Handles operations related to Stock data in the system."
msgstr "Menangani operasi yang terkait dengan data Stok di dalam sistem."
-#: engine/core/viewsets.py:941
+#: engine/core/viewsets.py:1046
msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the "
-"retrieval, modification, and customization of products within the wish list."
-" This ViewSet facilitates functionality such as adding, removing, and bulk "
+"retrieval, modification, and customization of products within the wish list. "
+"This ViewSet facilitates functionality such as adding, removing, and bulk "
"actions for wishlist products. Permission checks are integrated to ensure "
"that users can only manage their own wishlists unless explicit permissions "
"are granted."
msgstr ""
"ViewSet untuk mengelola operasi Wishlist. WishlistViewSet menyediakan titik "
-"akhir untuk berinteraksi dengan daftar keinginan pengguna, yang memungkinkan"
-" pengambilan, modifikasi, dan penyesuaian produk dalam daftar keinginan. "
-"ViewSet ini memfasilitasi fungsionalitas seperti menambahkan, menghapus, dan"
-" tindakan massal untuk produk daftar keinginan. Pemeriksaan izin "
+"akhir untuk berinteraksi dengan daftar keinginan pengguna, yang memungkinkan "
+"pengambilan, modifikasi, dan penyesuaian produk dalam daftar keinginan. "
+"ViewSet ini memfasilitasi fungsionalitas seperti menambahkan, menghapus, dan "
+"tindakan massal untuk produk daftar keinginan. Pemeriksaan izin "
"diintegrasikan untuk memastikan bahwa pengguna hanya dapat mengelola daftar "
"keinginan mereka sendiri kecuali jika izin eksplisit diberikan."
-#: engine/core/viewsets.py:1056
+#: engine/core/viewsets.py:1183
msgid ""
"This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom "
@@ -3497,18 +3511,18 @@ msgid ""
"different HTTP methods, serializer overrides, and permission handling based "
"on the request context."
msgstr ""
-"Kelas ini menyediakan fungsionalitas viewset untuk mengelola objek `Alamat`."
-" Kelas AddressViewSet memungkinkan operasi CRUD, pemfilteran, dan tindakan "
+"Kelas ini menyediakan fungsionalitas viewset untuk mengelola objek `Alamat`. "
+"Kelas AddressViewSet memungkinkan operasi CRUD, pemfilteran, dan tindakan "
"khusus yang terkait dengan entitas alamat. Kelas ini mencakup perilaku "
"khusus untuk metode HTTP yang berbeda, penggantian serializer, dan "
"penanganan izin berdasarkan konteks permintaan."
-#: engine/core/viewsets.py:1123
+#: engine/core/viewsets.py:1254
#, python-brace-format
msgid "Geocoding error: {e}"
msgstr "Kesalahan pengodean geografis: {e}"
-#: engine/core/viewsets.py:1131
+#: engine/core/viewsets.py:1262
msgid ""
"Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing "
diff --git a/engine/core/locale/it_IT/LC_MESSAGES/django.po b/engine/core/locale/it_IT/LC_MESSAGES/django.po
index 1ea70d2f..ef67f418 100644
--- a/engine/core/locale/it_IT/LC_MESSAGES/django.po
+++ b/engine/core/locale/it_IT/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 22:12+0300\n"
+"POT-Creation-Date: 2025-12-18 19:09+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -27,113 +27,112 @@ msgstr ""
msgid "is active"
msgstr "È attivo"
-#: engine/core/abstract.py:21
+#: engine/core/abstract.py:22
msgid ""
-"if set to false, this object can't be seen by users without needed "
-"permission"
+"if set to false, this object can't be seen by users without needed permission"
msgstr ""
-"Se impostato a false, questo oggetto non può essere visto dagli utenti senza"
-" i necessari permessi."
+"Se impostato a false, questo oggetto non può essere visto dagli utenti senza "
+"i necessari permessi."
-#: engine/core/abstract.py:23 engine/core/choices.py:18
+#: engine/core/abstract.py:26 engine/core/choices.py:18
msgid "created"
msgstr "Creato"
-#: engine/core/abstract.py:23
+#: engine/core/abstract.py:26
msgid "when the object first appeared on the database"
msgstr "Quando l'oggetto è apparso per la prima volta nel database"
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "modified"
msgstr "Modificato"
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "when the object was last modified"
msgstr "Quando l'oggetto è stato modificato per l'ultima volta"
-#: engine/core/admin.py:85
+#: engine/core/admin.py:94
msgid "translations"
msgstr "Traduzioni"
-#: engine/core/admin.py:89
+#: engine/core/admin.py:102
msgid "general"
msgstr "Generale"
-#: engine/core/admin.py:91
+#: engine/core/admin.py:106
msgid "relations"
msgstr "Relazioni"
-#: engine/core/admin.py:93
+#: engine/core/admin.py:111
msgid "additional info"
msgstr "informazioni aggiuntive"
-#: engine/core/admin.py:111
+#: engine/core/admin.py:133
msgid "metadata"
msgstr "Metadati"
-#: engine/core/admin.py:118
+#: engine/core/admin.py:141
msgid "timestamps"
msgstr "Timestamp"
-#: engine/core/admin.py:133
+#: engine/core/admin.py:157
#, python-format
msgid "activate selected %(verbose_name_plural)s"
msgstr "Attivare il %(verbose_name_plural)s selezionato"
-#: engine/core/admin.py:138
+#: engine/core/admin.py:165
msgid "selected items have been activated."
msgstr "Gli articoli selezionati sono stati attivati!"
-#: engine/core/admin.py:144
+#: engine/core/admin.py:173
#, python-format
msgid "deactivate selected %(verbose_name_plural)s"
msgstr "Disattivare il %(verbose_name_plural)s selezionato"
-#: engine/core/admin.py:149
+#: engine/core/admin.py:183
msgid "selected items have been deactivated."
msgstr "Gli articoli selezionati sono stati disattivati!"
-#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586
-#: engine/core/graphene/object_types.py:593 engine/core/models.py:801
-#: engine/core/models.py:809
+#: engine/core/admin.py:195 engine/core/graphene/object_types.py:650
+#: engine/core/graphene/object_types.py:657 engine/core/models.py:824
+#: engine/core/models.py:832
msgid "attribute value"
msgstr "Valore dell'attributo"
-#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75
-#: engine/core/models.py:810
+#: engine/core/admin.py:196 engine/core/graphene/object_types.py:75
+#: engine/core/models.py:833
msgid "attribute values"
msgstr "Valori degli attributi"
-#: engine/core/admin.py:172
+#: engine/core/admin.py:207
msgid "image"
msgstr "Immagine"
-#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474
+#: engine/core/admin.py:208 engine/core/graphene/object_types.py:527
msgid "images"
msgstr "Immagini"
-#: engine/core/admin.py:184 engine/core/models.py:566
+#: engine/core/admin.py:219 engine/core/models.py:587
msgid "stock"
msgstr "Stock"
-#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640
+#: engine/core/admin.py:220 engine/core/graphene/object_types.py:710
msgid "stocks"
msgstr "Le scorte"
-#: engine/core/admin.py:196 engine/core/models.py:1818
+#: engine/core/admin.py:231 engine/core/models.py:1930
msgid "order product"
msgstr "Ordina il prodotto"
-#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389
-#: engine/core/models.py:1819
+#: engine/core/admin.py:232 engine/core/graphene/object_types.py:438
+#: engine/core/models.py:1931
msgid "order products"
msgstr "Ordinare i prodotti"
-#: engine/core/admin.py:210 engine/core/admin.py:211
+#: engine/core/admin.py:250 engine/core/admin.py:251
msgid "children"
msgstr "I bambini"
-#: engine/core/admin.py:977
+#: engine/core/admin.py:1059
msgid "Config"
msgstr "Configurazione"
@@ -157,8 +156,7 @@ msgstr "Consegnato"
msgid "canceled"
msgstr "Annullato"
-#: engine/core/choices.py:8 engine/core/choices.py:16
-#: engine/core/choices.py:24
+#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24
msgid "failed"
msgstr "Fallito"
@@ -186,62 +184,63 @@ msgstr "Momentale"
msgid "successful"
msgstr "Successo"
-#: engine/core/docs/drf/views.py:31
+#: engine/core/docs/drf/views.py:30
msgid "OpenAPI schema in selected format with selected language"
msgstr "Schema OpenAPI nel formato selezionato con la lingua selezionata"
-#: engine/core/docs/drf/views.py:33
+#: engine/core/docs/drf/views.py:32
msgid ""
"OpenApi3 schema for this API. Format can be selected via content "
"negotiation. Language can be selected with Accept-Language and query "
"parameter both."
msgstr ""
-"Schema OpenApi3 per questa API. Il formato può essere selezionato tramite la"
-" negoziazione dei contenuti. La lingua può essere selezionata sia con "
-"Accept-Language che con il parametro query."
+"Schema OpenApi3 per questa API. Il formato può essere selezionato tramite la "
+"negoziazione dei contenuti. La lingua può essere selezionata sia con Accept-"
+"Language che con il parametro query."
-#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37
+#: engine/core/docs/drf/views.py:43 engine/core/graphene/mutations.py:37
msgid "cache I/O"
msgstr "I/O della cache"
-#: engine/core/docs/drf/views.py:46
+#: engine/core/docs/drf/views.py:45
msgid ""
"apply only a key to read permitted data from cache.\n"
"apply key, data and timeout with authentication to write data to cache."
msgstr ""
"Applicare solo una chiave per leggere i dati consentiti dalla cache.\n"
-"Applicare chiave, dati e timeout con autenticazione per scrivere dati nella cache."
+"Applicare chiave, dati e timeout con autenticazione per scrivere dati nella "
+"cache."
-#: engine/core/docs/drf/views.py:62
+#: engine/core/docs/drf/views.py:63
msgid "get a list of supported languages"
msgstr "Ottenere un elenco delle lingue supportate"
-#: engine/core/docs/drf/views.py:74
+#: engine/core/docs/drf/views.py:75
msgid "get application's exposable parameters"
msgstr "Ottenere i parametri esponibili dell'applicazione"
-#: engine/core/docs/drf/views.py:84
+#: engine/core/docs/drf/views.py:89
msgid "send a message to the support team"
msgstr "Inviate un messaggio al team di assistenza"
-#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57
+#: engine/core/docs/drf/views.py:103 engine/core/graphene/mutations.py:59
msgid "request a CORSed URL"
msgstr "Richiedere un URL CORSed. È consentito solo https."
-#: engine/core/docs/drf/views.py:112
+#: engine/core/docs/drf/views.py:119
msgid "Search between products, categories and brands"
msgstr "Ricerca tra prodotti, categorie e marchi"
-#: engine/core/docs/drf/views.py:130
+#: engine/core/docs/drf/views.py:141
msgid "global search endpoint to query across project's tables"
msgstr ""
"Endpoint di ricerca globale per interrogare tutte le tabelle del progetto"
-#: engine/core/docs/drf/views.py:139
+#: engine/core/docs/drf/views.py:150
msgid "purchase an order as a business"
msgstr "Acquistare un ordine come azienda"
-#: engine/core/docs/drf/views.py:146
+#: engine/core/docs/drf/views.py:158
msgid ""
"purchase an order as a business, using the provided `products` with "
"`product_uuid` and `attributes`."
@@ -249,264 +248,262 @@ msgstr ""
"Acquistare un ordine come azienda, utilizzando i `prodotti` forniti con "
"`product_uuid` e `attributi`."
-#: engine/core/docs/drf/views.py:164
+#: engine/core/docs/drf/views.py:177
msgid "download a digital asset from purchased digital order"
msgstr "scaricare un bene digitale da un ordine digitale acquistato"
-#: engine/core/docs/drf/viewsets.py:61
+#: engine/core/docs/drf/viewsets.py:65
msgid "list all attribute groups (simple view)"
msgstr "Elenco di tutti i gruppi di attributi (vista semplice)"
-#: engine/core/docs/drf/viewsets.py:68
+#: engine/core/docs/drf/viewsets.py:75
msgid "retrieve a single attribute group (detailed view)"
msgstr "Recuperare un singolo gruppo di attributi (vista dettagliata)"
-#: engine/core/docs/drf/viewsets.py:75
+#: engine/core/docs/drf/viewsets.py:82
msgid "create an attribute group"
msgstr "Creare un gruppo di attributi"
-#: engine/core/docs/drf/viewsets.py:82
+#: engine/core/docs/drf/viewsets.py:92
msgid "delete an attribute group"
msgstr "Cancellare un gruppo di attributi"
-#: engine/core/docs/drf/viewsets.py:89
+#: engine/core/docs/drf/viewsets.py:99
msgid "rewrite an existing attribute group saving non-editables"
msgstr ""
"Riscrivere un gruppo di attributi esistente salvando i non modificabili"
-#: engine/core/docs/drf/viewsets.py:96
-msgid ""
-"rewrite some fields of an existing attribute group saving non-editables"
+#: engine/core/docs/drf/viewsets.py:107
+msgid "rewrite some fields of an existing attribute group saving non-editables"
msgstr ""
"Riscrivere alcuni campi di un gruppo di attributi esistente salvando quelli "
"non modificabili"
-#: engine/core/docs/drf/viewsets.py:106
+#: engine/core/docs/drf/viewsets.py:118
msgid "list all attributes (simple view)"
msgstr "Elenco di tutti gli attributi (vista semplice)"
-#: engine/core/docs/drf/viewsets.py:113
+#: engine/core/docs/drf/viewsets.py:128
msgid "retrieve a single attribute (detailed view)"
msgstr "Recuperare un singolo attributo (vista dettagliata)"
-#: engine/core/docs/drf/viewsets.py:120
+#: engine/core/docs/drf/viewsets.py:135
msgid "create an attribute"
msgstr "Creare un attributo"
-#: engine/core/docs/drf/viewsets.py:127
+#: engine/core/docs/drf/viewsets.py:142
msgid "delete an attribute"
msgstr "Cancellare un attributo"
-#: engine/core/docs/drf/viewsets.py:134
+#: engine/core/docs/drf/viewsets.py:149
msgid "rewrite an existing attribute saving non-editables"
msgstr ""
"Riscrivere un attributo esistente salvando gli elementi non modificabili"
-#: engine/core/docs/drf/viewsets.py:141
+#: engine/core/docs/drf/viewsets.py:156
msgid "rewrite some fields of an existing attribute saving non-editables"
msgstr ""
"Riscrivere alcuni campi di un attributo esistente salvando i campi non "
"modificabili"
-#: engine/core/docs/drf/viewsets.py:151
+#: engine/core/docs/drf/viewsets.py:166
msgid "list all attribute values (simple view)"
msgstr "Elenco di tutti i valori degli attributi (vista semplice)"
-#: engine/core/docs/drf/viewsets.py:158
+#: engine/core/docs/drf/viewsets.py:176
msgid "retrieve a single attribute value (detailed view)"
msgstr "Recuperare il valore di un singolo attributo (vista dettagliata)"
-#: engine/core/docs/drf/viewsets.py:165
+#: engine/core/docs/drf/viewsets.py:183
msgid "create an attribute value"
msgstr "Creare un valore di attributo"
-#: engine/core/docs/drf/viewsets.py:172
+#: engine/core/docs/drf/viewsets.py:193
msgid "delete an attribute value"
msgstr "Cancellare il valore di un attributo"
-#: engine/core/docs/drf/viewsets.py:179
+#: engine/core/docs/drf/viewsets.py:200
msgid "rewrite an existing attribute value saving non-editables"
msgstr ""
"Riscrivere il valore di un attributo esistente salvando gli elementi non "
"modificabili"
-#: engine/core/docs/drf/viewsets.py:186
-msgid ""
-"rewrite some fields of an existing attribute value saving non-editables"
+#: engine/core/docs/drf/viewsets.py:208
+msgid "rewrite some fields of an existing attribute value saving non-editables"
msgstr ""
"Riscrivere alcuni campi di un valore di attributo esistente salvando i "
"valori non modificabili"
-#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197
+#: engine/core/docs/drf/viewsets.py:219 engine/core/docs/drf/viewsets.py:220
msgid "list all categories (simple view)"
msgstr "Elenco di tutte le categorie (visualizzazione semplice)"
-#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205
+#: engine/core/docs/drf/viewsets.py:230 engine/core/docs/drf/viewsets.py:231
msgid "retrieve a single category (detailed view)"
msgstr "Recuperare una singola categoria (vista dettagliata)"
-#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258
+#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:286
msgid "Category UUID or slug"
msgstr "UUID o slug della categoria"
-#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221
+#: engine/core/docs/drf/viewsets.py:246 engine/core/docs/drf/viewsets.py:247
msgid "create a category"
msgstr "Creare una categoria"
-#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229
+#: engine/core/docs/drf/viewsets.py:254 engine/core/docs/drf/viewsets.py:255
msgid "delete a category"
msgstr "Eliminare una categoria"
-#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237
+#: engine/core/docs/drf/viewsets.py:262 engine/core/docs/drf/viewsets.py:263
msgid "rewrite an existing category saving non-editables"
msgstr ""
"Riscrivere una categoria esistente salvando gli elementi non modificabili"
-#: engine/core/docs/drf/viewsets.py:244 engine/core/docs/drf/viewsets.py:245
+#: engine/core/docs/drf/viewsets.py:270 engine/core/docs/drf/viewsets.py:272
msgid "rewrite some fields of an existing category saving non-editables"
msgstr ""
-"Riscrivere alcuni campi di una categoria esistente salvando gli elementi non"
-" modificabili"
+"Riscrivere alcuni campi di una categoria esistente salvando gli elementi non "
+"modificabili"
-#: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704
-#: engine/core/docs/drf/viewsets.py:988
+#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:1046
#: engine/core/graphene/object_types.py:117
-#: engine/core/graphene/object_types.py:207
-#: engine/core/graphene/object_types.py:482
+#: engine/core/graphene/object_types.py:236
+#: engine/core/graphene/object_types.py:537
msgid "SEO Meta snapshot"
msgstr "Meta-immagine SEO"
-#: engine/core/docs/drf/viewsets.py:253
+#: engine/core/docs/drf/viewsets.py:281
msgid "returns a snapshot of the category's SEO meta data"
msgstr "Restituisce un'istantanea dei meta-dati SEO della categoria."
-#: engine/core/docs/drf/viewsets.py:274
+#: engine/core/docs/drf/viewsets.py:302
msgid "list all orders (simple view)"
msgstr "Elenco di tutte le categorie (visualizzazione semplice)"
-#: engine/core/docs/drf/viewsets.py:275
+#: engine/core/docs/drf/viewsets.py:303
msgid "for non-staff users, only their own orders are returned."
msgstr ""
"Per gli utenti che non fanno parte del personale, vengono restituiti solo i "
"loro ordini."
-#: engine/core/docs/drf/viewsets.py:281
+#: engine/core/docs/drf/viewsets.py:309
msgid ""
-"Case-insensitive substring search across human_readable_id, "
-"order_products.product.name, and order_products.product.partnumber"
+"Case-insensitive substring search across human_readable_id, order_products."
+"product.name, and order_products.product.partnumber"
msgstr ""
"Ricerca di sottostringhe senza distinzione di maiuscole e minuscole tra "
-"human_readable_id, order_products.product.name e "
-"order_products.product.partnumber"
+"human_readable_id, order_products.product.name e order_products.product."
+"partnumber"
-#: engine/core/docs/drf/viewsets.py:288
+#: engine/core/docs/drf/viewsets.py:316
msgid "Filter orders with buy_time >= this ISO 8601 datetime"
msgstr "Filtra gli ordini con buy_time >= questa data ISO 8601"
-#: engine/core/docs/drf/viewsets.py:293
+#: engine/core/docs/drf/viewsets.py:321
msgid "Filter orders with buy_time <= this ISO 8601 datetime"
msgstr "Filtra gli ordini con buy_time <= questa data ISO 8601"
-#: engine/core/docs/drf/viewsets.py:298
+#: engine/core/docs/drf/viewsets.py:326
msgid "Filter by exact order UUID"
msgstr "Filtrare per UUID dell'ordine esatto"
-#: engine/core/docs/drf/viewsets.py:303
+#: engine/core/docs/drf/viewsets.py:331
msgid "Filter by exact human-readable order ID"
msgstr "Filtrare in base all'ID esatto dell'ordine leggibile dall'uomo"
-#: engine/core/docs/drf/viewsets.py:308
+#: engine/core/docs/drf/viewsets.py:336
msgid "Filter by user's email (case-insensitive exact match)"
msgstr ""
"Filtro per e-mail dell'utente (corrispondenza esatta senza distinzione tra "
"maiuscole e minuscole)"
-#: engine/core/docs/drf/viewsets.py:313
+#: engine/core/docs/drf/viewsets.py:341
msgid "Filter by user's UUID"
msgstr "Filtrare per UUID dell'utente"
-#: engine/core/docs/drf/viewsets.py:318
+#: engine/core/docs/drf/viewsets.py:347
msgid "Filter by order status (case-insensitive substring match)"
msgstr ""
"Filtrare per stato dell'ordine (corrispondenza di sottostringhe senza "
"distinzione tra maiuscole e minuscole)"
-#: engine/core/docs/drf/viewsets.py:324
+#: engine/core/docs/drf/viewsets.py:354
msgid ""
-"Order by one of: uuid, human_readable_id, user_email, user, status, created,"
-" modified, buy_time, random. Prefix with '-' for descending (e.g. "
-"'-buy_time')."
+"Order by one of: uuid, human_readable_id, user_email, user, status, created, "
+"modified, buy_time, random. Prefix with '-' for descending (e.g. '-"
+"buy_time')."
msgstr ""
"Ordinare per uno dei seguenti criteri: uuid, human_readable_id, user_email, "
"user, status, created, modified, buy_time, random. Prefisso con '-' per la "
"decrescita (ad esempio, '-buy_time')."
-#: engine/core/docs/drf/viewsets.py:336
+#: engine/core/docs/drf/viewsets.py:366
msgid "retrieve a single order (detailed view)"
msgstr "Recuperare una singola categoria (vista dettagliata)"
-#: engine/core/docs/drf/viewsets.py:341
+#: engine/core/docs/drf/viewsets.py:371
msgid "Order UUID or human-readable id"
msgstr "UUID dell'ordine o id leggibile dall'uomo"
-#: engine/core/docs/drf/viewsets.py:351
+#: engine/core/docs/drf/viewsets.py:381
msgid "create an order"
msgstr "Creare un attributo"
-#: engine/core/docs/drf/viewsets.py:352
+#: engine/core/docs/drf/viewsets.py:382
msgid "doesn't work for non-staff users."
msgstr "Non funziona per gli utenti che non fanno parte del personale."
-#: engine/core/docs/drf/viewsets.py:359
+#: engine/core/docs/drf/viewsets.py:389
msgid "delete an order"
msgstr "Cancellare un attributo"
-#: engine/core/docs/drf/viewsets.py:366
+#: engine/core/docs/drf/viewsets.py:396
msgid "rewrite an existing order saving non-editables"
msgstr ""
"Riscrivere una categoria esistente salvando gli elementi non modificabili"
-#: engine/core/docs/drf/viewsets.py:373
+#: engine/core/docs/drf/viewsets.py:403
msgid "rewrite some fields of an existing order saving non-editables"
msgstr ""
-"Riscrivere alcuni campi di una categoria esistente salvando gli elementi non"
-" modificabili"
+"Riscrivere alcuni campi di una categoria esistente salvando gli elementi non "
+"modificabili"
-#: engine/core/docs/drf/viewsets.py:380
+#: engine/core/docs/drf/viewsets.py:410
msgid "purchase an order"
msgstr "Prezzo di acquisto al momento dell'ordine"
-#: engine/core/docs/drf/viewsets.py:382
+#: engine/core/docs/drf/viewsets.py:412
msgid ""
"finalizes the order purchase. if `force_balance` is used, the purchase is "
"completed using the user's balance; if `force_payment` is used, a "
"transaction is initiated."
msgstr ""
"Finalizza l'acquisto dell'ordine. Se si utilizza `forza_bilancio`, "
-"l'acquisto viene completato utilizzando il saldo dell'utente; se si utilizza"
-" `forza_pagamento`, viene avviata una transazione."
+"l'acquisto viene completato utilizzando il saldo dell'utente; se si utilizza "
+"`forza_pagamento`, viene avviata una transazione."
-#: engine/core/docs/drf/viewsets.py:397
+#: engine/core/docs/drf/viewsets.py:427
msgid "retrieve current pending order of a user"
msgstr "recuperare l'ordine in corso di un utente"
-#: engine/core/docs/drf/viewsets.py:398
+#: engine/core/docs/drf/viewsets.py:428
msgid "retrieves a current pending order of an authenticated user"
msgstr "recupera un ordine in sospeso di un utente autenticato"
-#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334
+#: engine/core/docs/drf/viewsets.py:438 engine/core/graphene/mutations.py:354
msgid "purchase an order without account creation"
msgstr "acquistare un ordine senza creare un account"
-#: engine/core/docs/drf/viewsets.py:409
+#: engine/core/docs/drf/viewsets.py:439
msgid "finalizes the order purchase for a non-registered user."
msgstr "finalizza l'acquisto dell'ordine per un utente non registrato."
-#: engine/core/docs/drf/viewsets.py:420
+#: engine/core/docs/drf/viewsets.py:450
msgid "add product to order"
msgstr "Aggiungere un prodotto all'ordine"
-#: engine/core/docs/drf/viewsets.py:421
+#: engine/core/docs/drf/viewsets.py:452
msgid ""
"adds a product to an order using the provided `product_uuid` and "
"`attributes`."
@@ -514,13 +511,13 @@ msgstr ""
"Aggiunge un prodotto a un ordine utilizzando il `product_uuid` e gli "
"`attributi` forniti."
-#: engine/core/docs/drf/viewsets.py:429
+#: engine/core/docs/drf/viewsets.py:461
msgid "add a list of products to order, quantities will not count"
msgstr ""
"Aggiungete un elenco di prodotti da ordinare, le quantità non vengono "
"conteggiate"
-#: engine/core/docs/drf/viewsets.py:430
+#: engine/core/docs/drf/viewsets.py:463
msgid ""
"adds a list of products to an order using the provided `product_uuid` and "
"`attributes`."
@@ -528,11 +525,11 @@ msgstr ""
"Aggiunge un elenco di prodotti a un ordine, utilizzando il `product_uuid` e "
"gli `attributi` forniti."
-#: engine/core/docs/drf/viewsets.py:438
+#: engine/core/docs/drf/viewsets.py:472
msgid "remove product from order"
msgstr "Rimuovere un prodotto dall'ordine"
-#: engine/core/docs/drf/viewsets.py:439
+#: engine/core/docs/drf/viewsets.py:474
msgid ""
"removes a product from an order using the provided `product_uuid` and "
"`attributes`."
@@ -540,12 +537,12 @@ msgstr ""
"Rimuove un prodotto da un ordine utilizzando il `product_uuid` e gli "
"`attributi` forniti."
-#: engine/core/docs/drf/viewsets.py:447
+#: engine/core/docs/drf/viewsets.py:483
msgid "remove product from order, quantities will not count"
msgstr ""
"Rimuovete un prodotto dall'ordine, le quantità non verranno conteggiate"
-#: engine/core/docs/drf/viewsets.py:448
+#: engine/core/docs/drf/viewsets.py:485
msgid ""
"removes a list of products from an order using the provided `product_uuid` "
"and `attributes`"
@@ -553,731 +550,741 @@ msgstr ""
"Rimuove un elenco di prodotti da un ordine utilizzando il `product_uuid` e "
"gli `attributi` forniti."
-#: engine/core/docs/drf/viewsets.py:459
+#: engine/core/docs/drf/viewsets.py:497
msgid "list all wishlists (simple view)"
msgstr "Elenco di tutti gli attributi (vista semplice)"
-#: engine/core/docs/drf/viewsets.py:460
+#: engine/core/docs/drf/viewsets.py:498
msgid "for non-staff users, only their own wishlists are returned."
msgstr ""
-"Per gli utenti che non fanno parte del personale, vengono restituite solo le"
-" loro liste dei desideri."
+"Per gli utenti che non fanno parte del personale, vengono restituite solo le "
+"loro liste dei desideri."
-#: engine/core/docs/drf/viewsets.py:467
+#: engine/core/docs/drf/viewsets.py:508
msgid "retrieve a single wishlist (detailed view)"
msgstr "Recuperare un singolo attributo (vista dettagliata)"
-#: engine/core/docs/drf/viewsets.py:474
+#: engine/core/docs/drf/viewsets.py:515
msgid "create an wishlist"
msgstr "Creare un attributo"
-#: engine/core/docs/drf/viewsets.py:475
+#: engine/core/docs/drf/viewsets.py:516
msgid "Doesn't work for non-staff users."
msgstr "Non funziona per gli utenti che non fanno parte del personale."
-#: engine/core/docs/drf/viewsets.py:482
+#: engine/core/docs/drf/viewsets.py:523
msgid "delete an wishlist"
msgstr "Cancellare un attributo"
-#: engine/core/docs/drf/viewsets.py:489
+#: engine/core/docs/drf/viewsets.py:530
msgid "rewrite an existing wishlist saving non-editables"
msgstr ""
"Riscrivere un attributo esistente salvando gli elementi non modificabili"
-#: engine/core/docs/drf/viewsets.py:496
+#: engine/core/docs/drf/viewsets.py:537
msgid "rewrite some fields of an existing wishlist saving non-editables"
msgstr ""
"Riscrivere alcuni campi di un attributo esistente salvando i campi non "
"modificabili"
-#: engine/core/docs/drf/viewsets.py:503
+#: engine/core/docs/drf/viewsets.py:544
msgid "retrieve current pending wishlist of a user"
msgstr "recuperare la lista dei desideri in sospeso di un utente"
-#: engine/core/docs/drf/viewsets.py:504
+#: engine/core/docs/drf/viewsets.py:545
msgid "retrieves a current pending wishlist of an authenticated user"
msgstr "recupera la lista dei desideri in corso di un utente autenticato"
-#: engine/core/docs/drf/viewsets.py:514
+#: engine/core/docs/drf/viewsets.py:555
msgid "add product to wishlist"
msgstr "Aggiungere un prodotto all'ordine"
-#: engine/core/docs/drf/viewsets.py:515
+#: engine/core/docs/drf/viewsets.py:557
msgid "adds a product to an wishlist using the provided `product_uuid`"
msgstr ""
"Aggiunge un prodotto a una lista dei desideri utilizzando il `product_uuid` "
"fornito."
-#: engine/core/docs/drf/viewsets.py:523
+#: engine/core/docs/drf/viewsets.py:566
msgid "remove product from wishlist"
msgstr "Rimuovere un prodotto dalla lista dei desideri"
-#: engine/core/docs/drf/viewsets.py:524
+#: engine/core/docs/drf/viewsets.py:568
msgid "removes a product from an wishlist using the provided `product_uuid`"
msgstr ""
"Rimuove un prodotto da una wishlist utilizzando il `product_uuid` fornito."
-#: engine/core/docs/drf/viewsets.py:532
+#: engine/core/docs/drf/viewsets.py:577
msgid "add many products to wishlist"
msgstr "Aggiungere molti prodotti alla lista dei desideri"
-#: engine/core/docs/drf/viewsets.py:533
+#: engine/core/docs/drf/viewsets.py:579
msgid "adds many products to an wishlist using the provided `product_uuids`"
msgstr ""
"Aggiunge molti prodotti a una lista dei desideri utilizzando i "
"`product_uuids` forniti."
-#: engine/core/docs/drf/viewsets.py:541
+#: engine/core/docs/drf/viewsets.py:588
msgid "remove many products from wishlist"
msgstr "Rimuovere un prodotto dall'ordine"
-#: engine/core/docs/drf/viewsets.py:542
+#: engine/core/docs/drf/viewsets.py:590
msgid ""
"removes many products from an wishlist using the provided `product_uuids`"
msgstr ""
"Rimuove molti prodotti da una lista di desideri utilizzando i "
"`product_uuids` forniti."
-#: engine/core/docs/drf/viewsets.py:549
+#: engine/core/docs/drf/viewsets.py:598
msgid ""
"Filter by one or more attribute name/value pairs. \n"
"• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n"
-"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n"
-"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n"
+"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, "
+"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, "
+"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n"
+"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), "
+"`true`/`false` for booleans, integers, floats; otherwise treated as "
+"string. \n"
"• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n"
"Examples: \n"
-"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n"
+"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\","
+"\"bluetooth\"]`, \n"
"`b64-description=icontains-aGVhdC1jb2xk`"
msgstr ""
"Filtrare in base a una o più coppie nome/valore dell'attributo. \n"
"- **Sintassi**: `nome_attraverso=metodo-valore[;attr2=metodo2-valore2]...`\n"
-"- **Metodi** (predefiniti a `icontains` se omessi): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`.\n"
-"- **Tipo di valore**: JSON viene tentato per primo (in modo da poter passare liste/dict), `true`/`false` per booleani, interi, float; altrimenti viene trattato come stringa. \n"
-"- **Base64**: prefisso con `b64-` per codificare in base64 il valore grezzo. \n"
+"- **Metodi** (predefiniti a `icontains` se omessi): `iexact`, `exact`, "
+"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, "
+"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`.\n"
+"- **Tipo di valore**: JSON viene tentato per primo (in modo da poter passare "
+"liste/dict), `true`/`false` per booleani, interi, float; altrimenti viene "
+"trattato come stringa. \n"
+"- **Base64**: prefisso con `b64-` per codificare in base64 il valore "
+"grezzo. \n"
"Esempi: \n"
"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\", \"bluetooth\"]`,\n"
"`b64-description=icontains-aGVhdC1jb2xk`"
-#: engine/core/docs/drf/viewsets.py:568 engine/core/docs/drf/viewsets.py:569
+#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
msgid "list all products (simple view)"
msgstr "Elenco di tutti i prodotti (visualizzazione semplice)"
-#: engine/core/docs/drf/viewsets.py:574
+#: engine/core/docs/drf/viewsets.py:623
msgid "(exact) Product UUID"
msgstr "(esatto) UUID del prodotto"
-#: engine/core/docs/drf/viewsets.py:581
+#: engine/core/docs/drf/viewsets.py:630
msgid ""
-"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n"
+"Comma-separated list of fields to sort by. Prefix with `-` for "
+"descending. \n"
"**Allowed:** uuid, rating, name, slug, created, modified, price, random"
msgstr ""
-"Elenco separato da virgole dei campi da ordinare. Prefisso con `-` per l'ordinamento discendente. \n"
+"Elenco separato da virgole dei campi da ordinare. Prefisso con `-` per "
+"l'ordinamento discendente. \n"
"**Consentito:** uuid, rating, nome, slug, creato, modificato, prezzo, casuale"
-#: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599
+#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
msgid "retrieve a single product (detailed view)"
msgstr "Recuperare un singolo prodotto (vista dettagliata)"
-#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634
-#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672
-#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710
+#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683
+#: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725
+#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763
msgid "Product UUID or slug"
msgstr "UUID o Slug del prodotto"
-#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
+#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
#: engine/core/graphene/dashboard_mutations/product.py:80
#: engine/core/graphene/dashboard_mutations/product.py:118
#: engine/core/graphene/dashboard_mutations/product.py:166
msgid "create a product"
msgstr "Creare un prodotto"
-#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629
+#: engine/core/docs/drf/viewsets.py:677 engine/core/docs/drf/viewsets.py:678
msgid "rewrite an existing product, preserving non-editable fields"
-msgstr ""
-"Riscrivere un prodotto esistente, preservando i campi non modificabili"
+msgstr "Riscrivere un prodotto esistente, preservando i campi non modificabili"
-#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
+#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:700
msgid ""
"update some fields of an existing product, preserving non-editable fields"
msgstr ""
"Aggiornare alcuni campi di un prodotto esistente, preservando i campi non "
"modificabili"
-#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
+#: engine/core/docs/drf/viewsets.py:719 engine/core/docs/drf/viewsets.py:720
msgid "delete a product"
msgstr "Eliminare un prodotto"
-#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686
+#: engine/core/docs/drf/viewsets.py:738 engine/core/docs/drf/viewsets.py:739
msgid "lists all permitted feedbacks for a product"
msgstr "elenca tutti i feedback consentiti per un prodotto"
-#: engine/core/docs/drf/viewsets.py:705
+#: engine/core/docs/drf/viewsets.py:758
msgid "returns a snapshot of the product's SEO meta data"
msgstr "Restituisce un'istantanea dei meta-dati SEO del prodotto."
-#: engine/core/docs/drf/viewsets.py:726
+#: engine/core/docs/drf/viewsets.py:779
msgid "list all addresses"
msgstr "Elenco di tutti gli indirizzi"
-#: engine/core/docs/drf/viewsets.py:736
+#: engine/core/docs/drf/viewsets.py:789
msgid "retrieve a single address"
msgstr "Recuperare un singolo indirizzo"
-#: engine/core/docs/drf/viewsets.py:746
+#: engine/core/docs/drf/viewsets.py:799
msgid "create a new address"
msgstr "Creare un nuovo indirizzo"
-#: engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:810
msgid "delete an address"
msgstr "Cancellare un indirizzo"
-#: engine/core/docs/drf/viewsets.py:767
+#: engine/core/docs/drf/viewsets.py:820
msgid "update an entire address"
msgstr "Aggiornare un intero indirizzo"
-#: engine/core/docs/drf/viewsets.py:778
+#: engine/core/docs/drf/viewsets.py:831
msgid "partially update an address"
msgstr "Aggiornare parzialmente un indirizzo"
-#: engine/core/docs/drf/viewsets.py:789
+#: engine/core/docs/drf/viewsets.py:842
msgid "autocomplete address suggestions"
msgstr "Inserimento automatico dell'indirizzo"
-#: engine/core/docs/drf/viewsets.py:794
+#: engine/core/docs/drf/viewsets.py:848
msgid "raw data query string, please append with data from geo-IP endpoint"
msgstr ""
"Stringa di query dei dati grezzi, da aggiungere ai dati dell'endpoint geo-IP"
-#: engine/core/docs/drf/viewsets.py:800
+#: engine/core/docs/drf/viewsets.py:855
msgid "limit the results amount, 1 < limit < 10, default: 5"
msgstr "limita la quantità di risultati, 1 < limite < 10, default: 5"
-#: engine/core/docs/drf/viewsets.py:816
+#: engine/core/docs/drf/viewsets.py:871
msgid "list all feedbacks (simple view)"
msgstr "elencare tutti i feedback (vista semplice)"
-#: engine/core/docs/drf/viewsets.py:823
+#: engine/core/docs/drf/viewsets.py:881
msgid "retrieve a single feedback (detailed view)"
msgstr "recuperare un singolo feedback (vista dettagliata)"
-#: engine/core/docs/drf/viewsets.py:830
+#: engine/core/docs/drf/viewsets.py:888
msgid "create a feedback"
msgstr "creare un feedback"
-#: engine/core/docs/drf/viewsets.py:837
+#: engine/core/docs/drf/viewsets.py:895
msgid "delete a feedback"
msgstr "eliminare un feedback"
-#: engine/core/docs/drf/viewsets.py:844
+#: engine/core/docs/drf/viewsets.py:902
msgid "rewrite an existing feedback saving non-editables"
msgstr ""
"Riscrivere una categoria esistente salvando gli elementi non modificabili"
-#: engine/core/docs/drf/viewsets.py:851
+#: engine/core/docs/drf/viewsets.py:909
msgid "rewrite some fields of an existing feedback saving non-editables"
msgstr ""
-"Riscrivere alcuni campi di una categoria esistente salvando gli elementi non"
-" modificabili"
+"Riscrivere alcuni campi di una categoria esistente salvando gli elementi non "
+"modificabili"
-#: engine/core/docs/drf/viewsets.py:861
+#: engine/core/docs/drf/viewsets.py:919
msgid "list all order–product relations (simple view)"
msgstr "elencare tutte le relazioni ordine-prodotto (vista semplice)"
-#: engine/core/docs/drf/viewsets.py:871
+#: engine/core/docs/drf/viewsets.py:929
msgid "retrieve a single order–product relation (detailed view)"
msgstr "recuperare una singola relazione ordine-prodotto (vista dettagliata)"
-#: engine/core/docs/drf/viewsets.py:881
+#: engine/core/docs/drf/viewsets.py:939
msgid "create a new order–product relation"
msgstr "creare una nuova relazione ordine-prodotto"
-#: engine/core/docs/drf/viewsets.py:891
+#: engine/core/docs/drf/viewsets.py:949
msgid "replace an existing order–product relation"
msgstr "sostituire una relazione ordine-prodotto esistente"
-#: engine/core/docs/drf/viewsets.py:901
+#: engine/core/docs/drf/viewsets.py:959
msgid "partially update an existing order–product relation"
msgstr "aggiornare parzialmente una relazione ordine-prodotto esistente"
-#: engine/core/docs/drf/viewsets.py:911
+#: engine/core/docs/drf/viewsets.py:969
msgid "delete an order–product relation"
msgstr "eliminare una relazione ordine-prodotto"
-#: engine/core/docs/drf/viewsets.py:921
+#: engine/core/docs/drf/viewsets.py:979
msgid "add or remove feedback on an order–product relation"
msgstr "aggiungere o rimuovere un feedback su una relazione ordine-prodotto"
-#: engine/core/docs/drf/viewsets.py:938
+#: engine/core/docs/drf/viewsets.py:996
msgid "list all brands (simple view)"
msgstr "Elenco di tutti i marchi (visualizzazione semplice)"
-#: engine/core/docs/drf/viewsets.py:945
+#: engine/core/docs/drf/viewsets.py:1003
msgid "retrieve a single brand (detailed view)"
msgstr "Recuperare un singolo marchio (vista dettagliata)"
-#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993
+#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051
msgid "Brand UUID or slug"
msgstr "UUID o slug del marchio"
-#: engine/core/docs/drf/viewsets.py:960
+#: engine/core/docs/drf/viewsets.py:1018
msgid "create a brand"
msgstr "Creare un marchio"
-#: engine/core/docs/drf/viewsets.py:967
+#: engine/core/docs/drf/viewsets.py:1025
msgid "delete a brand"
msgstr "Eliminare un marchio"
-#: engine/core/docs/drf/viewsets.py:974
+#: engine/core/docs/drf/viewsets.py:1032
msgid "rewrite an existing brand saving non-editables"
msgstr ""
"Riscrivere una categoria esistente salvando gli elementi non modificabili"
-#: engine/core/docs/drf/viewsets.py:981
+#: engine/core/docs/drf/viewsets.py:1039
msgid "rewrite some fields of an existing brand saving non-editables"
msgstr ""
-"Riscrivere alcuni campi di una categoria esistente salvando gli elementi non"
-" modificabili"
+"Riscrivere alcuni campi di una categoria esistente salvando gli elementi non "
+"modificabili"
-#: engine/core/docs/drf/viewsets.py:1006
+#: engine/core/docs/drf/viewsets.py:1064
msgid "list all vendors (simple view)"
msgstr "Elenco di tutti i fornitori (vista semplice)"
-#: engine/core/docs/drf/viewsets.py:1013
+#: engine/core/docs/drf/viewsets.py:1074
msgid "retrieve a single vendor (detailed view)"
msgstr "Recuperare un singolo fornitore (vista dettagliata)"
-#: engine/core/docs/drf/viewsets.py:1020
+#: engine/core/docs/drf/viewsets.py:1081
msgid "create a vendor"
msgstr "Create a vendor"
-#: engine/core/docs/drf/viewsets.py:1027
+#: engine/core/docs/drf/viewsets.py:1088
msgid "delete a vendor"
msgstr "Eliminare un fornitore"
-#: engine/core/docs/drf/viewsets.py:1034
+#: engine/core/docs/drf/viewsets.py:1095
msgid "rewrite an existing vendor saving non-editables"
msgstr ""
"Riscrivere una categoria esistente salvando gli elementi non modificabili"
-#: engine/core/docs/drf/viewsets.py:1041
+#: engine/core/docs/drf/viewsets.py:1102
msgid "rewrite some fields of an existing vendor saving non-editables"
msgstr ""
-"Riscrivere alcuni campi di una categoria esistente salvando gli elementi non"
-" modificabili"
+"Riscrivere alcuni campi di una categoria esistente salvando gli elementi non "
+"modificabili"
-#: engine/core/docs/drf/viewsets.py:1051
+#: engine/core/docs/drf/viewsets.py:1112
msgid "list all product images (simple view)"
msgstr "Elenco di tutte le immagini dei prodotti (visualizzazione semplice)"
-#: engine/core/docs/drf/viewsets.py:1058
+#: engine/core/docs/drf/viewsets.py:1122
msgid "retrieve a single product image (detailed view)"
msgstr "Recuperare l'immagine di un singolo prodotto (vista dettagliata)"
-#: engine/core/docs/drf/viewsets.py:1065
+#: engine/core/docs/drf/viewsets.py:1129
msgid "create a product image"
msgstr "Creare un'immagine del prodotto"
-#: engine/core/docs/drf/viewsets.py:1072
+#: engine/core/docs/drf/viewsets.py:1139
msgid "delete a product image"
msgstr "Eliminare l'immagine di un prodotto"
-#: engine/core/docs/drf/viewsets.py:1079
+#: engine/core/docs/drf/viewsets.py:1146
msgid "rewrite an existing product image saving non-editables"
msgstr ""
"Riscrivere una categoria esistente salvando gli elementi non modificabili"
-#: engine/core/docs/drf/viewsets.py:1086
+#: engine/core/docs/drf/viewsets.py:1154
msgid "rewrite some fields of an existing product image saving non-editables"
msgstr ""
-"Riscrivere alcuni campi di una categoria esistente salvando gli elementi non"
-" modificabili"
+"Riscrivere alcuni campi di una categoria esistente salvando gli elementi non "
+"modificabili"
-#: engine/core/docs/drf/viewsets.py:1096
+#: engine/core/docs/drf/viewsets.py:1165
msgid "list all promo codes (simple view)"
msgstr "Elenco di tutti i codici promozionali (visualizzazione semplice)"
-#: engine/core/docs/drf/viewsets.py:1103
+#: engine/core/docs/drf/viewsets.py:1175
msgid "retrieve a single promo code (detailed view)"
msgstr "Recuperare un singolo codice promozionale (vista dettagliata)"
-#: engine/core/docs/drf/viewsets.py:1110
+#: engine/core/docs/drf/viewsets.py:1182
msgid "create a promo code"
msgstr "Create a promo code"
-#: engine/core/docs/drf/viewsets.py:1117
+#: engine/core/docs/drf/viewsets.py:1189
msgid "delete a promo code"
msgstr "Cancellare un codice promozionale"
-#: engine/core/docs/drf/viewsets.py:1124
+#: engine/core/docs/drf/viewsets.py:1196
msgid "rewrite an existing promo code saving non-editables"
msgstr ""
"Riscrivere una categoria esistente salvando gli elementi non modificabili"
-#: engine/core/docs/drf/viewsets.py:1131
+#: engine/core/docs/drf/viewsets.py:1203
msgid "rewrite some fields of an existing promo code saving non-editables"
msgstr ""
-"Riscrivere alcuni campi di una categoria esistente salvando gli elementi non"
-" modificabili"
+"Riscrivere alcuni campi di una categoria esistente salvando gli elementi non "
+"modificabili"
-#: engine/core/docs/drf/viewsets.py:1141
+#: engine/core/docs/drf/viewsets.py:1213
msgid "list all promotions (simple view)"
msgstr "Elenco di tutte le promozioni (visualizzazione semplice)"
-#: engine/core/docs/drf/viewsets.py:1148
+#: engine/core/docs/drf/viewsets.py:1223
msgid "retrieve a single promotion (detailed view)"
msgstr "Recuperare una singola promozione (vista dettagliata)"
-#: engine/core/docs/drf/viewsets.py:1155
+#: engine/core/docs/drf/viewsets.py:1230
msgid "create a promotion"
msgstr "Creare una promozione"
-#: engine/core/docs/drf/viewsets.py:1162
+#: engine/core/docs/drf/viewsets.py:1237
msgid "delete a promotion"
msgstr "Eliminare una promozione"
-#: engine/core/docs/drf/viewsets.py:1169
+#: engine/core/docs/drf/viewsets.py:1244
msgid "rewrite an existing promotion saving non-editables"
msgstr ""
"Riscrivere una categoria esistente salvando gli elementi non modificabili"
-#: engine/core/docs/drf/viewsets.py:1176
+#: engine/core/docs/drf/viewsets.py:1251
msgid "rewrite some fields of an existing promotion saving non-editables"
msgstr ""
-"Riscrivere alcuni campi di una categoria esistente salvando gli elementi non"
-" modificabili"
+"Riscrivere alcuni campi di una categoria esistente salvando gli elementi non "
+"modificabili"
-#: engine/core/docs/drf/viewsets.py:1186
+#: engine/core/docs/drf/viewsets.py:1261
msgid "list all stocks (simple view)"
msgstr "Elenco di tutti i titoli (vista semplice)"
-#: engine/core/docs/drf/viewsets.py:1193
+#: engine/core/docs/drf/viewsets.py:1268
msgid "retrieve a single stock (detailed view)"
msgstr "Recuperare un singolo titolo (vista dettagliata)"
-#: engine/core/docs/drf/viewsets.py:1200
+#: engine/core/docs/drf/viewsets.py:1275
msgid "create a stock record"
msgstr "Creare un record di magazzino"
-#: engine/core/docs/drf/viewsets.py:1207
+#: engine/core/docs/drf/viewsets.py:1282
msgid "delete a stock record"
msgstr "Cancellare un record di magazzino"
-#: engine/core/docs/drf/viewsets.py:1214
+#: engine/core/docs/drf/viewsets.py:1289
msgid "rewrite an existing stock record saving non-editables"
msgstr ""
"Riscrivere una categoria esistente salvando gli elementi non modificabili"
-#: engine/core/docs/drf/viewsets.py:1221
+#: engine/core/docs/drf/viewsets.py:1297
msgid "rewrite some fields of an existing stock record saving non-editables"
msgstr ""
-"Riscrivere alcuni campi di una categoria esistente salvando gli elementi non"
-" modificabili"
+"Riscrivere alcuni campi di una categoria esistente salvando gli elementi non "
+"modificabili"
-#: engine/core/docs/drf/viewsets.py:1231
+#: engine/core/docs/drf/viewsets.py:1308
msgid "list all product tags (simple view)"
msgstr "Elenco di tutti i tag dei prodotti (vista semplice)"
-#: engine/core/docs/drf/viewsets.py:1238
+#: engine/core/docs/drf/viewsets.py:1318
msgid "retrieve a single product tag (detailed view)"
msgstr "Recuperare un singolo tag di prodotto (vista dettagliata)"
-#: engine/core/docs/drf/viewsets.py:1245
+#: engine/core/docs/drf/viewsets.py:1325
msgid "create a product tag"
msgstr "Creare un'etichetta di prodotto"
-#: engine/core/docs/drf/viewsets.py:1252
+#: engine/core/docs/drf/viewsets.py:1335
msgid "delete a product tag"
msgstr "Eliminare un tag di prodotto"
-#: engine/core/docs/drf/viewsets.py:1259
+#: engine/core/docs/drf/viewsets.py:1342
msgid "rewrite an existing product tag saving non-editables"
msgstr ""
"Riscrivere una categoria esistente salvando gli elementi non modificabili"
-#: engine/core/docs/drf/viewsets.py:1266
+#: engine/core/docs/drf/viewsets.py:1350
msgid "rewrite some fields of an existing product tag saving non-editables"
msgstr ""
-"Riscrivere alcuni campi di una categoria esistente salvando gli elementi non"
-" modificabili"
+"Riscrivere alcuni campi di una categoria esistente salvando gli elementi non "
+"modificabili"
-#: engine/core/elasticsearch/__init__.py:122
-#: engine/core/elasticsearch/__init__.py:570
+#: engine/core/elasticsearch/__init__.py:127
+#: engine/core/elasticsearch/__init__.py:627
msgid "no search term provided."
msgstr "Non è stato fornito alcun termine di ricerca."
-#: engine/core/filters.py:69 engine/core/filters.py:426
-#: engine/core/filters.py:553
+#: engine/core/filters.py:78 engine/core/filters.py:484
+#: engine/core/filters.py:625
msgid "Search"
msgstr "Ricerca"
-#: engine/core/filters.py:70 engine/core/filters.py:583
-#: engine/core/filters.py:612
+#: engine/core/filters.py:79 engine/core/filters.py:662
+#: engine/core/filters.py:691
msgid "UUID"
msgstr "UUID"
-#: engine/core/filters.py:71 engine/core/filters.py:428
-#: engine/core/filters.py:555
+#: engine/core/filters.py:80 engine/core/filters.py:487
+#: engine/core/filters.py:627
msgid "Name"
msgstr "Nome"
-#: engine/core/filters.py:72 engine/core/filters.py:557
+#: engine/core/filters.py:82 engine/core/filters.py:630
msgid "Categories"
msgstr "Categorie"
-#: engine/core/filters.py:74
+#: engine/core/filters.py:86
msgid "Categories Slugs"
msgstr "Categorie Lumache"
-#: engine/core/filters.py:75 engine/core/filters.py:436
+#: engine/core/filters.py:88 engine/core/filters.py:495
msgid "Tags"
msgstr "Tag"
-#: engine/core/filters.py:76
+#: engine/core/filters.py:90
msgid "Min Price"
msgstr "Prezzo minimo"
-#: engine/core/filters.py:77
+#: engine/core/filters.py:93
msgid "Max Price"
msgstr "Max Price"
-#: engine/core/filters.py:78
+#: engine/core/filters.py:95
msgid "Is Active"
msgstr "È attivo"
-#: engine/core/filters.py:79
+#: engine/core/filters.py:96
msgid "Brand"
msgstr "Marchio"
-#: engine/core/filters.py:80
+#: engine/core/filters.py:97
msgid "Attributes"
msgstr "Attributi"
-#: engine/core/filters.py:81
+#: engine/core/filters.py:99
msgid "Quantity"
msgstr "Quantità"
-#: engine/core/filters.py:82 engine/core/filters.py:430
-#: engine/core/filters.py:556 engine/core/models.py:321
-#: engine/core/models.py:489 engine/core/models.py:644
+#: engine/core/filters.py:101 engine/core/filters.py:489
+#: engine/core/filters.py:628 engine/core/models.py:327
+#: engine/core/models.py:508 engine/core/models.py:665
msgid "Slug"
msgstr "Lumaca"
-#: engine/core/filters.py:83
+#: engine/core/filters.py:102
msgid "Is Digital"
msgstr "È digitale"
-#: engine/core/filters.py:84
+#: engine/core/filters.py:104
msgid "Include sub-categories"
msgstr "Includere le sottocategorie"
-#: engine/core/filters.py:87
+#: engine/core/filters.py:108
msgid "Include personal ordered"
msgstr "Includere prodotti ordinati personalmente"
-#: engine/core/filters.py:89 engine/core/models.py:648
+#: engine/core/filters.py:110 engine/core/models.py:669
msgid "SKU"
msgstr "SKU"
-#: engine/core/filters.py:184
+#: engine/core/filters.py:212
msgid "there must be a category_uuid to use include_subcategories flag"
msgstr ""
"Deve esserci una categoria_uuid per utilizzare il flag include_subcategories"
-#: engine/core/filters.py:353
+#: engine/core/filters.py:398
msgid "Search (ID, product name or part number)"
msgstr "Ricerca (ID, nome del prodotto o numero di parte)"
-#: engine/core/filters.py:356
+#: engine/core/filters.py:402
msgid "Bought after (inclusive)"
msgstr "Acquistato dopo (incluso)"
-#: engine/core/filters.py:357
+#: engine/core/filters.py:405
msgid "Bought before (inclusive)"
msgstr "Acquistato prima (compreso)"
-#: engine/core/filters.py:360 engine/core/filters.py:407
-#: engine/core/filters.py:614
+#: engine/core/filters.py:410 engine/core/filters.py:461
+#: engine/core/filters.py:696
msgid "User email"
msgstr "Email dell'utente"
-#: engine/core/filters.py:361 engine/core/filters.py:408
-#: engine/core/filters.py:592 engine/core/filters.py:613
+#: engine/core/filters.py:413 engine/core/filters.py:464
+#: engine/core/filters.py:671 engine/core/filters.py:693
msgid "User UUID"
msgstr "UUID utente"
-#: engine/core/filters.py:362
+#: engine/core/filters.py:415
msgid "Status"
msgstr "Stato"
-#: engine/core/filters.py:366
+#: engine/core/filters.py:419
msgid "Human Readable ID"
msgstr "ID leggibile dall'uomo"
-#: engine/core/filters.py:429
+#: engine/core/filters.py:488
msgid "Parent"
msgstr "Genitore"
-#: engine/core/filters.py:433
+#: engine/core/filters.py:492
msgid "Whole category(has at least 1 product or not)"
msgstr "Intera categoria (con o senza almeno 1 prodotto)"
-#: engine/core/filters.py:437
+#: engine/core/filters.py:496
msgid "Level"
msgstr "Livello"
-#: engine/core/filters.py:587
+#: engine/core/filters.py:666
msgid "Product UUID"
msgstr "UUID del prodotto"
-#: engine/core/graphene/mutations.py:40
+#: engine/core/graphene/mutations.py:41
msgid "key to look for in or set into the cache"
msgstr "Chiave da cercare o da inserire nella cache"
-#: engine/core/graphene/mutations.py:41
+#: engine/core/graphene/mutations.py:43
msgid "data to store in cache"
msgstr "Data to store in cache"
-#: engine/core/graphene/mutations.py:44
+#: engine/core/graphene/mutations.py:46
msgid "timeout in seconds to set the data for into the cache"
msgstr "Timeout in secondi per l'inserimento dei dati nella cache"
-#: engine/core/graphene/mutations.py:47
+#: engine/core/graphene/mutations.py:49
msgid "cached data"
msgstr "Dati in cache"
-#: engine/core/graphene/mutations.py:62
+#: engine/core/graphene/mutations.py:64
msgid "camelized JSON data from the requested URL"
msgstr "Dati JSON camelizzati dall'URL richiesto"
-#: engine/core/graphene/mutations.py:67 engine/core/views.py:257
+#: engine/core/graphene/mutations.py:69 engine/core/views.py:249
msgid "only URLs starting with http(s):// are allowed"
msgstr "Sono consentiti solo gli URL che iniziano con http(s)://"
-#: engine/core/graphene/mutations.py:83
+#: engine/core/graphene/mutations.py:87
msgid "add a product to the order"
msgstr "Aggiungere un prodotto all'ordine"
-#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131
-#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287
+#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139
+#: engine/core/graphene/mutations.py:255 engine/core/graphene/mutations.py:307
#, python-brace-format
msgid "order {order_uuid} not found"
msgstr "Ordine {order_uuid} non trovato!"
-#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159
+#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167
msgid "remove a product from the order"
msgstr "Rimuovere un prodotto dall'ordine"
-#: engine/core/graphene/mutations.py:137
+#: engine/core/graphene/mutations.py:145
msgid "remove all products from the order"
msgstr "Rimuovere tutti i prodotti dall'ordine"
-#: engine/core/graphene/mutations.py:182
+#: engine/core/graphene/mutations.py:190
msgid "buy an order"
msgstr "Acquistare un ordine"
-#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265
+#: engine/core/graphene/mutations.py:221 engine/core/graphene/mutations.py:283
msgid "please provide either order_uuid or order_hr_id - mutually exclusive"
msgstr ""
"Si prega di fornire order_uuid o order_hr_id, che si escludono a vicenda!"
-#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501
-#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712
+#: engine/core/graphene/mutations.py:250 engine/core/graphene/mutations.py:525
+#: engine/core/graphene/mutations.py:574 engine/core/viewsets.py:753
msgid "wrong type came from order.buy() method: {type(instance)!s}"
-msgstr ""
-"Il metodo order.buy() ha fornito un tipo sbagliato: {type(instance)!s}"
+msgstr "Il metodo order.buy() ha fornito un tipo sbagliato: {type(instance)!s}"
-#: engine/core/graphene/mutations.py:245
+#: engine/core/graphene/mutations.py:261
msgid "perform an action on a list of products in the order"
msgstr "Eseguire un'azione su un elenco di prodotti nell'ordine"
-#: engine/core/graphene/mutations.py:250
+#: engine/core/graphene/mutations.py:266
msgid "remove/add"
msgstr "Rimuovi/Aggiungi"
-#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323
+#: engine/core/graphene/mutations.py:302 engine/core/graphene/mutations.py:343
msgid "action must be either add or remove"
msgstr "L'azione deve essere \"aggiungere\" o \"rimuovere\"!"
-#: engine/core/graphene/mutations.py:293
+#: engine/core/graphene/mutations.py:313
msgid "perform an action on a list of products in the wishlist"
msgstr "Eseguire un'azione su un elenco di prodotti nella wishlist"
-#: engine/core/graphene/mutations.py:311
+#: engine/core/graphene/mutations.py:331
msgid "please provide wishlist_uuid value"
msgstr "Fornire il valore `wishlist_uuid`."
-#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404
-#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460
-#: engine/core/graphene/mutations.py:504
+#: engine/core/graphene/mutations.py:348 engine/core/graphene/mutations.py:424
+#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480
+#: engine/core/graphene/mutations.py:530
#, python-brace-format
msgid "wishlist {wishlist_uuid} not found"
msgstr "Lista dei desideri {wishlist_uuid} non trovata!"
-#: engine/core/graphene/mutations.py:382
+#: engine/core/graphene/mutations.py:402
msgid "add a product to the wishlist"
msgstr "Aggiungere un prodotto all'ordine"
-#: engine/core/graphene/mutations.py:410
+#: engine/core/graphene/mutations.py:430
msgid "remove a product from the wishlist"
msgstr "Rimuovere un prodotto dall'ordine"
-#: engine/core/graphene/mutations.py:438
+#: engine/core/graphene/mutations.py:458
msgid "remove all products from the wishlist"
msgstr "Rimuovere un prodotto dall'ordine"
-#: engine/core/graphene/mutations.py:466
+#: engine/core/graphene/mutations.py:486
msgid "buy all products from the wishlist"
msgstr "Rimuovere un prodotto dall'ordine"
-#: engine/core/graphene/mutations.py:510
+#: engine/core/graphene/mutations.py:536
msgid "buy a product"
msgstr "Acquistare un ordine"
-#: engine/core/graphene/mutations.py:516
+#: engine/core/graphene/mutations.py:543
msgid ""
-"please send the attributes as the string formatted like "
-"attr1=value1,attr2=value2"
+"please send the attributes as the string formatted like attr1=value1,"
+"attr2=value2"
msgstr ""
-"Inviare gli attributi come stringa formattata come "
-"attr1=valore1,attr2=valore2"
+"Inviare gli attributi come stringa formattata come attr1=valore1,"
+"attr2=valore2"
-#: engine/core/graphene/mutations.py:549
+#: engine/core/graphene/mutations.py:581
msgid "add or delete a feedback for orderproduct"
msgstr "Aggiungere o eliminare un feedback per l'ordine-prodotto"
-#: engine/core/graphene/mutations.py:573
+#: engine/core/graphene/mutations.py:607
msgid "action must be either `add` or `remove`"
msgstr "L'azione deve essere `add` o `remove`!"
-#: engine/core/graphene/mutations.py:576
+#: engine/core/graphene/mutations.py:610
#, python-brace-format
msgid "order product {order_product_uuid} not found"
msgstr "Prodotto dell'ordine {order_product_uuid} non trovato!"
-#: engine/core/graphene/mutations.py:582
+#: engine/core/graphene/mutations.py:617
msgid "original address string provided by the user"
msgstr "Stringa di indirizzo originale fornita dall'utente"
-#: engine/core/graphene/mutations.py:618 engine/core/models.py:955
-#: engine/core/models.py:968 engine/core/models.py:1383
-#: engine/core/models.py:1412 engine/core/models.py:1437
-#: engine/core/viewsets.py:715
+#: engine/core/graphene/mutations.py:654 engine/core/models.py:978
+#: engine/core/models.py:991 engine/core/models.py:1435
+#: engine/core/models.py:1466 engine/core/models.py:1497
+#: engine/core/viewsets.py:760
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr "{name} non esiste: {uuid}!"
-#: engine/core/graphene/mutations.py:632
+#: engine/core/graphene/mutations.py:668
msgid "limit must be between 1 and 10"
msgstr "Il limite deve essere compreso tra 1 e 10"
-#: engine/core/graphene/mutations.py:681
+#: engine/core/graphene/mutations.py:717
msgid "elasticsearch - works like a charm"
msgstr "ElasticSearch: funziona a meraviglia"
#: engine/core/graphene/object_types.py:82
-#: engine/core/graphene/object_types.py:370
-#: engine/core/graphene/object_types.py:417 engine/core/models.py:772
-#: engine/core/models.py:1250 engine/core/models.py:1897
+#: engine/core/graphene/object_types.py:417
+#: engine/core/graphene/object_types.py:468 engine/core/models.py:795
+#: engine/core/models.py:1289 engine/core/models.py:2021
msgid "attributes"
msgstr "Attributi"
@@ -1290,91 +1297,90 @@ msgid "groups of attributes"
msgstr "Gruppi di attributi"
#: engine/core/graphene/object_types.py:116
-#: engine/core/graphene/object_types.py:193
-#: engine/core/graphene/object_types.py:223 engine/core/models.py:432
+#: engine/core/graphene/object_types.py:214
+#: engine/core/graphene/object_types.py:252 engine/core/models.py:451
msgid "categories"
msgstr "Categorie"
-#: engine/core/graphene/object_types.py:124 engine/core/models.py:503
+#: engine/core/graphene/object_types.py:132 engine/core/models.py:522
msgid "brands"
msgstr "Marche"
-#: engine/core/graphene/object_types.py:195
+#: engine/core/graphene/object_types.py:216
msgid "category image url"
msgstr "Categorie"
-#: engine/core/graphene/object_types.py:196
-#: engine/core/graphene/object_types.py:317 engine/core/models.py:283
+#: engine/core/graphene/object_types.py:217
+#: engine/core/graphene/object_types.py:362 engine/core/models.py:289
msgid "markup percentage"
msgstr "Percentuale di markup"
-#: engine/core/graphene/object_types.py:199
+#: engine/core/graphene/object_types.py:221
msgid "which attributes and values can be used for filtering this category."
msgstr ""
"Quali attributi e valori possono essere utilizzati per filtrare questa "
"categoria."
-#: engine/core/graphene/object_types.py:203
-msgid ""
-"minimum and maximum prices for products in this category, if available."
+#: engine/core/graphene/object_types.py:227
+msgid "minimum and maximum prices for products in this category, if available."
msgstr ""
"Prezzi minimi e massimi per i prodotti di questa categoria, se disponibili."
-#: engine/core/graphene/object_types.py:205
+#: engine/core/graphene/object_types.py:231
msgid "tags for this category"
msgstr "Tag per questa categoria"
-#: engine/core/graphene/object_types.py:206
+#: engine/core/graphene/object_types.py:234
msgid "products in this category"
msgstr "Prodotti in questa categoria"
-#: engine/core/graphene/object_types.py:324 engine/core/models.py:188
+#: engine/core/graphene/object_types.py:369 engine/core/models.py:194
msgid "vendors"
msgstr "Venditori"
-#: engine/core/graphene/object_types.py:328
+#: engine/core/graphene/object_types.py:373
msgid "Latitude (Y coordinate)"
msgstr "Latitudine (coordinata Y)"
-#: engine/core/graphene/object_types.py:329
+#: engine/core/graphene/object_types.py:374
msgid "Longitude (X coordinate)"
msgstr "Longitudine (coordinata X)"
-#: engine/core/graphene/object_types.py:358
+#: engine/core/graphene/object_types.py:403
msgid "comment"
msgstr "Come"
-#: engine/core/graphene/object_types.py:359
-#: engine/core/graphene/object_types.py:483
+#: engine/core/graphene/object_types.py:405
+#: engine/core/graphene/object_types.py:539
msgid "rating value from 1 to 10, inclusive, or 0 if not set."
msgstr "Valore di valutazione da 1 a 10, incluso, o 0 se non impostato."
-#: engine/core/graphene/object_types.py:366
+#: engine/core/graphene/object_types.py:413
msgid "represents feedback from a user."
msgstr "Rappresenta il feedback di un utente."
-#: engine/core/graphene/object_types.py:371
-#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244
+#: engine/core/graphene/object_types.py:418
+#: engine/core/graphene/object_types.py:469 engine/core/models.py:1283
msgid "notifications"
msgstr "Notifiche"
-#: engine/core/graphene/object_types.py:372
+#: engine/core/graphene/object_types.py:420
msgid "download url for this order product if applicable"
msgstr "URL di download per il prodotto dell'ordine, se applicabile"
-#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736
+#: engine/core/graphene/object_types.py:422 engine/core/models.py:1848
msgid "feedback"
msgstr "Feedback"
-#: engine/core/graphene/object_types.py:407
+#: engine/core/graphene/object_types.py:456
msgid "a list of order products in this order"
msgstr "Un elenco di prodotti ordinati in questo ordine"
-#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214
+#: engine/core/graphene/object_types.py:458 engine/core/models.py:1253
msgid "billing address"
msgstr "Indirizzo di fatturazione"
-#: engine/core/graphene/object_types.py:412
+#: engine/core/graphene/object_types.py:462
msgid ""
"shipping address for this order, leave blank if same as billing address or "
"if not applicable"
@@ -1382,53 +1388,53 @@ msgstr ""
"Indirizzo di spedizione per questo ordine, lasciare in bianco se è uguale "
"all'indirizzo di fatturazione o se non è applicabile"
-#: engine/core/graphene/object_types.py:414
+#: engine/core/graphene/object_types.py:465
msgid "total price of this order"
msgstr "Prezzo totale dell'ordine"
-#: engine/core/graphene/object_types.py:415
+#: engine/core/graphene/object_types.py:466
msgid "total quantity of products in order"
msgstr "Quantità totale di prodotti in ordine"
-#: engine/core/graphene/object_types.py:416
+#: engine/core/graphene/object_types.py:467
msgid "are all products in the order digital"
msgstr "Tutti i prodotti sono presenti nell'ordine digitale"
-#: engine/core/graphene/object_types.py:419
+#: engine/core/graphene/object_types.py:471
msgid "transactions for this order"
msgstr "Transazioni per questo ordine"
-#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278
+#: engine/core/graphene/object_types.py:491 engine/core/models.py:1317
msgid "orders"
msgstr "Ordini"
-#: engine/core/graphene/object_types.py:459
+#: engine/core/graphene/object_types.py:512
msgid "image url"
msgstr "URL immagine"
-#: engine/core/graphene/object_types.py:466
+#: engine/core/graphene/object_types.py:519
msgid "product's images"
msgstr "Immagini del prodotto"
-#: engine/core/graphene/object_types.py:473 engine/core/models.py:431
-#: engine/core/models.py:586
+#: engine/core/graphene/object_types.py:526 engine/core/models.py:450
+#: engine/core/models.py:607
msgid "category"
msgstr "Categoria"
-#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737
+#: engine/core/graphene/object_types.py:528 engine/core/models.py:1849
msgid "feedbacks"
msgstr "Feedback"
-#: engine/core/graphene/object_types.py:476 engine/core/models.py:502
-#: engine/core/models.py:595
+#: engine/core/graphene/object_types.py:529 engine/core/models.py:521
+#: engine/core/models.py:616
msgid "brand"
msgstr "Marchio"
-#: engine/core/graphene/object_types.py:477 engine/core/models.py:106
+#: engine/core/graphene/object_types.py:531 engine/core/models.py:106
msgid "attribute groups"
msgstr "Gruppi di attributi"
-#: engine/core/graphene/object_types.py:478
+#: engine/core/graphene/object_types.py:533
#: engine/core/templates/digital_order_created_email.html:111
#: engine/core/templates/digital_order_delivered_email.html:109
#: engine/core/templates/shipped_order_created_email.html:109
@@ -1436,7 +1442,7 @@ msgstr "Gruppi di attributi"
msgid "price"
msgstr "Prezzo"
-#: engine/core/graphene/object_types.py:479
+#: engine/core/graphene/object_types.py:534
#: engine/core/templates/digital_order_created_email.html:110
#: engine/core/templates/digital_order_delivered_email.html:108
#: engine/core/templates/shipped_order_created_email.html:108
@@ -1444,39 +1450,39 @@ msgstr "Prezzo"
msgid "quantity"
msgstr "Quantità"
-#: engine/core/graphene/object_types.py:480
+#: engine/core/graphene/object_types.py:535
msgid "number of feedbacks"
msgstr "Numero di feedback"
-#: engine/core/graphene/object_types.py:481
+#: engine/core/graphene/object_types.py:536
msgid "only available for personal orders"
msgstr "Prodotti disponibili solo per ordini personali"
-#: engine/core/graphene/object_types.py:484
+#: engine/core/graphene/object_types.py:541
msgid "discount price"
msgstr "Prezzo scontato"
-#: engine/core/graphene/object_types.py:508 engine/core/models.py:658
+#: engine/core/graphene/object_types.py:565 engine/core/models.py:679
msgid "products"
msgstr "Prodotti"
-#: engine/core/graphene/object_types.py:611
+#: engine/core/graphene/object_types.py:675
msgid "promocodes"
msgstr "Codici promozionali"
-#: engine/core/graphene/object_types.py:621
+#: engine/core/graphene/object_types.py:690
msgid "products on sale"
msgstr "Prodotti in vendita"
-#: engine/core/graphene/object_types.py:628 engine/core/models.py:904
+#: engine/core/graphene/object_types.py:698 engine/core/models.py:927
msgid "promotions"
msgstr "Promozioni"
-#: engine/core/graphene/object_types.py:632 engine/core/models.py:187
+#: engine/core/graphene/object_types.py:702 engine/core/models.py:193
msgid "vendor"
msgstr "Venditore"
-#: engine/core/graphene/object_types.py:633 engine/core/models.py:657
+#: engine/core/graphene/object_types.py:703 engine/core/models.py:678
#: engine/core/templates/digital_order_created_email.html:109
#: engine/core/templates/digital_order_delivered_email.html:107
#: engine/core/templates/shipped_order_created_email.html:107
@@ -1484,99 +1490,99 @@ msgstr "Venditore"
msgid "product"
msgstr "Prodotto"
-#: engine/core/graphene/object_types.py:644 engine/core/models.py:927
+#: engine/core/graphene/object_types.py:715 engine/core/models.py:950
msgid "wishlisted products"
msgstr "Prodotti desiderati"
-#: engine/core/graphene/object_types.py:650 engine/core/models.py:944
+#: engine/core/graphene/object_types.py:722 engine/core/models.py:967
msgid "wishlists"
msgstr "Liste dei desideri"
-#: engine/core/graphene/object_types.py:654
+#: engine/core/graphene/object_types.py:727
msgid "tagged products"
msgstr "Prodotti contrassegnati"
-#: engine/core/graphene/object_types.py:661 engine/core/models.py:224
-#: engine/core/models.py:601
+#: engine/core/graphene/object_types.py:735 engine/core/models.py:230
+#: engine/core/models.py:622
msgid "product tags"
msgstr "Tag del prodotto"
-#: engine/core/graphene/object_types.py:665
+#: engine/core/graphene/object_types.py:740
msgid "tagged categories"
msgstr "Contrassegnato dalle categorie"
-#: engine/core/graphene/object_types.py:672
+#: engine/core/graphene/object_types.py:748
msgid "categories tags"
msgstr "Tag delle categorie"
-#: engine/core/graphene/object_types.py:676
+#: engine/core/graphene/object_types.py:752
msgid "project name"
msgstr "Nome del progetto"
-#: engine/core/graphene/object_types.py:677
+#: engine/core/graphene/object_types.py:753
msgid "company name"
msgstr "Nome della società"
-#: engine/core/graphene/object_types.py:678
+#: engine/core/graphene/object_types.py:754
msgid "company address"
msgstr "Indirizzo dell'azienda"
-#: engine/core/graphene/object_types.py:679
+#: engine/core/graphene/object_types.py:755
msgid "company phone number"
msgstr "Numero di telefono dell'azienda"
-#: engine/core/graphene/object_types.py:680
+#: engine/core/graphene/object_types.py:758
msgid "email from, sometimes it must be used instead of host user value"
msgstr ""
"'email from', a volte deve essere usato al posto del valore dell'utente host"
-#: engine/core/graphene/object_types.py:681
+#: engine/core/graphene/object_types.py:761
msgid "email host user"
msgstr "Utente host dell'e-mail"
-#: engine/core/graphene/object_types.py:682
+#: engine/core/graphene/object_types.py:762
msgid "maximum amount for payment"
msgstr "Importo massimo per il pagamento"
-#: engine/core/graphene/object_types.py:683
+#: engine/core/graphene/object_types.py:763
msgid "minimum amount for payment"
msgstr "Importo minimo per il pagamento"
-#: engine/core/graphene/object_types.py:684
+#: engine/core/graphene/object_types.py:764
msgid "analytics data"
msgstr "Dati analitici"
-#: engine/core/graphene/object_types.py:685
+#: engine/core/graphene/object_types.py:765
msgid "advertisement data"
msgstr "Dati pubblicitari"
-#: engine/core/graphene/object_types.py:688
+#: engine/core/graphene/object_types.py:768
msgid "company configuration"
msgstr "Configurazione"
-#: engine/core/graphene/object_types.py:692
+#: engine/core/graphene/object_types.py:772
msgid "language code"
msgstr "Codice lingua"
-#: engine/core/graphene/object_types.py:693
+#: engine/core/graphene/object_types.py:773
msgid "language name"
msgstr "Nome della lingua"
-#: engine/core/graphene/object_types.py:694
+#: engine/core/graphene/object_types.py:774
msgid "language flag, if exists :)"
msgstr "Bandiera della lingua, se esiste :)"
-#: engine/core/graphene/object_types.py:697
+#: engine/core/graphene/object_types.py:777
msgid "supported languages"
msgstr "Ottenere un elenco delle lingue supportate"
-#: engine/core/graphene/object_types.py:728
-#: engine/core/graphene/object_types.py:729
-#: engine/core/graphene/object_types.py:730
+#: engine/core/graphene/object_types.py:809
+#: engine/core/graphene/object_types.py:812
+#: engine/core/graphene/object_types.py:815
msgid "products search results"
msgstr "Risultati della ricerca dei prodotti"
-#: engine/core/graphene/object_types.py:731
+#: engine/core/graphene/object_types.py:817
msgid "posts search results"
msgstr "Risultati della ricerca dei prodotti"
@@ -1587,9 +1593,9 @@ msgid ""
"parent group, forming a hierarchical structure. This can be useful for "
"categorizing and managing attributes more effectively in acomplex system."
msgstr ""
-"Rappresenta un gruppo di attributi, che può essere gerarchico. Questa classe"
-" viene utilizzata per gestire e organizzare i gruppi di attributi. Un gruppo"
-" di attributi può avere un gruppo padre, formando una struttura gerarchica. "
+"Rappresenta un gruppo di attributi, che può essere gerarchico. Questa classe "
+"viene utilizzata per gestire e organizzare i gruppi di attributi. Un gruppo "
+"di attributi può avere un gruppo padre, formando una struttura gerarchica. "
"Questo può essere utile per categorizzare e gestire meglio gli attributi in "
"un sistema complesso."
@@ -1605,7 +1611,7 @@ msgstr "Gruppo di attributi padre"
msgid "attribute group's name"
msgstr "Nome del gruppo di attributi"
-#: engine/core/models.py:105 engine/core/models.py:734
+#: engine/core/models.py:105 engine/core/models.py:755
msgid "attribute group"
msgstr "Gruppo di attributi"
@@ -1628,49 +1634,49 @@ msgstr ""
"anche metadati e vincoli aggiuntivi, rendendolo adatto all'uso in sistemi "
"che interagiscono con venditori terzi."
-#: engine/core/models.py:124
+#: engine/core/models.py:125
msgid "stores credentials and endpoints required for vendor communication"
msgstr ""
"Memorizza le credenziali e gli endpoint necessari per la comunicazione API "
"del fornitore."
-#: engine/core/models.py:125
+#: engine/core/models.py:127
msgid "authentication info"
msgstr "Informazioni sull'autenticazione"
-#: engine/core/models.py:130
+#: engine/core/models.py:132
msgid "define the markup for products retrieved from this vendor"
msgstr "Definire il markup per i prodotti recuperati da questo fornitore"
-#: engine/core/models.py:131
+#: engine/core/models.py:133
msgid "vendor markup percentage"
msgstr "Percentuale di ricarico del fornitore"
-#: engine/core/models.py:135
+#: engine/core/models.py:137
msgid "name of this vendor"
msgstr "Nome del fornitore"
-#: engine/core/models.py:136
+#: engine/core/models.py:138
msgid "vendor name"
msgstr "Nome del fornitore"
-#: engine/core/models.py:147
+#: engine/core/models.py:153
msgid "response file"
msgstr "file di risposta"
-#: engine/core/models.py:148
+#: engine/core/models.py:154
msgid "vendor's last processing response"
msgstr "risposta del venditore all'ultima elaborazione"
-#: engine/core/models.py:154
+#: engine/core/models.py:160
msgid "vendor's integration file path"
msgstr "Percorso del file di integrazione del fornitore"
-#: engine/core/models.py:155
+#: engine/core/models.py:161
msgid "integration path"
msgstr "Percorso di integrazione"
-#: engine/core/models.py:197
+#: engine/core/models.py:203
msgid ""
"Represents a product tag used for classifying or identifying products. The "
"ProductTag class is designed to uniquely identify and classify products "
@@ -1685,27 +1691,27 @@ msgstr ""
"operazioni esportate attraverso i mixin e fornisce la personalizzazione dei "
"metadati per scopi amministrativi."
-#: engine/core/models.py:209 engine/core/models.py:240
+#: engine/core/models.py:215 engine/core/models.py:246
msgid "internal tag identifier for the product tag"
msgstr "Identificatore interno dell'etichetta del prodotto"
-#: engine/core/models.py:210 engine/core/models.py:241
+#: engine/core/models.py:216 engine/core/models.py:247
msgid "tag name"
msgstr "Nome del tag"
-#: engine/core/models.py:214 engine/core/models.py:245
+#: engine/core/models.py:220 engine/core/models.py:251
msgid "user-friendly name for the product tag"
msgstr "Nome intuitivo per l'etichetta del prodotto"
-#: engine/core/models.py:215 engine/core/models.py:246
+#: engine/core/models.py:221 engine/core/models.py:252
msgid "tag display name"
msgstr "Nome del tag"
-#: engine/core/models.py:223
+#: engine/core/models.py:229
msgid "product tag"
msgstr "Etichetta del prodotto"
-#: engine/core/models.py:229
+#: engine/core/models.py:235
msgid ""
"Represents a category tag used for products. This class models a category "
"tag that can be used to associate and classify products. It includes "
@@ -1713,18 +1719,18 @@ msgid ""
msgstr ""
"Rappresenta un tag di categoria utilizzato per i prodotti. Questa classe "
"modella un tag di categoria che può essere usato per associare e "
-"classificare i prodotti. Include gli attributi per un identificatore interno"
-" del tag e un nome di visualizzazione facile da usare."
+"classificare i prodotti. Include gli attributi per un identificatore interno "
+"del tag e un nome di visualizzazione facile da usare."
-#: engine/core/models.py:254
+#: engine/core/models.py:260
msgid "category tag"
msgstr "tag categoria"
-#: engine/core/models.py:255 engine/core/models.py:327
+#: engine/core/models.py:261 engine/core/models.py:333
msgid "category tags"
msgstr "tag di categoria"
-#: engine/core/models.py:260
+#: engine/core/models.py:266
msgid ""
"Represents a category entity to organize and group related items in a "
"hierarchical structure. Categories may have hierarchical relationships with "
@@ -1738,118 +1744,117 @@ msgid ""
msgstr ""
"Rappresenta un'entità di categoria per organizzare e raggruppare gli "
"elementi correlati in una struttura gerarchica. Le categorie possono avere "
-"relazioni gerarchiche con altre categorie, supportando le relazioni "
-"genitore-figlio. La classe include campi per i metadati e per la "
-"rappresentazione visiva, che servono come base per le funzionalità legate "
-"alle categorie. Questa classe viene tipicamente utilizzata per definire e "
-"gestire le categorie di prodotti o altri raggruppamenti simili all'interno "
-"di un'applicazione, consentendo agli utenti o agli amministratori di "
+"relazioni gerarchiche con altre categorie, supportando le relazioni genitore-"
+"figlio. La classe include campi per i metadati e per la rappresentazione "
+"visiva, che servono come base per le funzionalità legate alle categorie. "
+"Questa classe viene tipicamente utilizzata per definire e gestire le "
+"categorie di prodotti o altri raggruppamenti simili all'interno di "
+"un'applicazione, consentendo agli utenti o agli amministratori di "
"specificare il nome, la descrizione e la gerarchia delle categorie, nonché "
"di assegnare attributi come immagini, tag o priorità."
-#: engine/core/models.py:274
+#: engine/core/models.py:280
msgid "upload an image representing this category"
msgstr "Caricare un'immagine che rappresenti questa categoria"
-#: engine/core/models.py:277
+#: engine/core/models.py:283
msgid "category image"
msgstr "Categoria immagine"
-#: engine/core/models.py:282
+#: engine/core/models.py:288
msgid "define a markup percentage for products in this category"
msgstr ""
"Definire una percentuale di ricarico per i prodotti di questa categoria"
-#: engine/core/models.py:291
+#: engine/core/models.py:297
msgid "parent of this category to form a hierarchical structure"
msgstr "Genitore di questa categoria per formare una struttura gerarchica"
-#: engine/core/models.py:292
+#: engine/core/models.py:298
msgid "parent category"
msgstr "Categoria di genitori"
-#: engine/core/models.py:297
+#: engine/core/models.py:303
msgid "category name"
msgstr "Nome della categoria"
-#: engine/core/models.py:298
+#: engine/core/models.py:304
msgid "provide a name for this category"
msgstr "Indicare un nome per questa categoria"
-#: engine/core/models.py:305
+#: engine/core/models.py:311
msgid "add a detailed description for this category"
msgstr "Aggiungere una descrizione dettagliata per questa categoria"
-#: engine/core/models.py:306
+#: engine/core/models.py:312
msgid "category description"
msgstr "Descrizione della categoria"
-#: engine/core/models.py:326
+#: engine/core/models.py:332
msgid "tags that help describe or group this category"
msgstr "tag che aiutano a descrivere o raggruppare questa categoria"
-#: engine/core/models.py:333 engine/core/models.py:495
+#: engine/core/models.py:339 engine/core/models.py:514
msgid "priority"
msgstr "Priorità"
-#: engine/core/models.py:438
+#: engine/core/models.py:457
msgid ""
"Represents a Brand object in the system. This class handles information and "
"attributes related to a brand, including its name, logos, description, "
"associated categories, a unique slug, and priority order. It allows for the "
-"organization and representation of brand-related data within the "
-"application."
+"organization and representation of brand-related data within the application."
msgstr ""
"Rappresenta un oggetto Marchio nel sistema. Questa classe gestisce le "
"informazioni e gli attributi relativi a un marchio, tra cui il nome, il "
"logo, la descrizione, le categorie associate, uno slug unico e l'ordine di "
-"priorità. Permette di organizzare e rappresentare i dati relativi al marchio"
-" all'interno dell'applicazione."
+"priorità. Permette di organizzare e rappresentare i dati relativi al marchio "
+"all'interno dell'applicazione."
-#: engine/core/models.py:448
+#: engine/core/models.py:467
msgid "name of this brand"
msgstr "Nome del marchio"
-#: engine/core/models.py:449
+#: engine/core/models.py:468
msgid "brand name"
msgstr "Nome del marchio"
-#: engine/core/models.py:456
+#: engine/core/models.py:475
msgid "upload a logo representing this brand"
msgstr "Caricare un logo che rappresenti questo marchio"
-#: engine/core/models.py:458
+#: engine/core/models.py:477
msgid "brand small image"
msgstr "Immagine piccola del marchio"
-#: engine/core/models.py:464
+#: engine/core/models.py:483
msgid "upload a big logo representing this brand"
msgstr "Caricare un grande logo che rappresenti questo marchio"
-#: engine/core/models.py:466
+#: engine/core/models.py:485
msgid "brand big image"
msgstr "Grande immagine del marchio"
-#: engine/core/models.py:471
+#: engine/core/models.py:490
msgid "add a detailed description of the brand"
msgstr "Aggiungere una descrizione dettagliata del marchio"
-#: engine/core/models.py:472
+#: engine/core/models.py:491
msgid "brand description"
msgstr "Descrizione del marchio"
-#: engine/core/models.py:477
+#: engine/core/models.py:496
msgid "optional categories that this brand is associated with"
msgstr "Categorie opzionali a cui questo marchio è associato"
-#: engine/core/models.py:478
+#: engine/core/models.py:497
msgid "associated categories"
msgstr "Categorie"
-#: engine/core/models.py:508
+#: engine/core/models.py:527
msgid ""
-"Represents the stock of a product managed in the system. This class provides"
-" details about the relationship between vendors, products, and their stock "
+"Represents the stock of a product managed in the system. This class provides "
+"details about the relationship between vendors, products, and their stock "
"information, as well as inventory-related properties like price, purchase "
"price, quantity, SKU, and digital assets. It is part of the inventory "
"management system to allow tracking and evaluation of products available "
@@ -1857,77 +1862,77 @@ msgid ""
msgstr ""
"Rappresenta lo stock di un prodotto gestito nel sistema. Questa classe "
"fornisce dettagli sulla relazione tra fornitori, prodotti e informazioni "
-"sulle scorte, oltre a proprietà legate all'inventario come prezzo, prezzo di"
-" acquisto, quantità, SKU e asset digitali. Fa parte del sistema di gestione "
-"dell'inventario per consentire il monitoraggio e la valutazione dei prodotti"
-" disponibili presso i vari fornitori."
+"sulle scorte, oltre a proprietà legate all'inventario come prezzo, prezzo di "
+"acquisto, quantità, SKU e asset digitali. Fa parte del sistema di gestione "
+"dell'inventario per consentire il monitoraggio e la valutazione dei prodotti "
+"disponibili presso i vari fornitori."
-#: engine/core/models.py:520
+#: engine/core/models.py:539
msgid "the vendor supplying this product stock"
msgstr "Il venditore che fornisce questo stock di prodotti"
-#: engine/core/models.py:521
+#: engine/core/models.py:540
msgid "associated vendor"
msgstr "Venditore associato"
-#: engine/core/models.py:525
+#: engine/core/models.py:544
msgid "final price to the customer after markups"
msgstr "Prezzo finale al cliente dopo i ricarichi"
-#: engine/core/models.py:526
+#: engine/core/models.py:545
msgid "selling price"
msgstr "Prezzo di vendita"
-#: engine/core/models.py:531
+#: engine/core/models.py:550
msgid "the product associated with this stock entry"
msgstr "Il prodotto associato a questa voce di magazzino"
-#: engine/core/models.py:532 engine/core/models.py:797
-#: engine/core/models.py:843 engine/core/models.py:1792
+#: engine/core/models.py:551 engine/core/models.py:820
+#: engine/core/models.py:866 engine/core/models.py:1904
msgid "associated product"
msgstr "Prodotto associato"
-#: engine/core/models.py:539
+#: engine/core/models.py:558
msgid "the price paid to the vendor for this product"
msgstr "Il prezzo pagato al venditore per questo prodotto"
-#: engine/core/models.py:540
+#: engine/core/models.py:559
msgid "vendor purchase price"
msgstr "Prezzo di acquisto del fornitore"
-#: engine/core/models.py:544
+#: engine/core/models.py:563
msgid "available quantity of the product in stock"
msgstr "Quantità disponibile del prodotto in magazzino"
-#: engine/core/models.py:545
+#: engine/core/models.py:564
msgid "quantity in stock"
msgstr "Quantità in magazzino"
-#: engine/core/models.py:549
+#: engine/core/models.py:568
msgid "vendor-assigned SKU for identifying the product"
msgstr "SKU assegnato dal fornitore per identificare il prodotto"
-#: engine/core/models.py:550
+#: engine/core/models.py:569
msgid "vendor sku"
msgstr "SKU del venditore"
-#: engine/core/models.py:556
+#: engine/core/models.py:575
msgid "digital file associated with this stock if applicable"
msgstr "File digitale associato a questo stock, se applicabile"
-#: engine/core/models.py:557
+#: engine/core/models.py:576
msgid "digital file"
msgstr "File digitale"
-#: engine/core/models.py:560
+#: engine/core/models.py:580
msgid "system attributes"
msgstr "Attributi del sistema"
-#: engine/core/models.py:567
+#: engine/core/models.py:588
msgid "stock entries"
msgstr "Voci di magazzino"
-#: engine/core/models.py:572
+#: engine/core/models.py:593
msgid ""
"Represents a product with attributes such as category, brand, tags, digital "
"status, name, description, part number, and slug. Provides related utility "
@@ -1945,252 +1950,252 @@ msgstr ""
"sistema che gestisce il commercio elettronico o l'inventario. Questa classe "
"interagisce con i modelli correlati (come Category, Brand e ProductTag) e "
"gestisce la cache per le proprietà a cui si accede di frequente, per "
-"migliorare le prestazioni. Viene utilizzata per definire e manipolare i dati"
-" dei prodotti e le informazioni ad essi associate all'interno di "
+"migliorare le prestazioni. Viene utilizzata per definire e manipolare i dati "
+"dei prodotti e le informazioni ad essi associate all'interno di "
"un'applicazione."
-#: engine/core/models.py:585
+#: engine/core/models.py:606
msgid "category this product belongs to"
msgstr "Categoria a cui appartiene questo prodotto"
-#: engine/core/models.py:594
+#: engine/core/models.py:615
msgid "optionally associate this product with a brand"
msgstr "Associare facoltativamente questo prodotto a un marchio"
-#: engine/core/models.py:600
+#: engine/core/models.py:621
msgid "tags that help describe or group this product"
msgstr "Tag che aiutano a descrivere o raggruppare questo prodotto"
-#: engine/core/models.py:605
+#: engine/core/models.py:626
msgid "indicates whether this product is digitally delivered"
msgstr "Indica se il prodotto è consegnato in formato digitale"
-#: engine/core/models.py:606
+#: engine/core/models.py:627
msgid "is product digital"
msgstr "Il prodotto è digitale"
-#: engine/core/models.py:612
+#: engine/core/models.py:633
msgid "provide a clear identifying name for the product"
msgstr "Fornire un nome identificativo chiaro per il prodotto"
-#: engine/core/models.py:613
+#: engine/core/models.py:634
msgid "product name"
msgstr "Nome del prodotto"
-#: engine/core/models.py:619 engine/core/models.py:892
+#: engine/core/models.py:640 engine/core/models.py:915
msgid "add a detailed description of the product"
msgstr "Aggiungere una descrizione dettagliata del prodotto"
-#: engine/core/models.py:620
+#: engine/core/models.py:641
msgid "product description"
msgstr "Descrizione del prodotto"
-#: engine/core/models.py:627
+#: engine/core/models.py:648
msgid "part number for this product"
msgstr "Numero di parte per questo prodotto"
-#: engine/core/models.py:628
+#: engine/core/models.py:649
msgid "part number"
msgstr "Numero di parte"
-#: engine/core/models.py:647
+#: engine/core/models.py:668
msgid "stock keeping unit for this product"
msgstr "Unità di mantenimento delle scorte per questo prodotto"
-#: engine/core/models.py:720
+#: engine/core/models.py:741
msgid ""
"Represents an attribute in the system. This class is used to define and "
"manage attributes, which are customizable pieces of data that can be "
"associated with other entities. Attributes have associated categories, "
-"groups, value types, and names. The model supports multiple types of values,"
-" including string, integer, float, boolean, array, and object. This allows "
+"groups, value types, and names. The model supports multiple types of values, "
+"including string, integer, float, boolean, array, and object. This allows "
"for dynamic and flexible data structuring."
msgstr ""
"Rappresenta un attributo nel sistema. Questa classe viene utilizzata per "
-"definire e gestire gli attributi, che sono dati personalizzabili che possono"
-" essere associati ad altre entità. Gli attributi hanno categorie, gruppi, "
-"tipi di valori e nomi associati. Il modello supporta diversi tipi di valori,"
-" tra cui stringa, intero, float, booleano, array e oggetto. Ciò consente una"
-" strutturazione dinamica e flessibile dei dati."
+"definire e gestire gli attributi, che sono dati personalizzabili che possono "
+"essere associati ad altre entità. Gli attributi hanno categorie, gruppi, "
+"tipi di valori e nomi associati. Il modello supporta diversi tipi di valori, "
+"tra cui stringa, intero, float, booleano, array e oggetto. Ciò consente una "
+"strutturazione dinamica e flessibile dei dati."
-#: engine/core/models.py:733
+#: engine/core/models.py:754
msgid "group of this attribute"
msgstr "Gruppo di questo attributo"
-#: engine/core/models.py:739
+#: engine/core/models.py:760
msgid "string"
msgstr "Stringa"
-#: engine/core/models.py:740
+#: engine/core/models.py:761
msgid "integer"
msgstr "Intero"
-#: engine/core/models.py:741
+#: engine/core/models.py:762
msgid "float"
msgstr "Galleggiante"
-#: engine/core/models.py:742
+#: engine/core/models.py:763
msgid "boolean"
msgstr "Booleano"
-#: engine/core/models.py:743
+#: engine/core/models.py:764
msgid "array"
msgstr "Array"
-#: engine/core/models.py:744
+#: engine/core/models.py:765
msgid "object"
msgstr "Oggetto"
-#: engine/core/models.py:746
+#: engine/core/models.py:767
msgid "type of the attribute's value"
msgstr "Tipo di valore dell'attributo"
-#: engine/core/models.py:747
+#: engine/core/models.py:768
msgid "value type"
msgstr "Tipo di valore"
-#: engine/core/models.py:752
+#: engine/core/models.py:773
msgid "name of this attribute"
msgstr "Nome dell'attributo"
-#: engine/core/models.py:753
+#: engine/core/models.py:774
msgid "attribute's name"
msgstr "Nome dell'attributo"
-#: engine/core/models.py:758
+#: engine/core/models.py:779
msgid "is filterable"
msgstr "è filtrabile"
-#: engine/core/models.py:759
+#: engine/core/models.py:781
msgid "designates whether this attribute can be used for filtering or not"
msgstr ""
"Quali attributi e valori possono essere utilizzati per filtrare questa "
"categoria."
-#: engine/core/models.py:771 engine/core/models.py:789
+#: engine/core/models.py:794 engine/core/models.py:812
#: engine/core/templates/digital_order_delivered_email.html:134
msgid "attribute"
msgstr "Attributo"
-#: engine/core/models.py:777
+#: engine/core/models.py:800
msgid ""
-"Represents a specific value for an attribute that is linked to a product. It"
-" links the 'attribute' to a unique 'value', allowing better organization and"
-" dynamic representation of product characteristics."
+"Represents a specific value for an attribute that is linked to a product. It "
+"links the 'attribute' to a unique 'value', allowing better organization and "
+"dynamic representation of product characteristics."
msgstr ""
"Rappresenta un valore specifico per un attributo collegato a un prodotto. "
"Collega l'\"attributo\" a un \"valore\" unico, consentendo una migliore "
"organizzazione e rappresentazione dinamica delle caratteristiche del "
"prodotto."
-#: engine/core/models.py:788
+#: engine/core/models.py:811
msgid "attribute of this value"
msgstr "Attributo di questo valore"
-#: engine/core/models.py:796
+#: engine/core/models.py:819
msgid "the specific product associated with this attribute's value"
msgstr "Il prodotto specifico associato al valore di questo attributo"
-#: engine/core/models.py:802
+#: engine/core/models.py:825
msgid "the specific value for this attribute"
msgstr "Il valore specifico per questo attributo"
-#: engine/core/models.py:815
+#: engine/core/models.py:838
msgid ""
"Represents a product image associated with a product in the system. This "
-"class is designed to manage images for products, including functionality for"
-" uploading image files, associating them with specific products, and "
+"class is designed to manage images for products, including functionality for "
+"uploading image files, associating them with specific products, and "
"determining their display order. It also includes an accessibility feature "
"with alternative text for the images."
msgstr ""
"Rappresenta l'immagine di un prodotto associata a un prodotto del sistema. "
-"Questa classe è progettata per gestire le immagini dei prodotti, comprese le"
-" funzionalità di caricamento dei file immagine, di associazione a prodotti "
+"Questa classe è progettata per gestire le immagini dei prodotti, comprese le "
+"funzionalità di caricamento dei file immagine, di associazione a prodotti "
"specifici e di determinazione dell'ordine di visualizzazione. Include anche "
"una funzione di accessibilità con testo alternativo per le immagini."
-#: engine/core/models.py:826
+#: engine/core/models.py:849
msgid "provide alternative text for the image for accessibility"
msgstr ""
"Fornire un testo alternativo per l'immagine ai fini dell'accessibilità."
-#: engine/core/models.py:827
+#: engine/core/models.py:850
msgid "image alt text"
msgstr "Testo alt dell'immagine"
-#: engine/core/models.py:830
+#: engine/core/models.py:853
msgid "upload the image file for this product"
msgstr "Caricare il file immagine per questo prodotto"
-#: engine/core/models.py:831 engine/core/models.py:862
+#: engine/core/models.py:854 engine/core/models.py:885
msgid "product image"
msgstr "Immagine del prodotto"
-#: engine/core/models.py:836
+#: engine/core/models.py:859
msgid "determines the order in which images are displayed"
msgstr "Determina l'ordine di visualizzazione delle immagini"
-#: engine/core/models.py:837
+#: engine/core/models.py:860
msgid "display priority"
msgstr "Priorità del display"
-#: engine/core/models.py:842
+#: engine/core/models.py:865
msgid "the product that this image represents"
msgstr "Il prodotto che questa immagine rappresenta"
-#: engine/core/models.py:863
+#: engine/core/models.py:886
msgid "product images"
msgstr "Immagini del prodotto"
-#: engine/core/models.py:868
+#: engine/core/models.py:891
msgid ""
"Represents a promotional campaign for products with a discount. This class "
"is used to define and manage promotional campaigns that offer a percentage-"
"based discount for products. The class includes attributes for setting the "
"discount rate, providing details about the promotion, and linking it to the "
-"applicable products. It integrates with the product catalog to determine the"
-" affected items in the campaign."
+"applicable products. It integrates with the product catalog to determine the "
+"affected items in the campaign."
msgstr ""
-"Rappresenta una campagna promozionale per prodotti con sconto. Questa classe"
-" viene utilizzata per definire e gestire campagne promozionali che offrono "
+"Rappresenta una campagna promozionale per prodotti con sconto. Questa classe "
+"viene utilizzata per definire e gestire campagne promozionali che offrono "
"uno sconto in percentuale sui prodotti. La classe include attributi per "
"impostare la percentuale di sconto, fornire dettagli sulla promozione e "
"collegarla ai prodotti applicabili. Si integra con il catalogo dei prodotti "
"per determinare gli articoli interessati dalla campagna."
-#: engine/core/models.py:880
+#: engine/core/models.py:903
msgid "percentage discount for the selected products"
msgstr "Percentuale di sconto per i prodotti selezionati"
-#: engine/core/models.py:881
+#: engine/core/models.py:904
msgid "discount percentage"
msgstr "Percentuale di sconto"
-#: engine/core/models.py:886
+#: engine/core/models.py:909
msgid "provide a unique name for this promotion"
msgstr "Fornite un nome unico per questa promozione"
-#: engine/core/models.py:887
+#: engine/core/models.py:910
msgid "promotion name"
msgstr "Nome della promozione"
-#: engine/core/models.py:893
+#: engine/core/models.py:916
msgid "promotion description"
msgstr "Descrizione della promozione"
-#: engine/core/models.py:898
+#: engine/core/models.py:921
msgid "select which products are included in this promotion"
msgstr "Selezionare i prodotti inclusi in questa promozione"
-#: engine/core/models.py:899
+#: engine/core/models.py:922
msgid "included products"
msgstr "Prodotti inclusi"
-#: engine/core/models.py:903
+#: engine/core/models.py:926
msgid "promotion"
msgstr "Promozione"
-#: engine/core/models.py:914
+#: engine/core/models.py:937
msgid ""
"Represents a user's wishlist for storing and managing desired products. The "
"class provides functionality to manage a collection of products, supporting "
@@ -2203,60 +2208,60 @@ msgstr ""
"rimozione di prodotti, nonché operazioni per l'aggiunta e la rimozione di "
"più prodotti contemporaneamente."
-#: engine/core/models.py:926
+#: engine/core/models.py:949
msgid "products that the user has marked as wanted"
msgstr "Prodotti che l'utente ha contrassegnato come desiderati"
-#: engine/core/models.py:934
+#: engine/core/models.py:957
msgid "user who owns this wishlist"
msgstr "Utente che possiede questa wishlist"
-#: engine/core/models.py:935
+#: engine/core/models.py:958
msgid "wishlist owner"
msgstr "Proprietario della lista dei desideri"
-#: engine/core/models.py:943
+#: engine/core/models.py:966
msgid "wishlist"
msgstr "Lista dei desideri"
-#: engine/core/models.py:985
+#: engine/core/models.py:1008
msgid ""
"Represents a documentary record tied to a product. This class is used to "
"store information about documentaries related to specific products, "
"including file uploads and their metadata. It contains methods and "
"properties to handle the file type and storage path for the documentary "
-"files. It extends functionality from specific mixins and provides additional"
-" custom features."
+"files. It extends functionality from specific mixins and provides additional "
+"custom features."
msgstr ""
-"Rappresenta un record documentario legato a un prodotto. Questa classe viene"
-" utilizzata per memorizzare informazioni sui documentari relativi a prodotti"
-" specifici, compresi i file caricati e i relativi metadati. Contiene metodi "
-"e proprietà per gestire il tipo di file e il percorso di archiviazione dei "
+"Rappresenta un record documentario legato a un prodotto. Questa classe viene "
+"utilizzata per memorizzare informazioni sui documentari relativi a prodotti "
+"specifici, compresi i file caricati e i relativi metadati. Contiene metodi e "
+"proprietà per gestire il tipo di file e il percorso di archiviazione dei "
"file documentari. Estende le funzionalità di mixin specifici e fornisce "
"ulteriori caratteristiche personalizzate."
-#: engine/core/models.py:998
+#: engine/core/models.py:1023
msgid "documentary"
msgstr "Documentario"
-#: engine/core/models.py:999
+#: engine/core/models.py:1024
msgid "documentaries"
msgstr "Documentari"
-#: engine/core/models.py:1009
+#: engine/core/models.py:1034
msgid "unresolved"
msgstr "Non risolto"
-#: engine/core/models.py:1014
+#: engine/core/models.py:1039
msgid ""
-"Represents an address entity that includes location details and associations"
-" with a user. Provides functionality for geographic and address data "
-"storage, as well as integration with geocoding services. This class is "
-"designed to store detailed address information including components like "
-"street, city, region, country, and geolocation (longitude and latitude). It "
-"supports integration with geocoding APIs, enabling the storage of raw API "
-"responses for further processing or inspection. The class also allows "
-"associating an address with a user, facilitating personalized data handling."
+"Represents an address entity that includes location details and associations "
+"with a user. Provides functionality for geographic and address data storage, "
+"as well as integration with geocoding services. This class is designed to "
+"store detailed address information including components like street, city, "
+"region, country, and geolocation (longitude and latitude). It supports "
+"integration with geocoding APIs, enabling the storage of raw API responses "
+"for further processing or inspection. The class also allows associating an "
+"address with a user, facilitating personalized data handling."
msgstr ""
"Rappresenta un'entità indirizzo che include dettagli sulla posizione e "
"associazioni con un utente. Fornisce funzionalità per la memorizzazione di "
@@ -2269,59 +2274,59 @@ msgstr ""
"classe consente inoltre di associare un indirizzo a un utente, facilitando "
"la gestione personalizzata dei dati."
-#: engine/core/models.py:1029
+#: engine/core/models.py:1054
msgid "address line for the customer"
msgstr "Indirizzo del cliente"
-#: engine/core/models.py:1030
+#: engine/core/models.py:1055
msgid "address line"
msgstr "Linea di indirizzo"
-#: engine/core/models.py:1032
+#: engine/core/models.py:1057
msgid "street"
msgstr "Via"
-#: engine/core/models.py:1033
+#: engine/core/models.py:1058
msgid "district"
msgstr "Distretto"
-#: engine/core/models.py:1034
+#: engine/core/models.py:1059
msgid "city"
msgstr "Città"
-#: engine/core/models.py:1035
+#: engine/core/models.py:1060
msgid "region"
msgstr "Regione"
-#: engine/core/models.py:1036
+#: engine/core/models.py:1061
msgid "postal code"
msgstr "Codice postale"
-#: engine/core/models.py:1037
+#: engine/core/models.py:1062
msgid "country"
msgstr "Paese"
-#: engine/core/models.py:1044
+#: engine/core/models.py:1069
msgid "geolocation point: (longitude, latitude)"
msgstr "Punto di geolocalizzazione(Longitudine, Latitudine)"
-#: engine/core/models.py:1047
+#: engine/core/models.py:1075
msgid "full JSON response from geocoder for this address"
msgstr "Risposta JSON completa di geocoder per questo indirizzo"
-#: engine/core/models.py:1052
+#: engine/core/models.py:1081
msgid "stored JSON response from the geocoding service"
msgstr "Risposta JSON memorizzata dal servizio di geocodifica"
-#: engine/core/models.py:1060
+#: engine/core/models.py:1091
msgid "address"
msgstr "Indirizzo"
-#: engine/core/models.py:1061
+#: engine/core/models.py:1092
msgid "addresses"
msgstr "Indirizzi"
-#: engine/core/models.py:1073
+#: engine/core/models.py:1104
msgid ""
"Represents a promotional code that can be used for discounts, managing its "
"validity, type of discount, and application. The PromoCode class stores "
@@ -2330,250 +2335,248 @@ msgid ""
"any), and status of its usage. It includes functionality to validate and "
"apply the promo code to an order while ensuring constraints are met."
msgstr ""
-"Rappresenta un codice promozionale che può essere utilizzato per gli sconti,"
-" gestendone la validità, il tipo di sconto e l'applicazione. La classe "
+"Rappresenta un codice promozionale che può essere utilizzato per gli sconti, "
+"gestendone la validità, il tipo di sconto e l'applicazione. La classe "
"PromoCode memorizza i dettagli di un codice promozionale, tra cui il suo "
"identificatore univoco, le proprietà dello sconto (importo o percentuale), "
"il periodo di validità, l'utente associato (se presente) e lo stato di "
"utilizzo. Include funzionalità per convalidare e applicare il codice "
"promozionale a un ordine, assicurando il rispetto dei vincoli."
-#: engine/core/models.py:1087
+#: engine/core/models.py:1118
msgid "unique code used by a user to redeem a discount"
msgstr "Codice univoco utilizzato da un utente per riscattare uno sconto"
-#: engine/core/models.py:1088
+#: engine/core/models.py:1119
msgid "promo code identifier"
msgstr "Identificatore del codice promozionale"
-#: engine/core/models.py:1095
+#: engine/core/models.py:1126
msgid "fixed discount amount applied if percent is not used"
-msgstr ""
-"Importo fisso dello sconto applicato se non si utilizza la percentuale"
+msgstr "Importo fisso dello sconto applicato se non si utilizza la percentuale"
-#: engine/core/models.py:1096
+#: engine/core/models.py:1127
msgid "fixed discount amount"
msgstr "Importo fisso dello sconto"
-#: engine/core/models.py:1102
+#: engine/core/models.py:1133
msgid "percentage discount applied if fixed amount is not used"
msgstr "Sconto percentuale applicato se l'importo fisso non viene utilizzato"
-#: engine/core/models.py:1103
+#: engine/core/models.py:1134
msgid "percentage discount"
msgstr "Sconto percentuale"
-#: engine/core/models.py:1108
+#: engine/core/models.py:1139
msgid "timestamp when the promocode expires"
msgstr "Data di scadenza del codice promozionale"
-#: engine/core/models.py:1109
+#: engine/core/models.py:1140
msgid "end validity time"
msgstr "Tempo di validità finale"
-#: engine/core/models.py:1114
+#: engine/core/models.py:1145
msgid "timestamp from which this promocode is valid"
msgstr "Data a partire dalla quale il codice promozionale è valido"
-#: engine/core/models.py:1115
+#: engine/core/models.py:1146
msgid "start validity time"
msgstr "Ora di inizio validità"
-#: engine/core/models.py:1120
+#: engine/core/models.py:1151
msgid "timestamp when the promocode was used, blank if not used yet"
msgstr ""
"Timestamp in cui è stato utilizzato il codice promozionale, vuoto se non "
"ancora utilizzato"
-#: engine/core/models.py:1121
+#: engine/core/models.py:1152
msgid "usage timestamp"
msgstr "Timestamp d'uso"
-#: engine/core/models.py:1126
+#: engine/core/models.py:1157
msgid "user assigned to this promocode if applicable"
msgstr "Utente assegnato a questo codice promozionale, se applicabile"
-#: engine/core/models.py:1127
+#: engine/core/models.py:1158
msgid "assigned user"
msgstr "Utente assegnato"
-#: engine/core/models.py:1134
+#: engine/core/models.py:1165
msgid "promo code"
msgstr "Codice promozionale"
-#: engine/core/models.py:1135
+#: engine/core/models.py:1166
msgid "promo codes"
msgstr "Codici promozionali"
-#: engine/core/models.py:1150
+#: engine/core/models.py:1182
msgid ""
"only one type of discount should be defined (amount or percent), but not "
"both or neither."
msgstr ""
-"È necessario definire un solo tipo di sconto (importo o percentuale), ma non"
-" entrambi o nessuno."
+"È necessario definire un solo tipo di sconto (importo o percentuale), ma non "
+"entrambi o nessuno."
-#: engine/core/models.py:1171
+#: engine/core/models.py:1204
msgid "promocode already used"
msgstr "Il codice promozionale è già stato utilizzato"
-#: engine/core/models.py:1187
+#: engine/core/models.py:1226
#, python-brace-format
msgid "invalid discount type for promocode {self.uuid}"
msgstr "Tipo di sconto non valido per il codice promozionale {self.uuid}!"
-#: engine/core/models.py:1196
+#: engine/core/models.py:1235
msgid ""
"Represents an order placed by a user. This class models an order within the "
"application, including its various attributes such as billing and shipping "
-"information, status, associated user, notifications, and related operations."
-" Orders can have associated products, promotions can be applied, addresses "
+"information, status, associated user, notifications, and related operations. "
+"Orders can have associated products, promotions can be applied, addresses "
"set, and shipping or billing details updated. Equally, functionality "
"supports managing the products in the order lifecycle."
msgstr ""
"Rappresenta un ordine effettuato da un utente. Questa classe modella un "
-"ordine all'interno dell'applicazione, includendo i suoi vari attributi, come"
-" le informazioni di fatturazione e spedizione, lo stato, l'utente associato,"
-" le notifiche e le operazioni correlate. Gli ordini possono avere prodotti "
+"ordine all'interno dell'applicazione, includendo i suoi vari attributi, come "
+"le informazioni di fatturazione e spedizione, lo stato, l'utente associato, "
+"le notifiche e le operazioni correlate. Gli ordini possono avere prodotti "
"associati, possono essere applicate promozioni, impostati indirizzi e "
"aggiornati i dettagli di spedizione o fatturazione. Allo stesso modo, la "
-"funzionalità supporta la gestione dei prodotti nel ciclo di vita "
-"dell'ordine."
+"funzionalità supporta la gestione dei prodotti nel ciclo di vita dell'ordine."
-#: engine/core/models.py:1213
+#: engine/core/models.py:1252
msgid "the billing address used for this order"
msgstr "L'indirizzo di fatturazione utilizzato per questo ordine"
-#: engine/core/models.py:1221
+#: engine/core/models.py:1260
msgid "optional promo code applied to this order"
msgstr "Codice promozionale opzionale applicato a questo ordine"
-#: engine/core/models.py:1222
+#: engine/core/models.py:1261
msgid "applied promo code"
msgstr "Codice promozionale applicato"
-#: engine/core/models.py:1230
+#: engine/core/models.py:1269
msgid "the shipping address used for this order"
msgstr "L'indirizzo di spedizione utilizzato per questo ordine"
-#: engine/core/models.py:1231
+#: engine/core/models.py:1270
msgid "shipping address"
msgstr "Indirizzo di spedizione"
-#: engine/core/models.py:1237
+#: engine/core/models.py:1276
msgid "current status of the order in its lifecycle"
msgstr "Stato attuale dell'ordine nel suo ciclo di vita"
-#: engine/core/models.py:1238
+#: engine/core/models.py:1277
msgid "order status"
msgstr "Stato dell'ordine"
-#: engine/core/models.py:1243 engine/core/models.py:1769
+#: engine/core/models.py:1282 engine/core/models.py:1881
msgid "json structure of notifications to display to users"
msgstr ""
"Struttura JSON delle notifiche da mostrare agli utenti; nell'interfaccia "
"utente dell'amministratore viene utilizzata la visualizzazione a tabella."
-#: engine/core/models.py:1249
+#: engine/core/models.py:1288
msgid "json representation of order attributes for this order"
msgstr "Rappresentazione JSON degli attributi dell'ordine per questo ordine"
-#: engine/core/models.py:1255
+#: engine/core/models.py:1294
msgid "the user who placed the order"
msgstr "L'utente che ha effettuato l'ordine"
-#: engine/core/models.py:1256
+#: engine/core/models.py:1295
msgid "user"
msgstr "Utente"
-#: engine/core/models.py:1262
+#: engine/core/models.py:1301
msgid "the timestamp when the order was finalized"
msgstr "Il timestamp del momento in cui l'ordine è stato finalizzato"
-#: engine/core/models.py:1263
+#: engine/core/models.py:1302
msgid "buy time"
msgstr "Acquista tempo"
-#: engine/core/models.py:1270
+#: engine/core/models.py:1309
msgid "a human-readable identifier for the order"
msgstr "Un identificatore leggibile dall'uomo per l'ordine"
-#: engine/core/models.py:1271
+#: engine/core/models.py:1310
msgid "human readable id"
msgstr "ID leggibile dall'uomo"
-#: engine/core/models.py:1277
+#: engine/core/models.py:1316
msgid "order"
msgstr "Ordine"
-#: engine/core/models.py:1319
+#: engine/core/models.py:1363
msgid "a user must have only one pending order at a time"
msgstr "Un utente può avere un solo ordine pendente alla volta!"
-#: engine/core/models.py:1351
+#: engine/core/models.py:1396
msgid "you cannot add products to an order that is not a pending one"
msgstr ""
"Non è possibile aggiungere prodotti a un ordine che non sia in sospeso."
-#: engine/core/models.py:1356
+#: engine/core/models.py:1402
msgid "you cannot add inactive products to order"
msgstr "Non è possibile aggiungere all'ordine prodotti inattivi"
-#: engine/core/models.py:1373
+#: engine/core/models.py:1424
msgid "you cannot add more products than available in stock"
msgstr ""
"Non è possibile aggiungere più prodotti di quelli disponibili in magazzino"
-#: engine/core/models.py:1395 engine/core/models.py:1420
-#: engine/core/models.py:1428
+#: engine/core/models.py:1448 engine/core/models.py:1477
+#: engine/core/models.py:1487
msgid "you cannot remove products from an order that is not a pending one"
msgstr "Non è possibile rimuovere i prodotti da un ordine che non è in corso."
-#: engine/core/models.py:1416
+#: engine/core/models.py:1472
#, python-brace-format
msgid "{name} does not exist with query <{query}>"
msgstr "{name} non esiste con la query <{query}>!"
-#: engine/core/models.py:1448
+#: engine/core/models.py:1511
msgid "promocode does not exist"
msgstr "Il codice promozionale non esiste"
-#: engine/core/models.py:1454
+#: engine/core/models.py:1526
msgid "you can only buy physical products with shipping address specified"
msgstr ""
"È possibile acquistare solo prodotti fisici con indirizzo di spedizione "
"specificato!"
-#: engine/core/models.py:1473
+#: engine/core/models.py:1547
msgid "address does not exist"
msgstr "L'indirizzo non esiste"
-#: engine/core/models.py:1494 engine/core/models.py:1563
+#: engine/core/models.py:1569 engine/core/models.py:1648
msgid "you can not buy at this moment, please try again in a few minutes"
msgstr ""
"In questo momento non è possibile acquistare, riprovare tra qualche minuto."
-#: engine/core/models.py:1497 engine/core/models.py:1559
+#: engine/core/models.py:1575 engine/core/models.py:1641
msgid "invalid force value"
msgstr "Valore di forza non valido"
-#: engine/core/models.py:1503 engine/core/models.py:1566
+#: engine/core/models.py:1581 engine/core/models.py:1652
msgid "you cannot purchase an empty order!"
msgstr "Non è possibile acquistare un ordine vuoto!"
-#: engine/core/models.py:1522
+#: engine/core/models.py:1602
msgid "you cannot buy an order without a user"
msgstr "Non è possibile acquistare un ordine senza un utente!"
-#: engine/core/models.py:1536
+#: engine/core/models.py:1616
msgid "a user without a balance cannot buy with balance"
msgstr "Un utente senza saldo non può acquistare con il saldo!"
-#: engine/core/models.py:1541
+#: engine/core/models.py:1622
msgid "insufficient funds to complete the order"
msgstr "Fondi insufficienti per completare l'ordine"
-#: engine/core/models.py:1575
+#: engine/core/models.py:1663
msgid ""
"you cannot buy without registration, please provide the following "
"information: customer name, customer email, customer phone number"
@@ -2582,7 +2585,7 @@ msgstr ""
"seguenti informazioni: nome del cliente, e-mail del cliente, numero di "
"telefono del cliente"
-#: engine/core/models.py:1584
+#: engine/core/models.py:1674
#, python-brace-format
msgid ""
"invalid payment method: {payment_method} from {available_payment_methods}"
@@ -2590,7 +2593,7 @@ msgstr ""
"Metodo di pagamento non valido: {payment_method} da "
"{available_payment_methods}!"
-#: engine/core/models.py:1699
+#: engine/core/models.py:1805
msgid ""
"Manages user feedback for products. This class is designed to capture and "
"store user feedback for specific products that they have purchased. It "
@@ -2602,36 +2605,35 @@ msgstr ""
"per catturare e memorizzare i commenti degli utenti su prodotti specifici "
"che hanno acquistato. Contiene attributi per memorizzare i commenti degli "
"utenti, un riferimento al prodotto correlato nell'ordine e una valutazione "
-"assegnata dall'utente. La classe utilizza campi del database per modellare e"
-" gestire efficacemente i dati di feedback."
+"assegnata dall'utente. La classe utilizza campi del database per modellare e "
+"gestire efficacemente i dati di feedback."
-#: engine/core/models.py:1711
+#: engine/core/models.py:1817
msgid "user-provided comments about their experience with the product"
msgstr "Commenti degli utenti sulla loro esperienza con il prodotto"
-#: engine/core/models.py:1712
+#: engine/core/models.py:1818
msgid "feedback comments"
msgstr "Commenti di feedback"
-#: engine/core/models.py:1719
-msgid ""
-"references the specific product in an order that this feedback is about"
+#: engine/core/models.py:1826
+msgid "references the specific product in an order that this feedback is about"
msgstr ""
"Riferisce il prodotto specifico in un ordine di cui si tratta il feedback."
-#: engine/core/models.py:1720
+#: engine/core/models.py:1828
msgid "related order product"
msgstr "Prodotto correlato all'ordine"
-#: engine/core/models.py:1725
+#: engine/core/models.py:1833
msgid "user-assigned rating for the product"
msgstr "Valutazione del prodotto assegnata dall'utente"
-#: engine/core/models.py:1726
+#: engine/core/models.py:1834
msgid "product rating"
msgstr "Valutazione del prodotto"
-#: engine/core/models.py:1742
+#: engine/core/models.py:1854
msgid ""
"Represents products associated with orders and their attributes. The "
"OrderProduct model maintains information about a product that is part of an "
@@ -2654,116 +2656,116 @@ msgstr ""
"modello si integra con i modelli Ordine e Prodotto e memorizza un "
"riferimento ad essi."
-#: engine/core/models.py:1757
+#: engine/core/models.py:1869
msgid "the price paid by the customer for this product at purchase time"
msgstr ""
"Il prezzo pagato dal cliente per questo prodotto al momento dell'acquisto."
-#: engine/core/models.py:1758
+#: engine/core/models.py:1870
msgid "purchase price at order time"
msgstr "Prezzo di acquisto al momento dell'ordine"
-#: engine/core/models.py:1763
+#: engine/core/models.py:1875
msgid "internal comments for admins about this ordered product"
msgstr "Commenti interni per gli amministratori su questo prodotto ordinato"
-#: engine/core/models.py:1764
+#: engine/core/models.py:1876
msgid "internal comments"
msgstr "Commenti interni"
-#: engine/core/models.py:1770
+#: engine/core/models.py:1882
msgid "user notifications"
msgstr "Notifiche degli utenti"
-#: engine/core/models.py:1775
+#: engine/core/models.py:1887
msgid "json representation of this item's attributes"
msgstr "Rappresentazione JSON degli attributi di questo elemento"
-#: engine/core/models.py:1776
+#: engine/core/models.py:1888
msgid "ordered product attributes"
msgstr "Attributi del prodotto ordinati"
-#: engine/core/models.py:1781
+#: engine/core/models.py:1893
msgid "reference to the parent order that contains this product"
msgstr "Riferimento all'ordine padre che contiene questo prodotto"
-#: engine/core/models.py:1782
+#: engine/core/models.py:1894
msgid "parent order"
msgstr "Ordine dei genitori"
-#: engine/core/models.py:1791
+#: engine/core/models.py:1903
msgid "the specific product associated with this order line"
msgstr "Il prodotto specifico associato a questa riga d'ordine"
-#: engine/core/models.py:1798
+#: engine/core/models.py:1910
msgid "quantity of this specific product in the order"
msgstr "Quantità di questo prodotto specifico nell'ordine"
-#: engine/core/models.py:1799
+#: engine/core/models.py:1911
msgid "product quantity"
msgstr "Quantità di prodotto"
-#: engine/core/models.py:1806
+#: engine/core/models.py:1918
msgid "current status of this product in the order"
msgstr "Stato attuale di questo prodotto nell'ordine"
-#: engine/core/models.py:1807
+#: engine/core/models.py:1919
msgid "product line status"
msgstr "Stato della linea di prodotti"
-#: engine/core/models.py:1872
+#: engine/core/models.py:1986
msgid "order product must have an order"
msgstr "L'ordine-prodotto deve avere un ordine associato!"
-#: engine/core/models.py:1874
+#: engine/core/models.py:1988
#, python-brace-format
msgid "wrong action specified for feedback: {action}"
msgstr "Azione errata specificata per il feedback: {action}!"
-#: engine/core/models.py:1888
+#: engine/core/models.py:2005
msgid "you cannot feedback an order which is not received"
msgstr "non è possibile dare un riscontro a un ordine non ricevuto"
-#: engine/core/models.py:1894
+#: engine/core/models.py:2014
msgid "name"
msgstr "Nome"
-#: engine/core/models.py:1895
+#: engine/core/models.py:2016
msgid "URL of the integration"
msgstr "URL dell'integrazione"
-#: engine/core/models.py:1896
+#: engine/core/models.py:2019
msgid "authentication credentials"
msgstr "Credenziali di autenticazione"
-#: engine/core/models.py:1918
+#: engine/core/models.py:2042
msgid "you can only have one default CRM provider"
msgstr "È possibile avere un solo provider CRM predefinito"
-#: engine/core/models.py:1928
+#: engine/core/models.py:2052
msgid "CRM"
msgstr "CRM"
-#: engine/core/models.py:1929
+#: engine/core/models.py:2053
msgid "CRMs"
msgstr "CRM"
-#: engine/core/models.py:1941
+#: engine/core/models.py:2069
msgid "order CRM link"
msgstr "Link al CRM dell'ordine"
-#: engine/core/models.py:1942
+#: engine/core/models.py:2070
msgid "orders CRM links"
msgstr "Link al CRM degli ordini"
-#: engine/core/models.py:1947
+#: engine/core/models.py:2075
msgid ""
"Represents the downloading functionality for digital assets associated with "
"orders. The DigitalAssetDownload class provides the ability to manage and "
"access downloads related to order products. It maintains information about "
-"the associated order product, the number of downloads, and whether the asset"
-" is publicly visible. It includes a method to generate a URL for downloading"
-" the asset when the associated order is in a completed status."
+"the associated order product, the number of downloads, and whether the asset "
+"is publicly visible. It includes a method to generate a URL for downloading "
+"the asset when the associated order is in a completed status."
msgstr ""
"Rappresenta la funzionalità di download degli asset digitali associati agli "
"ordini. La classe DigitalAssetDownload offre la possibilità di gestire e "
@@ -2773,20 +2775,20 @@ msgstr ""
"il download della risorsa quando l'ordine associato è in uno stato "
"completato."
-#: engine/core/models.py:1961
+#: engine/core/models.py:2091
msgid "download"
msgstr "Scaricare"
-#: engine/core/models.py:1962
+#: engine/core/models.py:2092
msgid "downloads"
msgstr "Scaricamento"
-#: engine/core/serializers/utility.py:89
+#: engine/core/serializers/utility.py:91
msgid ""
"you must provide a comment, rating, and order product uuid to add feedback."
msgstr ""
-"per aggiungere un feedback è necessario fornire un commento, una valutazione"
-" e l'uuid del prodotto dell'ordine."
+"per aggiungere un feedback è necessario fornire un commento, una valutazione "
+"e l'uuid del prodotto dell'ordine."
#: engine/core/sitemaps.py:25
msgid "Home"
@@ -2978,7 +2980,8 @@ msgstr "Hello %(order.user.first_name)s,"
#, python-format
msgid ""
"thank you for your order #%(order.pk)s! we are pleased to inform you that\n"
-" we have taken your order into work. below are the details of your\n"
+" we have taken your order into work. below are "
+"the details of your\n"
" order:"
msgstr ""
"Grazie per il vostro ordine #%(order.pk)s! Siamo lieti di informarla che "
@@ -3007,8 +3010,8 @@ msgid ""
"if you have any questions, feel free to contact our support at\n"
" %(config.EMAIL_HOST_USER)s."
msgstr ""
-"Per qualsiasi domanda, non esitate a contattare il nostro supporto al numero"
-" %(config.EMAIL_HOST_USER)s."
+"Per qualsiasi domanda, non esitate a contattare il nostro supporto al numero "
+"%(config.EMAIL_HOST_USER)s."
#: engine/core/templates/digital_order_created_email.html:133
#, python-format
@@ -3060,8 +3063,8 @@ msgid ""
"if you have any questions, feel free to contact our support at\n"
" %(contact_email)s."
msgstr ""
-"Per qualsiasi domanda, non esitate a contattare il nostro supporto al numero"
-" %(contact_email)s."
+"Per qualsiasi domanda, non esitate a contattare il nostro supporto al numero "
+"%(contact_email)s."
#: engine/core/templates/digital_order_delivered_email.html:165
#: engine/core/templates/promocode_granted_email.html:108
@@ -3093,7 +3096,8 @@ msgstr ""
#: engine/core/templates/shipped_order_created_email.html:101
#: engine/core/templates/shipped_order_delivered_email.html:101
msgid ""
-"thank you for your order! we are pleased to confirm your purchase. below are\n"
+"thank you for your order! we are pleased to confirm your purchase. below "
+"are\n"
" the details of your order:"
msgstr ""
"Grazie per il vostro ordine! Siamo lieti di confermare il suo acquisto. Di "
@@ -3124,11 +3128,11 @@ msgstr ""
"tutti i diritti\n"
" riservato"
-#: engine/core/utils/caching.py:44
+#: engine/core/utils/caching.py:48
msgid "both data and timeout are required"
msgstr "Sono richiesti sia i dati che il timeout"
-#: engine/core/utils/caching.py:46
+#: engine/core/utils/caching.py:51
msgid "invalid timeout value, it must be between 0 and 216000 seconds"
msgstr ""
"Valore di timeout non valido, deve essere compreso tra 0 e 216000 secondi."
@@ -3138,17 +3142,17 @@ msgstr ""
msgid "{settings.PROJECT_NAME} | contact us initiated"
msgstr "{settings.PROJECT_NAME} | contattaci iniziato"
-#: engine/core/utils/emailing.py:73
+#: engine/core/utils/emailing.py:81
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order confirmation"
msgstr "{settings.PROJECT_NAME} | Conferma d'ordine"
-#: engine/core/utils/emailing.py:105
+#: engine/core/utils/emailing.py:115
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order delivered"
msgstr "{settings.PROJECT_NAME} | ordine consegnato"
-#: engine/core/utils/emailing.py:188
+#: engine/core/utils/emailing.py:203
#, python-brace-format
msgid "{settings.PROJECT_NAME} | promocode granted"
msgstr "{settings.PROJECT_NAME} | promocode granted"
@@ -3161,14 +3165,14 @@ msgstr "Non si ha il permesso di eseguire questa azione."
msgid "NOMINATIM_URL must be configured."
msgstr "Il parametro NOMINATIM_URL deve essere configurato!"
-#: engine/core/validators.py:19
+#: engine/core/validators.py:21
#, python-brace-format
msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels"
msgstr ""
-"Le dimensioni dell'immagine non devono superare w{max_width} x h{max_height}"
-" pixel"
+"Le dimensioni dell'immagine non devono superare w{max_width} x h{max_height} "
+"pixel"
-#: engine/core/views.py:91
+#: engine/core/views.py:105
msgid ""
"Handles the request for the sitemap index and returns an XML response. It "
"ensures the response includes the appropriate content type header for XML."
@@ -3177,7 +3181,7 @@ msgstr ""
"XML. Assicura che la risposta includa l'intestazione del tipo di contenuto "
"appropriato per XML."
-#: engine/core/views.py:106
+#: engine/core/views.py:120
msgid ""
"Handles the detailed view response for a sitemap. This function processes "
"the request, fetches the appropriate sitemap detail response, and sets the "
@@ -3187,17 +3191,17 @@ msgstr ""
"funzione elabora la richiesta, recupera la risposta dettagliata della "
"sitemap e imposta l'intestazione Content-Type per XML."
-#: engine/core/views.py:141
+#: engine/core/views.py:156
msgid ""
"Returns a list of supported languages and their corresponding information."
msgstr ""
"Restituisce un elenco di lingue supportate e le informazioni corrispondenti."
-#: engine/core/views.py:173
+#: engine/core/views.py:183
msgid "Returns the parameters of the website as a JSON object."
msgstr "Restituisce i parametri del sito web come oggetto JSON."
-#: engine/core/views.py:192
+#: engine/core/views.py:199
msgid ""
"Handles cache operations such as reading and setting cache data with a "
"specified key and timeout."
@@ -3205,11 +3209,11 @@ msgstr ""
"Gestisce le operazioni di cache, come la lettura e l'impostazione dei dati "
"della cache con una chiave e un timeout specificati."
-#: engine/core/views.py:219
+#: engine/core/views.py:221
msgid "Handles `contact us` form submissions."
msgstr "Gestisce l'invio del modulo `contatti`."
-#: engine/core/views.py:240
+#: engine/core/views.py:237
msgid ""
"Handles requests for processing and validating URLs from incoming POST "
"requests."
@@ -3217,58 +3221,67 @@ msgstr ""
"Gestisce le richieste di elaborazione e validazione degli URL dalle "
"richieste POST in arrivo."
-#: engine/core/views.py:280
+#: engine/core/views.py:274
msgid "Handles global search queries."
msgstr "Gestisce le query di ricerca globali."
-#: engine/core/views.py:295
+#: engine/core/views.py:290
msgid "Handles the logic of buying as a business without registration."
msgstr "Gestisce la logica dell'acquisto come azienda senza registrazione."
-#: engine/core/views.py:332
+#: engine/core/views.py:338
msgid ""
"Handles the downloading of a digital asset associated with an order.\n"
-"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the digital asset file located in the "
+"storage directory of the project. If the file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
msgstr ""
"Gestisce il download di una risorsa digitale associata a un ordine.\n"
-"Questa funzione tenta di servire il file della risorsa digitale che si trova nella directory di archiviazione del progetto. Se il file non viene trovato, viene generato un errore HTTP 404 per indicare che la risorsa non è disponibile."
+"Questa funzione tenta di servire il file della risorsa digitale che si trova "
+"nella directory di archiviazione del progetto. Se il file non viene trovato, "
+"viene generato un errore HTTP 404 per indicare che la risorsa non è "
+"disponibile."
-#: engine/core/views.py:343
+#: engine/core/views.py:349
msgid "order_product_uuid is required"
msgstr "order_product_uuid è obbligatorio"
-#: engine/core/views.py:350
+#: engine/core/views.py:356
msgid "order product does not exist"
msgstr "ordine prodotto non esistente"
-#: engine/core/views.py:353
+#: engine/core/views.py:359
msgid "you can only download the digital asset once"
msgstr "È possibile scaricare l'asset digitale una sola volta"
-#: engine/core/views.py:356
+#: engine/core/views.py:363
msgid "the order must be paid before downloading the digital asset"
msgstr "l'ordine deve essere pagato prima di scaricare il bene digitale"
-#: engine/core/views.py:362
+#: engine/core/views.py:370
msgid "the order product does not have a product"
msgstr "Il prodotto dell'ordine non ha un prodotto"
-#: engine/core/views.py:399
+#: engine/core/views.py:414
msgid "favicon not found"
msgstr "favicon non trovata"
-#: engine/core/views.py:404
+#: engine/core/views.py:419
msgid ""
"Handles requests for the favicon of a website.\n"
-"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the favicon file located in the static "
+"directory of the project. If the favicon file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
msgstr ""
"Gestisce le richieste per la favicon di un sito web.\n"
-"Questa funzione tenta di servire il file favicon situato nella cartella statica del progetto. Se il file favicon non viene trovato, viene generato un errore HTTP 404 per indicare che la risorsa non è disponibile."
+"Questa funzione tenta di servire il file favicon situato nella cartella "
+"statica del progetto. Se il file favicon non viene trovato, viene generato "
+"un errore HTTP 404 per indicare che la risorsa non è disponibile."
-#: engine/core/views.py:416
+#: engine/core/views.py:431
msgid ""
-"Redirects the request to the admin index page. The function handles incoming"
-" HTTP requests and redirects them to the Django admin interface index page. "
+"Redirects the request to the admin index page. The function handles incoming "
+"HTTP requests and redirects them to the Django admin interface index page. "
"It uses Django's `redirect` function for handling the HTTP redirection."
msgstr ""
"Reindirizza la richiesta alla pagina indice dell'amministrazione. La "
@@ -3276,20 +3289,20 @@ msgstr ""
"indice dell'interfaccia di amministrazione di Django. Utilizza la funzione "
"`redirect` di Django per gestire il reindirizzamento HTTP."
-#: engine/core/views.py:429
+#: engine/core/views.py:443
msgid "Returns current version of the eVibes. "
msgstr "Restituisce la versione corrente di eVibes."
-#: engine/core/views.py:623 engine/core/views.py:636
+#: engine/core/views.py:672 engine/core/views.py:687
#, python-format
msgid "Revenue & Orders (last %(days)d)"
msgstr "Entrate e ordini (ultimo %(days)d)"
-#: engine/core/views.py:793
+#: engine/core/views.py:868
msgid "Returns custom variables for Dashboard. "
msgstr "Restituisce le variabili personalizzate per Dashboard."
-#: engine/core/viewsets.py:136
+#: engine/core/viewsets.py:139
msgid ""
"Defines a viewset for managing Evibes-related operations. The EvibesViewSet "
"class inherits from ModelViewSet and provides functionality for handling "
@@ -3300,24 +3313,23 @@ msgstr ""
"Definisce un insieme di viste per la gestione delle operazioni relative a "
"Evibes. La classe EvibesViewSet eredita da ModelViewSet e fornisce "
"funzionalità per la gestione di azioni e operazioni sulle entità Evibes. "
-"Include il supporto per classi di serializzatori dinamici in base all'azione"
-" corrente, permessi personalizzabili e formati di rendering."
+"Include il supporto per classi di serializzatori dinamici in base all'azione "
+"corrente, permessi personalizzabili e formati di rendering."
-#: engine/core/viewsets.py:156
+#: engine/core/viewsets.py:160
msgid ""
-"Represents a viewset for managing AttributeGroup objects. Handles operations"
-" related to AttributeGroup, including filtering, serialization, and "
-"retrieval of data. This class is part of the application's API layer and "
-"provides a standardized way to process requests and responses for "
-"AttributeGroup data."
+"Represents a viewset for managing AttributeGroup objects. Handles operations "
+"related to AttributeGroup, including filtering, serialization, and retrieval "
+"of data. This class is part of the application's API layer and provides a "
+"standardized way to process requests and responses for AttributeGroup data."
msgstr ""
"Rappresenta un insieme di viste per la gestione degli oggetti "
-"AttributeGroup. Gestisce le operazioni relative agli AttributeGroup, tra cui"
-" il filtraggio, la serializzazione e il recupero dei dati. Questa classe fa "
+"AttributeGroup. Gestisce le operazioni relative agli AttributeGroup, tra cui "
+"il filtraggio, la serializzazione e il recupero dei dati. Questa classe fa "
"parte del livello API dell'applicazione e fornisce un modo standardizzato "
"per elaborare le richieste e le risposte per i dati di AttributeGroup."
-#: engine/core/viewsets.py:175
+#: engine/core/viewsets.py:179
msgid ""
"Handles operations related to Attribute objects within the application. "
"Provides a set of API endpoints to interact with Attribute data. This class "
@@ -3330,16 +3342,16 @@ msgstr ""
"dell'applicazione. Fornisce un insieme di endpoint API per interagire con i "
"dati Attribute. Questa classe gestisce l'interrogazione, il filtraggio e la "
"serializzazione degli oggetti Attribute, consentendo un controllo dinamico "
-"sui dati restituiti, come il filtraggio per campi specifici o il recupero di"
-" informazioni dettagliate o semplificate, a seconda della richiesta."
+"sui dati restituiti, come il filtraggio per campi specifici o il recupero di "
+"informazioni dettagliate o semplificate, a seconda della richiesta."
-#: engine/core/viewsets.py:194
+#: engine/core/viewsets.py:198
msgid ""
"A viewset for managing AttributeValue objects. This viewset provides "
"functionality for listing, retrieving, creating, updating, and deleting "
"AttributeValue objects. It integrates with Django REST Framework's viewset "
-"mechanisms and uses appropriate serializers for different actions. Filtering"
-" capabilities are provided through the DjangoFilterBackend."
+"mechanisms and uses appropriate serializers for different actions. Filtering "
+"capabilities are provided through the DjangoFilterBackend."
msgstr ""
"Un insieme di viste per la gestione degli oggetti AttributeValue. Questo "
"insieme di viste fornisce funzionalità per elencare, recuperare, creare, "
@@ -3348,7 +3360,7 @@ msgstr ""
"per le diverse azioni. Le funzionalità di filtraggio sono fornite da "
"DjangoFilterBackend."
-#: engine/core/viewsets.py:213
+#: engine/core/viewsets.py:217
msgid ""
"Manages views for Category-related operations. The CategoryViewSet class is "
"responsible for handling operations related to the Category model in the "
@@ -3363,7 +3375,7 @@ msgstr ""
"le autorizzazioni per garantire che solo gli utenti autorizzati possano "
"accedere a dati specifici."
-#: engine/core/viewsets.py:326
+#: engine/core/viewsets.py:346
msgid ""
"Represents a viewset for managing Brand instances. This class provides "
"functionality for querying, filtering, and serializing Brand objects. It "
@@ -3371,11 +3383,11 @@ msgid ""
"endpoints for Brand objects."
msgstr ""
"Rappresenta un insieme di viste per la gestione delle istanze del marchio. "
-"Questa classe fornisce funzionalità per interrogare, filtrare e serializzare"
-" gli oggetti Brand. Utilizza il framework ViewSet di Django per semplificare"
-" l'implementazione di endpoint API per gli oggetti Brand."
+"Questa classe fornisce funzionalità per interrogare, filtrare e serializzare "
+"gli oggetti Brand. Utilizza il framework ViewSet di Django per semplificare "
+"l'implementazione di endpoint API per gli oggetti Brand."
-#: engine/core/viewsets.py:438
+#: engine/core/viewsets.py:458
msgid ""
"Manages operations related to the `Product` model in the system. This class "
"provides a viewset for managing products, including their filtering, "
@@ -3388,12 +3400,12 @@ msgstr ""
"Gestisce le operazioni relative al modello `Product` nel sistema. Questa "
"classe fornisce un insieme di viste per la gestione dei prodotti, compreso "
"il loro filtraggio, la serializzazione e le operazioni su istanze "
-"specifiche. Si estende da `EvibesViewSet` per utilizzare funzionalità comuni"
-" e si integra con il framework Django REST per le operazioni API RESTful. "
+"specifiche. Si estende da `EvibesViewSet` per utilizzare funzionalità comuni "
+"e si integra con il framework Django REST per le operazioni API RESTful. "
"Include metodi per recuperare i dettagli del prodotto, applicare i permessi "
"e accedere ai feedback correlati di un prodotto."
-#: engine/core/viewsets.py:574
+#: engine/core/viewsets.py:605
msgid ""
"Represents a viewset for managing Vendor objects. This viewset allows "
"fetching, filtering, and serializing Vendor data. It defines the queryset, "
@@ -3401,38 +3413,38 @@ msgid ""
"actions. The purpose of this class is to provide streamlined access to "
"Vendor-related resources through the Django REST framework."
msgstr ""
-"Rappresenta un insieme di viste per la gestione degli oggetti Vendor. Questo"
-" insieme di viste consente di recuperare, filtrare e serializzare i dati del"
-" fornitore. Definisce il queryset, le configurazioni dei filtri e le classi "
+"Rappresenta un insieme di viste per la gestione degli oggetti Vendor. Questo "
+"insieme di viste consente di recuperare, filtrare e serializzare i dati del "
+"fornitore. Definisce il queryset, le configurazioni dei filtri e le classi "
"di serializzazione utilizzate per gestire le diverse azioni. Lo scopo di "
"questa classe è fornire un accesso semplificato alle risorse relative a "
"Vendor attraverso il framework REST di Django."
-#: engine/core/viewsets.py:594
+#: engine/core/viewsets.py:625
msgid ""
"Representation of a view set handling Feedback objects. This class manages "
"operations related to Feedback objects, including listing, filtering, and "
"retrieving details. The purpose of this view set is to provide different "
-"serializers for different actions and implement permission-based handling of"
-" accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
+"serializers for different actions and implement permission-based handling of "
+"accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
"use of Django's filtering system for querying data."
msgstr ""
"Rappresentazione di un insieme di viste che gestisce gli oggetti Feedback. "
-"Questa classe gestisce le operazioni relative agli oggetti Feedback, tra cui"
-" l'elencazione, il filtraggio e il recupero dei dettagli. Lo scopo di questo"
-" insieme di viste è fornire serializzatori diversi per azioni diverse e "
+"Questa classe gestisce le operazioni relative agli oggetti Feedback, tra cui "
+"l'elencazione, il filtraggio e il recupero dei dettagli. Lo scopo di questo "
+"insieme di viste è fornire serializzatori diversi per azioni diverse e "
"implementare una gestione basata sui permessi degli oggetti Feedback "
"accessibili. Estende l'insieme di base `EvibesViewSet` e fa uso del sistema "
"di filtraggio di Django per interrogare i dati."
-#: engine/core/viewsets.py:621
+#: engine/core/viewsets.py:652
msgid ""
"ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes "
"various endpoints for handling order operations such as adding or removing "
-"products, performing purchases for registered as well as unregistered users,"
-" and retrieving the current authenticated user's pending orders. The ViewSet"
-" uses multiple serializers based on the specific action being performed and "
+"products, performing purchases for registered as well as unregistered users, "
+"and retrieving the current authenticated user's pending orders. The ViewSet "
+"uses multiple serializers based on the specific action being performed and "
"enforces permissions accordingly while interacting with order data."
msgstr ""
"ViewSet per la gestione degli ordini e delle operazioni correlate. Questa "
@@ -3444,12 +3456,12 @@ msgstr ""
"serializzatori in base all'azione specifica da eseguire e applica le "
"autorizzazioni di conseguenza durante l'interazione con i dati degli ordini."
-#: engine/core/viewsets.py:825
+#: engine/core/viewsets.py:914
msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It "
-"includes filtering, permission checks, and serializer switching based on the"
-" requested action. Additionally, it provides a detailed action for handling "
+"includes filtering, permission checks, and serializer switching based on the "
+"requested action. Additionally, it provides a detailed action for handling "
"feedback on OrderProduct instances"
msgstr ""
"Fornisce un insieme di viste per la gestione delle entità OrderProduct. "
@@ -3459,13 +3471,12 @@ msgstr ""
"richiesta. Inoltre, fornisce un'azione dettagliata per gestire il feedback "
"sulle istanze di OrderProduct."
-#: engine/core/viewsets.py:879
+#: engine/core/viewsets.py:974
msgid "Manages operations related to Product images in the application. "
msgstr ""
-"Gestisce le operazioni relative alle immagini dei prodotti "
-"nell'applicazione."
+"Gestisce le operazioni relative alle immagini dei prodotti nell'applicazione."
-#: engine/core/viewsets.py:892
+#: engine/core/viewsets.py:988
msgid ""
"Manages the retrieval and handling of PromoCode instances through various "
"API actions."
@@ -3473,20 +3484,20 @@ msgstr ""
"Gestisce il recupero e la gestione delle istanze di PromoCode attraverso "
"varie azioni API."
-#: engine/core/viewsets.py:914
+#: engine/core/viewsets.py:1019
msgid "Represents a view set for managing promotions. "
msgstr "Rappresenta un insieme di viste per la gestione delle promozioni."
-#: engine/core/viewsets.py:927
+#: engine/core/viewsets.py:1032
msgid "Handles operations related to Stock data in the system."
msgstr "Gestisce le operazioni relative ai dati delle scorte nel sistema."
-#: engine/core/viewsets.py:941
+#: engine/core/viewsets.py:1046
msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the "
-"retrieval, modification, and customization of products within the wish list."
-" This ViewSet facilitates functionality such as adding, removing, and bulk "
+"retrieval, modification, and customization of products within the wish list. "
+"This ViewSet facilitates functionality such as adding, removing, and bulk "
"actions for wishlist products. Permission checks are integrated to ensure "
"that users can only manage their own wishlists unless explicit permissions "
"are granted."
@@ -3498,10 +3509,10 @@ msgstr ""
"ViewSet facilita funzionalità quali l'aggiunta, la rimozione e le azioni di "
"massa per i prodotti della lista dei desideri. I controlli delle "
"autorizzazioni sono integrati per garantire che gli utenti possano gestire "
-"solo la propria lista dei desideri, a meno che non vengano concessi permessi"
-" espliciti."
+"solo la propria lista dei desideri, a meno che non vengano concessi permessi "
+"espliciti."
-#: engine/core/viewsets.py:1056
+#: engine/core/viewsets.py:1183
msgid ""
"This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom "
@@ -3509,18 +3520,18 @@ msgid ""
"different HTTP methods, serializer overrides, and permission handling based "
"on the request context."
msgstr ""
-"Questa classe fornisce la funzionalità viewset per la gestione degli oggetti"
-" `Address`. La classe AddressViewSet consente operazioni CRUD, filtri e "
+"Questa classe fornisce la funzionalità viewset per la gestione degli oggetti "
+"`Address`. La classe AddressViewSet consente operazioni CRUD, filtri e "
"azioni personalizzate relative alle entità indirizzo. Include comportamenti "
"specializzati per diversi metodi HTTP, override del serializzatore e "
"gestione dei permessi in base al contesto della richiesta."
-#: engine/core/viewsets.py:1123
+#: engine/core/viewsets.py:1254
#, python-brace-format
msgid "Geocoding error: {e}"
msgstr "Errore di geocodifica: {e}"
-#: engine/core/viewsets.py:1131
+#: engine/core/viewsets.py:1262
msgid ""
"Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing "
diff --git a/engine/core/locale/ja_JP/LC_MESSAGES/django.po b/engine/core/locale/ja_JP/LC_MESSAGES/django.po
index 1b8ac8b9..5166ad81 100644
--- a/engine/core/locale/ja_JP/LC_MESSAGES/django.po
+++ b/engine/core/locale/ja_JP/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 22:12+0300\n"
+"POT-Creation-Date: 2025-12-18 19:09+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -19,117 +19,119 @@ msgstr "ユニークID"
#: engine/core/abstract.py:13
msgid "unique id is used to surely identify any database object"
-msgstr "ユニークIDは、データベースオブジェクトを確実に識別するために使用されます。"
+msgstr ""
+"ユニークIDは、データベースオブジェクトを確実に識別するために使用されます。"
#: engine/core/abstract.py:20
msgid "is active"
msgstr "アクティブ"
-#: engine/core/abstract.py:21
+#: engine/core/abstract.py:22
msgid ""
-"if set to false, this object can't be seen by users without needed "
-"permission"
-msgstr "falseに設定された場合、このオブジェクトは必要なパーミッションのないユーザーには見えない。"
+"if set to false, this object can't be seen by users without needed permission"
+msgstr ""
+"falseに設定された場合、このオブジェクトは必要なパーミッションのないユーザーに"
+"は見えない。"
-#: engine/core/abstract.py:23 engine/core/choices.py:18
+#: engine/core/abstract.py:26 engine/core/choices.py:18
msgid "created"
msgstr "作成"
-#: engine/core/abstract.py:23
+#: engine/core/abstract.py:26
msgid "when the object first appeared on the database"
msgstr "そのオブジェクトが初めてデータベースに登場した時"
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "modified"
msgstr "変形"
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "when the object was last modified"
msgstr "オブジェクトの最終編集日時"
-#: engine/core/admin.py:85
+#: engine/core/admin.py:94
msgid "translations"
msgstr "翻訳"
-#: engine/core/admin.py:89
+#: engine/core/admin.py:102
msgid "general"
msgstr "一般"
-#: engine/core/admin.py:91
+#: engine/core/admin.py:106
msgid "relations"
msgstr "関係"
-#: engine/core/admin.py:93
+#: engine/core/admin.py:111
msgid "additional info"
msgstr "追加情報"
-#: engine/core/admin.py:111
+#: engine/core/admin.py:133
msgid "metadata"
msgstr "メタデータ"
-#: engine/core/admin.py:118
+#: engine/core/admin.py:141
msgid "timestamps"
msgstr "タイムスタンプ"
-#: engine/core/admin.py:133
+#: engine/core/admin.py:157
#, python-format
msgid "activate selected %(verbose_name_plural)s"
msgstr "選択した%(verbose_name_plural)sをアクティブにする"
-#: engine/core/admin.py:138
+#: engine/core/admin.py:165
msgid "selected items have been activated."
msgstr "選択した項目がアクティブになりました!"
-#: engine/core/admin.py:144
+#: engine/core/admin.py:173
#, python-format
msgid "deactivate selected %(verbose_name_plural)s"
msgstr "選択された%(verbose_name_plural)sを非アクティブにする"
-#: engine/core/admin.py:149
+#: engine/core/admin.py:183
msgid "selected items have been deactivated."
msgstr "選択されたアイテムは無効化されました!"
-#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586
-#: engine/core/graphene/object_types.py:593 engine/core/models.py:801
-#: engine/core/models.py:809
+#: engine/core/admin.py:195 engine/core/graphene/object_types.py:650
+#: engine/core/graphene/object_types.py:657 engine/core/models.py:824
+#: engine/core/models.py:832
msgid "attribute value"
msgstr "属性値"
-#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75
-#: engine/core/models.py:810
+#: engine/core/admin.py:196 engine/core/graphene/object_types.py:75
+#: engine/core/models.py:833
msgid "attribute values"
msgstr "属性値"
-#: engine/core/admin.py:172
+#: engine/core/admin.py:207
msgid "image"
msgstr "画像"
-#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474
+#: engine/core/admin.py:208 engine/core/graphene/object_types.py:527
msgid "images"
msgstr "画像"
-#: engine/core/admin.py:184 engine/core/models.py:566
+#: engine/core/admin.py:219 engine/core/models.py:587
msgid "stock"
msgstr "在庫"
-#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640
+#: engine/core/admin.py:220 engine/core/graphene/object_types.py:710
msgid "stocks"
msgstr "株式"
-#: engine/core/admin.py:196 engine/core/models.py:1818
+#: engine/core/admin.py:231 engine/core/models.py:1930
msgid "order product"
msgstr "商品のご注文"
-#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389
-#: engine/core/models.py:1819
+#: engine/core/admin.py:232 engine/core/graphene/object_types.py:438
+#: engine/core/models.py:1931
msgid "order products"
msgstr "商品のご注文"
-#: engine/core/admin.py:210 engine/core/admin.py:211
+#: engine/core/admin.py:250 engine/core/admin.py:251
msgid "children"
msgstr "子供たち"
-#: engine/core/admin.py:977
+#: engine/core/admin.py:1059
msgid "Config"
msgstr "コンフィグ"
@@ -153,8 +155,7 @@ msgstr "配信"
msgid "canceled"
msgstr "キャンセル"
-#: engine/core/choices.py:8 engine/core/choices.py:16
-#: engine/core/choices.py:24
+#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24
msgid "failed"
msgstr "失敗"
@@ -182,1015 +183,1067 @@ msgstr "モメンタル"
msgid "successful"
msgstr "成功"
-#: engine/core/docs/drf/views.py:31
+#: engine/core/docs/drf/views.py:30
msgid "OpenAPI schema in selected format with selected language"
msgstr "選択された言語と選択されたフォーマットのOpenAPIスキーマ"
-#: engine/core/docs/drf/views.py:33
+#: engine/core/docs/drf/views.py:32
msgid ""
"OpenApi3 schema for this API. Format can be selected via content "
"negotiation. Language can be selected with Accept-Language and query "
"parameter both."
msgstr ""
-"この API の OpenApi3 スキーマ。フォーマットはコンテントネゴシエーションで選択できる。言語は Accept-Language "
-"とクエリパラメータで選択できる。"
+"この API の OpenApi3 スキーマ。フォーマットはコンテントネゴシエーションで選択"
+"できる。言語は Accept-Language とクエリパラメータで選択できる。"
-#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37
+#: engine/core/docs/drf/views.py:43 engine/core/graphene/mutations.py:37
msgid "cache I/O"
msgstr "キャッシュI/O"
-#: engine/core/docs/drf/views.py:46
+#: engine/core/docs/drf/views.py:45
msgid ""
"apply only a key to read permitted data from cache.\n"
"apply key, data and timeout with authentication to write data to cache."
msgstr ""
"許可されたデータをキャッシュから読み出すには、キーのみを適用する。\n"
-"キャッシュにデータを書き込むには、認証付きのキー、データ、タイムアウトを適用する。"
+"キャッシュにデータを書き込むには、認証付きのキー、データ、タイムアウトを適用"
+"する。"
-#: engine/core/docs/drf/views.py:62
+#: engine/core/docs/drf/views.py:63
msgid "get a list of supported languages"
msgstr "サポートされている言語のリストを取得する"
-#: engine/core/docs/drf/views.py:74
+#: engine/core/docs/drf/views.py:75
msgid "get application's exposable parameters"
msgstr "アプリケーションの公開可能なパラメータを取得する"
-#: engine/core/docs/drf/views.py:84
+#: engine/core/docs/drf/views.py:89
msgid "send a message to the support team"
msgstr "サポートチームにメッセージを送る"
-#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57
+#: engine/core/docs/drf/views.py:103 engine/core/graphene/mutations.py:59
msgid "request a CORSed URL"
msgstr "CORSされたURLを要求する。httpsのみ許可。"
-#: engine/core/docs/drf/views.py:112
+#: engine/core/docs/drf/views.py:119
msgid "Search between products, categories and brands"
msgstr "商品、カテゴリー、ブランド間の検索"
-#: engine/core/docs/drf/views.py:130
+#: engine/core/docs/drf/views.py:141
msgid "global search endpoint to query across project's tables"
msgstr "プロジェクト全体のテーブルを検索するグローバル検索エンドポイント"
-#: engine/core/docs/drf/views.py:139
+#: engine/core/docs/drf/views.py:150
msgid "purchase an order as a business"
msgstr "ビジネスとして注文を購入する"
-#: engine/core/docs/drf/views.py:146
+#: engine/core/docs/drf/views.py:158
msgid ""
"purchase an order as a business, using the provided `products` with "
"`product_uuid` and `attributes`."
-msgstr "提供された `product` と `product_uuid` と `attributes` を使用して、ビジネスとして注文を購入する。"
+msgstr ""
+"提供された `product` と `product_uuid` と `attributes` を使用して、ビジネスと"
+"して注文を購入する。"
-#: engine/core/docs/drf/views.py:164
+#: engine/core/docs/drf/views.py:177
msgid "download a digital asset from purchased digital order"
msgstr "購入したデジタル注文からデジタル資産をダウンロードする"
-#: engine/core/docs/drf/viewsets.py:61
+#: engine/core/docs/drf/viewsets.py:65
msgid "list all attribute groups (simple view)"
msgstr "すべての属性グループをリストアップ(シンプルビュー)"
-#: engine/core/docs/drf/viewsets.py:68
+#: engine/core/docs/drf/viewsets.py:75
msgid "retrieve a single attribute group (detailed view)"
msgstr "単一の属性グループを取得する(詳細表示)"
-#: engine/core/docs/drf/viewsets.py:75
+#: engine/core/docs/drf/viewsets.py:82
msgid "create an attribute group"
msgstr "属性グループの作成"
-#: engine/core/docs/drf/viewsets.py:82
+#: engine/core/docs/drf/viewsets.py:92
msgid "delete an attribute group"
msgstr "属性グループの削除"
-#: engine/core/docs/drf/viewsets.py:89
+#: engine/core/docs/drf/viewsets.py:99
msgid "rewrite an existing attribute group saving non-editables"
msgstr "既存の属性グループを書き換えて、編集不可能なものを保存する。"
-#: engine/core/docs/drf/viewsets.py:96
-msgid ""
-"rewrite some fields of an existing attribute group saving non-editables"
-msgstr "既存の属性グループのいくつかのフィールドを書き換え、編集不可能なものを保存する。"
+#: engine/core/docs/drf/viewsets.py:107
+msgid "rewrite some fields of an existing attribute group saving non-editables"
+msgstr ""
+"既存の属性グループのいくつかのフィールドを書き換え、編集不可能なものを保存す"
+"る。"
-#: engine/core/docs/drf/viewsets.py:106
+#: engine/core/docs/drf/viewsets.py:118
msgid "list all attributes (simple view)"
msgstr "すべての属性をリストアップ(シンプルな表示)"
-#: engine/core/docs/drf/viewsets.py:113
+#: engine/core/docs/drf/viewsets.py:128
msgid "retrieve a single attribute (detailed view)"
msgstr "単一の属性を取得する(詳細表示)"
-#: engine/core/docs/drf/viewsets.py:120
+#: engine/core/docs/drf/viewsets.py:135
msgid "create an attribute"
msgstr "属性を作成する"
-#: engine/core/docs/drf/viewsets.py:127
+#: engine/core/docs/drf/viewsets.py:142
msgid "delete an attribute"
msgstr "属性を削除する"
-#: engine/core/docs/drf/viewsets.py:134
+#: engine/core/docs/drf/viewsets.py:149
msgid "rewrite an existing attribute saving non-editables"
msgstr "既存の属性を書き換える。"
-#: engine/core/docs/drf/viewsets.py:141
+#: engine/core/docs/drf/viewsets.py:156
msgid "rewrite some fields of an existing attribute saving non-editables"
-msgstr "既存の属性のいくつかのフィールドを書き換え、編集不可能なものを保存する。"
+msgstr ""
+"既存の属性のいくつかのフィールドを書き換え、編集不可能なものを保存する。"
-#: engine/core/docs/drf/viewsets.py:151
+#: engine/core/docs/drf/viewsets.py:166
msgid "list all attribute values (simple view)"
msgstr "すべての属性値をリストアップ(シンプルビュー)"
-#: engine/core/docs/drf/viewsets.py:158
+#: engine/core/docs/drf/viewsets.py:176
msgid "retrieve a single attribute value (detailed view)"
msgstr "単一の属性値を取得する(詳細表示)"
-#: engine/core/docs/drf/viewsets.py:165
+#: engine/core/docs/drf/viewsets.py:183
msgid "create an attribute value"
msgstr "属性値の作成"
-#: engine/core/docs/drf/viewsets.py:172
+#: engine/core/docs/drf/viewsets.py:193
msgid "delete an attribute value"
msgstr "属性値の削除"
-#: engine/core/docs/drf/viewsets.py:179
+#: engine/core/docs/drf/viewsets.py:200
msgid "rewrite an existing attribute value saving non-editables"
msgstr "既存の属性値を書き換える。"
-#: engine/core/docs/drf/viewsets.py:186
-msgid ""
-"rewrite some fields of an existing attribute value saving non-editables"
-msgstr "既存の属性値のいくつかのフィールドを書き換え、編集不可能な値を保存する。"
+#: engine/core/docs/drf/viewsets.py:208
+msgid "rewrite some fields of an existing attribute value saving non-editables"
+msgstr ""
+"既存の属性値のいくつかのフィールドを書き換え、編集不可能な値を保存する。"
-#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197
+#: engine/core/docs/drf/viewsets.py:219 engine/core/docs/drf/viewsets.py:220
msgid "list all categories (simple view)"
msgstr "全カテゴリーを一覧表示(シンプル表示)"
-#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205
+#: engine/core/docs/drf/viewsets.py:230 engine/core/docs/drf/viewsets.py:231
msgid "retrieve a single category (detailed view)"
msgstr "単一のカテゴリーを取得する(詳細表示)"
-#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258
+#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:286
msgid "Category UUID or slug"
msgstr "カテゴリーUUIDまたはスラッグ"
-#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221
+#: engine/core/docs/drf/viewsets.py:246 engine/core/docs/drf/viewsets.py:247
msgid "create a category"
msgstr "カテゴリーを作成する"
-#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229
+#: engine/core/docs/drf/viewsets.py:254 engine/core/docs/drf/viewsets.py:255
msgid "delete a category"
msgstr "カテゴリーの削除"
-#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237
+#: engine/core/docs/drf/viewsets.py:262 engine/core/docs/drf/viewsets.py:263
msgid "rewrite an existing category saving non-editables"
msgstr "既存のカテゴリーを書き換え、編集不可能なものを保存する。"
-#: engine/core/docs/drf/viewsets.py:244 engine/core/docs/drf/viewsets.py:245
+#: engine/core/docs/drf/viewsets.py:270 engine/core/docs/drf/viewsets.py:272
msgid "rewrite some fields of an existing category saving non-editables"
msgstr "編集不可を保存している既存のカテゴリのいくつかのフィールドを書き換える"
-#: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704
-#: engine/core/docs/drf/viewsets.py:988
+#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:1046
#: engine/core/graphene/object_types.py:117
-#: engine/core/graphene/object_types.py:207
-#: engine/core/graphene/object_types.py:482
+#: engine/core/graphene/object_types.py:236
+#: engine/core/graphene/object_types.py:537
msgid "SEO Meta snapshot"
msgstr "SEOメタ・スナップショット"
-#: engine/core/docs/drf/viewsets.py:253
+#: engine/core/docs/drf/viewsets.py:281
msgid "returns a snapshot of the category's SEO meta data"
msgstr "カテゴリのSEOメタデータのスナップショットを返します。"
-#: engine/core/docs/drf/viewsets.py:274
+#: engine/core/docs/drf/viewsets.py:302
msgid "list all orders (simple view)"
msgstr "全カテゴリーを一覧表示(シンプル表示)"
-#: engine/core/docs/drf/viewsets.py:275
+#: engine/core/docs/drf/viewsets.py:303
msgid "for non-staff users, only their own orders are returned."
msgstr "スタッフ以外のユーザーについては、自分の注文のみが返却される。"
-#: engine/core/docs/drf/viewsets.py:281
+#: engine/core/docs/drf/viewsets.py:309
msgid ""
-"Case-insensitive substring search across human_readable_id, "
-"order_products.product.name, and order_products.product.partnumber"
+"Case-insensitive substring search across human_readable_id, order_products."
+"product.name, and order_products.product.partnumber"
msgstr ""
-"human_readable_id、order_products.product.name、order_products.product.partnumberの大文字小文字を区別しない部分文字列検索"
+"human_readable_id、order_products.product.name、order_products.product."
+"partnumberの大文字小文字を区別しない部分文字列検索"
-#: engine/core/docs/drf/viewsets.py:288
+#: engine/core/docs/drf/viewsets.py:316
msgid "Filter orders with buy_time >= this ISO 8601 datetime"
msgstr "buy_time >= このISO 8601の日時を持つ注文をフィルタリングする。"
-#: engine/core/docs/drf/viewsets.py:293
+#: engine/core/docs/drf/viewsets.py:321
msgid "Filter orders with buy_time <= this ISO 8601 datetime"
msgstr "buy_time <= このISO 8601の日付時間の注文をフィルタリングする。"
-#: engine/core/docs/drf/viewsets.py:298
+#: engine/core/docs/drf/viewsets.py:326
msgid "Filter by exact order UUID"
msgstr "正確な順序UUIDによるフィルタリング"
-#: engine/core/docs/drf/viewsets.py:303
+#: engine/core/docs/drf/viewsets.py:331
msgid "Filter by exact human-readable order ID"
msgstr "人間が読み取れる正確な注文IDによるフィルタリング"
-#: engine/core/docs/drf/viewsets.py:308
+#: engine/core/docs/drf/viewsets.py:336
msgid "Filter by user's email (case-insensitive exact match)"
-msgstr "ユーザーのEメールによるフィルタリング(大文字・小文字を区別しない完全一致)"
+msgstr ""
+"ユーザーのEメールによるフィルタリング(大文字・小文字を区別しない完全一致)"
-#: engine/core/docs/drf/viewsets.py:313
+#: engine/core/docs/drf/viewsets.py:341
msgid "Filter by user's UUID"
msgstr "ユーザーのUUIDによるフィルタリング"
-#: engine/core/docs/drf/viewsets.py:318
+#: engine/core/docs/drf/viewsets.py:347
msgid "Filter by order status (case-insensitive substring match)"
-msgstr "注文ステータスによるフィルタリング(大文字と小文字を区別しない部分文字列マッチ)"
-
-#: engine/core/docs/drf/viewsets.py:324
-msgid ""
-"Order by one of: uuid, human_readable_id, user_email, user, status, created,"
-" modified, buy_time, random. Prefix with '-' for descending (e.g. "
-"'-buy_time')."
msgstr ""
-"uuid、human_readable_id、user_email、user、status、created、modified、buy_time、randomのいずれかによる順序。降順の場合は'-'をプレフィックスとしてつける(例:'-buy_time')。"
+"注文ステータスによるフィルタリング(大文字と小文字を区別しない部分文字列マッ"
+"チ)"
-#: engine/core/docs/drf/viewsets.py:336
+#: engine/core/docs/drf/viewsets.py:354
+msgid ""
+"Order by one of: uuid, human_readable_id, user_email, user, status, created, "
+"modified, buy_time, random. Prefix with '-' for descending (e.g. '-"
+"buy_time')."
+msgstr ""
+"uuid、human_readable_id、user_email、user、status、created、modified、"
+"buy_time、randomのいずれかによる順序。降順の場合は'-'をプレフィックスとしてつ"
+"ける(例:'-buy_time')。"
+
+#: engine/core/docs/drf/viewsets.py:366
msgid "retrieve a single order (detailed view)"
msgstr "単一のカテゴリーを取得する(詳細表示)"
-#: engine/core/docs/drf/viewsets.py:341
+#: engine/core/docs/drf/viewsets.py:371
msgid "Order UUID or human-readable id"
msgstr "注文UUIDまたは人間が読めるID"
-#: engine/core/docs/drf/viewsets.py:351
+#: engine/core/docs/drf/viewsets.py:381
msgid "create an order"
msgstr "属性を作成する"
-#: engine/core/docs/drf/viewsets.py:352
+#: engine/core/docs/drf/viewsets.py:382
msgid "doesn't work for non-staff users."
msgstr "スタッフ以外のユーザーには使えない。"
-#: engine/core/docs/drf/viewsets.py:359
+#: engine/core/docs/drf/viewsets.py:389
msgid "delete an order"
msgstr "属性を削除する"
-#: engine/core/docs/drf/viewsets.py:366
+#: engine/core/docs/drf/viewsets.py:396
msgid "rewrite an existing order saving non-editables"
msgstr "既存のカテゴリーを書き換え、編集不可能なものを保存する。"
-#: engine/core/docs/drf/viewsets.py:373
+#: engine/core/docs/drf/viewsets.py:403
msgid "rewrite some fields of an existing order saving non-editables"
msgstr "編集不可を保存している既存のカテゴリのいくつかのフィールドを書き換える"
-#: engine/core/docs/drf/viewsets.py:380
+#: engine/core/docs/drf/viewsets.py:410
msgid "purchase an order"
msgstr "注文時の購入価格"
-#: engine/core/docs/drf/viewsets.py:382
+#: engine/core/docs/drf/viewsets.py:412
msgid ""
"finalizes the order purchase. if `force_balance` is used, the purchase is "
"completed using the user's balance; if `force_payment` is used, a "
"transaction is initiated."
msgstr ""
-"注文の購入を確定する。force_balance` が使用された場合、ユーザーの残高を使用して購入が完了します。 `force_payment` "
-"が使用された場合、トランザクションが開始されます。"
+"注文の購入を確定する。force_balance` が使用された場合、ユーザーの残高を使用し"
+"て購入が完了します。 `force_payment` が使用された場合、トランザクションが開始"
+"されます。"
-#: engine/core/docs/drf/viewsets.py:397
+#: engine/core/docs/drf/viewsets.py:427
msgid "retrieve current pending order of a user"
msgstr "ユーザーの現在の保留中の注文を取得する"
-#: engine/core/docs/drf/viewsets.py:398
+#: engine/core/docs/drf/viewsets.py:428
msgid "retrieves a current pending order of an authenticated user"
msgstr "認証されたユーザーの現在の保留中の注文を取得します。"
-#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334
+#: engine/core/docs/drf/viewsets.py:438 engine/core/graphene/mutations.py:354
msgid "purchase an order without account creation"
msgstr "アカウントを作成せずに注文を購入する"
-#: engine/core/docs/drf/viewsets.py:409
+#: engine/core/docs/drf/viewsets.py:439
msgid "finalizes the order purchase for a non-registered user."
msgstr "は、未登録ユーザーの注文購入を確定します。"
-#: engine/core/docs/drf/viewsets.py:420
+#: engine/core/docs/drf/viewsets.py:450
msgid "add product to order"
msgstr "注文に商品を追加する"
-#: engine/core/docs/drf/viewsets.py:421
+#: engine/core/docs/drf/viewsets.py:452
msgid ""
"adds a product to an order using the provided `product_uuid` and "
"`attributes`."
-msgstr "指定した `product_uuid` と `attributes` を使用して、商品を注文に追加する。"
+msgstr ""
+"指定した `product_uuid` と `attributes` を使用して、商品を注文に追加する。"
-#: engine/core/docs/drf/viewsets.py:429
+#: engine/core/docs/drf/viewsets.py:461
msgid "add a list of products to order, quantities will not count"
msgstr "数量はカウントされません。"
-#: engine/core/docs/drf/viewsets.py:430
+#: engine/core/docs/drf/viewsets.py:463
msgid ""
"adds a list of products to an order using the provided `product_uuid` and "
"`attributes`."
-msgstr "指定された `product_uuid` と `attributes` を使用して、注文に商品のリストを追加する。"
+msgstr ""
+"指定された `product_uuid` と `attributes` を使用して、注文に商品のリストを追"
+"加する。"
-#: engine/core/docs/drf/viewsets.py:438
+#: engine/core/docs/drf/viewsets.py:472
msgid "remove product from order"
msgstr "注文から商品を削除する"
-#: engine/core/docs/drf/viewsets.py:439
+#: engine/core/docs/drf/viewsets.py:474
msgid ""
"removes a product from an order using the provided `product_uuid` and "
"`attributes`."
-msgstr "指定された `product_uuid` と `attributes` を使用して、注文から商品を削除する。"
+msgstr ""
+"指定された `product_uuid` と `attributes` を使用して、注文から商品を削除す"
+"る。"
-#: engine/core/docs/drf/viewsets.py:447
+#: engine/core/docs/drf/viewsets.py:483
msgid "remove product from order, quantities will not count"
msgstr "注文から商品を削除すると、数量はカウントされません。"
-#: engine/core/docs/drf/viewsets.py:448
+#: engine/core/docs/drf/viewsets.py:485
msgid ""
"removes a list of products from an order using the provided `product_uuid` "
"and `attributes`"
-msgstr "指定された `product_uuid` と `attributes` を用いて、注文から商品のリストを削除する。"
+msgstr ""
+"指定された `product_uuid` と `attributes` を用いて、注文から商品のリストを削"
+"除する。"
-#: engine/core/docs/drf/viewsets.py:459
+#: engine/core/docs/drf/viewsets.py:497
msgid "list all wishlists (simple view)"
msgstr "すべての属性をリストアップ(シンプルな表示)"
-#: engine/core/docs/drf/viewsets.py:460
+#: engine/core/docs/drf/viewsets.py:498
msgid "for non-staff users, only their own wishlists are returned."
msgstr "スタッフ以外のユーザーには、自分のウィッシュリストのみが返されます。"
-#: engine/core/docs/drf/viewsets.py:467
+#: engine/core/docs/drf/viewsets.py:508
msgid "retrieve a single wishlist (detailed view)"
msgstr "単一の属性を取得する(詳細表示)"
-#: engine/core/docs/drf/viewsets.py:474
+#: engine/core/docs/drf/viewsets.py:515
msgid "create an wishlist"
msgstr "属性を作成する"
-#: engine/core/docs/drf/viewsets.py:475
+#: engine/core/docs/drf/viewsets.py:516
msgid "Doesn't work for non-staff users."
msgstr "スタッフ以外のユーザーには使えない。"
-#: engine/core/docs/drf/viewsets.py:482
+#: engine/core/docs/drf/viewsets.py:523
msgid "delete an wishlist"
msgstr "属性を削除する"
-#: engine/core/docs/drf/viewsets.py:489
+#: engine/core/docs/drf/viewsets.py:530
msgid "rewrite an existing wishlist saving non-editables"
msgstr "既存の属性を書き換える。"
-#: engine/core/docs/drf/viewsets.py:496
+#: engine/core/docs/drf/viewsets.py:537
msgid "rewrite some fields of an existing wishlist saving non-editables"
-msgstr "既存の属性のいくつかのフィールドを書き換え、編集不可能なものを保存する。"
+msgstr ""
+"既存の属性のいくつかのフィールドを書き換え、編集不可能なものを保存する。"
-#: engine/core/docs/drf/viewsets.py:503
+#: engine/core/docs/drf/viewsets.py:544
msgid "retrieve current pending wishlist of a user"
msgstr "ユーザの現在の保留中のウィッシュリストを取得する"
-#: engine/core/docs/drf/viewsets.py:504
+#: engine/core/docs/drf/viewsets.py:545
msgid "retrieves a current pending wishlist of an authenticated user"
msgstr "認証されたユーザーの現在の保留中のウィッシュリストを取得します。"
-#: engine/core/docs/drf/viewsets.py:514
+#: engine/core/docs/drf/viewsets.py:555
msgid "add product to wishlist"
msgstr "注文に商品を追加する"
-#: engine/core/docs/drf/viewsets.py:515
+#: engine/core/docs/drf/viewsets.py:557
msgid "adds a product to an wishlist using the provided `product_uuid`"
msgstr "指定された `product_uuid` を使ってウィッシュリストに商品を追加する。"
-#: engine/core/docs/drf/viewsets.py:523
+#: engine/core/docs/drf/viewsets.py:566
msgid "remove product from wishlist"
msgstr "ウィッシュリストから商品を削除する"
-#: engine/core/docs/drf/viewsets.py:524
+#: engine/core/docs/drf/viewsets.py:568
msgid "removes a product from an wishlist using the provided `product_uuid`"
-msgstr "指定された `product_uuid` を使ってウィッシュリストから商品を削除します。"
+msgstr ""
+"指定された `product_uuid` を使ってウィッシュリストから商品を削除します。"
-#: engine/core/docs/drf/viewsets.py:532
+#: engine/core/docs/drf/viewsets.py:577
msgid "add many products to wishlist"
msgstr "ウィッシュリストに多くの商品を追加する"
-#: engine/core/docs/drf/viewsets.py:533
+#: engine/core/docs/drf/viewsets.py:579
msgid "adds many products to an wishlist using the provided `product_uuids`"
-msgstr "指定された `product_uuids` を使ってウィッシュリストに多くの商品を追加する。"
+msgstr ""
+"指定された `product_uuids` を使ってウィッシュリストに多くの商品を追加する。"
-#: engine/core/docs/drf/viewsets.py:541
+#: engine/core/docs/drf/viewsets.py:588
msgid "remove many products from wishlist"
msgstr "注文から商品を削除する"
-#: engine/core/docs/drf/viewsets.py:542
+#: engine/core/docs/drf/viewsets.py:590
msgid ""
"removes many products from an wishlist using the provided `product_uuids`"
-msgstr "指定された `product_uuids` を使ってウィッシュリストから多くの商品を削除する。"
+msgstr ""
+"指定された `product_uuids` を使ってウィッシュリストから多くの商品を削除する。"
-#: engine/core/docs/drf/viewsets.py:549
+#: engine/core/docs/drf/viewsets.py:598
msgid ""
"Filter by one or more attribute name/value pairs. \n"
"• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n"
-"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n"
-"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n"
+"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, "
+"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, "
+"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n"
+"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), "
+"`true`/`false` for booleans, integers, floats; otherwise treated as "
+"string. \n"
"• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n"
"Examples: \n"
-"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n"
+"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\","
+"\"bluetooth\"]`, \n"
"`b64-description=icontains-aGVhdC1jb2xk`"
msgstr ""
"1つまたは複数の属性名/値のペアでフィルタリングします。 \n"
"- シンタックス**:attr_name=method-value[;attr2=method2-value2]...`。\n"
-"- メソッド** (省略された場合のデフォルトは `icontains`):`iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`.\n"
-"- 値の型付け**:boolean, integer, float の場合は `true`/`false`; それ以外の場合は文字列として扱う。 \n"
-"- それ以外は文字列として扱われる。 **Base64**: `b64-` をプレフィックスとしてつけると、生の値を URL-safe base64-encode することができる。 \n"
+"- メソッド** (省略された場合のデフォルトは `icontains`):`iexact`, `exact`, "
+"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, "
+"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`.\n"
+"- 値の型付け**:boolean, integer, float の場合は `true`/`false`; それ以外の場"
+"合は文字列として扱う。 \n"
+"- それ以外は文字列として扱われる。 **Base64**: `b64-` をプレフィックスとして"
+"つけると、生の値を URL-safe base64-encode することができる。 \n"
"例 \n"
"color=exact-red`、`size=gt-10`、`features=in-[\"wifi\", \"bluetooth\"]`、\n"
"b64-description=icontains-aGVhdC1jb2xk`。"
-#: engine/core/docs/drf/viewsets.py:568 engine/core/docs/drf/viewsets.py:569
+#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
msgid "list all products (simple view)"
msgstr "全商品を一覧表示(シンプル表示)"
-#: engine/core/docs/drf/viewsets.py:574
+#: engine/core/docs/drf/viewsets.py:623
msgid "(exact) Product UUID"
msgstr "(正確には)製品UUID"
-#: engine/core/docs/drf/viewsets.py:581
+#: engine/core/docs/drf/viewsets.py:630
msgid ""
-"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n"
+"Comma-separated list of fields to sort by. Prefix with `-` for "
+"descending. \n"
"**Allowed:** uuid, rating, name, slug, created, modified, price, random"
msgstr ""
-"カンマ区切りの並べ替えフィールドのリスト。降順の場合は `-` をプレフィックスとしてつける。 \n"
+"カンマ区切りの並べ替えフィールドのリスト。降順の場合は `-` をプレフィックスと"
+"してつける。 \n"
"**許可:** uuid, rating, name, slug, created, modified, price, random"
-#: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599
+#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
msgid "retrieve a single product (detailed view)"
msgstr "単一の製品を取得する(詳細表示)"
-#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634
-#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672
-#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710
+#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683
+#: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725
+#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763
msgid "Product UUID or slug"
msgstr "製品UUIDまたはスラグ"
-#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
+#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
#: engine/core/graphene/dashboard_mutations/product.py:80
#: engine/core/graphene/dashboard_mutations/product.py:118
#: engine/core/graphene/dashboard_mutations/product.py:166
msgid "create a product"
msgstr "製品を作る"
-#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629
+#: engine/core/docs/drf/viewsets.py:677 engine/core/docs/drf/viewsets.py:678
msgid "rewrite an existing product, preserving non-editable fields"
msgstr "編集不可能なフィールドを保持したまま、既存の製品を書き換える。"
-#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
+#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:700
msgid ""
"update some fields of an existing product, preserving non-editable fields"
-msgstr "編集不可能なフィールドを保持したまま、既存の製品の一部のフィールドを更新する。"
+msgstr ""
+"編集不可能なフィールドを保持したまま、既存の製品の一部のフィールドを更新す"
+"る。"
-#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
+#: engine/core/docs/drf/viewsets.py:719 engine/core/docs/drf/viewsets.py:720
msgid "delete a product"
msgstr "製品を削除する"
-#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686
+#: engine/core/docs/drf/viewsets.py:738 engine/core/docs/drf/viewsets.py:739
msgid "lists all permitted feedbacks for a product"
msgstr "製品に対して許可されたすべてのフィードバックを一覧表示します。"
-#: engine/core/docs/drf/viewsets.py:705
+#: engine/core/docs/drf/viewsets.py:758
msgid "returns a snapshot of the product's SEO meta data"
msgstr "商品のSEOメタデータのスナップショットを返します。"
-#: engine/core/docs/drf/viewsets.py:726
+#: engine/core/docs/drf/viewsets.py:779
msgid "list all addresses"
msgstr "全住所のリスト"
-#: engine/core/docs/drf/viewsets.py:736
+#: engine/core/docs/drf/viewsets.py:789
msgid "retrieve a single address"
msgstr "単一アドレスの取得"
-#: engine/core/docs/drf/viewsets.py:746
+#: engine/core/docs/drf/viewsets.py:799
msgid "create a new address"
msgstr "新しいアドレスを作成する"
-#: engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:810
msgid "delete an address"
msgstr "アドレスの削除"
-#: engine/core/docs/drf/viewsets.py:767
+#: engine/core/docs/drf/viewsets.py:820
msgid "update an entire address"
msgstr "アドレス全体の更新"
-#: engine/core/docs/drf/viewsets.py:778
+#: engine/core/docs/drf/viewsets.py:831
msgid "partially update an address"
msgstr "アドレスの一部更新"
-#: engine/core/docs/drf/viewsets.py:789
+#: engine/core/docs/drf/viewsets.py:842
msgid "autocomplete address suggestions"
msgstr "オートコンプリート住所入力"
-#: engine/core/docs/drf/viewsets.py:794
+#: engine/core/docs/drf/viewsets.py:848
msgid "raw data query string, please append with data from geo-IP endpoint"
msgstr ""
-"docker compose exec app poetry run python manage.py deepl_translate -l en-gb"
-" -l ar-ar -l cs-cz -l da-dk -l de-de -l en-us -l es-es -l fr-fr -l hi-in -l "
+"docker compose exec app poetry run python manage.py deepl_translate -l en-gb "
+"-l ar-ar -l cs-cz -l da-dk -l de-de -l en-us -l es-es -l fr-fr -l hi-in -l "
"it-it -l ja-jp -l kk-kz -l n-nl -l pl-pl -l pt-br -l ro-ro -l ru-ru -l zh-"
"hans -a core -a geo -a payments -a vibes_auth -a blog"
-#: engine/core/docs/drf/viewsets.py:800
+#: engine/core/docs/drf/viewsets.py:855
msgid "limit the results amount, 1 < limit < 10, default: 5"
msgstr "結果を制限する, 1 < limit < 10, デフォルト: 5"
-#: engine/core/docs/drf/viewsets.py:816
+#: engine/core/docs/drf/viewsets.py:871
msgid "list all feedbacks (simple view)"
msgstr "すべてのフィードバックを表示する(シンプルな表示)"
-#: engine/core/docs/drf/viewsets.py:823
+#: engine/core/docs/drf/viewsets.py:881
msgid "retrieve a single feedback (detailed view)"
msgstr "単一のフィードバックを取得する(詳細表示)"
-#: engine/core/docs/drf/viewsets.py:830
+#: engine/core/docs/drf/viewsets.py:888
msgid "create a feedback"
msgstr "フィードバックを作成する"
-#: engine/core/docs/drf/viewsets.py:837
+#: engine/core/docs/drf/viewsets.py:895
msgid "delete a feedback"
msgstr "フィードバックを削除する"
-#: engine/core/docs/drf/viewsets.py:844
+#: engine/core/docs/drf/viewsets.py:902
msgid "rewrite an existing feedback saving non-editables"
msgstr "既存のフィードバックを書き換える。"
-#: engine/core/docs/drf/viewsets.py:851
+#: engine/core/docs/drf/viewsets.py:909
msgid "rewrite some fields of an existing feedback saving non-editables"
-msgstr "既存のフィードバックのいくつかのフィールドを書き換えて、編集不可能なものを保存する。"
+msgstr ""
+"既存のフィードバックのいくつかのフィールドを書き換えて、編集不可能なものを保"
+"存する。"
-#: engine/core/docs/drf/viewsets.py:861
+#: engine/core/docs/drf/viewsets.py:919
msgid "list all order–product relations (simple view)"
msgstr "すべての注文と商品の関係をリストアップする(シンプルビュー)"
-#: engine/core/docs/drf/viewsets.py:871
+#: engine/core/docs/drf/viewsets.py:929
msgid "retrieve a single order–product relation (detailed view)"
msgstr "単一の注文と商品の関係を取得する(詳細表示)"
-#: engine/core/docs/drf/viewsets.py:881
+#: engine/core/docs/drf/viewsets.py:939
msgid "create a new order–product relation"
msgstr "新しい注文と商品の関係を作る"
-#: engine/core/docs/drf/viewsets.py:891
+#: engine/core/docs/drf/viewsets.py:949
msgid "replace an existing order–product relation"
msgstr "既存の注文と商品の関係を置き換える"
-#: engine/core/docs/drf/viewsets.py:901
+#: engine/core/docs/drf/viewsets.py:959
msgid "partially update an existing order–product relation"
msgstr "既存の注文と商品の関係を部分的に更新する"
-#: engine/core/docs/drf/viewsets.py:911
+#: engine/core/docs/drf/viewsets.py:969
msgid "delete an order–product relation"
msgstr "注文と商品の関係を削除する"
-#: engine/core/docs/drf/viewsets.py:921
+#: engine/core/docs/drf/viewsets.py:979
msgid "add or remove feedback on an order–product relation"
msgstr "注文と商品の関係に関するフィードバックを追加または削除する。"
-#: engine/core/docs/drf/viewsets.py:938
+#: engine/core/docs/drf/viewsets.py:996
msgid "list all brands (simple view)"
msgstr "すべてのブランドをリストアップ(シンプル表示)"
-#: engine/core/docs/drf/viewsets.py:945
+#: engine/core/docs/drf/viewsets.py:1003
msgid "retrieve a single brand (detailed view)"
msgstr "単一ブランドの検索(詳細表示)"
-#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993
+#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051
msgid "Brand UUID or slug"
msgstr "ブランドUUIDまたはスラッグ"
-#: engine/core/docs/drf/viewsets.py:960
+#: engine/core/docs/drf/viewsets.py:1018
msgid "create a brand"
msgstr "ブランドを作る"
-#: engine/core/docs/drf/viewsets.py:967
+#: engine/core/docs/drf/viewsets.py:1025
msgid "delete a brand"
msgstr "ブランドの削除"
-#: engine/core/docs/drf/viewsets.py:974
+#: engine/core/docs/drf/viewsets.py:1032
msgid "rewrite an existing brand saving non-editables"
msgstr "編集不可の既存ブランドをリライトする"
-#: engine/core/docs/drf/viewsets.py:981
+#: engine/core/docs/drf/viewsets.py:1039
msgid "rewrite some fields of an existing brand saving non-editables"
-msgstr "編集不可能なフィールドを保存している既存ブランドのフィールドを書き換える。"
+msgstr ""
+"編集不可能なフィールドを保存している既存ブランドのフィールドを書き換える。"
-#: engine/core/docs/drf/viewsets.py:1006
+#: engine/core/docs/drf/viewsets.py:1064
msgid "list all vendors (simple view)"
msgstr "全ベンダーのリスト(シンプルビュー)"
-#: engine/core/docs/drf/viewsets.py:1013
+#: engine/core/docs/drf/viewsets.py:1074
msgid "retrieve a single vendor (detailed view)"
msgstr "単一ベンダーの検索(詳細表示)"
-#: engine/core/docs/drf/viewsets.py:1020
+#: engine/core/docs/drf/viewsets.py:1081
msgid "create a vendor"
msgstr "ベンダーの作成"
-#: engine/core/docs/drf/viewsets.py:1027
+#: engine/core/docs/drf/viewsets.py:1088
msgid "delete a vendor"
msgstr "ベンダーの削除"
-#: engine/core/docs/drf/viewsets.py:1034
+#: engine/core/docs/drf/viewsets.py:1095
msgid "rewrite an existing vendor saving non-editables"
msgstr "既存のベンダーを書き換え、編集不可能な部分を保存する。"
-#: engine/core/docs/drf/viewsets.py:1041
+#: engine/core/docs/drf/viewsets.py:1102
msgid "rewrite some fields of an existing vendor saving non-editables"
-msgstr "既存のベンダーのいくつかのフィールドを書き換えて、編集不可能なフィールドを保存する。"
+msgstr ""
+"既存のベンダーのいくつかのフィールドを書き換えて、編集不可能なフィールドを保"
+"存する。"
-#: engine/core/docs/drf/viewsets.py:1051
+#: engine/core/docs/drf/viewsets.py:1112
msgid "list all product images (simple view)"
msgstr "すべての商品画像を一覧表示(シンプル表示)"
-#: engine/core/docs/drf/viewsets.py:1058
+#: engine/core/docs/drf/viewsets.py:1122
msgid "retrieve a single product image (detailed view)"
msgstr "1枚の商品画像を取得する(詳細表示)"
-#: engine/core/docs/drf/viewsets.py:1065
+#: engine/core/docs/drf/viewsets.py:1129
msgid "create a product image"
msgstr "製品イメージの作成"
-#: engine/core/docs/drf/viewsets.py:1072
+#: engine/core/docs/drf/viewsets.py:1139
msgid "delete a product image"
msgstr "商品画像を削除する"
-#: engine/core/docs/drf/viewsets.py:1079
+#: engine/core/docs/drf/viewsets.py:1146
msgid "rewrite an existing product image saving non-editables"
msgstr "既存の商品画像を書き換え、編集不可能な部分を保存する。"
-#: engine/core/docs/drf/viewsets.py:1086
+#: engine/core/docs/drf/viewsets.py:1154
msgid "rewrite some fields of an existing product image saving non-editables"
-msgstr "既存の商品画像のいくつかのフィールドを書き換えて、編集不可能な部分を保存する。"
+msgstr ""
+"既存の商品画像のいくつかのフィールドを書き換えて、編集不可能な部分を保存す"
+"る。"
-#: engine/core/docs/drf/viewsets.py:1096
+#: engine/core/docs/drf/viewsets.py:1165
msgid "list all promo codes (simple view)"
msgstr "すべてのプロモコードを一覧表示(シンプル表示)"
-#: engine/core/docs/drf/viewsets.py:1103
+#: engine/core/docs/drf/viewsets.py:1175
msgid "retrieve a single promo code (detailed view)"
msgstr "単一のプロモコードを取得する(詳細表示)"
-#: engine/core/docs/drf/viewsets.py:1110
+#: engine/core/docs/drf/viewsets.py:1182
msgid "create a promo code"
msgstr "プロモコードを作成する"
-#: engine/core/docs/drf/viewsets.py:1117
+#: engine/core/docs/drf/viewsets.py:1189
msgid "delete a promo code"
msgstr "プロモコードを削除する"
-#: engine/core/docs/drf/viewsets.py:1124
+#: engine/core/docs/drf/viewsets.py:1196
msgid "rewrite an existing promo code saving non-editables"
msgstr "既存のプロモコードを書き換え、編集不可のプロモコードを保存する"
-#: engine/core/docs/drf/viewsets.py:1131
+#: engine/core/docs/drf/viewsets.py:1203
msgid "rewrite some fields of an existing promo code saving non-editables"
-msgstr "既存のプロモコードの一部のフィールドを書き換えて、編集不可能な部分を保存する。"
+msgstr ""
+"既存のプロモコードの一部のフィールドを書き換えて、編集不可能な部分を保存す"
+"る。"
-#: engine/core/docs/drf/viewsets.py:1141
+#: engine/core/docs/drf/viewsets.py:1213
msgid "list all promotions (simple view)"
msgstr "すべてのプロモーションを一覧表示(シンプル表示)"
-#: engine/core/docs/drf/viewsets.py:1148
+#: engine/core/docs/drf/viewsets.py:1223
msgid "retrieve a single promotion (detailed view)"
msgstr "単一のプロモーションを取得する(詳細表示)"
-#: engine/core/docs/drf/viewsets.py:1155
+#: engine/core/docs/drf/viewsets.py:1230
msgid "create a promotion"
msgstr "プロモーションの作成"
-#: engine/core/docs/drf/viewsets.py:1162
+#: engine/core/docs/drf/viewsets.py:1237
msgid "delete a promotion"
msgstr "プロモーションの削除"
-#: engine/core/docs/drf/viewsets.py:1169
+#: engine/core/docs/drf/viewsets.py:1244
msgid "rewrite an existing promotion saving non-editables"
msgstr "既存のプロモーションを書き換える。"
-#: engine/core/docs/drf/viewsets.py:1176
+#: engine/core/docs/drf/viewsets.py:1251
msgid "rewrite some fields of an existing promotion saving non-editables"
-msgstr "既存のプロモーションのいくつかのフィールドを書き換え、編集不可能な部分を保存する。"
+msgstr ""
+"既存のプロモーションのいくつかのフィールドを書き換え、編集不可能な部分を保存"
+"する。"
-#: engine/core/docs/drf/viewsets.py:1186
+#: engine/core/docs/drf/viewsets.py:1261
msgid "list all stocks (simple view)"
msgstr "全銘柄リスト(シンプルビュー)"
-#: engine/core/docs/drf/viewsets.py:1193
+#: engine/core/docs/drf/viewsets.py:1268
msgid "retrieve a single stock (detailed view)"
msgstr "単一銘柄の取得(詳細表示)"
-#: engine/core/docs/drf/viewsets.py:1200
+#: engine/core/docs/drf/viewsets.py:1275
msgid "create a stock record"
msgstr "ストックレコードの作成"
-#: engine/core/docs/drf/viewsets.py:1207
+#: engine/core/docs/drf/viewsets.py:1282
msgid "delete a stock record"
msgstr "ストックレコードの削除"
-#: engine/core/docs/drf/viewsets.py:1214
+#: engine/core/docs/drf/viewsets.py:1289
msgid "rewrite an existing stock record saving non-editables"
msgstr "既存のストックレコードを書き換え、編集不可能なものを保存する。"
-#: engine/core/docs/drf/viewsets.py:1221
+#: engine/core/docs/drf/viewsets.py:1297
msgid "rewrite some fields of an existing stock record saving non-editables"
-msgstr "編集不可能なフィールドを保存している既存のストックレコードの一部のフィールドを書き換える。"
+msgstr ""
+"編集不可能なフィールドを保存している既存のストックレコードの一部のフィールド"
+"を書き換える。"
-#: engine/core/docs/drf/viewsets.py:1231
+#: engine/core/docs/drf/viewsets.py:1308
msgid "list all product tags (simple view)"
msgstr "すべての商品タグを一覧表示(シンプル表示)"
-#: engine/core/docs/drf/viewsets.py:1238
+#: engine/core/docs/drf/viewsets.py:1318
msgid "retrieve a single product tag (detailed view)"
msgstr "単一の商品タグを取得する(詳細表示)"
-#: engine/core/docs/drf/viewsets.py:1245
+#: engine/core/docs/drf/viewsets.py:1325
msgid "create a product tag"
msgstr "商品タグの作成"
-#: engine/core/docs/drf/viewsets.py:1252
+#: engine/core/docs/drf/viewsets.py:1335
msgid "delete a product tag"
msgstr "商品タグの削除"
-#: engine/core/docs/drf/viewsets.py:1259
+#: engine/core/docs/drf/viewsets.py:1342
msgid "rewrite an existing product tag saving non-editables"
msgstr "既存の商品タグを書き換え、編集不可能なものを保存する。"
-#: engine/core/docs/drf/viewsets.py:1266
+#: engine/core/docs/drf/viewsets.py:1350
msgid "rewrite some fields of an existing product tag saving non-editables"
-msgstr "既存の商品タグの一部のフィールドを書き換えて、編集不可能な部分を保存する。"
+msgstr ""
+"既存の商品タグの一部のフィールドを書き換えて、編集不可能な部分を保存する。"
-#: engine/core/elasticsearch/__init__.py:122
-#: engine/core/elasticsearch/__init__.py:570
+#: engine/core/elasticsearch/__init__.py:127
+#: engine/core/elasticsearch/__init__.py:627
msgid "no search term provided."
msgstr "検索語はありません。"
-#: engine/core/filters.py:69 engine/core/filters.py:426
-#: engine/core/filters.py:553
+#: engine/core/filters.py:78 engine/core/filters.py:484
+#: engine/core/filters.py:625
msgid "Search"
msgstr "検索"
-#: engine/core/filters.py:70 engine/core/filters.py:583
-#: engine/core/filters.py:612
+#: engine/core/filters.py:79 engine/core/filters.py:662
+#: engine/core/filters.py:691
msgid "UUID"
msgstr "ユーユーアイディー"
-#: engine/core/filters.py:71 engine/core/filters.py:428
-#: engine/core/filters.py:555
+#: engine/core/filters.py:80 engine/core/filters.py:487
+#: engine/core/filters.py:627
msgid "Name"
msgstr "名称"
-#: engine/core/filters.py:72 engine/core/filters.py:557
+#: engine/core/filters.py:82 engine/core/filters.py:630
msgid "Categories"
msgstr "カテゴリー"
-#: engine/core/filters.py:74
+#: engine/core/filters.py:86
msgid "Categories Slugs"
msgstr "カテゴリー ナメクジ"
-#: engine/core/filters.py:75 engine/core/filters.py:436
+#: engine/core/filters.py:88 engine/core/filters.py:495
msgid "Tags"
msgstr "タグ"
-#: engine/core/filters.py:76
+#: engine/core/filters.py:90
msgid "Min Price"
msgstr "最低価格"
-#: engine/core/filters.py:77
+#: engine/core/filters.py:93
msgid "Max Price"
msgstr "最高価格"
-#: engine/core/filters.py:78
+#: engine/core/filters.py:95
msgid "Is Active"
msgstr "アクティブ"
-#: engine/core/filters.py:79
+#: engine/core/filters.py:96
msgid "Brand"
msgstr "ブランド"
-#: engine/core/filters.py:80
+#: engine/core/filters.py:97
msgid "Attributes"
msgstr "属性"
-#: engine/core/filters.py:81
+#: engine/core/filters.py:99
msgid "Quantity"
msgstr "数量"
-#: engine/core/filters.py:82 engine/core/filters.py:430
-#: engine/core/filters.py:556 engine/core/models.py:321
-#: engine/core/models.py:489 engine/core/models.py:644
+#: engine/core/filters.py:101 engine/core/filters.py:489
+#: engine/core/filters.py:628 engine/core/models.py:327
+#: engine/core/models.py:508 engine/core/models.py:665
msgid "Slug"
msgstr "スラッグ"
-#: engine/core/filters.py:83
+#: engine/core/filters.py:102
msgid "Is Digital"
msgstr "デジタル"
-#: engine/core/filters.py:84
+#: engine/core/filters.py:104
msgid "Include sub-categories"
msgstr "サブカテゴリーを含む"
-#: engine/core/filters.py:87
+#: engine/core/filters.py:108
msgid "Include personal ordered"
msgstr "個人注文商品を含む"
-#: engine/core/filters.py:89 engine/core/models.py:648
+#: engine/core/filters.py:110 engine/core/models.py:669
msgid "SKU"
msgstr "SKU"
-#: engine/core/filters.py:184
+#: engine/core/filters.py:212
msgid "there must be a category_uuid to use include_subcategories flag"
-msgstr "include_subcategoriesフラグを使うには、category_uuidがなければならない。"
+msgstr ""
+"include_subcategoriesフラグを使うには、category_uuidがなければならない。"
-#: engine/core/filters.py:353
+#: engine/core/filters.py:398
msgid "Search (ID, product name or part number)"
msgstr "検索(ID、製品名または部品番号)"
-#: engine/core/filters.py:356
+#: engine/core/filters.py:402
msgid "Bought after (inclusive)"
msgstr "購入時期"
-#: engine/core/filters.py:357
+#: engine/core/filters.py:405
msgid "Bought before (inclusive)"
msgstr "以前に購入したもの(含む)"
-#: engine/core/filters.py:360 engine/core/filters.py:407
-#: engine/core/filters.py:614
+#: engine/core/filters.py:410 engine/core/filters.py:461
+#: engine/core/filters.py:696
msgid "User email"
msgstr "ユーザーEメール"
-#: engine/core/filters.py:361 engine/core/filters.py:408
-#: engine/core/filters.py:592 engine/core/filters.py:613
+#: engine/core/filters.py:413 engine/core/filters.py:464
+#: engine/core/filters.py:671 engine/core/filters.py:693
msgid "User UUID"
msgstr "ユーザーUUID"
-#: engine/core/filters.py:362
+#: engine/core/filters.py:415
msgid "Status"
msgstr "ステータス"
-#: engine/core/filters.py:366
+#: engine/core/filters.py:419
msgid "Human Readable ID"
msgstr "人間が読めるID"
-#: engine/core/filters.py:429
+#: engine/core/filters.py:488
msgid "Parent"
msgstr "親"
-#: engine/core/filters.py:433
+#: engine/core/filters.py:492
msgid "Whole category(has at least 1 product or not)"
msgstr "カテゴリー全体(少なくとも1つの製品があるかどうか)"
-#: engine/core/filters.py:437
+#: engine/core/filters.py:496
msgid "Level"
msgstr "レベル"
-#: engine/core/filters.py:587
+#: engine/core/filters.py:666
msgid "Product UUID"
msgstr "製品UUID"
-#: engine/core/graphene/mutations.py:40
+#: engine/core/graphene/mutations.py:41
msgid "key to look for in or set into the cache"
msgstr "キャッシュを探すキー、またはキャッシュにセットするキー"
-#: engine/core/graphene/mutations.py:41
+#: engine/core/graphene/mutations.py:43
msgid "data to store in cache"
msgstr "キャッシュに保存するデータ"
-#: engine/core/graphene/mutations.py:44
+#: engine/core/graphene/mutations.py:46
msgid "timeout in seconds to set the data for into the cache"
msgstr "キャッシュにデータをセットするタイムアウト時間(秒"
-#: engine/core/graphene/mutations.py:47
+#: engine/core/graphene/mutations.py:49
msgid "cached data"
msgstr "キャッシュ・データ"
-#: engine/core/graphene/mutations.py:62
+#: engine/core/graphene/mutations.py:64
msgid "camelized JSON data from the requested URL"
msgstr "リクエストされたURLからキャメル化されたJSONデータ"
-#: engine/core/graphene/mutations.py:67 engine/core/views.py:257
+#: engine/core/graphene/mutations.py:69 engine/core/views.py:249
msgid "only URLs starting with http(s):// are allowed"
msgstr "http(s)://で始まるURLのみが許可されます。"
-#: engine/core/graphene/mutations.py:83
+#: engine/core/graphene/mutations.py:87
msgid "add a product to the order"
msgstr "注文に商品を追加する"
-#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131
-#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287
+#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139
+#: engine/core/graphene/mutations.py:255 engine/core/graphene/mutations.py:307
#, python-brace-format
msgid "order {order_uuid} not found"
msgstr "注文 {order_uuid} が見つかりません!"
-#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159
+#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167
msgid "remove a product from the order"
msgstr "注文から商品を削除する"
-#: engine/core/graphene/mutations.py:137
+#: engine/core/graphene/mutations.py:145
msgid "remove all products from the order"
msgstr "注文からすべての商品を削除する"
-#: engine/core/graphene/mutations.py:182
+#: engine/core/graphene/mutations.py:190
msgid "buy an order"
msgstr "注文する"
-#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265
+#: engine/core/graphene/mutations.py:221 engine/core/graphene/mutations.py:283
msgid "please provide either order_uuid or order_hr_id - mutually exclusive"
msgstr "order_uuidまたはorder_hr_idを入力してください!"
-#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501
-#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712
+#: engine/core/graphene/mutations.py:250 engine/core/graphene/mutations.py:525
+#: engine/core/graphene/mutations.py:574 engine/core/viewsets.py:753
msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr "order.buy()メソッドから間違った型が来た:{type(instance)!s}。"
-#: engine/core/graphene/mutations.py:245
+#: engine/core/graphene/mutations.py:261
msgid "perform an action on a list of products in the order"
msgstr "注文商品のリストに対してアクションを実行する"
-#: engine/core/graphene/mutations.py:250
+#: engine/core/graphene/mutations.py:266
msgid "remove/add"
msgstr "削除/追加"
-#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323
+#: engine/core/graphene/mutations.py:302 engine/core/graphene/mutations.py:343
msgid "action must be either add or remove"
msgstr "アクションは \"add \"か \"remove \"のどちらかでなければならない!"
-#: engine/core/graphene/mutations.py:293
+#: engine/core/graphene/mutations.py:313
msgid "perform an action on a list of products in the wishlist"
msgstr "ウィッシュリストの商品リストに対してアクションを実行する"
-#: engine/core/graphene/mutations.py:311
+#: engine/core/graphene/mutations.py:331
msgid "please provide wishlist_uuid value"
msgstr "wishlist_uuid`の値を指定してください。"
-#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404
-#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460
-#: engine/core/graphene/mutations.py:504
+#: engine/core/graphene/mutations.py:348 engine/core/graphene/mutations.py:424
+#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480
+#: engine/core/graphene/mutations.py:530
#, python-brace-format
msgid "wishlist {wishlist_uuid} not found"
msgstr "ウィッシュリスト {wishlist_uuid} が見つかりません!"
-#: engine/core/graphene/mutations.py:382
+#: engine/core/graphene/mutations.py:402
msgid "add a product to the wishlist"
msgstr "注文に商品を追加する"
-#: engine/core/graphene/mutations.py:410
+#: engine/core/graphene/mutations.py:430
msgid "remove a product from the wishlist"
msgstr "注文から商品を削除する"
-#: engine/core/graphene/mutations.py:438
+#: engine/core/graphene/mutations.py:458
msgid "remove all products from the wishlist"
msgstr "注文から商品を削除する"
-#: engine/core/graphene/mutations.py:466
+#: engine/core/graphene/mutations.py:486
msgid "buy all products from the wishlist"
msgstr "注文から商品を削除する"
-#: engine/core/graphene/mutations.py:510
+#: engine/core/graphene/mutations.py:536
msgid "buy a product"
msgstr "注文する"
-#: engine/core/graphene/mutations.py:516
+#: engine/core/graphene/mutations.py:543
msgid ""
-"please send the attributes as the string formatted like "
-"attr1=value1,attr2=value2"
-msgstr "属性は、attr1=value1,attr2=value2のような形式の文字列として送信してください。"
+"please send the attributes as the string formatted like attr1=value1,"
+"attr2=value2"
+msgstr ""
+"属性は、attr1=value1,attr2=value2のような形式の文字列として送信してください。"
-#: engine/core/graphene/mutations.py:549
+#: engine/core/graphene/mutations.py:581
msgid "add or delete a feedback for orderproduct"
msgstr "orderproductに対するフィードバックを追加または削除する。"
-#: engine/core/graphene/mutations.py:573
+#: engine/core/graphene/mutations.py:607
msgid "action must be either `add` or `remove`"
msgstr "アクションは `add` または `remove` のいずれかでなければならない!"
-#: engine/core/graphene/mutations.py:576
+#: engine/core/graphene/mutations.py:610
#, python-brace-format
msgid "order product {order_product_uuid} not found"
msgstr "Orderproduct {order_product_uuid} が見つかりません!"
-#: engine/core/graphene/mutations.py:582
+#: engine/core/graphene/mutations.py:617
msgid "original address string provided by the user"
msgstr "ユーザーが提供したオリジナルのアドレス文字列"
-#: engine/core/graphene/mutations.py:618 engine/core/models.py:955
-#: engine/core/models.py:968 engine/core/models.py:1383
-#: engine/core/models.py:1412 engine/core/models.py:1437
-#: engine/core/viewsets.py:715
+#: engine/core/graphene/mutations.py:654 engine/core/models.py:978
+#: engine/core/models.py:991 engine/core/models.py:1435
+#: engine/core/models.py:1466 engine/core/models.py:1497
+#: engine/core/viewsets.py:760
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr "{name}は存在しません:{uuid}が存在しません!"
-#: engine/core/graphene/mutations.py:632
+#: engine/core/graphene/mutations.py:668
msgid "limit must be between 1 and 10"
msgstr "上限は1から10の間でなければならない"
-#: engine/core/graphene/mutations.py:681
+#: engine/core/graphene/mutations.py:717
msgid "elasticsearch - works like a charm"
msgstr "ElasticSearch - 魅力のように動作"
#: engine/core/graphene/object_types.py:82
-#: engine/core/graphene/object_types.py:370
-#: engine/core/graphene/object_types.py:417 engine/core/models.py:772
-#: engine/core/models.py:1250 engine/core/models.py:1897
+#: engine/core/graphene/object_types.py:417
+#: engine/core/graphene/object_types.py:468 engine/core/models.py:795
+#: engine/core/models.py:1289 engine/core/models.py:2021
msgid "attributes"
msgstr "属性"
@@ -1203,140 +1256,139 @@ msgid "groups of attributes"
msgstr "属性のグループ"
#: engine/core/graphene/object_types.py:116
-#: engine/core/graphene/object_types.py:193
-#: engine/core/graphene/object_types.py:223 engine/core/models.py:432
+#: engine/core/graphene/object_types.py:214
+#: engine/core/graphene/object_types.py:252 engine/core/models.py:451
msgid "categories"
msgstr "カテゴリー"
-#: engine/core/graphene/object_types.py:124 engine/core/models.py:503
+#: engine/core/graphene/object_types.py:132 engine/core/models.py:522
msgid "brands"
msgstr "ブランド"
-#: engine/core/graphene/object_types.py:195
+#: engine/core/graphene/object_types.py:216
msgid "category image url"
msgstr "カテゴリー"
-#: engine/core/graphene/object_types.py:196
-#: engine/core/graphene/object_types.py:317 engine/core/models.py:283
+#: engine/core/graphene/object_types.py:217
+#: engine/core/graphene/object_types.py:362 engine/core/models.py:289
msgid "markup percentage"
msgstr "マークアップ率"
-#: engine/core/graphene/object_types.py:199
+#: engine/core/graphene/object_types.py:221
msgid "which attributes and values can be used for filtering this category."
msgstr "このカテゴリのフィルタリングに使用できる属性と値。"
-#: engine/core/graphene/object_types.py:203
-msgid ""
-"minimum and maximum prices for products in this category, if available."
+#: engine/core/graphene/object_types.py:227
+msgid "minimum and maximum prices for products in this category, if available."
msgstr "このカテゴリーの商品の最低価格と最高価格がある場合。"
-#: engine/core/graphene/object_types.py:205
+#: engine/core/graphene/object_types.py:231
msgid "tags for this category"
msgstr "このカテゴリのタグ"
-#: engine/core/graphene/object_types.py:206
+#: engine/core/graphene/object_types.py:234
msgid "products in this category"
msgstr "このカテゴリの製品"
-#: engine/core/graphene/object_types.py:324 engine/core/models.py:188
+#: engine/core/graphene/object_types.py:369 engine/core/models.py:194
msgid "vendors"
msgstr "ベンダー"
-#: engine/core/graphene/object_types.py:328
+#: engine/core/graphene/object_types.py:373
msgid "Latitude (Y coordinate)"
msgstr "緯度(Y座標)"
-#: engine/core/graphene/object_types.py:329
+#: engine/core/graphene/object_types.py:374
msgid "Longitude (X coordinate)"
msgstr "経度(X座標)"
-#: engine/core/graphene/object_types.py:358
+#: engine/core/graphene/object_types.py:403
msgid "comment"
msgstr "どのように"
-#: engine/core/graphene/object_types.py:359
-#: engine/core/graphene/object_types.py:483
+#: engine/core/graphene/object_types.py:405
+#: engine/core/graphene/object_types.py:539
msgid "rating value from 1 to 10, inclusive, or 0 if not set."
msgstr "1から10までの評価値(設定されていない場合は0)。"
-#: engine/core/graphene/object_types.py:366
+#: engine/core/graphene/object_types.py:413
msgid "represents feedback from a user."
msgstr "ユーザーからのフィードバックを表す。"
-#: engine/core/graphene/object_types.py:371
-#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244
+#: engine/core/graphene/object_types.py:418
+#: engine/core/graphene/object_types.py:469 engine/core/models.py:1283
msgid "notifications"
msgstr "お知らせ"
-#: engine/core/graphene/object_types.py:372
+#: engine/core/graphene/object_types.py:420
msgid "download url for this order product if applicable"
msgstr "該当する場合は、この注文商品のダウンロードURLを入力してください。"
-#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736
+#: engine/core/graphene/object_types.py:422 engine/core/models.py:1848
msgid "feedback"
msgstr "フィードバック"
-#: engine/core/graphene/object_types.py:407
+#: engine/core/graphene/object_types.py:456
msgid "a list of order products in this order"
msgstr "注文商品のリスト"
-#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214
+#: engine/core/graphene/object_types.py:458 engine/core/models.py:1253
msgid "billing address"
msgstr "請求先住所"
-#: engine/core/graphene/object_types.py:412
+#: engine/core/graphene/object_types.py:462
msgid ""
"shipping address for this order, leave blank if same as billing address or "
"if not applicable"
msgstr "請求先住所と同じ場合、または該当しない場合は空白にしてください。"
-#: engine/core/graphene/object_types.py:414
+#: engine/core/graphene/object_types.py:465
msgid "total price of this order"
msgstr "この注文の合計金額"
-#: engine/core/graphene/object_types.py:415
+#: engine/core/graphene/object_types.py:466
msgid "total quantity of products in order"
msgstr "注文商品の総数量"
-#: engine/core/graphene/object_types.py:416
+#: engine/core/graphene/object_types.py:467
msgid "are all products in the order digital"
msgstr "ご注文の商品はすべてデジタルですか?"
-#: engine/core/graphene/object_types.py:419
+#: engine/core/graphene/object_types.py:471
msgid "transactions for this order"
msgstr "この注文の取引"
-#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278
+#: engine/core/graphene/object_types.py:491 engine/core/models.py:1317
msgid "orders"
msgstr "受注状況"
-#: engine/core/graphene/object_types.py:459
+#: engine/core/graphene/object_types.py:512
msgid "image url"
msgstr "画像URL"
-#: engine/core/graphene/object_types.py:466
+#: engine/core/graphene/object_types.py:519
msgid "product's images"
msgstr "製品画像"
-#: engine/core/graphene/object_types.py:473 engine/core/models.py:431
-#: engine/core/models.py:586
+#: engine/core/graphene/object_types.py:526 engine/core/models.py:450
+#: engine/core/models.py:607
msgid "category"
msgstr "カテゴリー"
-#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737
+#: engine/core/graphene/object_types.py:528 engine/core/models.py:1849
msgid "feedbacks"
msgstr "フィードバック"
-#: engine/core/graphene/object_types.py:476 engine/core/models.py:502
-#: engine/core/models.py:595
+#: engine/core/graphene/object_types.py:529 engine/core/models.py:521
+#: engine/core/models.py:616
msgid "brand"
msgstr "ブランド"
-#: engine/core/graphene/object_types.py:477 engine/core/models.py:106
+#: engine/core/graphene/object_types.py:531 engine/core/models.py:106
msgid "attribute groups"
msgstr "属性グループ"
-#: engine/core/graphene/object_types.py:478
+#: engine/core/graphene/object_types.py:533
#: engine/core/templates/digital_order_created_email.html:111
#: engine/core/templates/digital_order_delivered_email.html:109
#: engine/core/templates/shipped_order_created_email.html:109
@@ -1344,7 +1396,7 @@ msgstr "属性グループ"
msgid "price"
msgstr "価格"
-#: engine/core/graphene/object_types.py:479
+#: engine/core/graphene/object_types.py:534
#: engine/core/templates/digital_order_created_email.html:110
#: engine/core/templates/digital_order_delivered_email.html:108
#: engine/core/templates/shipped_order_created_email.html:108
@@ -1352,39 +1404,39 @@ msgstr "価格"
msgid "quantity"
msgstr "数量"
-#: engine/core/graphene/object_types.py:480
+#: engine/core/graphene/object_types.py:535
msgid "number of feedbacks"
msgstr "フィードバック数"
-#: engine/core/graphene/object_types.py:481
+#: engine/core/graphene/object_types.py:536
msgid "only available for personal orders"
msgstr "個人注文のみの商品"
-#: engine/core/graphene/object_types.py:484
+#: engine/core/graphene/object_types.py:541
msgid "discount price"
msgstr "割引価格"
-#: engine/core/graphene/object_types.py:508 engine/core/models.py:658
+#: engine/core/graphene/object_types.py:565 engine/core/models.py:679
msgid "products"
msgstr "製品紹介"
-#: engine/core/graphene/object_types.py:611
+#: engine/core/graphene/object_types.py:675
msgid "promocodes"
msgstr "プロモコード"
-#: engine/core/graphene/object_types.py:621
+#: engine/core/graphene/object_types.py:690
msgid "products on sale"
msgstr "販売商品"
-#: engine/core/graphene/object_types.py:628 engine/core/models.py:904
+#: engine/core/graphene/object_types.py:698 engine/core/models.py:927
msgid "promotions"
msgstr "プロモーション"
-#: engine/core/graphene/object_types.py:632 engine/core/models.py:187
+#: engine/core/graphene/object_types.py:702 engine/core/models.py:193
msgid "vendor"
msgstr "ベンダー"
-#: engine/core/graphene/object_types.py:633 engine/core/models.py:657
+#: engine/core/graphene/object_types.py:703 engine/core/models.py:678
#: engine/core/templates/digital_order_created_email.html:109
#: engine/core/templates/digital_order_delivered_email.html:107
#: engine/core/templates/shipped_order_created_email.html:107
@@ -1392,98 +1444,98 @@ msgstr "ベンダー"
msgid "product"
msgstr "製品"
-#: engine/core/graphene/object_types.py:644 engine/core/models.py:927
+#: engine/core/graphene/object_types.py:715 engine/core/models.py:950
msgid "wishlisted products"
msgstr "ウィッシュリスト掲載商品"
-#: engine/core/graphene/object_types.py:650 engine/core/models.py:944
+#: engine/core/graphene/object_types.py:722 engine/core/models.py:967
msgid "wishlists"
msgstr "ウィッシュリスト"
-#: engine/core/graphene/object_types.py:654
+#: engine/core/graphene/object_types.py:727
msgid "tagged products"
msgstr "タグ別アーカイブ"
-#: engine/core/graphene/object_types.py:661 engine/core/models.py:224
-#: engine/core/models.py:601
+#: engine/core/graphene/object_types.py:735 engine/core/models.py:230
+#: engine/core/models.py:622
msgid "product tags"
msgstr "商品タグ"
-#: engine/core/graphene/object_types.py:665
+#: engine/core/graphene/object_types.py:740
msgid "tagged categories"
msgstr "タグ別アーカイブ"
-#: engine/core/graphene/object_types.py:672
+#: engine/core/graphene/object_types.py:748
msgid "categories tags"
msgstr "カテゴリー' タグ"
-#: engine/core/graphene/object_types.py:676
+#: engine/core/graphene/object_types.py:752
msgid "project name"
msgstr "プロジェクト名"
-#: engine/core/graphene/object_types.py:677
+#: engine/core/graphene/object_types.py:753
msgid "company name"
msgstr "会社名"
-#: engine/core/graphene/object_types.py:678
+#: engine/core/graphene/object_types.py:754
msgid "company address"
msgstr "会社住所"
-#: engine/core/graphene/object_types.py:679
+#: engine/core/graphene/object_types.py:755
msgid "company phone number"
msgstr "会社電話番号"
-#: engine/core/graphene/object_types.py:680
+#: engine/core/graphene/object_types.py:758
msgid "email from, sometimes it must be used instead of host user value"
msgstr "'email from' は、ホストユーザの値の代わりに使用されることがあります。"
-#: engine/core/graphene/object_types.py:681
+#: engine/core/graphene/object_types.py:761
msgid "email host user"
msgstr "メールホストユーザー"
-#: engine/core/graphene/object_types.py:682
+#: engine/core/graphene/object_types.py:762
msgid "maximum amount for payment"
msgstr "支払限度額"
-#: engine/core/graphene/object_types.py:683
+#: engine/core/graphene/object_types.py:763
msgid "minimum amount for payment"
msgstr "最低支払額"
-#: engine/core/graphene/object_types.py:684
+#: engine/core/graphene/object_types.py:764
msgid "analytics data"
msgstr "分析データ"
-#: engine/core/graphene/object_types.py:685
+#: engine/core/graphene/object_types.py:765
msgid "advertisement data"
msgstr "広告データ"
-#: engine/core/graphene/object_types.py:688
+#: engine/core/graphene/object_types.py:768
msgid "company configuration"
msgstr "構成"
-#: engine/core/graphene/object_types.py:692
+#: engine/core/graphene/object_types.py:772
msgid "language code"
msgstr "言語コード"
-#: engine/core/graphene/object_types.py:693
+#: engine/core/graphene/object_types.py:773
msgid "language name"
msgstr "言語名"
-#: engine/core/graphene/object_types.py:694
+#: engine/core/graphene/object_types.py:774
msgid "language flag, if exists :)"
msgstr "言語フラグがある場合 :)"
-#: engine/core/graphene/object_types.py:697
+#: engine/core/graphene/object_types.py:777
msgid "supported languages"
msgstr "サポートされている言語のリストを取得する"
-#: engine/core/graphene/object_types.py:728
-#: engine/core/graphene/object_types.py:729
-#: engine/core/graphene/object_types.py:730
+#: engine/core/graphene/object_types.py:809
+#: engine/core/graphene/object_types.py:812
+#: engine/core/graphene/object_types.py:815
msgid "products search results"
msgstr "製品検索結果"
-#: engine/core/graphene/object_types.py:731
+#: engine/core/graphene/object_types.py:817
msgid "posts search results"
msgstr "製品検索結果"
@@ -1494,7 +1546,10 @@ msgid ""
"parent group, forming a hierarchical structure. This can be useful for "
"categorizing and managing attributes more effectively in acomplex system."
msgstr ""
-"属性グループを表し、階層化することができます。このクラスは、属性グループの管理と整理に使用します。属性グループは親グループを持つことができ、階層構造を形成します。これは、複雑なシステムで属性をより効果的に分類・管理するのに便利です。"
+"属性グループを表し、階層化することができます。このクラスは、属性グループの管"
+"理と整理に使用します。属性グループは親グループを持つことができ、階層構造を形"
+"成します。これは、複雑なシステムで属性をより効果的に分類・管理するのに便利で"
+"す。"
#: engine/core/models.py:91
msgid "parent of this group"
@@ -1508,7 +1563,7 @@ msgstr "親属性グループ"
msgid "attribute group's name"
msgstr "属性グループ名"
-#: engine/core/models.py:105 engine/core/models.py:734
+#: engine/core/models.py:105 engine/core/models.py:755
msgid "attribute group"
msgstr "属性グループ"
@@ -1522,50 +1577,54 @@ msgid ""
"also maintains additional metadata and constraints, making it suitable for "
"use in systems that interact with third-party vendors."
msgstr ""
-"外部ベンダーとその相互作用要件に関する情報を格納できるベンダー・エンティティを表します。Vendor "
-"クラスは、外部ベンダーに関連する情報を定義・管理するために使用します。これは、ベンダーの名前、通信に必要な認証の詳細、ベンダーから取得した商品に適用されるパーセンテージのマークアップを格納します。このモデルは、追加のメタデータと制約も保持するため、サードパーティ・ベンダーとやり取りするシステムでの使用に適しています。"
+"外部ベンダーとその相互作用要件に関する情報を格納できるベンダー・エンティティ"
+"を表します。Vendor クラスは、外部ベンダーに関連する情報を定義・管理するために"
+"使用します。これは、ベンダーの名前、通信に必要な認証の詳細、ベンダーから取得"
+"した商品に適用されるパーセンテージのマークアップを格納します。このモデルは、"
+"追加のメタデータと制約も保持するため、サードパーティ・ベンダーとやり取りする"
+"システムでの使用に適しています。"
-#: engine/core/models.py:124
+#: engine/core/models.py:125
msgid "stores credentials and endpoints required for vendor communication"
msgstr "ベンダーのAPI通信に必要な認証情報とエンドポイントを保存する。"
-#: engine/core/models.py:125
+#: engine/core/models.py:127
msgid "authentication info"
msgstr "認証情報"
-#: engine/core/models.py:130
+#: engine/core/models.py:132
msgid "define the markup for products retrieved from this vendor"
msgstr "このベンダーから取得した商品のマークアップを定義する。"
-#: engine/core/models.py:131
+#: engine/core/models.py:133
msgid "vendor markup percentage"
msgstr "ベンダーのマークアップ率"
-#: engine/core/models.py:135
+#: engine/core/models.py:137
msgid "name of this vendor"
msgstr "このベンダーの名前"
-#: engine/core/models.py:136
+#: engine/core/models.py:138
msgid "vendor name"
msgstr "ベンダー名"
-#: engine/core/models.py:147
+#: engine/core/models.py:153
msgid "response file"
msgstr "レスポンスファイル"
-#: engine/core/models.py:148
+#: engine/core/models.py:154
msgid "vendor's last processing response"
msgstr "ベンダーの最終処理回答"
-#: engine/core/models.py:154
+#: engine/core/models.py:160
msgid "vendor's integration file path"
msgstr "ベンダーの統合ファイルパス"
-#: engine/core/models.py:155
+#: engine/core/models.py:161
msgid "integration path"
msgstr "統合パス"
-#: engine/core/models.py:197
+#: engine/core/models.py:203
msgid ""
"Represents a product tag used for classifying or identifying products. The "
"ProductTag class is designed to uniquely identify and classify products "
@@ -1573,46 +1632,51 @@ msgid ""
"display name. It supports operations exported through mixins and provides "
"metadata customization for administrative purposes."
msgstr ""
-"製品を分類または識別するために使用される製品タグを表します。ProductTag "
-"クラスは、内部タグ識別子とユーザーフレンドリーな表示名の組み合わせによって、製品を一意に識別および分類するように設計されています。ミキシンを通じてエクスポートされる操作をサポートし、管理目的のためにメタデータのカスタマイズを提供します。"
+"製品を分類または識別するために使用される製品タグを表します。ProductTag クラス"
+"は、内部タグ識別子とユーザーフレンドリーな表示名の組み合わせによって、製品を"
+"一意に識別および分類するように設計されています。ミキシンを通じてエクスポート"
+"される操作をサポートし、管理目的のためにメタデータのカスタマイズを提供しま"
+"す。"
-#: engine/core/models.py:209 engine/core/models.py:240
+#: engine/core/models.py:215 engine/core/models.py:246
msgid "internal tag identifier for the product tag"
msgstr "商品タグの内部タグ識別子"
-#: engine/core/models.py:210 engine/core/models.py:241
+#: engine/core/models.py:216 engine/core/models.py:247
msgid "tag name"
msgstr "タグ名"
-#: engine/core/models.py:214 engine/core/models.py:245
+#: engine/core/models.py:220 engine/core/models.py:251
msgid "user-friendly name for the product tag"
msgstr "商品タグのユーザーフレンドリーな名前"
-#: engine/core/models.py:215 engine/core/models.py:246
+#: engine/core/models.py:221 engine/core/models.py:252
msgid "tag display name"
msgstr "タグ表示名"
-#: engine/core/models.py:223
+#: engine/core/models.py:229
msgid "product tag"
msgstr "商品タグ"
-#: engine/core/models.py:229
+#: engine/core/models.py:235
msgid ""
"Represents a category tag used for products. This class models a category "
"tag that can be used to associate and classify products. It includes "
"attributes for an internal tag identifier and a user-friendly display name."
msgstr ""
-"商品に使用されるカテゴリータグを表します。このクラスは、商品の関連付けと分類に使用できるカテゴリタグをモデル化します。内部タグ識別子とユーザーフレンドリーな表示名の属性が含まれます。"
+"商品に使用されるカテゴリータグを表します。このクラスは、商品の関連付けと分類"
+"に使用できるカテゴリタグをモデル化します。内部タグ識別子とユーザーフレンド"
+"リーな表示名の属性が含まれます。"
-#: engine/core/models.py:254
+#: engine/core/models.py:260
msgid "category tag"
msgstr "カテゴリタグ"
-#: engine/core/models.py:255 engine/core/models.py:327
+#: engine/core/models.py:261 engine/core/models.py:333
msgid "category tags"
msgstr "カテゴリータグ"
-#: engine/core/models.py:260
+#: engine/core/models.py:266
msgid ""
"Represents a category entity to organize and group related items in a "
"hierarchical structure. Categories may have hierarchical relationships with "
@@ -1624,179 +1688,190 @@ msgid ""
"hierarchy of categories, as well as assign attributes like images, tags, or "
"priority."
msgstr ""
-"関連するアイテムを階層構造で整理し、グループ化するためのカテゴリ・エンティティを表します。カテゴリは、親子関係をサポートする他のカテゴリとの階層関係を持つことができます。このクラスには、カテゴリ関連機能の基盤となるメタデータおよび視覚表現のためのフィールドが含まれます。このクラスは通常、アプリケーション内で商品カテゴリやその他の類似のグループ化を定義および管理するために使用され、ユーザや管理者がカテゴリの名前、説明、階層を指定したり、画像、タグ、優先度などの属性を割り当てることができます。"
+"関連するアイテムを階層構造で整理し、グループ化するためのカテゴリ・エンティ"
+"ティを表します。カテゴリは、親子関係をサポートする他のカテゴリとの階層関係を"
+"持つことができます。このクラスには、カテゴリ関連機能の基盤となるメタデータお"
+"よび視覚表現のためのフィールドが含まれます。このクラスは通常、アプリケーショ"
+"ン内で商品カテゴリやその他の類似のグループ化を定義および管理するために使用さ"
+"れ、ユーザや管理者がカテゴリの名前、説明、階層を指定したり、画像、タグ、優先"
+"度などの属性を割り当てることができます。"
-#: engine/core/models.py:274
+#: engine/core/models.py:280
msgid "upload an image representing this category"
msgstr "このカテゴリーを表す画像をアップロードする"
-#: engine/core/models.py:277
+#: engine/core/models.py:283
msgid "category image"
msgstr "カテゴリーイメージ"
-#: engine/core/models.py:282
+#: engine/core/models.py:288
msgid "define a markup percentage for products in this category"
msgstr "このカテゴリの商品のマークアップ率を定義する"
-#: engine/core/models.py:291
+#: engine/core/models.py:297
msgid "parent of this category to form a hierarchical structure"
msgstr "階層構造を形成するこのカテゴリの親"
-#: engine/core/models.py:292
+#: engine/core/models.py:298
msgid "parent category"
msgstr "親カテゴリー"
-#: engine/core/models.py:297
+#: engine/core/models.py:303
msgid "category name"
msgstr "カテゴリー名"
-#: engine/core/models.py:298
+#: engine/core/models.py:304
msgid "provide a name for this category"
msgstr "このカテゴリの名前を入力してください。"
-#: engine/core/models.py:305
+#: engine/core/models.py:311
msgid "add a detailed description for this category"
msgstr "このカテゴリの詳細説明を追加する"
-#: engine/core/models.py:306
+#: engine/core/models.py:312
msgid "category description"
msgstr "カテゴリー説明"
-#: engine/core/models.py:326
+#: engine/core/models.py:332
msgid "tags that help describe or group this category"
msgstr "このカテゴリーを説明またはグループ化するのに役立つタグ"
-#: engine/core/models.py:333 engine/core/models.py:495
+#: engine/core/models.py:339 engine/core/models.py:514
msgid "priority"
msgstr "優先順位"
-#: engine/core/models.py:438
+#: engine/core/models.py:457
msgid ""
"Represents a Brand object in the system. This class handles information and "
"attributes related to a brand, including its name, logos, description, "
"associated categories, a unique slug, and priority order. It allows for the "
-"organization and representation of brand-related data within the "
-"application."
+"organization and representation of brand-related data within the application."
msgstr ""
-"システム内のブランド・オブジェクトを表します。このクラスは、名前、ロゴ、説明、関連カテゴリ、一意のスラッグ、および優先順位など、ブランドに関連する情報と属性を処理します。このクラスによって、アプリケーション内でブランド関連データを整理し、表現することができます。"
+"システム内のブランド・オブジェクトを表します。このクラスは、名前、ロゴ、説"
+"明、関連カテゴリ、一意のスラッグ、および優先順位など、ブランドに関連する情報"
+"と属性を処理します。このクラスによって、アプリケーション内でブランド関連デー"
+"タを整理し、表現することができます。"
-#: engine/core/models.py:448
+#: engine/core/models.py:467
msgid "name of this brand"
msgstr "ブランド名"
-#: engine/core/models.py:449
+#: engine/core/models.py:468
msgid "brand name"
msgstr "ブランド名"
-#: engine/core/models.py:456
+#: engine/core/models.py:475
msgid "upload a logo representing this brand"
msgstr "このブランドを代表するロゴをアップロードする"
-#: engine/core/models.py:458
+#: engine/core/models.py:477
msgid "brand small image"
msgstr "小さなブランドイメージ"
-#: engine/core/models.py:464
+#: engine/core/models.py:483
msgid "upload a big logo representing this brand"
msgstr "このブランドを象徴する大きなロゴをアップロードする"
-#: engine/core/models.py:466
+#: engine/core/models.py:485
msgid "brand big image"
msgstr "大きなブランドイメージ"
-#: engine/core/models.py:471
+#: engine/core/models.py:490
msgid "add a detailed description of the brand"
msgstr "ブランドの詳細な説明を加える"
-#: engine/core/models.py:472
+#: engine/core/models.py:491
msgid "brand description"
msgstr "ブランド説明"
-#: engine/core/models.py:477
+#: engine/core/models.py:496
msgid "optional categories that this brand is associated with"
msgstr "このブランドが関連するオプション・カテゴリー"
-#: engine/core/models.py:478
+#: engine/core/models.py:497
msgid "associated categories"
msgstr "カテゴリー"
-#: engine/core/models.py:508
+#: engine/core/models.py:527
msgid ""
-"Represents the stock of a product managed in the system. This class provides"
-" details about the relationship between vendors, products, and their stock "
+"Represents the stock of a product managed in the system. This class provides "
+"details about the relationship between vendors, products, and their stock "
"information, as well as inventory-related properties like price, purchase "
"price, quantity, SKU, and digital assets. It is part of the inventory "
"management system to allow tracking and evaluation of products available "
"from various vendors."
msgstr ""
-"システムで管理されている商品の在庫を表します。このクラスは、ベンダー、商品、およびそれらの在庫情報間の関係の詳細や、価格、購入価格、数量、SKU、デジタル資産などの在庫関連プロパティを提供します。これは在庫管理システムの一部で、さまざまなベンダーから入手可能な製品の追跡と評価を可能にします。"
+"システムで管理されている商品の在庫を表します。このクラスは、ベンダー、商品、"
+"およびそれらの在庫情報間の関係の詳細や、価格、購入価格、数量、SKU、デジタル資"
+"産などの在庫関連プロパティを提供します。これは在庫管理システムの一部で、さま"
+"ざまなベンダーから入手可能な製品の追跡と評価を可能にします。"
-#: engine/core/models.py:520
+#: engine/core/models.py:539
msgid "the vendor supplying this product stock"
msgstr "この製品の在庫を供給しているベンダー"
-#: engine/core/models.py:521
+#: engine/core/models.py:540
msgid "associated vendor"
msgstr "関連ベンダー"
-#: engine/core/models.py:525
+#: engine/core/models.py:544
msgid "final price to the customer after markups"
msgstr "マークアップ後の顧客への最終価格"
-#: engine/core/models.py:526
+#: engine/core/models.py:545
msgid "selling price"
msgstr "販売価格"
-#: engine/core/models.py:531
+#: engine/core/models.py:550
msgid "the product associated with this stock entry"
msgstr "このストックエントリーに関連する製品"
-#: engine/core/models.py:532 engine/core/models.py:797
-#: engine/core/models.py:843 engine/core/models.py:1792
+#: engine/core/models.py:551 engine/core/models.py:820
+#: engine/core/models.py:866 engine/core/models.py:1904
msgid "associated product"
msgstr "関連製品"
-#: engine/core/models.py:539
+#: engine/core/models.py:558
msgid "the price paid to the vendor for this product"
msgstr "この製品に対してベンダーに支払われた価格"
-#: engine/core/models.py:540
+#: engine/core/models.py:559
msgid "vendor purchase price"
msgstr "ベンダーの購入価格"
-#: engine/core/models.py:544
+#: engine/core/models.py:563
msgid "available quantity of the product in stock"
msgstr "在庫数"
-#: engine/core/models.py:545
+#: engine/core/models.py:564
msgid "quantity in stock"
msgstr "在庫数"
-#: engine/core/models.py:549
+#: engine/core/models.py:568
msgid "vendor-assigned SKU for identifying the product"
msgstr "製品を識別するためにベンダーが割り当てたSKU"
-#: engine/core/models.py:550
+#: engine/core/models.py:569
msgid "vendor sku"
msgstr "ベンダーのSKU"
-#: engine/core/models.py:556
+#: engine/core/models.py:575
msgid "digital file associated with this stock if applicable"
msgstr "この銘柄に関連するデジタルファイル(該当する場合"
-#: engine/core/models.py:557
+#: engine/core/models.py:576
msgid "digital file"
msgstr "デジタルファイル"
-#: engine/core/models.py:560
+#: engine/core/models.py:580
msgid "system attributes"
msgstr "システム属性"
-#: engine/core/models.py:567
+#: engine/core/models.py:588
msgid "stock entries"
msgstr "ストックエントリー"
-#: engine/core/models.py:572
+#: engine/core/models.py:593
msgid ""
"Represents a product with attributes such as category, brand, tags, digital "
"status, name, description, part number, and slug. Provides related utility "
@@ -1807,350 +1882,376 @@ msgid ""
"properties to improve performance. It is used to define and manipulate "
"product data and its associated information within an application."
msgstr ""
-"カテゴリ、ブランド、タグ、デジタルステータス、名前、説明、品番、スラッグなどの属性を持つ製品を表します。評価、フィードバック数、価格、数量、注文総数を取得するための関連ユーティリティ・プロパティを提供します。電子商取引や在庫管理を扱うシステムで使用するように設計されています。このクラスは、関連するモデル"
-" (Category、Brand、ProductTag など) "
-"と相互作用し、パフォーマンスを向上させるために、頻繁にアクセスされるプロパティのキャッシュを管理します。アプリケーション内で商品データとその関連情報を定義し、操作するために使用されます。"
+"カテゴリ、ブランド、タグ、デジタルステータス、名前、説明、品番、スラッグなど"
+"の属性を持つ製品を表します。評価、フィードバック数、価格、数量、注文総数を取"
+"得するための関連ユーティリティ・プロパティを提供します。電子商取引や在庫管理"
+"を扱うシステムで使用するように設計されています。このクラスは、関連するモデル "
+"(Category、Brand、ProductTag など) と相互作用し、パフォーマンスを向上させるた"
+"めに、頻繁にアクセスされるプロパティのキャッシュを管理します。アプリケーショ"
+"ン内で商品データとその関連情報を定義し、操作するために使用されます。"
-#: engine/core/models.py:585
+#: engine/core/models.py:606
msgid "category this product belongs to"
msgstr "この製品が属するカテゴリ"
-#: engine/core/models.py:594
+#: engine/core/models.py:615
msgid "optionally associate this product with a brand"
msgstr "オプションでこの製品をブランドと関連付ける"
-#: engine/core/models.py:600
+#: engine/core/models.py:621
msgid "tags that help describe or group this product"
msgstr "この商品の説明やグループ分けに役立つタグ"
-#: engine/core/models.py:605
+#: engine/core/models.py:626
msgid "indicates whether this product is digitally delivered"
msgstr "この製品がデジタル配信されるかどうかを示す"
-#: engine/core/models.py:606
+#: engine/core/models.py:627
msgid "is product digital"
msgstr "製品はデジタルか"
-#: engine/core/models.py:612
+#: engine/core/models.py:633
msgid "provide a clear identifying name for the product"
msgstr "製品の明確な識別名を提供する"
-#: engine/core/models.py:613
+#: engine/core/models.py:634
msgid "product name"
msgstr "商品名"
-#: engine/core/models.py:619 engine/core/models.py:892
+#: engine/core/models.py:640 engine/core/models.py:915
msgid "add a detailed description of the product"
msgstr "商品の詳細説明を追加する"
-#: engine/core/models.py:620
+#: engine/core/models.py:641
msgid "product description"
msgstr "商品説明"
-#: engine/core/models.py:627
+#: engine/core/models.py:648
msgid "part number for this product"
msgstr "この製品の品番"
-#: engine/core/models.py:628
+#: engine/core/models.py:649
msgid "part number"
msgstr "品番"
-#: engine/core/models.py:647
+#: engine/core/models.py:668
msgid "stock keeping unit for this product"
msgstr "この製品の在庫管理単位"
-#: engine/core/models.py:720
+#: engine/core/models.py:741
msgid ""
"Represents an attribute in the system. This class is used to define and "
"manage attributes, which are customizable pieces of data that can be "
"associated with other entities. Attributes have associated categories, "
-"groups, value types, and names. The model supports multiple types of values,"
-" including string, integer, float, boolean, array, and object. This allows "
+"groups, value types, and names. The model supports multiple types of values, "
+"including string, integer, float, boolean, array, and object. This allows "
"for dynamic and flexible data structuring."
msgstr ""
-"システム内の属性を表します。このクラスは、属性を定義および管理するために使用されます。属性は、他のエンティティに関連付けることができる、カスタマイズ可能なデータの部分です。属性には、関連するカテゴリ、グループ、値型、および名前があります。このモデルは、string、integer、float、boolean、array、object"
-" などの複数の型の値をサポートしています。これにより、動的で柔軟なデータ構造化が可能になります。"
+"システム内の属性を表します。このクラスは、属性を定義および管理するために使用"
+"されます。属性は、他のエンティティに関連付けることができる、カスタマイズ可能"
+"なデータの部分です。属性には、関連するカテゴリ、グループ、値型、および名前が"
+"あります。このモデルは、string、integer、float、boolean、array、object などの"
+"複数の型の値をサポートしています。これにより、動的で柔軟なデータ構造化が可能"
+"になります。"
-#: engine/core/models.py:733
+#: engine/core/models.py:754
msgid "group of this attribute"
msgstr "この属性のグループ"
-#: engine/core/models.py:739
+#: engine/core/models.py:760
msgid "string"
msgstr "ストリング"
-#: engine/core/models.py:740
+#: engine/core/models.py:761
msgid "integer"
msgstr "整数"
-#: engine/core/models.py:741
+#: engine/core/models.py:762
msgid "float"
msgstr "フロート"
-#: engine/core/models.py:742
+#: engine/core/models.py:763
msgid "boolean"
msgstr "ブーリアン"
-#: engine/core/models.py:743
+#: engine/core/models.py:764
msgid "array"
msgstr "配列"
-#: engine/core/models.py:744
+#: engine/core/models.py:765
msgid "object"
msgstr "対象"
-#: engine/core/models.py:746
+#: engine/core/models.py:767
msgid "type of the attribute's value"
msgstr "属性値のタイプ"
-#: engine/core/models.py:747
+#: engine/core/models.py:768
msgid "value type"
msgstr "値の種類"
-#: engine/core/models.py:752
+#: engine/core/models.py:773
msgid "name of this attribute"
msgstr "この属性の名前"
-#: engine/core/models.py:753
+#: engine/core/models.py:774
msgid "attribute's name"
msgstr "属性名"
-#: engine/core/models.py:758
+#: engine/core/models.py:779
msgid "is filterable"
msgstr "フィルタリング可能"
-#: engine/core/models.py:759
+#: engine/core/models.py:781
msgid "designates whether this attribute can be used for filtering or not"
msgstr "この属性がフィルタリングに使用できるかどうかを指定する。"
-#: engine/core/models.py:771 engine/core/models.py:789
+#: engine/core/models.py:794 engine/core/models.py:812
#: engine/core/templates/digital_order_delivered_email.html:134
msgid "attribute"
msgstr "属性"
-#: engine/core/models.py:777
+#: engine/core/models.py:800
msgid ""
-"Represents a specific value for an attribute that is linked to a product. It"
-" links the 'attribute' to a unique 'value', allowing better organization and"
-" dynamic representation of product characteristics."
+"Represents a specific value for an attribute that is linked to a product. It "
+"links the 'attribute' to a unique 'value', allowing better organization and "
+"dynamic representation of product characteristics."
msgstr ""
-"製品にリンクされている属性の特定の値を表します。これは、「属性」を一意の「値」にリンクし、製品特性のより良い編成と動的な表現を可能にします。"
+"製品にリンクされている属性の特定の値を表します。これは、「属性」を一意の"
+"「値」にリンクし、製品特性のより良い編成と動的な表現を可能にします。"
-#: engine/core/models.py:788
+#: engine/core/models.py:811
msgid "attribute of this value"
msgstr "この値の属性"
-#: engine/core/models.py:796
+#: engine/core/models.py:819
msgid "the specific product associated with this attribute's value"
msgstr "この属性の値に関連する特定の製品"
-#: engine/core/models.py:802
+#: engine/core/models.py:825
msgid "the specific value for this attribute"
msgstr "この属性の具体的な値"
-#: engine/core/models.py:815
+#: engine/core/models.py:838
msgid ""
"Represents a product image associated with a product in the system. This "
-"class is designed to manage images for products, including functionality for"
-" uploading image files, associating them with specific products, and "
+"class is designed to manage images for products, including functionality for "
+"uploading image files, associating them with specific products, and "
"determining their display order. It also includes an accessibility feature "
"with alternative text for the images."
msgstr ""
-"システム内の商品に関連付けられた商品画像を表します。このクラスは商品の画像を管理するために設計されており、画像ファイルのアップロード、特定の商品との関連付け、表示順の決定などの機能を提供します。また、画像の代替テキストによるアクセシビリティ機能も備えています。"
+"システム内の商品に関連付けられた商品画像を表します。このクラスは商品の画像を"
+"管理するために設計されており、画像ファイルのアップロード、特定の商品との関連"
+"付け、表示順の決定などの機能を提供します。また、画像の代替テキストによるアク"
+"セシビリティ機能も備えています。"
-#: engine/core/models.py:826
+#: engine/core/models.py:849
msgid "provide alternative text for the image for accessibility"
msgstr "アクセシビリティのために、画像に代替テキストを提供する。"
-#: engine/core/models.py:827
+#: engine/core/models.py:850
msgid "image alt text"
msgstr "画像のaltテキスト"
-#: engine/core/models.py:830
+#: engine/core/models.py:853
msgid "upload the image file for this product"
msgstr "この商品の画像ファイルをアップロードする"
-#: engine/core/models.py:831 engine/core/models.py:862
+#: engine/core/models.py:854 engine/core/models.py:885
msgid "product image"
msgstr "商品画像"
-#: engine/core/models.py:836
+#: engine/core/models.py:859
msgid "determines the order in which images are displayed"
msgstr "画像の表示順を決める"
-#: engine/core/models.py:837
+#: engine/core/models.py:860
msgid "display priority"
msgstr "表示優先度"
-#: engine/core/models.py:842
+#: engine/core/models.py:865
msgid "the product that this image represents"
msgstr "この画像が表す製品"
-#: engine/core/models.py:863
+#: engine/core/models.py:886
msgid "product images"
msgstr "商品画像"
-#: engine/core/models.py:868
+#: engine/core/models.py:891
msgid ""
"Represents a promotional campaign for products with a discount. This class "
"is used to define and manage promotional campaigns that offer a percentage-"
"based discount for products. The class includes attributes for setting the "
"discount rate, providing details about the promotion, and linking it to the "
-"applicable products. It integrates with the product catalog to determine the"
-" affected items in the campaign."
+"applicable products. It integrates with the product catalog to determine the "
+"affected items in the campaign."
msgstr ""
-"割引を伴う商品の販促キャンペーンを表します。このクラスは、商品に対してパーセンテージベースの割引を提供する販促キャンペーンを定義および管理するために使用します。このクラスには、割引率を設定し、プロモーションの詳細を提供し、該当する商品にリンクするための属性が含まれます。商品カタログと統合して、キャンペーンの対象商品を決定します。"
+"割引を伴う商品の販促キャンペーンを表します。このクラスは、商品に対してパーセ"
+"ンテージベースの割引を提供する販促キャンペーンを定義および管理するために使用"
+"します。このクラスには、割引率を設定し、プロモーションの詳細を提供し、該当す"
+"る商品にリンクするための属性が含まれます。商品カタログと統合して、キャンペー"
+"ンの対象商品を決定します。"
-#: engine/core/models.py:880
+#: engine/core/models.py:903
msgid "percentage discount for the selected products"
msgstr "選択した商品の割引率"
-#: engine/core/models.py:881
+#: engine/core/models.py:904
msgid "discount percentage"
msgstr "割引率"
-#: engine/core/models.py:886
+#: engine/core/models.py:909
msgid "provide a unique name for this promotion"
msgstr "このプロモーションのユニークな名前を入力してください。"
-#: engine/core/models.py:887
+#: engine/core/models.py:910
msgid "promotion name"
msgstr "プロモーション名"
-#: engine/core/models.py:893
+#: engine/core/models.py:916
msgid "promotion description"
msgstr "プロモーション内容"
-#: engine/core/models.py:898
+#: engine/core/models.py:921
msgid "select which products are included in this promotion"
msgstr "キャンペーン対象商品をお選びください。"
-#: engine/core/models.py:899
+#: engine/core/models.py:922
msgid "included products"
msgstr "含まれる製品"
-#: engine/core/models.py:903
+#: engine/core/models.py:926
msgid "promotion"
msgstr "プロモーション"
-#: engine/core/models.py:914
+#: engine/core/models.py:937
msgid ""
"Represents a user's wishlist for storing and managing desired products. The "
"class provides functionality to manage a collection of products, supporting "
"operations such as adding and removing products, as well as supporting "
"operations for adding and removing multiple products at once."
msgstr ""
-"希望する商品を保存・管理するためのユーザーのウィッシュリストを表します。このクラスは、商品のコレクションを管理する機能を提供し、商品の追加や削除などの操作をサポートし、複数の商品を一度に追加したり削除したりする操作をサポートします。"
+"希望する商品を保存・管理するためのユーザーのウィッシュリストを表します。この"
+"クラスは、商品のコレクションを管理する機能を提供し、商品の追加や削除などの操"
+"作をサポートし、複数の商品を一度に追加したり削除したりする操作をサポートしま"
+"す。"
-#: engine/core/models.py:926
+#: engine/core/models.py:949
msgid "products that the user has marked as wanted"
msgstr "ユーザーが欲しいとマークした商品"
-#: engine/core/models.py:934
+#: engine/core/models.py:957
msgid "user who owns this wishlist"
msgstr "このウィッシュリストを所有しているユーザー"
-#: engine/core/models.py:935
+#: engine/core/models.py:958
msgid "wishlist owner"
msgstr "ウィッシュリストのオーナー"
-#: engine/core/models.py:943
+#: engine/core/models.py:966
msgid "wishlist"
msgstr "ウィッシュリスト"
-#: engine/core/models.py:985
+#: engine/core/models.py:1008
msgid ""
"Represents a documentary record tied to a product. This class is used to "
"store information about documentaries related to specific products, "
"including file uploads and their metadata. It contains methods and "
"properties to handle the file type and storage path for the documentary "
-"files. It extends functionality from specific mixins and provides additional"
-" custom features."
+"files. It extends functionality from specific mixins and provides additional "
+"custom features."
msgstr ""
-"商品に関連付けられたドキュメンタリーのレコードを表します。このクラスは、ファイルのアップロードとそのメタデータを含む、特定の商品に関連するドキュメンタリーに関する情報を格納するために使用されます。ドキュメントファイルのファイルタイプと保存パスを処理するメソッドとプロパティが含まれています。特定のミックスインから機能を拡張し、追加のカスタム機能を提供します。"
+"商品に関連付けられたドキュメンタリーのレコードを表します。このクラスは、ファ"
+"イルのアップロードとそのメタデータを含む、特定の商品に関連するドキュメンタ"
+"リーに関する情報を格納するために使用されます。ドキュメントファイルのファイル"
+"タイプと保存パスを処理するメソッドとプロパティが含まれています。特定のミック"
+"スインから機能を拡張し、追加のカスタム機能を提供します。"
-#: engine/core/models.py:998
+#: engine/core/models.py:1023
msgid "documentary"
msgstr "ドキュメンタリー"
-#: engine/core/models.py:999
+#: engine/core/models.py:1024
msgid "documentaries"
msgstr "ドキュメンタリー"
-#: engine/core/models.py:1009
+#: engine/core/models.py:1034
msgid "unresolved"
msgstr "未解決"
-#: engine/core/models.py:1014
+#: engine/core/models.py:1039
msgid ""
-"Represents an address entity that includes location details and associations"
-" with a user. Provides functionality for geographic and address data "
-"storage, as well as integration with geocoding services. This class is "
-"designed to store detailed address information including components like "
-"street, city, region, country, and geolocation (longitude and latitude). It "
-"supports integration with geocoding APIs, enabling the storage of raw API "
-"responses for further processing or inspection. The class also allows "
-"associating an address with a user, facilitating personalized data handling."
+"Represents an address entity that includes location details and associations "
+"with a user. Provides functionality for geographic and address data storage, "
+"as well as integration with geocoding services. This class is designed to "
+"store detailed address information including components like street, city, "
+"region, country, and geolocation (longitude and latitude). It supports "
+"integration with geocoding APIs, enabling the storage of raw API responses "
+"for further processing or inspection. The class also allows associating an "
+"address with a user, facilitating personalized data handling."
msgstr ""
-"場所の詳細とユーザーとの関連付けを含む住所エンティティを表します。地理データおよび住所データを保存する機能と、ジオコーディングサービスとの統合機能を提供します。このクラスは、street、city、region、country、geolocation"
-" (longitude and latitude) のようなコンポーネントを含む詳細な住所情報を格納するように設計されています。ジオコーディング API"
-" との統合をサポートしており、 生の API "
-"レスポンスを保存してさらなる処理や検査を行うことができます。また、このクラスは住所とユーザを関連付けることができ、 "
-"パーソナライズされたデータの取り扱いを容易にします。"
+"場所の詳細とユーザーとの関連付けを含む住所エンティティを表します。地理データ"
+"および住所データを保存する機能と、ジオコーディングサービスとの統合機能を提供"
+"します。このクラスは、street、city、region、country、geolocation (longitude "
+"and latitude) のようなコンポーネントを含む詳細な住所情報を格納するように設計"
+"されています。ジオコーディング API との統合をサポートしており、 生の API レス"
+"ポンスを保存してさらなる処理や検査を行うことができます。また、このクラスは住"
+"所とユーザを関連付けることができ、 パーソナライズされたデータの取り扱いを容易"
+"にします。"
-#: engine/core/models.py:1029
+#: engine/core/models.py:1054
msgid "address line for the customer"
msgstr "お客様の住所"
-#: engine/core/models.py:1030
+#: engine/core/models.py:1055
msgid "address line"
msgstr "住所"
-#: engine/core/models.py:1032
+#: engine/core/models.py:1057
msgid "street"
msgstr "ストリート"
-#: engine/core/models.py:1033
+#: engine/core/models.py:1058
msgid "district"
msgstr "地区"
-#: engine/core/models.py:1034
+#: engine/core/models.py:1059
msgid "city"
msgstr "都市"
-#: engine/core/models.py:1035
+#: engine/core/models.py:1060
msgid "region"
msgstr "地域"
-#: engine/core/models.py:1036
+#: engine/core/models.py:1061
msgid "postal code"
msgstr "郵便番号"
-#: engine/core/models.py:1037
+#: engine/core/models.py:1062
msgid "country"
msgstr "国名"
-#: engine/core/models.py:1044
+#: engine/core/models.py:1069
msgid "geolocation point: (longitude, latitude)"
msgstr "ジオロケーションポイント(経度、緯度)"
-#: engine/core/models.py:1047
+#: engine/core/models.py:1075
msgid "full JSON response from geocoder for this address"
msgstr "この住所に対するジオコーダーからの完全なJSON応答"
-#: engine/core/models.py:1052
+#: engine/core/models.py:1081
msgid "stored JSON response from the geocoding service"
msgstr "ジオコーディング・サービスからの保存されたJSONレスポンス"
-#: engine/core/models.py:1060
+#: engine/core/models.py:1091
msgid "address"
msgstr "住所"
-#: engine/core/models.py:1061
+#: engine/core/models.py:1092
msgid "addresses"
msgstr "住所"
-#: engine/core/models.py:1073
+#: engine/core/models.py:1104
msgid ""
"Represents a promotional code that can be used for discounts, managing its "
"validity, type of discount, and application. The PromoCode class stores "
@@ -2159,239 +2260,252 @@ msgid ""
"any), and status of its usage. It includes functionality to validate and "
"apply the promo code to an order while ensuring constraints are met."
msgstr ""
-"割引に使用できるプロモーションコードを表し、その有効期間、割引の種類、適用を管理します。PromoCode クラスは、一意の識別子、割引のプロパティ "
-"(金額またはパーセンテージ)、有効期間、関連するユーザ "
-"(もしあれば)、および使用状況など、プロモーションコードに関する詳細を格納します。これは、制約が満たされていることを保証しながら、プロモコードを検証し、注文に適用する機能を含んでいます。"
+"割引に使用できるプロモーションコードを表し、その有効期間、割引の種類、適用を"
+"管理します。PromoCode クラスは、一意の識別子、割引のプロパティ (金額または"
+"パーセンテージ)、有効期間、関連するユーザ (もしあれば)、および使用状況など、"
+"プロモーションコードに関する詳細を格納します。これは、制約が満たされているこ"
+"とを保証しながら、プロモコードを検証し、注文に適用する機能を含んでいます。"
-#: engine/core/models.py:1087
+#: engine/core/models.py:1118
msgid "unique code used by a user to redeem a discount"
msgstr "ユーザーが割引を利用する際に使用する固有のコード"
-#: engine/core/models.py:1088
+#: engine/core/models.py:1119
msgid "promo code identifier"
msgstr "プロモコード識別子"
-#: engine/core/models.py:1095
+#: engine/core/models.py:1126
msgid "fixed discount amount applied if percent is not used"
msgstr "パーセントを使用しない場合に適用される固定割引額"
-#: engine/core/models.py:1096
+#: engine/core/models.py:1127
msgid "fixed discount amount"
msgstr "固定割引額"
-#: engine/core/models.py:1102
+#: engine/core/models.py:1133
msgid "percentage discount applied if fixed amount is not used"
msgstr "定額を使用しない場合に適用される割引率"
-#: engine/core/models.py:1103
+#: engine/core/models.py:1134
msgid "percentage discount"
msgstr "割引率"
-#: engine/core/models.py:1108
+#: engine/core/models.py:1139
msgid "timestamp when the promocode expires"
msgstr "プロモコードの有効期限が切れるタイムスタンプ"
-#: engine/core/models.py:1109
+#: engine/core/models.py:1140
msgid "end validity time"
msgstr "終了有効時間"
-#: engine/core/models.py:1114
+#: engine/core/models.py:1145
msgid "timestamp from which this promocode is valid"
msgstr "このプロモコードが有効なタイムスタンプ"
-#: engine/core/models.py:1115
+#: engine/core/models.py:1146
msgid "start validity time"
msgstr "開始有効時間"
-#: engine/core/models.py:1120
+#: engine/core/models.py:1151
msgid "timestamp when the promocode was used, blank if not used yet"
msgstr "プロモコードが使用されたタイムスタンプ、未使用の場合は空白"
-#: engine/core/models.py:1121
+#: engine/core/models.py:1152
msgid "usage timestamp"
msgstr "使用タイムスタンプ"
-#: engine/core/models.py:1126
+#: engine/core/models.py:1157
msgid "user assigned to this promocode if applicable"
msgstr "該当する場合、このプロモコードに割り当てられたユーザー"
-#: engine/core/models.py:1127
+#: engine/core/models.py:1158
msgid "assigned user"
msgstr "担当ユーザー"
-#: engine/core/models.py:1134
+#: engine/core/models.py:1165
msgid "promo code"
msgstr "プロモコード"
-#: engine/core/models.py:1135
+#: engine/core/models.py:1166
msgid "promo codes"
msgstr "プロモコード"
-#: engine/core/models.py:1150
+#: engine/core/models.py:1182
msgid ""
"only one type of discount should be defined (amount or percent), but not "
"both or neither."
-msgstr "割引の種類は1つだけ(金額またはパーセント)定義されるべきで、両方またはどちらも定義してはならない。"
+msgstr ""
+"割引の種類は1つだけ(金額またはパーセント)定義されるべきで、両方またはどちら"
+"も定義してはならない。"
-#: engine/core/models.py:1171
+#: engine/core/models.py:1204
msgid "promocode already used"
msgstr "プロモコードはすでに使用されています"
-#: engine/core/models.py:1187
+#: engine/core/models.py:1226
#, python-brace-format
msgid "invalid discount type for promocode {self.uuid}"
msgstr "プロモコード {self.uuid} の割引タイプが無効です!"
-#: engine/core/models.py:1196
+#: engine/core/models.py:1235
msgid ""
"Represents an order placed by a user. This class models an order within the "
"application, including its various attributes such as billing and shipping "
-"information, status, associated user, notifications, and related operations."
-" Orders can have associated products, promotions can be applied, addresses "
+"information, status, associated user, notifications, and related operations. "
+"Orders can have associated products, promotions can be applied, addresses "
"set, and shipping or billing details updated. Equally, functionality "
"supports managing the products in the order lifecycle."
msgstr ""
-"ユーザーによる注文を表します。このクラスは、請求や配送情報、ステータス、関連するユーザ、通知、関連する操作などのさまざまな属性を含む、アプリケーション内の注文をモデル化します。注文は関連する商品を持つことができ、プロモーションを適用し、住所を設定し、配送または請求の詳細を更新することができます。同様に、注文のライフサイクルにおける商品の管理もサポートします。"
+"ユーザーによる注文を表します。このクラスは、請求や配送情報、ステータス、関連"
+"するユーザ、通知、関連する操作などのさまざまな属性を含む、アプリケーション内"
+"の注文をモデル化します。注文は関連する商品を持つことができ、プロモーションを"
+"適用し、住所を設定し、配送または請求の詳細を更新することができます。同様に、"
+"注文のライフサイクルにおける商品の管理もサポートします。"
-#: engine/core/models.py:1213
+#: engine/core/models.py:1252
msgid "the billing address used for this order"
msgstr "この注文に使用される請求先住所"
-#: engine/core/models.py:1221
+#: engine/core/models.py:1260
msgid "optional promo code applied to this order"
msgstr "この注文に適用されるプロモコード"
-#: engine/core/models.py:1222
+#: engine/core/models.py:1261
msgid "applied promo code"
msgstr "プロモーションコード適用"
-#: engine/core/models.py:1230
+#: engine/core/models.py:1269
msgid "the shipping address used for this order"
msgstr "この注文に使用された配送先住所"
-#: engine/core/models.py:1231
+#: engine/core/models.py:1270
msgid "shipping address"
msgstr "配送先住所"
-#: engine/core/models.py:1237
+#: engine/core/models.py:1276
msgid "current status of the order in its lifecycle"
msgstr "ライフサイクルにおける現在の注文状況"
-#: engine/core/models.py:1238
+#: engine/core/models.py:1277
msgid "order status"
msgstr "注文状況"
-#: engine/core/models.py:1243 engine/core/models.py:1769
+#: engine/core/models.py:1282 engine/core/models.py:1881
msgid "json structure of notifications to display to users"
-msgstr "ユーザーに表示する通知のJSON構造、管理UIではテーブルビューが使用されます。"
+msgstr ""
+"ユーザーに表示する通知のJSON構造、管理UIではテーブルビューが使用されます。"
-#: engine/core/models.py:1249
+#: engine/core/models.py:1288
msgid "json representation of order attributes for this order"
msgstr "この注文の注文属性のJSON表現"
-#: engine/core/models.py:1255
+#: engine/core/models.py:1294
msgid "the user who placed the order"
msgstr "注文を行ったユーザー"
-#: engine/core/models.py:1256
+#: engine/core/models.py:1295
msgid "user"
msgstr "ユーザー"
-#: engine/core/models.py:1262
+#: engine/core/models.py:1301
msgid "the timestamp when the order was finalized"
msgstr "注文が確定したタイムスタンプ"
-#: engine/core/models.py:1263
+#: engine/core/models.py:1302
msgid "buy time"
msgstr "時間を買う"
-#: engine/core/models.py:1270
+#: engine/core/models.py:1309
msgid "a human-readable identifier for the order"
msgstr "オーダーの人間が読み取り可能な識別子。"
-#: engine/core/models.py:1271
+#: engine/core/models.py:1310
msgid "human readable id"
msgstr "人間が読めるID"
-#: engine/core/models.py:1277
+#: engine/core/models.py:1316
msgid "order"
msgstr "オーダー"
-#: engine/core/models.py:1319
+#: engine/core/models.py:1363
msgid "a user must have only one pending order at a time"
msgstr "ユーザーは一度に1つの未決注文しか持つことができません!"
-#: engine/core/models.py:1351
+#: engine/core/models.py:1396
msgid "you cannot add products to an order that is not a pending one"
msgstr "保留中の注文以外の注文に商品を追加することはできません。"
-#: engine/core/models.py:1356
+#: engine/core/models.py:1402
msgid "you cannot add inactive products to order"
msgstr "アクティブでない商品を注文に追加することはできません。"
-#: engine/core/models.py:1373
+#: engine/core/models.py:1424
msgid "you cannot add more products than available in stock"
msgstr "在庫以上の商品を追加することはできません。"
-#: engine/core/models.py:1395 engine/core/models.py:1420
-#: engine/core/models.py:1428
+#: engine/core/models.py:1448 engine/core/models.py:1477
+#: engine/core/models.py:1487
msgid "you cannot remove products from an order that is not a pending one"
msgstr "保留中の注文以外の注文から商品を削除することはできません。"
-#: engine/core/models.py:1416
+#: engine/core/models.py:1472
#, python-brace-format
msgid "{name} does not exist with query <{query}>"
msgstr "{name}はクエリ<{query}と一緒に存在しません!"
-#: engine/core/models.py:1448
+#: engine/core/models.py:1511
msgid "promocode does not exist"
msgstr "プロモコードが存在しない"
-#: engine/core/models.py:1454
+#: engine/core/models.py:1526
msgid "you can only buy physical products with shipping address specified"
msgstr "配送先住所が指定された現物商品のみ購入可能!"
-#: engine/core/models.py:1473
+#: engine/core/models.py:1547
msgid "address does not exist"
msgstr "アドレスが存在しない"
-#: engine/core/models.py:1494 engine/core/models.py:1563
+#: engine/core/models.py:1569 engine/core/models.py:1648
msgid "you can not buy at this moment, please try again in a few minutes"
msgstr "現在ご購入いただけません。数分後にもう一度お試しください。"
-#: engine/core/models.py:1497 engine/core/models.py:1559
+#: engine/core/models.py:1575 engine/core/models.py:1641
msgid "invalid force value"
msgstr "無効なフォース値"
-#: engine/core/models.py:1503 engine/core/models.py:1566
+#: engine/core/models.py:1581 engine/core/models.py:1652
msgid "you cannot purchase an empty order!"
msgstr "空注文はできません!"
-#: engine/core/models.py:1522
+#: engine/core/models.py:1602
msgid "you cannot buy an order without a user"
msgstr "ユーザーがいない注文は購入できない!"
-#: engine/core/models.py:1536
+#: engine/core/models.py:1616
msgid "a user without a balance cannot buy with balance"
msgstr "残高のないユーザーは、残高で購入することはできない!"
-#: engine/core/models.py:1541
+#: engine/core/models.py:1622
msgid "insufficient funds to complete the order"
msgstr "注文を完了するための資金不足"
-#: engine/core/models.py:1575
+#: engine/core/models.py:1663
msgid ""
"you cannot buy without registration, please provide the following "
"information: customer name, customer email, customer phone number"
-msgstr "ご登録がない場合はご購入いただけませんので、以下の情報をお知らせください:お客様のお名前、お客様のEメール、お客様の電話番号"
+msgstr ""
+"ご登録がない場合はご購入いただけませんので、以下の情報をお知らせください:お"
+"客様のお名前、お客様のEメール、お客様の電話番号"
-#: engine/core/models.py:1584
+#: engine/core/models.py:1674
#, python-brace-format
msgid ""
"invalid payment method: {payment_method} from {available_payment_methods}"
-msgstr "支払方法が無効です:{available_payment_methods}からの{payment_method}が無効です!"
+msgstr ""
+"支払方法が無効です:{available_payment_methods}からの{payment_method}が無効で"
+"す!"
-#: engine/core/models.py:1699
+#: engine/core/models.py:1805
msgid ""
"Manages user feedback for products. This class is designed to capture and "
"store user feedback for specific products that they have purchased. It "
@@ -2399,34 +2513,37 @@ msgid ""
"product in the order, and a user-assigned rating. The class uses database "
"fields to effectively model and manage feedback data."
msgstr ""
-"製品に対するユーザのフィードバックを管理します。このクラスは、購入した特定の商品に対するユーザのフィードバックを取得し、保存するために設計されています。ユーザのコメント、注文の関連商品への参照、そしてユーザが割り当てた評価を保存する属性を含みます。このクラスは、フィードバックデータを効果的にモデル化し、管理するためにデータベースフィールドを使用します。"
+"製品に対するユーザのフィードバックを管理します。このクラスは、購入した特定の"
+"商品に対するユーザのフィードバックを取得し、保存するために設計されています。"
+"ユーザのコメント、注文の関連商品への参照、そしてユーザが割り当てた評価を保存"
+"する属性を含みます。このクラスは、フィードバックデータを効果的にモデル化し、"
+"管理するためにデータベースフィールドを使用します。"
-#: engine/core/models.py:1711
+#: engine/core/models.py:1817
msgid "user-provided comments about their experience with the product"
msgstr "ユーザーから寄せられた製品使用体験に関するコメント"
-#: engine/core/models.py:1712
+#: engine/core/models.py:1818
msgid "feedback comments"
msgstr "フィードバック・コメント"
-#: engine/core/models.py:1719
-msgid ""
-"references the specific product in an order that this feedback is about"
+#: engine/core/models.py:1826
+msgid "references the specific product in an order that this feedback is about"
msgstr "このフィードバックが対象としている注文の特定の製品を参照する。"
-#: engine/core/models.py:1720
+#: engine/core/models.py:1828
msgid "related order product"
msgstr "関連注文商品"
-#: engine/core/models.py:1725
+#: engine/core/models.py:1833
msgid "user-assigned rating for the product"
msgstr "ユーザーによる製品の評価"
-#: engine/core/models.py:1726
+#: engine/core/models.py:1834
msgid "product rating"
msgstr "製品評価"
-#: engine/core/models.py:1742
+#: engine/core/models.py:1854
msgid ""
"Represents products associated with orders and their attributes. The "
"OrderProduct model maintains information about a product that is part of an "
@@ -2438,133 +2555,144 @@ msgid ""
"download URL for digital products. The model integrates with the Order and "
"Product models and stores a reference to them."
msgstr ""
-"注文に関連する商品とその属性を表す。OrderProductモデルは、購入価格、数量、商品属性、ステータスなどの詳細を含む、注文の一部である商品に関する情報を保持します。ユーザーや管理者への通知を管理し、商品残高の返却やフィードバックの追加などの操作を処理します。このモデルはまた、合計価格の計算やデジタル商品のダウンロードURLの生成など、ビジネスロジックをサポートするメソッドやプロパティも提供します。このモデルはOrderモデルとProductモデルと統合され、それらへの参照を保存します。"
+"注文に関連する商品とその属性を表す。OrderProductモデルは、購入価格、数量、商"
+"品属性、ステータスなどの詳細を含む、注文の一部である商品に関する情報を保持し"
+"ます。ユーザーや管理者への通知を管理し、商品残高の返却やフィードバックの追加"
+"などの操作を処理します。このモデルはまた、合計価格の計算やデジタル商品のダウ"
+"ンロードURLの生成など、ビジネスロジックをサポートするメソッドやプロパティも提"
+"供します。このモデルはOrderモデルとProductモデルと統合され、それらへの参照を"
+"保存します。"
-#: engine/core/models.py:1757
+#: engine/core/models.py:1869
msgid "the price paid by the customer for this product at purchase time"
msgstr "この商品の購入時に顧客が支払った価格"
-#: engine/core/models.py:1758
+#: engine/core/models.py:1870
msgid "purchase price at order time"
msgstr "注文時の購入価格"
-#: engine/core/models.py:1763
+#: engine/core/models.py:1875
msgid "internal comments for admins about this ordered product"
msgstr "この注文商品に関する管理者への内部コメント"
-#: engine/core/models.py:1764
+#: engine/core/models.py:1876
msgid "internal comments"
msgstr "社内コメント"
-#: engine/core/models.py:1770
+#: engine/core/models.py:1882
msgid "user notifications"
msgstr "ユーザー通知"
-#: engine/core/models.py:1775
+#: engine/core/models.py:1887
msgid "json representation of this item's attributes"
msgstr "このアイテムの属性のJSON表現"
-#: engine/core/models.py:1776
+#: engine/core/models.py:1888
msgid "ordered product attributes"
msgstr "製品属性の順序"
-#: engine/core/models.py:1781
+#: engine/core/models.py:1893
msgid "reference to the parent order that contains this product"
msgstr "この商品を含む親注文への参照"
-#: engine/core/models.py:1782
+#: engine/core/models.py:1894
msgid "parent order"
msgstr "親注文"
-#: engine/core/models.py:1791
+#: engine/core/models.py:1903
msgid "the specific product associated with this order line"
msgstr "この注文ラインに関連する特定の製品"
-#: engine/core/models.py:1798
+#: engine/core/models.py:1910
msgid "quantity of this specific product in the order"
msgstr "注文に含まれる特定の商品の数量"
-#: engine/core/models.py:1799
+#: engine/core/models.py:1911
msgid "product quantity"
msgstr "製品数量"
-#: engine/core/models.py:1806
+#: engine/core/models.py:1918
msgid "current status of this product in the order"
msgstr "この商品の現在のご注文状況"
-#: engine/core/models.py:1807
+#: engine/core/models.py:1919
msgid "product line status"
msgstr "製品ラインの状況"
-#: engine/core/models.py:1872
+#: engine/core/models.py:1986
msgid "order product must have an order"
msgstr "Orderproductには関連する注文がなければならない!"
-#: engine/core/models.py:1874
+#: engine/core/models.py:1988
#, python-brace-format
msgid "wrong action specified for feedback: {action}"
msgstr "フィードバックに指定されたアクションが間違っています:{action}です!"
-#: engine/core/models.py:1888
+#: engine/core/models.py:2005
msgid "you cannot feedback an order which is not received"
msgstr "受信していない注文をフィードバックすることはできません。"
-#: engine/core/models.py:1894
+#: engine/core/models.py:2014
msgid "name"
msgstr "名称"
-#: engine/core/models.py:1895
+#: engine/core/models.py:2016
msgid "URL of the integration"
msgstr "統合のURL"
-#: engine/core/models.py:1896
+#: engine/core/models.py:2019
msgid "authentication credentials"
msgstr "認証情報"
-#: engine/core/models.py:1918
+#: engine/core/models.py:2042
msgid "you can only have one default CRM provider"
msgstr "デフォルトのCRMプロバイダーは1つだけです。"
-#: engine/core/models.py:1928
+#: engine/core/models.py:2052
msgid "CRM"
msgstr "CRM"
-#: engine/core/models.py:1929
+#: engine/core/models.py:2053
msgid "CRMs"
msgstr "CRM"
-#: engine/core/models.py:1941
+#: engine/core/models.py:2069
msgid "order CRM link"
msgstr "注文のCRMリンク"
-#: engine/core/models.py:1942
+#: engine/core/models.py:2070
msgid "orders CRM links"
msgstr "オーダーのCRMリンク"
-#: engine/core/models.py:1947
+#: engine/core/models.py:2075
msgid ""
"Represents the downloading functionality for digital assets associated with "
"orders. The DigitalAssetDownload class provides the ability to manage and "
"access downloads related to order products. It maintains information about "
-"the associated order product, the number of downloads, and whether the asset"
-" is publicly visible. It includes a method to generate a URL for downloading"
-" the asset when the associated order is in a completed status."
+"the associated order product, the number of downloads, and whether the asset "
+"is publicly visible. It includes a method to generate a URL for downloading "
+"the asset when the associated order is in a completed status."
msgstr ""
-"注文に関連するデジタル資産のダウンロード機能を表します。DigitalAssetDownloadクラスは、注文商品に関連するダウンロードを管理し、アクセスする機能を提供します。このクラスは、関連する注文商品、ダウンロード数、およびアセットが公開されているかどうかの情報を保持します。関連する注文が完了したステータスのときに、アセットをダウンロードするための"
-" URL を生成するメソッドも含まれています。"
+"注文に関連するデジタル資産のダウンロード機能を表します。DigitalAssetDownload"
+"クラスは、注文商品に関連するダウンロードを管理し、アクセスする機能を提供しま"
+"す。このクラスは、関連する注文商品、ダウンロード数、およびアセットが公開され"
+"ているかどうかの情報を保持します。関連する注文が完了したステータスのときに、"
+"アセットをダウンロードするための URL を生成するメソッドも含まれています。"
-#: engine/core/models.py:1961
+#: engine/core/models.py:2091
msgid "download"
msgstr "ダウンロード"
-#: engine/core/models.py:1962
+#: engine/core/models.py:2092
msgid "downloads"
msgstr "ダウンロード"
-#: engine/core/serializers/utility.py:89
+#: engine/core/serializers/utility.py:91
msgid ""
"you must provide a comment, rating, and order product uuid to add feedback."
-msgstr "フィードバックを追加するには、コメント、評価、および注文商品の uuid を入力する必要があります。"
+msgstr ""
+"フィードバックを追加するには、コメント、評価、および注文商品の uuid を入力す"
+"る必要があります。"
#: engine/core/sitemaps.py:25
msgid "Home"
@@ -2756,9 +2884,12 @@ msgstr "こんにちは%(order.user.first_name)s、"
#, python-format
msgid ""
"thank you for your order #%(order.pk)s! we are pleased to inform you that\n"
-" we have taken your order into work. below are the details of your\n"
+" we have taken your order into work. below are "
+"the details of your\n"
" order:"
-msgstr "ご注文ありがとうございます#%(order.pk)s!ご注文を承りましたことをお知らせいたします。以下、ご注文の詳細です:"
+msgstr ""
+"ご注文ありがとうございます#%(order.pk)s!ご注文を承りましたことをお知らせいた"
+"します。以下、ご注文の詳細です:"
#: engine/core/templates/digital_order_created_email.html:112
#: engine/core/templates/digital_order_delivered_email.html:110
@@ -2781,7 +2912,9 @@ msgstr "合計価格"
msgid ""
"if you have any questions, feel free to contact our support at\n"
" %(config.EMAIL_HOST_USER)s."
-msgstr "ご不明な点がございましたら、%(config.EMAIL_HOST_USER)sまでお気軽にお問い合わせください。"
+msgstr ""
+"ご不明な点がございましたら、%(config.EMAIL_HOST_USER)sまでお気軽にお問い合わ"
+"せください。"
#: engine/core/templates/digital_order_created_email.html:133
#, python-format
@@ -2809,7 +2942,8 @@ msgstr "こんにちは%(user_first_name)s、"
msgid ""
"we have successfully processed your order №%(order_uuid)s! below are the\n"
" details of your order:"
-msgstr "ご注文の№%(order_uuid)sが正常に処理されました!以下はご注文の詳細です:"
+msgstr ""
+"ご注文の№%(order_uuid)sが正常に処理されました!以下はご注文の詳細です:"
#: engine/core/templates/digital_order_delivered_email.html:128
msgid ""
@@ -2830,7 +2964,9 @@ msgstr "価値"
msgid ""
"if you have any questions, feel free to contact our support at\n"
" %(contact_email)s."
-msgstr "ご不明な点がございましたら、%(contact_email)sまでお気軽にお問い合わせください。"
+msgstr ""
+"ご不明な点がございましたら、%(contact_email)sまでお気軽にお問い合わせくださ"
+"い。"
#: engine/core/templates/digital_order_delivered_email.html:165
#: engine/core/templates/promocode_granted_email.html:108
@@ -2862,9 +2998,12 @@ msgstr ""
#: engine/core/templates/shipped_order_created_email.html:101
#: engine/core/templates/shipped_order_delivered_email.html:101
msgid ""
-"thank you for your order! we are pleased to confirm your purchase. below are\n"
+"thank you for your order! we are pleased to confirm your purchase. below "
+"are\n"
" the details of your order:"
-msgstr "ご注文ありがとうございます!ご購入を確認させていただきました。以下、ご注文の詳細です:"
+msgstr ""
+"ご注文ありがとうございます!ご購入を確認させていただきました。以下、ご注文の"
+"詳細です:"
#: engine/core/templates/shipped_order_created_email.html:123
#: engine/core/templates/shipped_order_delivered_email.html:123
@@ -2891,11 +3030,11 @@ msgstr ""
"すべての権利\n"
" 予約済み"
-#: engine/core/utils/caching.py:44
+#: engine/core/utils/caching.py:48
msgid "both data and timeout are required"
msgstr "データとタイムアウトの両方が必要"
-#: engine/core/utils/caching.py:46
+#: engine/core/utils/caching.py:51
msgid "invalid timeout value, it must be between 0 and 216000 seconds"
msgstr "無効なタイムアウト値です。"
@@ -2904,17 +3043,17 @@ msgstr "無効なタイムアウト値です。"
msgid "{settings.PROJECT_NAME} | contact us initiated"
msgstr "{settings.PROJECT_NAME}|コンタクト開始| お問い合わせはこちらから"
-#: engine/core/utils/emailing.py:73
+#: engine/core/utils/emailing.py:81
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order confirmation"
msgstr "{settings.PROJECT_NAME}|注文確認| 注文確認"
-#: engine/core/utils/emailing.py:105
+#: engine/core/utils/emailing.py:115
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order delivered"
msgstr "{settings.PROJECT_NAME}|注文を配信"
-#: engine/core/utils/emailing.py:188
+#: engine/core/utils/emailing.py:203
#, python-brace-format
msgid "{settings.PROJECT_NAME} | promocode granted"
msgstr "{settings.PROJECT_NAME}|プロモコード付与"
@@ -2927,123 +3066,140 @@ msgstr "この操作を行う権限がありません。"
msgid "NOMINATIM_URL must be configured."
msgstr "NOMINATIM_URLパラメータを設定する必要があります!"
-#: engine/core/validators.py:19
+#: engine/core/validators.py:21
#, python-brace-format
msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels"
-msgstr "画像のサイズは w{max_width} x h{max_height} ピクセルを超えないようにしてください!"
+msgstr ""
+"画像のサイズは w{max_width} x h{max_height} ピクセルを超えないようにしてくだ"
+"さい!"
-#: engine/core/views.py:91
+#: engine/core/views.py:105
msgid ""
"Handles the request for the sitemap index and returns an XML response. It "
"ensures the response includes the appropriate content type header for XML."
msgstr ""
-"サイトマップインデックスのリクエストを処理し、XMLレスポンスを返します。レスポンスにXML用の適切なコンテントタイプヘッダーが含まれるようにします。"
+"サイトマップインデックスのリクエストを処理し、XMLレスポンスを返します。レスポ"
+"ンスにXML用の適切なコンテントタイプヘッダーが含まれるようにします。"
-#: engine/core/views.py:106
+#: engine/core/views.py:120
msgid ""
"Handles the detailed view response for a sitemap. This function processes "
"the request, fetches the appropriate sitemap detail response, and sets the "
"Content-Type header for XML."
msgstr ""
-"サイトマップの詳細表示レスポンスを処理します。この関数はリクエストを処理し、適切なサイトマップ詳細レスポンスを取得し、XML の Content-"
-"Type ヘッダを設定します。"
+"サイトマップの詳細表示レスポンスを処理します。この関数はリクエストを処理し、"
+"適切なサイトマップ詳細レスポンスを取得し、XML の Content-Type ヘッダを設定し"
+"ます。"
-#: engine/core/views.py:141
+#: engine/core/views.py:156
msgid ""
"Returns a list of supported languages and their corresponding information."
msgstr "サポートされている言語の一覧と対応する情報を返します。"
-#: engine/core/views.py:173
+#: engine/core/views.py:183
msgid "Returns the parameters of the website as a JSON object."
msgstr "ウェブサイトのパラメータをJSONオブジェクトとして返します。"
-#: engine/core/views.py:192
+#: engine/core/views.py:199
msgid ""
"Handles cache operations such as reading and setting cache data with a "
"specified key and timeout."
-msgstr "指定されたキーとタイムアウトで、キャッシュ・データの読み取りや設定などのキャッシュ操作を行う。"
+msgstr ""
+"指定されたキーとタイムアウトで、キャッシュ・データの読み取りや設定などの"
+"キャッシュ操作を行う。"
-#: engine/core/views.py:219
+#: engine/core/views.py:221
msgid "Handles `contact us` form submissions."
msgstr "お問い合わせフォームの送信を処理する。"
-#: engine/core/views.py:240
+#: engine/core/views.py:237
msgid ""
"Handles requests for processing and validating URLs from incoming POST "
"requests."
-msgstr "入ってくる POST リクエストからの URL の処理と検証のリクエストを処理します。"
+msgstr ""
+"入ってくる POST リクエストからの URL の処理と検証のリクエストを処理します。"
-#: engine/core/views.py:280
+#: engine/core/views.py:274
msgid "Handles global search queries."
msgstr "グローバル検索クエリを処理する。"
-#: engine/core/views.py:295
+#: engine/core/views.py:290
msgid "Handles the logic of buying as a business without registration."
msgstr "登録なしでビジネスとして購入するロジックを扱う。"
-#: engine/core/views.py:332
+#: engine/core/views.py:338
msgid ""
"Handles the downloading of a digital asset associated with an order.\n"
-"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the digital asset file located in the "
+"storage directory of the project. If the file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
msgstr ""
"注文に関連付けられたデジタルアセットのダウンロードを処理します。\n"
-"この関数は、プロジェクトのストレージディレクトリにあるデジタルアセットファイルの提供を試みます。ファイルが見つからない場合、リソースが利用できないことを示すHTTP 404エラーが発生します。"
+"この関数は、プロジェクトのストレージディレクトリにあるデジタルアセットファイ"
+"ルの提供を試みます。ファイルが見つからない場合、リソースが利用できないことを"
+"示すHTTP 404エラーが発生します。"
-#: engine/core/views.py:343
+#: engine/core/views.py:349
msgid "order_product_uuid is required"
msgstr "order_product_uuidは必須です。"
-#: engine/core/views.py:350
+#: engine/core/views.py:356
msgid "order product does not exist"
msgstr "注文商品が存在しない"
-#: engine/core/views.py:353
+#: engine/core/views.py:359
msgid "you can only download the digital asset once"
msgstr "デジタルアセットのダウンロードは1回限りです。"
-#: engine/core/views.py:356
+#: engine/core/views.py:363
msgid "the order must be paid before downloading the digital asset"
msgstr "デジタル資産をダウンロードする前に、注文を支払う必要があります。"
-#: engine/core/views.py:362
+#: engine/core/views.py:370
msgid "the order product does not have a product"
msgstr "注文商品に商品がない"
-#: engine/core/views.py:399
+#: engine/core/views.py:414
msgid "favicon not found"
msgstr "ファビコンが見つかりません"
-#: engine/core/views.py:404
+#: engine/core/views.py:419
msgid ""
"Handles requests for the favicon of a website.\n"
-"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the favicon file located in the static "
+"directory of the project. If the favicon file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
msgstr ""
"ウェブサイトのファビコンへのリクエストを処理します。\n"
-"この関数は、プロジェクトの静的ディレクトリにあるファビコンファイルの提供を試みます。ファビコンファイルが見つからない場合、リソースが利用できないことを示す HTTP 404 エラーが発生します。"
+"この関数は、プロジェクトの静的ディレクトリにあるファビコンファイルの提供を試"
+"みます。ファビコンファイルが見つからない場合、リソースが利用できないことを示"
+"す HTTP 404 エラーが発生します。"
-#: engine/core/views.py:416
+#: engine/core/views.py:431
msgid ""
-"Redirects the request to the admin index page. The function handles incoming"
-" HTTP requests and redirects them to the Django admin interface index page. "
+"Redirects the request to the admin index page. The function handles incoming "
+"HTTP requests and redirects them to the Django admin interface index page. "
"It uses Django's `redirect` function for handling the HTTP redirection."
msgstr ""
-"リクエストを admin インデックスページにリダイレクトします。この関数は、HTTP リクエストを処理し、 Django の admin "
-"インタフェースインデッ クスページにリダイレクトします。HTTP リダイレクトの処理には Django の `redirect` 関数を使います。"
+"リクエストを admin インデックスページにリダイレクトします。この関数は、HTTP "
+"リクエストを処理し、 Django の admin インタフェースインデッ クスページにリダ"
+"イレクトします。HTTP リダイレクトの処理には Django の `redirect` 関数を使いま"
+"す。"
-#: engine/core/views.py:429
+#: engine/core/views.py:443
msgid "Returns current version of the eVibes. "
msgstr "eVibes の現在のバージョンを返します。"
-#: engine/core/views.py:623 engine/core/views.py:636
+#: engine/core/views.py:672 engine/core/views.py:687
#, python-format
msgid "Revenue & Orders (last %(days)d)"
msgstr "収益と受注 (最終 %(days)d)"
-#: engine/core/views.py:793
+#: engine/core/views.py:868
msgid "Returns custom variables for Dashboard. "
msgstr "ダッシュボードのカスタム変数を返します。"
-#: engine/core/viewsets.py:136
+#: engine/core/viewsets.py:139
msgid ""
"Defines a viewset for managing Evibes-related operations. The EvibesViewSet "
"class inherits from ModelViewSet and provides functionality for handling "
@@ -3051,23 +3207,25 @@ msgid ""
"serializer classes based on the current action, customizable permissions, "
"and rendering formats."
msgstr ""
-"Evibes 関連の操作を管理するためのビューセットを定義します。EvibesViewSet クラスは ModelViewSet を継承し、Evibes"
-" エンティティに対する アクションや操作を扱うための機能を提供します。現在のアクションに基づいた動的なシリアライザークラスのサポート、 "
-"カスタマイズ可能なパーミッション、レンダリングフォーマットが含まれます。"
+"Evibes 関連の操作を管理するためのビューセットを定義します。EvibesViewSet クラ"
+"スは ModelViewSet を継承し、Evibes エンティティに対する アクションや操作を扱"
+"うための機能を提供します。現在のアクションに基づいた動的なシリアライザークラ"
+"スのサポート、 カスタマイズ可能なパーミッション、レンダリングフォーマットが含"
+"まれます。"
-#: engine/core/viewsets.py:156
+#: engine/core/viewsets.py:160
msgid ""
-"Represents a viewset for managing AttributeGroup objects. Handles operations"
-" related to AttributeGroup, including filtering, serialization, and "
-"retrieval of data. This class is part of the application's API layer and "
-"provides a standardized way to process requests and responses for "
-"AttributeGroup data."
+"Represents a viewset for managing AttributeGroup objects. Handles operations "
+"related to AttributeGroup, including filtering, serialization, and retrieval "
+"of data. This class is part of the application's API layer and provides a "
+"standardized way to process requests and responses for AttributeGroup data."
msgstr ""
-"AttributeGroup "
-"オブジェクトを管理するためのビューセットを表します。データのフィルタリング、シリアライズ、取得など、AttributeGroup "
-"に関連する操作を処理します。このクラスは、アプリケーションのAPIレイヤの一部であり、AttributeGroupデータの要求と応答を処理する標準化された方法を提供します。"
+"AttributeGroup オブジェクトを管理するためのビューセットを表します。データの"
+"フィルタリング、シリアライズ、取得など、AttributeGroup に関連する操作を処理し"
+"ます。このクラスは、アプリケーションのAPIレイヤの一部であり、AttributeGroup"
+"データの要求と応答を処理する標準化された方法を提供します。"
-#: engine/core/viewsets.py:175
+#: engine/core/viewsets.py:179
msgid ""
"Handles operations related to Attribute objects within the application. "
"Provides a set of API endpoints to interact with Attribute data. This class "
@@ -3076,24 +3234,27 @@ msgid ""
"specific fields or retrieving detailed versus simplified information "
"depending on the request."
msgstr ""
-"アプリケーション内でAttributeオブジェクトに関連する操作を処理する。Attribute データと対話するための API "
-"エンドポイントのセットを提供します。このクラスは、Attribute "
-"オブジェクトのクエリ、フィルタリング、およびシリアライズを管理し、特定のフィールドによるフィルタリングや、リクエストに応じた詳細情報と簡略化された情報の取得など、返されるデータの動的な制御を可能にします。"
+"アプリケーション内でAttributeオブジェクトに関連する操作を処理する。Attribute "
+"データと対話するための API エンドポイントのセットを提供します。このクラスは、"
+"Attribute オブジェクトのクエリ、フィルタリング、およびシリアライズを管理し、"
+"特定のフィールドによるフィルタリングや、リクエストに応じた詳細情報と簡略化さ"
+"れた情報の取得など、返されるデータの動的な制御を可能にします。"
-#: engine/core/viewsets.py:194
+#: engine/core/viewsets.py:198
msgid ""
"A viewset for managing AttributeValue objects. This viewset provides "
"functionality for listing, retrieving, creating, updating, and deleting "
"AttributeValue objects. It integrates with Django REST Framework's viewset "
-"mechanisms and uses appropriate serializers for different actions. Filtering"
-" capabilities are provided through the DjangoFilterBackend."
+"mechanisms and uses appropriate serializers for different actions. Filtering "
+"capabilities are provided through the DjangoFilterBackend."
msgstr ""
-"AttributeValue オブジェクトを管理するためのビューセットです。このビューセットは、 AttributeValue "
-"オブジェクトの一覧表示、取得、作成、更新、削除の機能を提供し ます。Django REST Framework "
-"のビューセット機構と統合され、異なるアクションに適切なシリアライザを使います。フィルタリング機能は DjangoFilterBackend "
-"を通して提供されます。"
+"AttributeValue オブジェクトを管理するためのビューセットです。このビューセット"
+"は、 AttributeValue オブジェクトの一覧表示、取得、作成、更新、削除の機能を提"
+"供し ます。Django REST Framework のビューセット機構と統合され、異なるアクショ"
+"ンに適切なシリアライザを使います。フィルタリング機能は DjangoFilterBackend を"
+"通して提供されます。"
-#: engine/core/viewsets.py:213
+#: engine/core/viewsets.py:217
msgid ""
"Manages views for Category-related operations. The CategoryViewSet class is "
"responsible for handling operations related to the Category model in the "
@@ -3101,9 +3262,13 @@ msgid ""
"The viewset also enforces permissions to ensure that only authorized users "
"can access specific data."
msgstr ""
-"Category関連の操作のためのビューを管理します。CategoryViewSetクラスは、システム内のCategoryモデルに関連する操作を処理する責任があります。カテゴリデータの取得、フィルタリング、シリアライズをサポートします。ビューセットはまた、許可されたユーザーだけが特定のデータにアクセスできるようにパーミッションを強制します。"
+"Category関連の操作のためのビューを管理します。CategoryViewSetクラスは、システ"
+"ム内のCategoryモデルに関連する操作を処理する責任があります。カテゴリデータの"
+"取得、フィルタリング、シリアライズをサポートします。ビューセットはまた、許可"
+"されたユーザーだけが特定のデータにアクセスできるようにパーミッションを強制し"
+"ます。"
-#: engine/core/viewsets.py:326
+#: engine/core/viewsets.py:346
msgid ""
"Represents a viewset for managing Brand instances. This class provides "
"functionality for querying, filtering, and serializing Brand objects. It "
@@ -3111,10 +3276,11 @@ msgid ""
"endpoints for Brand objects."
msgstr ""
"Brandインスタンスを管理するためのビューセットを表します。このクラスは Brand "
-"オブジェクトのクエリ、フィルタリング、シリアライズの機能を提供します。Django の ViewSet フレームワークを使い、 Brand "
-"オブジェクトの API エンドポイントの実装を簡素化します。"
+"オブジェクトのクエリ、フィルタリング、シリアライズの機能を提供します。Django "
+"の ViewSet フレームワークを使い、 Brand オブジェクトの API エンドポイントの実"
+"装を簡素化します。"
-#: engine/core/viewsets.py:438
+#: engine/core/viewsets.py:458
msgid ""
"Manages operations related to the `Product` model in the system. This class "
"provides a viewset for managing products, including their filtering, "
@@ -3124,12 +3290,14 @@ msgid ""
"product details, applying permissions, and accessing related feedback of a "
"product."
msgstr ""
-"システム内の `Product` "
-"モデルに関連する操作を管理する。このクラスは、商品のフィルタリング、シリアライズ、特定のインスタンスに対する操作など、商品を管理するためのビューセットを提供します。共通の機能を使うために"
-" `EvibesViewSet` を継承し、 RESTful API 操作のために Django REST "
-"フレームワークと統合しています。商品の詳細を取得したり、パーミッションを適用したり、商品の関連するフィードバックにアクセスするためのメソッドを含みます。"
+"システム内の `Product` モデルに関連する操作を管理する。このクラスは、商品の"
+"フィルタリング、シリアライズ、特定のインスタンスに対する操作など、商品を管理"
+"するためのビューセットを提供します。共通の機能を使うために `EvibesViewSet` を"
+"継承し、 RESTful API 操作のために Django REST フレームワークと統合していま"
+"す。商品の詳細を取得したり、パーミッションを適用したり、商品の関連するフィー"
+"ドバックにアクセスするためのメソッドを含みます。"
-#: engine/core/viewsets.py:574
+#: engine/core/viewsets.py:605
msgid ""
"Represents a viewset for managing Vendor objects. This viewset allows "
"fetching, filtering, and serializing Vendor data. It defines the queryset, "
@@ -3137,81 +3305,97 @@ msgid ""
"actions. The purpose of this class is to provide streamlined access to "
"Vendor-related resources through the Django REST framework."
msgstr ""
-"Vendor オブジェクトを管理するためのビューセットを表します。このビューセットを使用すると、 Vendor "
-"のデータを取得したりフィルタリングしたりシリアライズしたりすることができます。さまざまなアクションを処理するためのクエリセット、 "
-"フィルタ設定、シリアライザクラスを定義します。このクラスの目的は、 Django REST フレームワークを通して Vendor "
-"関連リソースへの合理的なアクセスを提供することです。"
+"Vendor オブジェクトを管理するためのビューセットを表します。このビューセットを"
+"使用すると、 Vendor のデータを取得したりフィルタリングしたりシリアライズした"
+"りすることができます。さまざまなアクションを処理するためのクエリセット、 フィ"
+"ルタ設定、シリアライザクラスを定義します。このクラスの目的は、 Django REST フ"
+"レームワークを通して Vendor 関連リソースへの合理的なアクセスを提供することで"
+"す。"
-#: engine/core/viewsets.py:594
+#: engine/core/viewsets.py:625
msgid ""
"Representation of a view set handling Feedback objects. This class manages "
"operations related to Feedback objects, including listing, filtering, and "
"retrieving details. The purpose of this view set is to provide different "
-"serializers for different actions and implement permission-based handling of"
-" accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
+"serializers for different actions and implement permission-based handling of "
+"accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
"use of Django's filtering system for querying data."
msgstr ""
-"Feedback オブジェクトを扱うビューセットの表現。このクラスは、一覧表示、フィルタリング、詳細の取得など、Feedback "
-"オブジェクトに関する操作を管理します。このビューセットの目的は、アクションごとに異なるシリアライザを提供し、アクセス可能な Feedback "
-"オブジェクトのパーミッションベースの処理を実装することです。ベースとなる `EvibesViewSet` を拡張し、Django "
-"のフィルタリングシステムを利用してデータを取得します。"
+"Feedback オブジェクトを扱うビューセットの表現。このクラスは、一覧表示、フィル"
+"タリング、詳細の取得など、Feedback オブジェクトに関する操作を管理します。この"
+"ビューセットの目的は、アクションごとに異なるシリアライザを提供し、アクセス可"
+"能な Feedback オブジェクトのパーミッションベースの処理を実装することです。"
+"ベースとなる `EvibesViewSet` を拡張し、Django のフィルタリングシステムを利用"
+"してデータを取得します。"
-#: engine/core/viewsets.py:621
+#: engine/core/viewsets.py:652
msgid ""
"ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes "
"various endpoints for handling order operations such as adding or removing "
-"products, performing purchases for registered as well as unregistered users,"
-" and retrieving the current authenticated user's pending orders. The ViewSet"
-" uses multiple serializers based on the specific action being performed and "
+"products, performing purchases for registered as well as unregistered users, "
+"and retrieving the current authenticated user's pending orders. The ViewSet "
+"uses multiple serializers based on the specific action being performed and "
"enforces permissions accordingly while interacting with order data."
msgstr ""
-"注文と関連する操作を管理するための "
-"ViewSet。このクラスは、注文オブジェクトを取得、変更、管理する機能を提供します。商品の追加や削除、登録ユーザや未登録ユーザの購入の実行、現在の認証ユーザの保留中の注文の取得など、注文操作を処理するためのさまざまなエンドポイントを含みます。ViewSetは、実行される特定のアクションに基づいて複数のシリアライザを使用し、注文データを操作している間、それに応じてパーミッションを強制します。"
+"注文と関連する操作を管理するための ViewSet。このクラスは、注文オブジェクトを"
+"取得、変更、管理する機能を提供します。商品の追加や削除、登録ユーザや未登録"
+"ユーザの購入の実行、現在の認証ユーザの保留中の注文の取得など、注文操作を処理"
+"するためのさまざまなエンドポイントを含みます。ViewSetは、実行される特定のアク"
+"ションに基づいて複数のシリアライザを使用し、注文データを操作している間、それ"
+"に応じてパーミッションを強制します。"
-#: engine/core/viewsets.py:825
+#: engine/core/viewsets.py:914
msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It "
-"includes filtering, permission checks, and serializer switching based on the"
-" requested action. Additionally, it provides a detailed action for handling "
+"includes filtering, permission checks, and serializer switching based on the "
+"requested action. Additionally, it provides a detailed action for handling "
"feedback on OrderProduct instances"
msgstr ""
-"OrderProduct エンティティを管理するためのビューセットを提供します。このビューセットは、OrderProduct モデルに固有の CRUD "
-"操作とカスタムアクションを可能にします。これは、要求されたアクションに基づくフィルタリング、パーミッションチェック、シリアライザーの切り替えを含みます。さらに、OrderProduct"
-" インスタンスに関するフィードバックを処理するための詳細なアクションを提供します。"
+"OrderProduct エンティティを管理するためのビューセットを提供します。このビュー"
+"セットは、OrderProduct モデルに固有の CRUD 操作とカスタムアクションを可能にし"
+"ます。これは、要求されたアクションに基づくフィルタリング、パーミッション"
+"チェック、シリアライザーの切り替えを含みます。さらに、OrderProduct インスタン"
+"スに関するフィードバックを処理するための詳細なアクションを提供します。"
-#: engine/core/viewsets.py:879
+#: engine/core/viewsets.py:974
msgid "Manages operations related to Product images in the application. "
msgstr "アプリケーション内の商品画像に関する操作を管理します。"
-#: engine/core/viewsets.py:892
+#: engine/core/viewsets.py:988
msgid ""
"Manages the retrieval and handling of PromoCode instances through various "
"API actions."
-msgstr "様々なAPIアクションによるプロモコードインスタンスの取得と処理を管理します。"
+msgstr ""
+"様々なAPIアクションによるプロモコードインスタンスの取得と処理を管理します。"
-#: engine/core/viewsets.py:914
+#: engine/core/viewsets.py:1019
msgid "Represents a view set for managing promotions. "
msgstr "プロモーションを管理するためのビューセットを表します。"
-#: engine/core/viewsets.py:927
+#: engine/core/viewsets.py:1032
msgid "Handles operations related to Stock data in the system."
msgstr "システム内のストックデータに関する操作を行う。"
-#: engine/core/viewsets.py:941
+#: engine/core/viewsets.py:1046
msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the "
-"retrieval, modification, and customization of products within the wish list."
-" This ViewSet facilitates functionality such as adding, removing, and bulk "
+"retrieval, modification, and customization of products within the wish list. "
+"This ViewSet facilitates functionality such as adding, removing, and bulk "
"actions for wishlist products. Permission checks are integrated to ensure "
"that users can only manage their own wishlists unless explicit permissions "
"are granted."
msgstr ""
-"ウィッシュリスト操作を管理するためのViewSet。WishlistViewSetは、ユーザーのウィッシュリストと対話するためのエンドポイントを提供し、ウィッシュリスト内の商品の検索、変更、カスタマイズを可能にします。このViewSetは、ウィッシュリスト商品の追加、削除、一括アクションなどの機能を容易にします。明示的なパーミッションが付与されていない限り、ユーザーが自分のウィッシュリストのみを管理できるよう、パーミッションチェックが統合されています。"
+"ウィッシュリスト操作を管理するためのViewSet。WishlistViewSetは、ユーザーの"
+"ウィッシュリストと対話するためのエンドポイントを提供し、ウィッシュリスト内の"
+"商品の検索、変更、カスタマイズを可能にします。このViewSetは、ウィッシュリスト"
+"商品の追加、削除、一括アクションなどの機能を容易にします。明示的なパーミッ"
+"ションが付与されていない限り、ユーザーが自分のウィッシュリストのみを管理でき"
+"るよう、パーミッションチェックが統合されています。"
-#: engine/core/viewsets.py:1056
+#: engine/core/viewsets.py:1183
msgid ""
"This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom "
@@ -3219,16 +3403,18 @@ msgid ""
"different HTTP methods, serializer overrides, and permission handling based "
"on the request context."
msgstr ""
-"このクラスは `Address` オブジェクトを管理するためのビューセット機能を提供する。AddressViewSet "
-"クラスは、住所エンティティに関連する CRUD 操作、フィルタリング、カスタムアクションを可能にします。異なる HTTP "
-"メソッドに特化した振る舞いや、シリアライザのオーバーライド、 リクエストコンテキストに基づいたパーミッション処理などを含みます。"
+"このクラスは `Address` オブジェクトを管理するためのビューセット機能を提供す"
+"る。AddressViewSet クラスは、住所エンティティに関連する CRUD 操作、フィルタリ"
+"ング、カスタムアクションを可能にします。異なる HTTP メソッドに特化した振る舞"
+"いや、シリアライザのオーバーライド、 リクエストコンテキストに基づいたパーミッ"
+"ション処理などを含みます。"
-#: engine/core/viewsets.py:1123
+#: engine/core/viewsets.py:1254
#, python-brace-format
msgid "Geocoding error: {e}"
msgstr "ジオコーディングエラー:{e}"
-#: engine/core/viewsets.py:1131
+#: engine/core/viewsets.py:1262
msgid ""
"Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing "
@@ -3236,4 +3422,8 @@ msgid ""
"using the specified filter backend and dynamically uses different "
"serializers based on the action being performed."
msgstr ""
-"アプリケーション内で商品タグに関連する操作を処理します。このクラスは、商品タグオブジェクトの取得、フィルタリング、シリアライズの機能を提供します。指定されたフィルタバックエンドを使用して特定の属性に対する柔軟なフィルタリングをサポートし、実行されるアクションに基づいて動的に異なるシリアライザを使用します。"
+"アプリケーション内で商品タグに関連する操作を処理します。このクラスは、商品タ"
+"グオブジェクトの取得、フィルタリング、シリアライズの機能を提供します。指定さ"
+"れたフィルタバックエンドを使用して特定の属性に対する柔軟なフィルタリングをサ"
+"ポートし、実行されるアクションに基づいて動的に異なるシリアライザを使用しま"
+"す。"
diff --git a/engine/core/locale/kk_KZ/LC_MESSAGES/django.po b/engine/core/locale/kk_KZ/LC_MESSAGES/django.po
index 2898d6a5..86ead85e 100644
--- a/engine/core/locale/kk_KZ/LC_MESSAGES/django.po
+++ b/engine/core/locale/kk_KZ/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 22:12+0300\n"
+"POT-Creation-Date: 2025-12-18 19:09+0300\n"
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: LANGUAGE \n"
@@ -28,110 +28,110 @@ msgstr ""
msgid "is active"
msgstr ""
-#: engine/core/abstract.py:21
+#: engine/core/abstract.py:22
msgid ""
"if set to false, this object can't be seen by users without needed permission"
msgstr ""
-#: engine/core/abstract.py:23 engine/core/choices.py:18
+#: engine/core/abstract.py:26 engine/core/choices.py:18
msgid "created"
msgstr ""
-#: engine/core/abstract.py:23
+#: engine/core/abstract.py:26
msgid "when the object first appeared on the database"
msgstr ""
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "modified"
msgstr ""
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "when the object was last modified"
msgstr ""
-#: engine/core/admin.py:85
+#: engine/core/admin.py:94
msgid "translations"
msgstr ""
-#: engine/core/admin.py:89
+#: engine/core/admin.py:102
msgid "general"
msgstr ""
-#: engine/core/admin.py:91
+#: engine/core/admin.py:106
msgid "relations"
msgstr ""
-#: engine/core/admin.py:93
+#: engine/core/admin.py:111
msgid "additional info"
msgstr ""
-#: engine/core/admin.py:111
+#: engine/core/admin.py:133
msgid "metadata"
msgstr ""
-#: engine/core/admin.py:118
+#: engine/core/admin.py:141
msgid "timestamps"
msgstr ""
-#: engine/core/admin.py:133
+#: engine/core/admin.py:157
#, python-format
msgid "activate selected %(verbose_name_plural)s"
msgstr ""
-#: engine/core/admin.py:138
+#: engine/core/admin.py:165
msgid "selected items have been activated."
msgstr ""
-#: engine/core/admin.py:144
+#: engine/core/admin.py:173
#, python-format
msgid "deactivate selected %(verbose_name_plural)s"
msgstr ""
-#: engine/core/admin.py:149
+#: engine/core/admin.py:183
msgid "selected items have been deactivated."
msgstr ""
-#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586
-#: engine/core/graphene/object_types.py:593 engine/core/models.py:801
-#: engine/core/models.py:809
+#: engine/core/admin.py:195 engine/core/graphene/object_types.py:650
+#: engine/core/graphene/object_types.py:657 engine/core/models.py:824
+#: engine/core/models.py:832
msgid "attribute value"
msgstr ""
-#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75
-#: engine/core/models.py:810
+#: engine/core/admin.py:196 engine/core/graphene/object_types.py:75
+#: engine/core/models.py:833
msgid "attribute values"
msgstr ""
-#: engine/core/admin.py:172
+#: engine/core/admin.py:207
msgid "image"
msgstr ""
-#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474
+#: engine/core/admin.py:208 engine/core/graphene/object_types.py:527
msgid "images"
msgstr ""
-#: engine/core/admin.py:184 engine/core/models.py:566
+#: engine/core/admin.py:219 engine/core/models.py:587
msgid "stock"
msgstr ""
-#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640
+#: engine/core/admin.py:220 engine/core/graphene/object_types.py:710
msgid "stocks"
msgstr ""
-#: engine/core/admin.py:196 engine/core/models.py:1818
+#: engine/core/admin.py:231 engine/core/models.py:1930
msgid "order product"
msgstr ""
-#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389
-#: engine/core/models.py:1819
+#: engine/core/admin.py:232 engine/core/graphene/object_types.py:438
+#: engine/core/models.py:1931
msgid "order products"
msgstr ""
-#: engine/core/admin.py:210 engine/core/admin.py:211
+#: engine/core/admin.py:250 engine/core/admin.py:251
msgid "children"
msgstr ""
-#: engine/core/admin.py:977
+#: engine/core/admin.py:1059
msgid "Config"
msgstr ""
@@ -183,395 +183,395 @@ msgstr ""
msgid "successful"
msgstr ""
-#: engine/core/docs/drf/views.py:31
+#: engine/core/docs/drf/views.py:30
msgid "OpenAPI schema in selected format with selected language"
msgstr ""
-#: engine/core/docs/drf/views.py:33
+#: engine/core/docs/drf/views.py:32
msgid ""
"OpenApi3 schema for this API. Format can be selected via content "
"negotiation. Language can be selected with Accept-Language and query "
"parameter both."
msgstr ""
-#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37
+#: engine/core/docs/drf/views.py:43 engine/core/graphene/mutations.py:37
msgid "cache I/O"
msgstr ""
-#: engine/core/docs/drf/views.py:46
+#: engine/core/docs/drf/views.py:45
msgid ""
"apply only a key to read permitted data from cache.\n"
"apply key, data and timeout with authentication to write data to cache."
msgstr ""
-#: engine/core/docs/drf/views.py:62
+#: engine/core/docs/drf/views.py:63
msgid "get a list of supported languages"
msgstr ""
-#: engine/core/docs/drf/views.py:74
+#: engine/core/docs/drf/views.py:75
msgid "get application's exposable parameters"
msgstr ""
-#: engine/core/docs/drf/views.py:84
+#: engine/core/docs/drf/views.py:89
msgid "send a message to the support team"
msgstr ""
-#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57
+#: engine/core/docs/drf/views.py:103 engine/core/graphene/mutations.py:59
msgid "request a CORSed URL"
msgstr ""
-#: engine/core/docs/drf/views.py:112
+#: engine/core/docs/drf/views.py:119
msgid "Search between products, categories and brands"
msgstr ""
-#: engine/core/docs/drf/views.py:130
+#: engine/core/docs/drf/views.py:141
msgid "global search endpoint to query across project's tables"
msgstr ""
-#: engine/core/docs/drf/views.py:139
+#: engine/core/docs/drf/views.py:150
msgid "purchase an order as a business"
msgstr ""
-#: engine/core/docs/drf/views.py:146
+#: engine/core/docs/drf/views.py:158
msgid ""
"purchase an order as a business, using the provided `products` with "
"`product_uuid` and `attributes`."
msgstr ""
-#: engine/core/docs/drf/views.py:164
+#: engine/core/docs/drf/views.py:177
msgid "download a digital asset from purchased digital order"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:61
+#: engine/core/docs/drf/viewsets.py:65
msgid "list all attribute groups (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:68
+#: engine/core/docs/drf/viewsets.py:75
msgid "retrieve a single attribute group (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:75
+#: engine/core/docs/drf/viewsets.py:82
msgid "create an attribute group"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:82
+#: engine/core/docs/drf/viewsets.py:92
msgid "delete an attribute group"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:89
+#: engine/core/docs/drf/viewsets.py:99
msgid "rewrite an existing attribute group saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:96
+#: engine/core/docs/drf/viewsets.py:107
msgid "rewrite some fields of an existing attribute group saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:106
+#: engine/core/docs/drf/viewsets.py:118
msgid "list all attributes (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:113
+#: engine/core/docs/drf/viewsets.py:128
msgid "retrieve a single attribute (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:120
+#: engine/core/docs/drf/viewsets.py:135
msgid "create an attribute"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:127
+#: engine/core/docs/drf/viewsets.py:142
msgid "delete an attribute"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:134
+#: engine/core/docs/drf/viewsets.py:149
msgid "rewrite an existing attribute saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:141
+#: engine/core/docs/drf/viewsets.py:156
msgid "rewrite some fields of an existing attribute saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:151
+#: engine/core/docs/drf/viewsets.py:166
msgid "list all attribute values (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:158
+#: engine/core/docs/drf/viewsets.py:176
msgid "retrieve a single attribute value (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:165
+#: engine/core/docs/drf/viewsets.py:183
msgid "create an attribute value"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:172
+#: engine/core/docs/drf/viewsets.py:193
msgid "delete an attribute value"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:179
+#: engine/core/docs/drf/viewsets.py:200
msgid "rewrite an existing attribute value saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:186
+#: engine/core/docs/drf/viewsets.py:208
msgid "rewrite some fields of an existing attribute value saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197
+#: engine/core/docs/drf/viewsets.py:219 engine/core/docs/drf/viewsets.py:220
msgid "list all categories (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205
+#: engine/core/docs/drf/viewsets.py:230 engine/core/docs/drf/viewsets.py:231
msgid "retrieve a single category (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258
+#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:286
msgid "Category UUID or slug"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221
+#: engine/core/docs/drf/viewsets.py:246 engine/core/docs/drf/viewsets.py:247
msgid "create a category"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229
+#: engine/core/docs/drf/viewsets.py:254 engine/core/docs/drf/viewsets.py:255
msgid "delete a category"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237
+#: engine/core/docs/drf/viewsets.py:262 engine/core/docs/drf/viewsets.py:263
msgid "rewrite an existing category saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:244 engine/core/docs/drf/viewsets.py:245
+#: engine/core/docs/drf/viewsets.py:270 engine/core/docs/drf/viewsets.py:272
msgid "rewrite some fields of an existing category saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704
-#: engine/core/docs/drf/viewsets.py:988
+#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:1046
#: engine/core/graphene/object_types.py:117
-#: engine/core/graphene/object_types.py:207
-#: engine/core/graphene/object_types.py:482
+#: engine/core/graphene/object_types.py:236
+#: engine/core/graphene/object_types.py:537
msgid "SEO Meta snapshot"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:253
+#: engine/core/docs/drf/viewsets.py:281
msgid "returns a snapshot of the category's SEO meta data"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:274
+#: engine/core/docs/drf/viewsets.py:302
msgid "list all orders (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:275
+#: engine/core/docs/drf/viewsets.py:303
msgid "for non-staff users, only their own orders are returned."
msgstr ""
-#: engine/core/docs/drf/viewsets.py:281
+#: engine/core/docs/drf/viewsets.py:309
msgid ""
"Case-insensitive substring search across human_readable_id, order_products."
"product.name, and order_products.product.partnumber"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:288
+#: engine/core/docs/drf/viewsets.py:316
msgid "Filter orders with buy_time >= this ISO 8601 datetime"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:293
+#: engine/core/docs/drf/viewsets.py:321
msgid "Filter orders with buy_time <= this ISO 8601 datetime"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:298
+#: engine/core/docs/drf/viewsets.py:326
msgid "Filter by exact order UUID"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:303
+#: engine/core/docs/drf/viewsets.py:331
msgid "Filter by exact human-readable order ID"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:308
+#: engine/core/docs/drf/viewsets.py:336
msgid "Filter by user's email (case-insensitive exact match)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:313
+#: engine/core/docs/drf/viewsets.py:341
msgid "Filter by user's UUID"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:318
+#: engine/core/docs/drf/viewsets.py:347
msgid "Filter by order status (case-insensitive substring match)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:324
+#: engine/core/docs/drf/viewsets.py:354
msgid ""
"Order by one of: uuid, human_readable_id, user_email, user, status, created, "
"modified, buy_time, random. Prefix with '-' for descending (e.g. '-"
"buy_time')."
msgstr ""
-#: engine/core/docs/drf/viewsets.py:336
+#: engine/core/docs/drf/viewsets.py:366
msgid "retrieve a single order (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:341
+#: engine/core/docs/drf/viewsets.py:371
msgid "Order UUID or human-readable id"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:351
+#: engine/core/docs/drf/viewsets.py:381
msgid "create an order"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:352
+#: engine/core/docs/drf/viewsets.py:382
msgid "doesn't work for non-staff users."
msgstr ""
-#: engine/core/docs/drf/viewsets.py:359
+#: engine/core/docs/drf/viewsets.py:389
msgid "delete an order"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:366
+#: engine/core/docs/drf/viewsets.py:396
msgid "rewrite an existing order saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:373
+#: engine/core/docs/drf/viewsets.py:403
msgid "rewrite some fields of an existing order saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:380
+#: engine/core/docs/drf/viewsets.py:410
msgid "purchase an order"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:382
+#: engine/core/docs/drf/viewsets.py:412
msgid ""
"finalizes the order purchase. if `force_balance` is used, the purchase is "
"completed using the user's balance; if `force_payment` is used, a "
"transaction is initiated."
msgstr ""
-#: engine/core/docs/drf/viewsets.py:397
+#: engine/core/docs/drf/viewsets.py:427
msgid "retrieve current pending order of a user"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:398
+#: engine/core/docs/drf/viewsets.py:428
msgid "retrieves a current pending order of an authenticated user"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334
+#: engine/core/docs/drf/viewsets.py:438 engine/core/graphene/mutations.py:354
msgid "purchase an order without account creation"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:409
+#: engine/core/docs/drf/viewsets.py:439
msgid "finalizes the order purchase for a non-registered user."
msgstr ""
-#: engine/core/docs/drf/viewsets.py:420
+#: engine/core/docs/drf/viewsets.py:450
msgid "add product to order"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:421
+#: engine/core/docs/drf/viewsets.py:452
msgid ""
"adds a product to an order using the provided `product_uuid` and "
"`attributes`."
msgstr ""
-#: engine/core/docs/drf/viewsets.py:429
+#: engine/core/docs/drf/viewsets.py:461
msgid "add a list of products to order, quantities will not count"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:430
+#: engine/core/docs/drf/viewsets.py:463
msgid ""
"adds a list of products to an order using the provided `product_uuid` and "
"`attributes`."
msgstr ""
-#: engine/core/docs/drf/viewsets.py:438
+#: engine/core/docs/drf/viewsets.py:472
msgid "remove product from order"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:439
+#: engine/core/docs/drf/viewsets.py:474
msgid ""
"removes a product from an order using the provided `product_uuid` and "
"`attributes`."
msgstr ""
-#: engine/core/docs/drf/viewsets.py:447
+#: engine/core/docs/drf/viewsets.py:483
msgid "remove product from order, quantities will not count"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:448
+#: engine/core/docs/drf/viewsets.py:485
msgid ""
"removes a list of products from an order using the provided `product_uuid` "
"and `attributes`"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:459
+#: engine/core/docs/drf/viewsets.py:497
msgid "list all wishlists (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:460
+#: engine/core/docs/drf/viewsets.py:498
msgid "for non-staff users, only their own wishlists are returned."
msgstr ""
-#: engine/core/docs/drf/viewsets.py:467
+#: engine/core/docs/drf/viewsets.py:508
msgid "retrieve a single wishlist (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:474
+#: engine/core/docs/drf/viewsets.py:515
msgid "create an wishlist"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:475
+#: engine/core/docs/drf/viewsets.py:516
msgid "Doesn't work for non-staff users."
msgstr ""
-#: engine/core/docs/drf/viewsets.py:482
+#: engine/core/docs/drf/viewsets.py:523
msgid "delete an wishlist"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:489
+#: engine/core/docs/drf/viewsets.py:530
msgid "rewrite an existing wishlist saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:496
+#: engine/core/docs/drf/viewsets.py:537
msgid "rewrite some fields of an existing wishlist saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:503
+#: engine/core/docs/drf/viewsets.py:544
msgid "retrieve current pending wishlist of a user"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:504
+#: engine/core/docs/drf/viewsets.py:545
msgid "retrieves a current pending wishlist of an authenticated user"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:514
+#: engine/core/docs/drf/viewsets.py:555
msgid "add product to wishlist"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:515
+#: engine/core/docs/drf/viewsets.py:557
msgid "adds a product to an wishlist using the provided `product_uuid`"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:523
+#: engine/core/docs/drf/viewsets.py:566
msgid "remove product from wishlist"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:524
+#: engine/core/docs/drf/viewsets.py:568
msgid "removes a product from an wishlist using the provided `product_uuid`"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:532
+#: engine/core/docs/drf/viewsets.py:577
msgid "add many products to wishlist"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:533
+#: engine/core/docs/drf/viewsets.py:579
msgid "adds many products to an wishlist using the provided `product_uuids`"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:541
+#: engine/core/docs/drf/viewsets.py:588
msgid "remove many products from wishlist"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:542
+#: engine/core/docs/drf/viewsets.py:590
msgid ""
"removes many products from an wishlist using the provided `product_uuids`"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:549
+#: engine/core/docs/drf/viewsets.py:598
msgid ""
"Filter by one or more attribute name/value pairs. \n"
"• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n"
@@ -588,592 +588,592 @@ msgid ""
"`b64-description=icontains-aGVhdC1jb2xk`"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:568 engine/core/docs/drf/viewsets.py:569
+#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
msgid "list all products (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:574
+#: engine/core/docs/drf/viewsets.py:623
msgid "(exact) Product UUID"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:581
+#: engine/core/docs/drf/viewsets.py:630
msgid ""
"Comma-separated list of fields to sort by. Prefix with `-` for "
"descending. \n"
"**Allowed:** uuid, rating, name, slug, created, modified, price, random"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599
+#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
msgid "retrieve a single product (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634
-#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672
-#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710
+#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683
+#: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725
+#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763
msgid "Product UUID or slug"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
+#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
#: engine/core/graphene/dashboard_mutations/product.py:80
#: engine/core/graphene/dashboard_mutations/product.py:118
#: engine/core/graphene/dashboard_mutations/product.py:166
msgid "create a product"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629
+#: engine/core/docs/drf/viewsets.py:677 engine/core/docs/drf/viewsets.py:678
msgid "rewrite an existing product, preserving non-editable fields"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
+#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:700
msgid ""
"update some fields of an existing product, preserving non-editable fields"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
+#: engine/core/docs/drf/viewsets.py:719 engine/core/docs/drf/viewsets.py:720
msgid "delete a product"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686
+#: engine/core/docs/drf/viewsets.py:738 engine/core/docs/drf/viewsets.py:739
msgid "lists all permitted feedbacks for a product"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:705
+#: engine/core/docs/drf/viewsets.py:758
msgid "returns a snapshot of the product's SEO meta data"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:726
+#: engine/core/docs/drf/viewsets.py:779
msgid "list all addresses"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:736
+#: engine/core/docs/drf/viewsets.py:789
msgid "retrieve a single address"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:746
+#: engine/core/docs/drf/viewsets.py:799
msgid "create a new address"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:810
msgid "delete an address"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:767
+#: engine/core/docs/drf/viewsets.py:820
msgid "update an entire address"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:778
+#: engine/core/docs/drf/viewsets.py:831
msgid "partially update an address"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:789
+#: engine/core/docs/drf/viewsets.py:842
msgid "autocomplete address suggestions"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:794
+#: engine/core/docs/drf/viewsets.py:848
msgid "raw data query string, please append with data from geo-IP endpoint"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:800
+#: engine/core/docs/drf/viewsets.py:855
msgid "limit the results amount, 1 < limit < 10, default: 5"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:816
+#: engine/core/docs/drf/viewsets.py:871
msgid "list all feedbacks (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:823
+#: engine/core/docs/drf/viewsets.py:881
msgid "retrieve a single feedback (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:830
+#: engine/core/docs/drf/viewsets.py:888
msgid "create a feedback"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:837
+#: engine/core/docs/drf/viewsets.py:895
msgid "delete a feedback"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:844
+#: engine/core/docs/drf/viewsets.py:902
msgid "rewrite an existing feedback saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:851
+#: engine/core/docs/drf/viewsets.py:909
msgid "rewrite some fields of an existing feedback saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:861
+#: engine/core/docs/drf/viewsets.py:919
msgid "list all order–product relations (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:871
+#: engine/core/docs/drf/viewsets.py:929
msgid "retrieve a single order–product relation (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:881
+#: engine/core/docs/drf/viewsets.py:939
msgid "create a new order–product relation"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:891
+#: engine/core/docs/drf/viewsets.py:949
msgid "replace an existing order–product relation"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:901
+#: engine/core/docs/drf/viewsets.py:959
msgid "partially update an existing order–product relation"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:911
+#: engine/core/docs/drf/viewsets.py:969
msgid "delete an order–product relation"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:921
+#: engine/core/docs/drf/viewsets.py:979
msgid "add or remove feedback on an order–product relation"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:938
+#: engine/core/docs/drf/viewsets.py:996
msgid "list all brands (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:945
+#: engine/core/docs/drf/viewsets.py:1003
msgid "retrieve a single brand (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993
+#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051
msgid "Brand UUID or slug"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:960
+#: engine/core/docs/drf/viewsets.py:1018
msgid "create a brand"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:967
+#: engine/core/docs/drf/viewsets.py:1025
msgid "delete a brand"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:974
+#: engine/core/docs/drf/viewsets.py:1032
msgid "rewrite an existing brand saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:981
+#: engine/core/docs/drf/viewsets.py:1039
msgid "rewrite some fields of an existing brand saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1006
+#: engine/core/docs/drf/viewsets.py:1064
msgid "list all vendors (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1013
+#: engine/core/docs/drf/viewsets.py:1074
msgid "retrieve a single vendor (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1020
+#: engine/core/docs/drf/viewsets.py:1081
msgid "create a vendor"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1027
+#: engine/core/docs/drf/viewsets.py:1088
msgid "delete a vendor"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1034
+#: engine/core/docs/drf/viewsets.py:1095
msgid "rewrite an existing vendor saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1041
+#: engine/core/docs/drf/viewsets.py:1102
msgid "rewrite some fields of an existing vendor saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1051
+#: engine/core/docs/drf/viewsets.py:1112
msgid "list all product images (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1058
+#: engine/core/docs/drf/viewsets.py:1122
msgid "retrieve a single product image (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1065
+#: engine/core/docs/drf/viewsets.py:1129
msgid "create a product image"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1072
+#: engine/core/docs/drf/viewsets.py:1139
msgid "delete a product image"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1079
+#: engine/core/docs/drf/viewsets.py:1146
msgid "rewrite an existing product image saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1086
+#: engine/core/docs/drf/viewsets.py:1154
msgid "rewrite some fields of an existing product image saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1096
+#: engine/core/docs/drf/viewsets.py:1165
msgid "list all promo codes (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1103
+#: engine/core/docs/drf/viewsets.py:1175
msgid "retrieve a single promo code (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1110
+#: engine/core/docs/drf/viewsets.py:1182
msgid "create a promo code"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1117
+#: engine/core/docs/drf/viewsets.py:1189
msgid "delete a promo code"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1124
+#: engine/core/docs/drf/viewsets.py:1196
msgid "rewrite an existing promo code saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1131
+#: engine/core/docs/drf/viewsets.py:1203
msgid "rewrite some fields of an existing promo code saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1141
+#: engine/core/docs/drf/viewsets.py:1213
msgid "list all promotions (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1148
+#: engine/core/docs/drf/viewsets.py:1223
msgid "retrieve a single promotion (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1155
+#: engine/core/docs/drf/viewsets.py:1230
msgid "create a promotion"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1162
+#: engine/core/docs/drf/viewsets.py:1237
msgid "delete a promotion"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1169
+#: engine/core/docs/drf/viewsets.py:1244
msgid "rewrite an existing promotion saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1176
+#: engine/core/docs/drf/viewsets.py:1251
msgid "rewrite some fields of an existing promotion saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1186
+#: engine/core/docs/drf/viewsets.py:1261
msgid "list all stocks (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1193
+#: engine/core/docs/drf/viewsets.py:1268
msgid "retrieve a single stock (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1200
+#: engine/core/docs/drf/viewsets.py:1275
msgid "create a stock record"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1207
+#: engine/core/docs/drf/viewsets.py:1282
msgid "delete a stock record"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1214
+#: engine/core/docs/drf/viewsets.py:1289
msgid "rewrite an existing stock record saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1221
+#: engine/core/docs/drf/viewsets.py:1297
msgid "rewrite some fields of an existing stock record saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1231
+#: engine/core/docs/drf/viewsets.py:1308
msgid "list all product tags (simple view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1238
+#: engine/core/docs/drf/viewsets.py:1318
msgid "retrieve a single product tag (detailed view)"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1245
+#: engine/core/docs/drf/viewsets.py:1325
msgid "create a product tag"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1252
+#: engine/core/docs/drf/viewsets.py:1335
msgid "delete a product tag"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1259
+#: engine/core/docs/drf/viewsets.py:1342
msgid "rewrite an existing product tag saving non-editables"
msgstr ""
-#: engine/core/docs/drf/viewsets.py:1266
+#: engine/core/docs/drf/viewsets.py:1350
msgid "rewrite some fields of an existing product tag saving non-editables"
msgstr ""
-#: engine/core/elasticsearch/__init__.py:122
-#: engine/core/elasticsearch/__init__.py:570
+#: engine/core/elasticsearch/__init__.py:127
+#: engine/core/elasticsearch/__init__.py:627
msgid "no search term provided."
msgstr ""
-#: engine/core/filters.py:69 engine/core/filters.py:426
-#: engine/core/filters.py:553
+#: engine/core/filters.py:78 engine/core/filters.py:484
+#: engine/core/filters.py:625
msgid "Search"
msgstr ""
-#: engine/core/filters.py:70 engine/core/filters.py:583
-#: engine/core/filters.py:612
+#: engine/core/filters.py:79 engine/core/filters.py:662
+#: engine/core/filters.py:691
msgid "UUID"
msgstr ""
-#: engine/core/filters.py:71 engine/core/filters.py:428
-#: engine/core/filters.py:555
+#: engine/core/filters.py:80 engine/core/filters.py:487
+#: engine/core/filters.py:627
msgid "Name"
msgstr ""
-#: engine/core/filters.py:72 engine/core/filters.py:557
+#: engine/core/filters.py:82 engine/core/filters.py:630
msgid "Categories"
msgstr ""
-#: engine/core/filters.py:74
+#: engine/core/filters.py:86
msgid "Categories Slugs"
msgstr ""
-#: engine/core/filters.py:75 engine/core/filters.py:436
+#: engine/core/filters.py:88 engine/core/filters.py:495
msgid "Tags"
msgstr ""
-#: engine/core/filters.py:76
+#: engine/core/filters.py:90
msgid "Min Price"
msgstr ""
-#: engine/core/filters.py:77
+#: engine/core/filters.py:93
msgid "Max Price"
msgstr ""
-#: engine/core/filters.py:78
+#: engine/core/filters.py:95
msgid "Is Active"
msgstr ""
-#: engine/core/filters.py:79
+#: engine/core/filters.py:96
msgid "Brand"
msgstr ""
-#: engine/core/filters.py:80
+#: engine/core/filters.py:97
msgid "Attributes"
msgstr ""
-#: engine/core/filters.py:81
+#: engine/core/filters.py:99
msgid "Quantity"
msgstr ""
-#: engine/core/filters.py:82 engine/core/filters.py:430
-#: engine/core/filters.py:556 engine/core/models.py:321
-#: engine/core/models.py:489 engine/core/models.py:644
+#: engine/core/filters.py:101 engine/core/filters.py:489
+#: engine/core/filters.py:628 engine/core/models.py:327
+#: engine/core/models.py:508 engine/core/models.py:665
msgid "Slug"
msgstr ""
-#: engine/core/filters.py:83
+#: engine/core/filters.py:102
msgid "Is Digital"
msgstr ""
-#: engine/core/filters.py:84
+#: engine/core/filters.py:104
msgid "Include sub-categories"
msgstr ""
-#: engine/core/filters.py:87
+#: engine/core/filters.py:108
msgid "Include personal ordered"
msgstr ""
-#: engine/core/filters.py:89 engine/core/models.py:648
+#: engine/core/filters.py:110 engine/core/models.py:669
msgid "SKU"
msgstr ""
-#: engine/core/filters.py:184
+#: engine/core/filters.py:212
msgid "there must be a category_uuid to use include_subcategories flag"
msgstr ""
-#: engine/core/filters.py:353
+#: engine/core/filters.py:398
msgid "Search (ID, product name or part number)"
msgstr ""
-#: engine/core/filters.py:356
+#: engine/core/filters.py:402
msgid "Bought after (inclusive)"
msgstr ""
-#: engine/core/filters.py:357
+#: engine/core/filters.py:405
msgid "Bought before (inclusive)"
msgstr ""
-#: engine/core/filters.py:360 engine/core/filters.py:407
-#: engine/core/filters.py:614
+#: engine/core/filters.py:410 engine/core/filters.py:461
+#: engine/core/filters.py:696
msgid "User email"
msgstr ""
-#: engine/core/filters.py:361 engine/core/filters.py:408
-#: engine/core/filters.py:592 engine/core/filters.py:613
+#: engine/core/filters.py:413 engine/core/filters.py:464
+#: engine/core/filters.py:671 engine/core/filters.py:693
msgid "User UUID"
msgstr ""
-#: engine/core/filters.py:362
+#: engine/core/filters.py:415
msgid "Status"
msgstr ""
-#: engine/core/filters.py:366
+#: engine/core/filters.py:419
msgid "Human Readable ID"
msgstr ""
-#: engine/core/filters.py:429
+#: engine/core/filters.py:488
msgid "Parent"
msgstr ""
-#: engine/core/filters.py:433
+#: engine/core/filters.py:492
msgid "Whole category(has at least 1 product or not)"
msgstr ""
-#: engine/core/filters.py:437
+#: engine/core/filters.py:496
msgid "Level"
msgstr ""
-#: engine/core/filters.py:587
+#: engine/core/filters.py:666
msgid "Product UUID"
msgstr ""
-#: engine/core/graphene/mutations.py:40
+#: engine/core/graphene/mutations.py:41
msgid "key to look for in or set into the cache"
msgstr ""
-#: engine/core/graphene/mutations.py:41
+#: engine/core/graphene/mutations.py:43
msgid "data to store in cache"
msgstr ""
-#: engine/core/graphene/mutations.py:44
+#: engine/core/graphene/mutations.py:46
msgid "timeout in seconds to set the data for into the cache"
msgstr ""
-#: engine/core/graphene/mutations.py:47
+#: engine/core/graphene/mutations.py:49
msgid "cached data"
msgstr ""
-#: engine/core/graphene/mutations.py:62
+#: engine/core/graphene/mutations.py:64
msgid "camelized JSON data from the requested URL"
msgstr ""
-#: engine/core/graphene/mutations.py:67 engine/core/views.py:257
+#: engine/core/graphene/mutations.py:69 engine/core/views.py:249
msgid "only URLs starting with http(s):// are allowed"
msgstr ""
-#: engine/core/graphene/mutations.py:83
+#: engine/core/graphene/mutations.py:87
msgid "add a product to the order"
msgstr ""
-#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131
-#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287
+#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139
+#: engine/core/graphene/mutations.py:255 engine/core/graphene/mutations.py:307
#, python-brace-format
msgid "order {order_uuid} not found"
msgstr ""
-#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159
+#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167
msgid "remove a product from the order"
msgstr ""
-#: engine/core/graphene/mutations.py:137
+#: engine/core/graphene/mutations.py:145
msgid "remove all products from the order"
msgstr ""
-#: engine/core/graphene/mutations.py:182
+#: engine/core/graphene/mutations.py:190
msgid "buy an order"
msgstr ""
-#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265
+#: engine/core/graphene/mutations.py:221 engine/core/graphene/mutations.py:283
msgid "please provide either order_uuid or order_hr_id - mutually exclusive"
msgstr ""
-#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501
-#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712
+#: engine/core/graphene/mutations.py:250 engine/core/graphene/mutations.py:525
+#: engine/core/graphene/mutations.py:574 engine/core/viewsets.py:753
msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr ""
-#: engine/core/graphene/mutations.py:245
+#: engine/core/graphene/mutations.py:261
msgid "perform an action on a list of products in the order"
msgstr ""
-#: engine/core/graphene/mutations.py:250
+#: engine/core/graphene/mutations.py:266
msgid "remove/add"
msgstr ""
-#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323
+#: engine/core/graphene/mutations.py:302 engine/core/graphene/mutations.py:343
msgid "action must be either add or remove"
msgstr ""
-#: engine/core/graphene/mutations.py:293
+#: engine/core/graphene/mutations.py:313
msgid "perform an action on a list of products in the wishlist"
msgstr ""
-#: engine/core/graphene/mutations.py:311
+#: engine/core/graphene/mutations.py:331
msgid "please provide wishlist_uuid value"
msgstr ""
-#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404
-#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460
-#: engine/core/graphene/mutations.py:504
+#: engine/core/graphene/mutations.py:348 engine/core/graphene/mutations.py:424
+#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480
+#: engine/core/graphene/mutations.py:530
#, python-brace-format
msgid "wishlist {wishlist_uuid} not found"
msgstr ""
-#: engine/core/graphene/mutations.py:382
+#: engine/core/graphene/mutations.py:402
msgid "add a product to the wishlist"
msgstr ""
-#: engine/core/graphene/mutations.py:410
+#: engine/core/graphene/mutations.py:430
msgid "remove a product from the wishlist"
msgstr ""
-#: engine/core/graphene/mutations.py:438
+#: engine/core/graphene/mutations.py:458
msgid "remove all products from the wishlist"
msgstr ""
-#: engine/core/graphene/mutations.py:466
+#: engine/core/graphene/mutations.py:486
msgid "buy all products from the wishlist"
msgstr ""
-#: engine/core/graphene/mutations.py:510
+#: engine/core/graphene/mutations.py:536
msgid "buy a product"
msgstr ""
-#: engine/core/graphene/mutations.py:516
+#: engine/core/graphene/mutations.py:543
msgid ""
"please send the attributes as the string formatted like attr1=value1,"
"attr2=value2"
msgstr ""
-#: engine/core/graphene/mutations.py:549
+#: engine/core/graphene/mutations.py:581
msgid "add or delete a feedback for orderproduct"
msgstr ""
-#: engine/core/graphene/mutations.py:573
+#: engine/core/graphene/mutations.py:607
msgid "action must be either `add` or `remove`"
msgstr ""
-#: engine/core/graphene/mutations.py:576
+#: engine/core/graphene/mutations.py:610
#, python-brace-format
msgid "order product {order_product_uuid} not found"
msgstr ""
-#: engine/core/graphene/mutations.py:582
+#: engine/core/graphene/mutations.py:617
msgid "original address string provided by the user"
msgstr ""
-#: engine/core/graphene/mutations.py:618 engine/core/models.py:955
-#: engine/core/models.py:968 engine/core/models.py:1383
-#: engine/core/models.py:1412 engine/core/models.py:1437
-#: engine/core/viewsets.py:715
+#: engine/core/graphene/mutations.py:654 engine/core/models.py:978
+#: engine/core/models.py:991 engine/core/models.py:1435
+#: engine/core/models.py:1466 engine/core/models.py:1497
+#: engine/core/viewsets.py:760
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr ""
-#: engine/core/graphene/mutations.py:632
+#: engine/core/graphene/mutations.py:668
msgid "limit must be between 1 and 10"
msgstr ""
-#: engine/core/graphene/mutations.py:681
+#: engine/core/graphene/mutations.py:717
msgid "elasticsearch - works like a charm"
msgstr ""
#: engine/core/graphene/object_types.py:82
-#: engine/core/graphene/object_types.py:370
-#: engine/core/graphene/object_types.py:417 engine/core/models.py:772
-#: engine/core/models.py:1250 engine/core/models.py:1897
+#: engine/core/graphene/object_types.py:417
+#: engine/core/graphene/object_types.py:468 engine/core/models.py:795
+#: engine/core/models.py:1289 engine/core/models.py:2021
msgid "attributes"
msgstr ""
@@ -1186,139 +1186,139 @@ msgid "groups of attributes"
msgstr ""
#: engine/core/graphene/object_types.py:116
-#: engine/core/graphene/object_types.py:193
-#: engine/core/graphene/object_types.py:223 engine/core/models.py:432
+#: engine/core/graphene/object_types.py:214
+#: engine/core/graphene/object_types.py:252 engine/core/models.py:451
msgid "categories"
msgstr ""
-#: engine/core/graphene/object_types.py:124 engine/core/models.py:503
+#: engine/core/graphene/object_types.py:132 engine/core/models.py:522
msgid "brands"
msgstr ""
-#: engine/core/graphene/object_types.py:195
+#: engine/core/graphene/object_types.py:216
msgid "category image url"
msgstr ""
-#: engine/core/graphene/object_types.py:196
-#: engine/core/graphene/object_types.py:317 engine/core/models.py:283
+#: engine/core/graphene/object_types.py:217
+#: engine/core/graphene/object_types.py:362 engine/core/models.py:289
msgid "markup percentage"
msgstr ""
-#: engine/core/graphene/object_types.py:199
+#: engine/core/graphene/object_types.py:221
msgid "which attributes and values can be used for filtering this category."
msgstr ""
-#: engine/core/graphene/object_types.py:203
+#: engine/core/graphene/object_types.py:227
msgid "minimum and maximum prices for products in this category, if available."
msgstr ""
-#: engine/core/graphene/object_types.py:205
+#: engine/core/graphene/object_types.py:231
msgid "tags for this category"
msgstr ""
-#: engine/core/graphene/object_types.py:206
+#: engine/core/graphene/object_types.py:234
msgid "products in this category"
msgstr ""
-#: engine/core/graphene/object_types.py:324 engine/core/models.py:188
+#: engine/core/graphene/object_types.py:369 engine/core/models.py:194
msgid "vendors"
msgstr ""
-#: engine/core/graphene/object_types.py:328
+#: engine/core/graphene/object_types.py:373
msgid "Latitude (Y coordinate)"
msgstr ""
-#: engine/core/graphene/object_types.py:329
+#: engine/core/graphene/object_types.py:374
msgid "Longitude (X coordinate)"
msgstr ""
-#: engine/core/graphene/object_types.py:358
+#: engine/core/graphene/object_types.py:403
msgid "comment"
msgstr ""
-#: engine/core/graphene/object_types.py:359
-#: engine/core/graphene/object_types.py:483
+#: engine/core/graphene/object_types.py:405
+#: engine/core/graphene/object_types.py:539
msgid "rating value from 1 to 10, inclusive, or 0 if not set."
msgstr ""
-#: engine/core/graphene/object_types.py:366
+#: engine/core/graphene/object_types.py:413
msgid "represents feedback from a user."
msgstr ""
-#: engine/core/graphene/object_types.py:371
-#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244
+#: engine/core/graphene/object_types.py:418
+#: engine/core/graphene/object_types.py:469 engine/core/models.py:1283
msgid "notifications"
msgstr ""
-#: engine/core/graphene/object_types.py:372
+#: engine/core/graphene/object_types.py:420
msgid "download url for this order product if applicable"
msgstr ""
-#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736
+#: engine/core/graphene/object_types.py:422 engine/core/models.py:1848
msgid "feedback"
msgstr ""
-#: engine/core/graphene/object_types.py:407
+#: engine/core/graphene/object_types.py:456
msgid "a list of order products in this order"
msgstr ""
-#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214
+#: engine/core/graphene/object_types.py:458 engine/core/models.py:1253
msgid "billing address"
msgstr ""
-#: engine/core/graphene/object_types.py:412
+#: engine/core/graphene/object_types.py:462
msgid ""
"shipping address for this order, leave blank if same as billing address or "
"if not applicable"
msgstr ""
-#: engine/core/graphene/object_types.py:414
+#: engine/core/graphene/object_types.py:465
msgid "total price of this order"
msgstr ""
-#: engine/core/graphene/object_types.py:415
+#: engine/core/graphene/object_types.py:466
msgid "total quantity of products in order"
msgstr ""
-#: engine/core/graphene/object_types.py:416
+#: engine/core/graphene/object_types.py:467
msgid "are all products in the order digital"
msgstr ""
-#: engine/core/graphene/object_types.py:419
+#: engine/core/graphene/object_types.py:471
msgid "transactions for this order"
msgstr ""
-#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278
+#: engine/core/graphene/object_types.py:491 engine/core/models.py:1317
msgid "orders"
msgstr ""
-#: engine/core/graphene/object_types.py:459
+#: engine/core/graphene/object_types.py:512
msgid "image url"
msgstr ""
-#: engine/core/graphene/object_types.py:466
+#: engine/core/graphene/object_types.py:519
msgid "product's images"
msgstr ""
-#: engine/core/graphene/object_types.py:473 engine/core/models.py:431
-#: engine/core/models.py:586
+#: engine/core/graphene/object_types.py:526 engine/core/models.py:450
+#: engine/core/models.py:607
msgid "category"
msgstr ""
-#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737
+#: engine/core/graphene/object_types.py:528 engine/core/models.py:1849
msgid "feedbacks"
msgstr ""
-#: engine/core/graphene/object_types.py:476 engine/core/models.py:502
-#: engine/core/models.py:595
+#: engine/core/graphene/object_types.py:529 engine/core/models.py:521
+#: engine/core/models.py:616
msgid "brand"
msgstr ""
-#: engine/core/graphene/object_types.py:477 engine/core/models.py:106
+#: engine/core/graphene/object_types.py:531 engine/core/models.py:106
msgid "attribute groups"
msgstr ""
-#: engine/core/graphene/object_types.py:478
+#: engine/core/graphene/object_types.py:533
#: engine/core/templates/digital_order_created_email.html:111
#: engine/core/templates/digital_order_delivered_email.html:109
#: engine/core/templates/shipped_order_created_email.html:109
@@ -1326,7 +1326,7 @@ msgstr ""
msgid "price"
msgstr ""
-#: engine/core/graphene/object_types.py:479
+#: engine/core/graphene/object_types.py:534
#: engine/core/templates/digital_order_created_email.html:110
#: engine/core/templates/digital_order_delivered_email.html:108
#: engine/core/templates/shipped_order_created_email.html:108
@@ -1334,39 +1334,39 @@ msgstr ""
msgid "quantity"
msgstr ""
-#: engine/core/graphene/object_types.py:480
+#: engine/core/graphene/object_types.py:535
msgid "number of feedbacks"
msgstr ""
-#: engine/core/graphene/object_types.py:481
+#: engine/core/graphene/object_types.py:536
msgid "only available for personal orders"
msgstr ""
-#: engine/core/graphene/object_types.py:484
+#: engine/core/graphene/object_types.py:541
msgid "discount price"
msgstr ""
-#: engine/core/graphene/object_types.py:508 engine/core/models.py:658
+#: engine/core/graphene/object_types.py:565 engine/core/models.py:679
msgid "products"
msgstr ""
-#: engine/core/graphene/object_types.py:611
+#: engine/core/graphene/object_types.py:675
msgid "promocodes"
msgstr ""
-#: engine/core/graphene/object_types.py:621
+#: engine/core/graphene/object_types.py:690
msgid "products on sale"
msgstr ""
-#: engine/core/graphene/object_types.py:628 engine/core/models.py:904
+#: engine/core/graphene/object_types.py:698 engine/core/models.py:927
msgid "promotions"
msgstr ""
-#: engine/core/graphene/object_types.py:632 engine/core/models.py:187
+#: engine/core/graphene/object_types.py:702 engine/core/models.py:193
msgid "vendor"
msgstr ""
-#: engine/core/graphene/object_types.py:633 engine/core/models.py:657
+#: engine/core/graphene/object_types.py:703 engine/core/models.py:678
#: engine/core/templates/digital_order_created_email.html:109
#: engine/core/templates/digital_order_delivered_email.html:107
#: engine/core/templates/shipped_order_created_email.html:107
@@ -1374,98 +1374,98 @@ msgstr ""
msgid "product"
msgstr ""
-#: engine/core/graphene/object_types.py:644 engine/core/models.py:927
+#: engine/core/graphene/object_types.py:715 engine/core/models.py:950
msgid "wishlisted products"
msgstr ""
-#: engine/core/graphene/object_types.py:650 engine/core/models.py:944
+#: engine/core/graphene/object_types.py:722 engine/core/models.py:967
msgid "wishlists"
msgstr ""
-#: engine/core/graphene/object_types.py:654
+#: engine/core/graphene/object_types.py:727
msgid "tagged products"
msgstr ""
-#: engine/core/graphene/object_types.py:661 engine/core/models.py:224
-#: engine/core/models.py:601
+#: engine/core/graphene/object_types.py:735 engine/core/models.py:230
+#: engine/core/models.py:622
msgid "product tags"
msgstr ""
-#: engine/core/graphene/object_types.py:665
+#: engine/core/graphene/object_types.py:740
msgid "tagged categories"
msgstr ""
-#: engine/core/graphene/object_types.py:672
+#: engine/core/graphene/object_types.py:748
msgid "categories tags"
msgstr ""
-#: engine/core/graphene/object_types.py:676
+#: engine/core/graphene/object_types.py:752
msgid "project name"
msgstr ""
-#: engine/core/graphene/object_types.py:677
+#: engine/core/graphene/object_types.py:753
msgid "company name"
msgstr ""
-#: engine/core/graphene/object_types.py:678
+#: engine/core/graphene/object_types.py:754
msgid "company address"
msgstr ""
-#: engine/core/graphene/object_types.py:679
+#: engine/core/graphene/object_types.py:755
msgid "company phone number"
msgstr ""
-#: engine/core/graphene/object_types.py:680
+#: engine/core/graphene/object_types.py:758
msgid "email from, sometimes it must be used instead of host user value"
msgstr ""
-#: engine/core/graphene/object_types.py:681
+#: engine/core/graphene/object_types.py:761
msgid "email host user"
msgstr ""
-#: engine/core/graphene/object_types.py:682
+#: engine/core/graphene/object_types.py:762
msgid "maximum amount for payment"
msgstr ""
-#: engine/core/graphene/object_types.py:683
+#: engine/core/graphene/object_types.py:763
msgid "minimum amount for payment"
msgstr ""
-#: engine/core/graphene/object_types.py:684
+#: engine/core/graphene/object_types.py:764
msgid "analytics data"
msgstr ""
-#: engine/core/graphene/object_types.py:685
+#: engine/core/graphene/object_types.py:765
msgid "advertisement data"
msgstr ""
-#: engine/core/graphene/object_types.py:688
+#: engine/core/graphene/object_types.py:768
msgid "company configuration"
msgstr ""
-#: engine/core/graphene/object_types.py:692
+#: engine/core/graphene/object_types.py:772
msgid "language code"
msgstr ""
-#: engine/core/graphene/object_types.py:693
+#: engine/core/graphene/object_types.py:773
msgid "language name"
msgstr ""
-#: engine/core/graphene/object_types.py:694
+#: engine/core/graphene/object_types.py:774
msgid "language flag, if exists :)"
msgstr ""
-#: engine/core/graphene/object_types.py:697
+#: engine/core/graphene/object_types.py:777
msgid "supported languages"
msgstr ""
-#: engine/core/graphene/object_types.py:728
-#: engine/core/graphene/object_types.py:729
-#: engine/core/graphene/object_types.py:730
+#: engine/core/graphene/object_types.py:809
+#: engine/core/graphene/object_types.py:812
+#: engine/core/graphene/object_types.py:815
msgid "products search results"
msgstr ""
-#: engine/core/graphene/object_types.py:731
+#: engine/core/graphene/object_types.py:817
msgid "posts search results"
msgstr ""
@@ -1489,7 +1489,7 @@ msgstr ""
msgid "attribute group's name"
msgstr ""
-#: engine/core/models.py:105 engine/core/models.py:734
+#: engine/core/models.py:105 engine/core/models.py:755
msgid "attribute group"
msgstr ""
@@ -1504,47 +1504,47 @@ msgid ""
"use in systems that interact with third-party vendors."
msgstr ""
-#: engine/core/models.py:124
+#: engine/core/models.py:125
msgid "stores credentials and endpoints required for vendor communication"
msgstr ""
-#: engine/core/models.py:125
+#: engine/core/models.py:127
msgid "authentication info"
msgstr ""
-#: engine/core/models.py:130
+#: engine/core/models.py:132
msgid "define the markup for products retrieved from this vendor"
msgstr ""
-#: engine/core/models.py:131
+#: engine/core/models.py:133
msgid "vendor markup percentage"
msgstr ""
-#: engine/core/models.py:135
+#: engine/core/models.py:137
msgid "name of this vendor"
msgstr ""
-#: engine/core/models.py:136
+#: engine/core/models.py:138
msgid "vendor name"
msgstr ""
-#: engine/core/models.py:147
+#: engine/core/models.py:153
msgid "response file"
msgstr ""
-#: engine/core/models.py:148
+#: engine/core/models.py:154
msgid "vendor's last processing response"
msgstr ""
-#: engine/core/models.py:154
+#: engine/core/models.py:160
msgid "vendor's integration file path"
msgstr ""
-#: engine/core/models.py:155
+#: engine/core/models.py:161
msgid "integration path"
msgstr ""
-#: engine/core/models.py:197
+#: engine/core/models.py:203
msgid ""
"Represents a product tag used for classifying or identifying products. The "
"ProductTag class is designed to uniquely identify and classify products "
@@ -1553,42 +1553,42 @@ msgid ""
"metadata customization for administrative purposes."
msgstr ""
-#: engine/core/models.py:209 engine/core/models.py:240
+#: engine/core/models.py:215 engine/core/models.py:246
msgid "internal tag identifier for the product tag"
msgstr ""
-#: engine/core/models.py:210 engine/core/models.py:241
+#: engine/core/models.py:216 engine/core/models.py:247
msgid "tag name"
msgstr ""
-#: engine/core/models.py:214 engine/core/models.py:245
+#: engine/core/models.py:220 engine/core/models.py:251
msgid "user-friendly name for the product tag"
msgstr ""
-#: engine/core/models.py:215 engine/core/models.py:246
+#: engine/core/models.py:221 engine/core/models.py:252
msgid "tag display name"
msgstr ""
-#: engine/core/models.py:223
+#: engine/core/models.py:229
msgid "product tag"
msgstr ""
-#: engine/core/models.py:229
+#: engine/core/models.py:235
msgid ""
"Represents a category tag used for products. This class models a category "
"tag that can be used to associate and classify products. It includes "
"attributes for an internal tag identifier and a user-friendly display name."
msgstr ""
-#: engine/core/models.py:254
+#: engine/core/models.py:260
msgid "category tag"
msgstr ""
-#: engine/core/models.py:255 engine/core/models.py:327
+#: engine/core/models.py:261 engine/core/models.py:333
msgid "category tags"
msgstr ""
-#: engine/core/models.py:260
+#: engine/core/models.py:266
msgid ""
"Represents a category entity to organize and group related items in a "
"hierarchical structure. Categories may have hierarchical relationships with "
@@ -1601,51 +1601,51 @@ msgid ""
"priority."
msgstr ""
-#: engine/core/models.py:274
+#: engine/core/models.py:280
msgid "upload an image representing this category"
msgstr ""
-#: engine/core/models.py:277
+#: engine/core/models.py:283
msgid "category image"
msgstr ""
-#: engine/core/models.py:282
+#: engine/core/models.py:288
msgid "define a markup percentage for products in this category"
msgstr ""
-#: engine/core/models.py:291
+#: engine/core/models.py:297
msgid "parent of this category to form a hierarchical structure"
msgstr ""
-#: engine/core/models.py:292
+#: engine/core/models.py:298
msgid "parent category"
msgstr ""
-#: engine/core/models.py:297
+#: engine/core/models.py:303
msgid "category name"
msgstr ""
-#: engine/core/models.py:298
+#: engine/core/models.py:304
msgid "provide a name for this category"
msgstr ""
-#: engine/core/models.py:305
+#: engine/core/models.py:311
msgid "add a detailed description for this category"
msgstr ""
-#: engine/core/models.py:306
+#: engine/core/models.py:312
msgid "category description"
msgstr ""
-#: engine/core/models.py:326
+#: engine/core/models.py:332
msgid "tags that help describe or group this category"
msgstr ""
-#: engine/core/models.py:333 engine/core/models.py:495
+#: engine/core/models.py:339 engine/core/models.py:514
msgid "priority"
msgstr ""
-#: engine/core/models.py:438
+#: engine/core/models.py:457
msgid ""
"Represents a Brand object in the system. This class handles information and "
"attributes related to a brand, including its name, logos, description, "
@@ -1653,47 +1653,47 @@ msgid ""
"organization and representation of brand-related data within the application."
msgstr ""
-#: engine/core/models.py:448
+#: engine/core/models.py:467
msgid "name of this brand"
msgstr ""
-#: engine/core/models.py:449
+#: engine/core/models.py:468
msgid "brand name"
msgstr ""
-#: engine/core/models.py:456
+#: engine/core/models.py:475
msgid "upload a logo representing this brand"
msgstr ""
-#: engine/core/models.py:458
+#: engine/core/models.py:477
msgid "brand small image"
msgstr ""
-#: engine/core/models.py:464
+#: engine/core/models.py:483
msgid "upload a big logo representing this brand"
msgstr ""
-#: engine/core/models.py:466
+#: engine/core/models.py:485
msgid "brand big image"
msgstr ""
-#: engine/core/models.py:471
+#: engine/core/models.py:490
msgid "add a detailed description of the brand"
msgstr ""
-#: engine/core/models.py:472
+#: engine/core/models.py:491
msgid "brand description"
msgstr ""
-#: engine/core/models.py:477
+#: engine/core/models.py:496
msgid "optional categories that this brand is associated with"
msgstr ""
-#: engine/core/models.py:478
+#: engine/core/models.py:497
msgid "associated categories"
msgstr ""
-#: engine/core/models.py:508
+#: engine/core/models.py:527
msgid ""
"Represents the stock of a product managed in the system. This class provides "
"details about the relationship between vendors, products, and their stock "
@@ -1703,72 +1703,72 @@ msgid ""
"from various vendors."
msgstr ""
-#: engine/core/models.py:520
+#: engine/core/models.py:539
msgid "the vendor supplying this product stock"
msgstr ""
-#: engine/core/models.py:521
+#: engine/core/models.py:540
msgid "associated vendor"
msgstr ""
-#: engine/core/models.py:525
+#: engine/core/models.py:544
msgid "final price to the customer after markups"
msgstr ""
-#: engine/core/models.py:526
+#: engine/core/models.py:545
msgid "selling price"
msgstr ""
-#: engine/core/models.py:531
+#: engine/core/models.py:550
msgid "the product associated with this stock entry"
msgstr ""
-#: engine/core/models.py:532 engine/core/models.py:797
-#: engine/core/models.py:843 engine/core/models.py:1792
+#: engine/core/models.py:551 engine/core/models.py:820
+#: engine/core/models.py:866 engine/core/models.py:1904
msgid "associated product"
msgstr ""
-#: engine/core/models.py:539
+#: engine/core/models.py:558
msgid "the price paid to the vendor for this product"
msgstr ""
-#: engine/core/models.py:540
+#: engine/core/models.py:559
msgid "vendor purchase price"
msgstr ""
-#: engine/core/models.py:544
+#: engine/core/models.py:563
msgid "available quantity of the product in stock"
msgstr ""
-#: engine/core/models.py:545
+#: engine/core/models.py:564
msgid "quantity in stock"
msgstr ""
-#: engine/core/models.py:549
+#: engine/core/models.py:568
msgid "vendor-assigned SKU for identifying the product"
msgstr ""
-#: engine/core/models.py:550
+#: engine/core/models.py:569
msgid "vendor sku"
msgstr ""
-#: engine/core/models.py:556
+#: engine/core/models.py:575
msgid "digital file associated with this stock if applicable"
msgstr ""
-#: engine/core/models.py:557
+#: engine/core/models.py:576
msgid "digital file"
msgstr ""
-#: engine/core/models.py:560
+#: engine/core/models.py:580
msgid "system attributes"
msgstr ""
-#: engine/core/models.py:567
+#: engine/core/models.py:588
msgid "stock entries"
msgstr ""
-#: engine/core/models.py:572
+#: engine/core/models.py:593
msgid ""
"Represents a product with attributes such as category, brand, tags, digital "
"status, name, description, part number, and slug. Provides related utility "
@@ -1780,55 +1780,55 @@ msgid ""
"product data and its associated information within an application."
msgstr ""
-#: engine/core/models.py:585
+#: engine/core/models.py:606
msgid "category this product belongs to"
msgstr ""
-#: engine/core/models.py:594
+#: engine/core/models.py:615
msgid "optionally associate this product with a brand"
msgstr ""
-#: engine/core/models.py:600
+#: engine/core/models.py:621
msgid "tags that help describe or group this product"
msgstr ""
-#: engine/core/models.py:605
+#: engine/core/models.py:626
msgid "indicates whether this product is digitally delivered"
msgstr ""
-#: engine/core/models.py:606
+#: engine/core/models.py:627
msgid "is product digital"
msgstr ""
-#: engine/core/models.py:612
+#: engine/core/models.py:633
msgid "provide a clear identifying name for the product"
msgstr ""
-#: engine/core/models.py:613
+#: engine/core/models.py:634
msgid "product name"
msgstr ""
-#: engine/core/models.py:619 engine/core/models.py:892
+#: engine/core/models.py:640 engine/core/models.py:915
msgid "add a detailed description of the product"
msgstr ""
-#: engine/core/models.py:620
+#: engine/core/models.py:641
msgid "product description"
msgstr ""
-#: engine/core/models.py:627
+#: engine/core/models.py:648
msgid "part number for this product"
msgstr ""
-#: engine/core/models.py:628
+#: engine/core/models.py:649
msgid "part number"
msgstr ""
-#: engine/core/models.py:647
+#: engine/core/models.py:668
msgid "stock keeping unit for this product"
msgstr ""
-#: engine/core/models.py:720
+#: engine/core/models.py:741
msgid ""
"Represents an attribute in the system. This class is used to define and "
"manage attributes, which are customizable pieces of data that can be "
@@ -1838,83 +1838,83 @@ msgid ""
"for dynamic and flexible data structuring."
msgstr ""
-#: engine/core/models.py:733
+#: engine/core/models.py:754
msgid "group of this attribute"
msgstr ""
-#: engine/core/models.py:739
+#: engine/core/models.py:760
msgid "string"
msgstr ""
-#: engine/core/models.py:740
+#: engine/core/models.py:761
msgid "integer"
msgstr ""
-#: engine/core/models.py:741
+#: engine/core/models.py:762
msgid "float"
msgstr ""
-#: engine/core/models.py:742
+#: engine/core/models.py:763
msgid "boolean"
msgstr ""
-#: engine/core/models.py:743
+#: engine/core/models.py:764
msgid "array"
msgstr ""
-#: engine/core/models.py:744
+#: engine/core/models.py:765
msgid "object"
msgstr ""
-#: engine/core/models.py:746
+#: engine/core/models.py:767
msgid "type of the attribute's value"
msgstr ""
-#: engine/core/models.py:747
+#: engine/core/models.py:768
msgid "value type"
msgstr ""
-#: engine/core/models.py:752
+#: engine/core/models.py:773
msgid "name of this attribute"
msgstr ""
-#: engine/core/models.py:753
+#: engine/core/models.py:774
msgid "attribute's name"
msgstr ""
-#: engine/core/models.py:758
+#: engine/core/models.py:779
msgid "is filterable"
msgstr ""
-#: engine/core/models.py:759
+#: engine/core/models.py:781
msgid "designates whether this attribute can be used for filtering or not"
msgstr ""
-#: engine/core/models.py:771 engine/core/models.py:789
+#: engine/core/models.py:794 engine/core/models.py:812
#: engine/core/templates/digital_order_delivered_email.html:134
msgid "attribute"
msgstr ""
-#: engine/core/models.py:777
+#: engine/core/models.py:800
msgid ""
"Represents a specific value for an attribute that is linked to a product. It "
"links the 'attribute' to a unique 'value', allowing better organization and "
"dynamic representation of product characteristics."
msgstr ""
-#: engine/core/models.py:788
+#: engine/core/models.py:811
msgid "attribute of this value"
msgstr ""
-#: engine/core/models.py:796
+#: engine/core/models.py:819
msgid "the specific product associated with this attribute's value"
msgstr ""
-#: engine/core/models.py:802
+#: engine/core/models.py:825
msgid "the specific value for this attribute"
msgstr ""
-#: engine/core/models.py:815
+#: engine/core/models.py:838
msgid ""
"Represents a product image associated with a product in the system. This "
"class is designed to manage images for products, including functionality for "
@@ -1923,39 +1923,39 @@ msgid ""
"with alternative text for the images."
msgstr ""
-#: engine/core/models.py:826
+#: engine/core/models.py:849
msgid "provide alternative text for the image for accessibility"
msgstr ""
-#: engine/core/models.py:827
+#: engine/core/models.py:850
msgid "image alt text"
msgstr ""
-#: engine/core/models.py:830
+#: engine/core/models.py:853
msgid "upload the image file for this product"
msgstr ""
-#: engine/core/models.py:831 engine/core/models.py:862
+#: engine/core/models.py:854 engine/core/models.py:885
msgid "product image"
msgstr ""
-#: engine/core/models.py:836
+#: engine/core/models.py:859
msgid "determines the order in which images are displayed"
msgstr ""
-#: engine/core/models.py:837
+#: engine/core/models.py:860
msgid "display priority"
msgstr ""
-#: engine/core/models.py:842
+#: engine/core/models.py:865
msgid "the product that this image represents"
msgstr ""
-#: engine/core/models.py:863
+#: engine/core/models.py:886
msgid "product images"
msgstr ""
-#: engine/core/models.py:868
+#: engine/core/models.py:891
msgid ""
"Represents a promotional campaign for products with a discount. This class "
"is used to define and manage promotional campaigns that offer a percentage-"
@@ -1965,39 +1965,39 @@ msgid ""
"affected items in the campaign."
msgstr ""
-#: engine/core/models.py:880
+#: engine/core/models.py:903
msgid "percentage discount for the selected products"
msgstr ""
-#: engine/core/models.py:881
+#: engine/core/models.py:904
msgid "discount percentage"
msgstr ""
-#: engine/core/models.py:886
+#: engine/core/models.py:909
msgid "provide a unique name for this promotion"
msgstr ""
-#: engine/core/models.py:887
+#: engine/core/models.py:910
msgid "promotion name"
msgstr ""
-#: engine/core/models.py:893
+#: engine/core/models.py:916
msgid "promotion description"
msgstr ""
-#: engine/core/models.py:898
+#: engine/core/models.py:921
msgid "select which products are included in this promotion"
msgstr ""
-#: engine/core/models.py:899
+#: engine/core/models.py:922
msgid "included products"
msgstr ""
-#: engine/core/models.py:903
+#: engine/core/models.py:926
msgid "promotion"
msgstr ""
-#: engine/core/models.py:914
+#: engine/core/models.py:937
msgid ""
"Represents a user's wishlist for storing and managing desired products. The "
"class provides functionality to manage a collection of products, supporting "
@@ -2005,23 +2005,23 @@ msgid ""
"operations for adding and removing multiple products at once."
msgstr ""
-#: engine/core/models.py:926
+#: engine/core/models.py:949
msgid "products that the user has marked as wanted"
msgstr ""
-#: engine/core/models.py:934
+#: engine/core/models.py:957
msgid "user who owns this wishlist"
msgstr ""
-#: engine/core/models.py:935
+#: engine/core/models.py:958
msgid "wishlist owner"
msgstr ""
-#: engine/core/models.py:943
+#: engine/core/models.py:966
msgid "wishlist"
msgstr ""
-#: engine/core/models.py:985
+#: engine/core/models.py:1008
msgid ""
"Represents a documentary record tied to a product. This class is used to "
"store information about documentaries related to specific products, "
@@ -2031,19 +2031,19 @@ msgid ""
"custom features."
msgstr ""
-#: engine/core/models.py:998
+#: engine/core/models.py:1023
msgid "documentary"
msgstr ""
-#: engine/core/models.py:999
+#: engine/core/models.py:1024
msgid "documentaries"
msgstr ""
-#: engine/core/models.py:1009
+#: engine/core/models.py:1034
msgid "unresolved"
msgstr ""
-#: engine/core/models.py:1014
+#: engine/core/models.py:1039
msgid ""
"Represents an address entity that includes location details and associations "
"with a user. Provides functionality for geographic and address data storage, "
@@ -2055,59 +2055,59 @@ msgid ""
"address with a user, facilitating personalized data handling."
msgstr ""
-#: engine/core/models.py:1029
+#: engine/core/models.py:1054
msgid "address line for the customer"
msgstr ""
-#: engine/core/models.py:1030
+#: engine/core/models.py:1055
msgid "address line"
msgstr ""
-#: engine/core/models.py:1032
+#: engine/core/models.py:1057
msgid "street"
msgstr ""
-#: engine/core/models.py:1033
+#: engine/core/models.py:1058
msgid "district"
msgstr ""
-#: engine/core/models.py:1034
+#: engine/core/models.py:1059
msgid "city"
msgstr ""
-#: engine/core/models.py:1035
+#: engine/core/models.py:1060
msgid "region"
msgstr ""
-#: engine/core/models.py:1036
+#: engine/core/models.py:1061
msgid "postal code"
msgstr ""
-#: engine/core/models.py:1037
+#: engine/core/models.py:1062
msgid "country"
msgstr ""
-#: engine/core/models.py:1044
+#: engine/core/models.py:1069
msgid "geolocation point: (longitude, latitude)"
msgstr ""
-#: engine/core/models.py:1047
+#: engine/core/models.py:1075
msgid "full JSON response from geocoder for this address"
msgstr ""
-#: engine/core/models.py:1052
+#: engine/core/models.py:1081
msgid "stored JSON response from the geocoding service"
msgstr ""
-#: engine/core/models.py:1060
+#: engine/core/models.py:1091
msgid "address"
msgstr ""
-#: engine/core/models.py:1061
+#: engine/core/models.py:1092
msgid "addresses"
msgstr ""
-#: engine/core/models.py:1073
+#: engine/core/models.py:1104
msgid ""
"Represents a promotional code that can be used for discounts, managing its "
"validity, type of discount, and application. The PromoCode class stores "
@@ -2117,86 +2117,86 @@ msgid ""
"apply the promo code to an order while ensuring constraints are met."
msgstr ""
-#: engine/core/models.py:1087
+#: engine/core/models.py:1118
msgid "unique code used by a user to redeem a discount"
msgstr ""
-#: engine/core/models.py:1088
+#: engine/core/models.py:1119
msgid "promo code identifier"
msgstr ""
-#: engine/core/models.py:1095
+#: engine/core/models.py:1126
msgid "fixed discount amount applied if percent is not used"
msgstr ""
-#: engine/core/models.py:1096
+#: engine/core/models.py:1127
msgid "fixed discount amount"
msgstr ""
-#: engine/core/models.py:1102
+#: engine/core/models.py:1133
msgid "percentage discount applied if fixed amount is not used"
msgstr ""
-#: engine/core/models.py:1103
+#: engine/core/models.py:1134
msgid "percentage discount"
msgstr ""
-#: engine/core/models.py:1108
+#: engine/core/models.py:1139
msgid "timestamp when the promocode expires"
msgstr ""
-#: engine/core/models.py:1109
+#: engine/core/models.py:1140
msgid "end validity time"
msgstr ""
-#: engine/core/models.py:1114
+#: engine/core/models.py:1145
msgid "timestamp from which this promocode is valid"
msgstr ""
-#: engine/core/models.py:1115
+#: engine/core/models.py:1146
msgid "start validity time"
msgstr ""
-#: engine/core/models.py:1120
+#: engine/core/models.py:1151
msgid "timestamp when the promocode was used, blank if not used yet"
msgstr ""
-#: engine/core/models.py:1121
+#: engine/core/models.py:1152
msgid "usage timestamp"
msgstr ""
-#: engine/core/models.py:1126
+#: engine/core/models.py:1157
msgid "user assigned to this promocode if applicable"
msgstr ""
-#: engine/core/models.py:1127
+#: engine/core/models.py:1158
msgid "assigned user"
msgstr ""
-#: engine/core/models.py:1134
+#: engine/core/models.py:1165
msgid "promo code"
msgstr ""
-#: engine/core/models.py:1135
+#: engine/core/models.py:1166
msgid "promo codes"
msgstr ""
-#: engine/core/models.py:1150
+#: engine/core/models.py:1182
msgid ""
"only one type of discount should be defined (amount or percent), but not "
"both or neither."
msgstr ""
-#: engine/core/models.py:1171
+#: engine/core/models.py:1204
msgid "promocode already used"
msgstr ""
-#: engine/core/models.py:1187
+#: engine/core/models.py:1226
#, python-brace-format
msgid "invalid discount type for promocode {self.uuid}"
msgstr ""
-#: engine/core/models.py:1196
+#: engine/core/models.py:1235
msgid ""
"Represents an order placed by a user. This class models an order within the "
"application, including its various attributes such as billing and shipping "
@@ -2206,145 +2206,145 @@ msgid ""
"supports managing the products in the order lifecycle."
msgstr ""
-#: engine/core/models.py:1213
+#: engine/core/models.py:1252
msgid "the billing address used for this order"
msgstr ""
-#: engine/core/models.py:1221
+#: engine/core/models.py:1260
msgid "optional promo code applied to this order"
msgstr ""
-#: engine/core/models.py:1222
+#: engine/core/models.py:1261
msgid "applied promo code"
msgstr ""
-#: engine/core/models.py:1230
+#: engine/core/models.py:1269
msgid "the shipping address used for this order"
msgstr ""
-#: engine/core/models.py:1231
+#: engine/core/models.py:1270
msgid "shipping address"
msgstr ""
-#: engine/core/models.py:1237
+#: engine/core/models.py:1276
msgid "current status of the order in its lifecycle"
msgstr ""
-#: engine/core/models.py:1238
+#: engine/core/models.py:1277
msgid "order status"
msgstr ""
-#: engine/core/models.py:1243 engine/core/models.py:1769
+#: engine/core/models.py:1282 engine/core/models.py:1881
msgid "json structure of notifications to display to users"
msgstr ""
-#: engine/core/models.py:1249
+#: engine/core/models.py:1288
msgid "json representation of order attributes for this order"
msgstr ""
-#: engine/core/models.py:1255
+#: engine/core/models.py:1294
msgid "the user who placed the order"
msgstr ""
-#: engine/core/models.py:1256
+#: engine/core/models.py:1295
msgid "user"
msgstr ""
-#: engine/core/models.py:1262
+#: engine/core/models.py:1301
msgid "the timestamp when the order was finalized"
msgstr ""
-#: engine/core/models.py:1263
+#: engine/core/models.py:1302
msgid "buy time"
msgstr ""
-#: engine/core/models.py:1270
+#: engine/core/models.py:1309
msgid "a human-readable identifier for the order"
msgstr ""
-#: engine/core/models.py:1271
+#: engine/core/models.py:1310
msgid "human readable id"
msgstr ""
-#: engine/core/models.py:1277
+#: engine/core/models.py:1316
msgid "order"
msgstr ""
-#: engine/core/models.py:1319
+#: engine/core/models.py:1363
msgid "a user must have only one pending order at a time"
msgstr ""
-#: engine/core/models.py:1351
+#: engine/core/models.py:1396
msgid "you cannot add products to an order that is not a pending one"
msgstr ""
-#: engine/core/models.py:1356
+#: engine/core/models.py:1402
msgid "you cannot add inactive products to order"
msgstr ""
-#: engine/core/models.py:1373
+#: engine/core/models.py:1424
msgid "you cannot add more products than available in stock"
msgstr ""
-#: engine/core/models.py:1395 engine/core/models.py:1420
-#: engine/core/models.py:1428
+#: engine/core/models.py:1448 engine/core/models.py:1477
+#: engine/core/models.py:1487
msgid "you cannot remove products from an order that is not a pending one"
msgstr ""
-#: engine/core/models.py:1416
+#: engine/core/models.py:1472
#, python-brace-format
msgid "{name} does not exist with query <{query}>"
msgstr ""
-#: engine/core/models.py:1448
+#: engine/core/models.py:1511
msgid "promocode does not exist"
msgstr ""
-#: engine/core/models.py:1454
+#: engine/core/models.py:1526
msgid "you can only buy physical products with shipping address specified"
msgstr ""
-#: engine/core/models.py:1473
+#: engine/core/models.py:1547
msgid "address does not exist"
msgstr ""
-#: engine/core/models.py:1494 engine/core/models.py:1563
+#: engine/core/models.py:1569 engine/core/models.py:1648
msgid "you can not buy at this moment, please try again in a few minutes"
msgstr ""
-#: engine/core/models.py:1497 engine/core/models.py:1559
+#: engine/core/models.py:1575 engine/core/models.py:1641
msgid "invalid force value"
msgstr ""
-#: engine/core/models.py:1503 engine/core/models.py:1566
+#: engine/core/models.py:1581 engine/core/models.py:1652
msgid "you cannot purchase an empty order!"
msgstr ""
-#: engine/core/models.py:1522
+#: engine/core/models.py:1602
msgid "you cannot buy an order without a user"
msgstr ""
-#: engine/core/models.py:1536
+#: engine/core/models.py:1616
msgid "a user without a balance cannot buy with balance"
msgstr ""
-#: engine/core/models.py:1541
+#: engine/core/models.py:1622
msgid "insufficient funds to complete the order"
msgstr ""
-#: engine/core/models.py:1575
+#: engine/core/models.py:1663
msgid ""
"you cannot buy without registration, please provide the following "
"information: customer name, customer email, customer phone number"
msgstr ""
-#: engine/core/models.py:1584
+#: engine/core/models.py:1674
#, python-brace-format
msgid ""
"invalid payment method: {payment_method} from {available_payment_methods}"
msgstr ""
-#: engine/core/models.py:1699
+#: engine/core/models.py:1805
msgid ""
"Manages user feedback for products. This class is designed to capture and "
"store user feedback for specific products that they have purchased. It "
@@ -2353,31 +2353,31 @@ msgid ""
"fields to effectively model and manage feedback data."
msgstr ""
-#: engine/core/models.py:1711
+#: engine/core/models.py:1817
msgid "user-provided comments about their experience with the product"
msgstr ""
-#: engine/core/models.py:1712
+#: engine/core/models.py:1818
msgid "feedback comments"
msgstr ""
-#: engine/core/models.py:1719
+#: engine/core/models.py:1826
msgid "references the specific product in an order that this feedback is about"
msgstr ""
-#: engine/core/models.py:1720
+#: engine/core/models.py:1828
msgid "related order product"
msgstr ""
-#: engine/core/models.py:1725
+#: engine/core/models.py:1833
msgid "user-assigned rating for the product"
msgstr ""
-#: engine/core/models.py:1726
+#: engine/core/models.py:1834
msgid "product rating"
msgstr ""
-#: engine/core/models.py:1742
+#: engine/core/models.py:1854
msgid ""
"Represents products associated with orders and their attributes. The "
"OrderProduct model maintains information about a product that is part of an "
@@ -2390,108 +2390,108 @@ msgid ""
"Product models and stores a reference to them."
msgstr ""
-#: engine/core/models.py:1757
+#: engine/core/models.py:1869
msgid "the price paid by the customer for this product at purchase time"
msgstr ""
-#: engine/core/models.py:1758
+#: engine/core/models.py:1870
msgid "purchase price at order time"
msgstr ""
-#: engine/core/models.py:1763
+#: engine/core/models.py:1875
msgid "internal comments for admins about this ordered product"
msgstr ""
-#: engine/core/models.py:1764
+#: engine/core/models.py:1876
msgid "internal comments"
msgstr ""
-#: engine/core/models.py:1770
+#: engine/core/models.py:1882
msgid "user notifications"
msgstr ""
-#: engine/core/models.py:1775
+#: engine/core/models.py:1887
msgid "json representation of this item's attributes"
msgstr ""
-#: engine/core/models.py:1776
+#: engine/core/models.py:1888
msgid "ordered product attributes"
msgstr ""
-#: engine/core/models.py:1781
+#: engine/core/models.py:1893
msgid "reference to the parent order that contains this product"
msgstr ""
-#: engine/core/models.py:1782
+#: engine/core/models.py:1894
msgid "parent order"
msgstr ""
-#: engine/core/models.py:1791
+#: engine/core/models.py:1903
msgid "the specific product associated with this order line"
msgstr ""
-#: engine/core/models.py:1798
+#: engine/core/models.py:1910
msgid "quantity of this specific product in the order"
msgstr ""
-#: engine/core/models.py:1799
+#: engine/core/models.py:1911
msgid "product quantity"
msgstr ""
-#: engine/core/models.py:1806
+#: engine/core/models.py:1918
msgid "current status of this product in the order"
msgstr ""
-#: engine/core/models.py:1807
+#: engine/core/models.py:1919
msgid "product line status"
msgstr ""
-#: engine/core/models.py:1872
+#: engine/core/models.py:1986
msgid "order product must have an order"
msgstr ""
-#: engine/core/models.py:1874
+#: engine/core/models.py:1988
#, python-brace-format
msgid "wrong action specified for feedback: {action}"
msgstr ""
-#: engine/core/models.py:1888
+#: engine/core/models.py:2005
msgid "you cannot feedback an order which is not received"
msgstr ""
-#: engine/core/models.py:1894
+#: engine/core/models.py:2014
msgid "name"
msgstr ""
-#: engine/core/models.py:1895
+#: engine/core/models.py:2016
msgid "URL of the integration"
msgstr ""
-#: engine/core/models.py:1896
+#: engine/core/models.py:2019
msgid "authentication credentials"
msgstr ""
-#: engine/core/models.py:1918
+#: engine/core/models.py:2042
msgid "you can only have one default CRM provider"
msgstr ""
-#: engine/core/models.py:1928
+#: engine/core/models.py:2052
msgid "CRM"
msgstr ""
-#: engine/core/models.py:1929
+#: engine/core/models.py:2053
msgid "CRMs"
msgstr ""
-#: engine/core/models.py:1941
+#: engine/core/models.py:2069
msgid "order CRM link"
msgstr ""
-#: engine/core/models.py:1942
+#: engine/core/models.py:2070
msgid "orders CRM links"
msgstr ""
-#: engine/core/models.py:1947
+#: engine/core/models.py:2075
msgid ""
"Represents the downloading functionality for digital assets associated with "
"orders. The DigitalAssetDownload class provides the ability to manage and "
@@ -2501,15 +2501,15 @@ msgid ""
"the asset when the associated order is in a completed status."
msgstr ""
-#: engine/core/models.py:1961
+#: engine/core/models.py:2091
msgid "download"
msgstr ""
-#: engine/core/models.py:1962
+#: engine/core/models.py:2092
msgid "downloads"
msgstr ""
-#: engine/core/serializers/utility.py:89
+#: engine/core/serializers/utility.py:91
msgid ""
"you must provide a comment, rating, and order product uuid to add feedback."
msgstr ""
@@ -2835,11 +2835,11 @@ msgid ""
" reserved"
msgstr ""
-#: engine/core/utils/caching.py:44
+#: engine/core/utils/caching.py:48
msgid "both data and timeout are required"
msgstr ""
-#: engine/core/utils/caching.py:46
+#: engine/core/utils/caching.py:51
msgid "invalid timeout value, it must be between 0 and 216000 seconds"
msgstr ""
@@ -2848,17 +2848,17 @@ msgstr ""
msgid "{settings.PROJECT_NAME} | contact us initiated"
msgstr ""
-#: engine/core/utils/emailing.py:73
+#: engine/core/utils/emailing.py:81
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order confirmation"
msgstr ""
-#: engine/core/utils/emailing.py:105
+#: engine/core/utils/emailing.py:115
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order delivered"
msgstr ""
-#: engine/core/utils/emailing.py:188
+#: engine/core/utils/emailing.py:203
#, python-brace-format
msgid "{settings.PROJECT_NAME} | promocode granted"
msgstr ""
@@ -2871,58 +2871,58 @@ msgstr ""
msgid "NOMINATIM_URL must be configured."
msgstr ""
-#: engine/core/validators.py:19
+#: engine/core/validators.py:21
#, python-brace-format
msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels"
msgstr ""
-#: engine/core/views.py:91
+#: engine/core/views.py:105
msgid ""
"Handles the request for the sitemap index and returns an XML response. It "
"ensures the response includes the appropriate content type header for XML."
msgstr ""
-#: engine/core/views.py:106
+#: engine/core/views.py:120
msgid ""
"Handles the detailed view response for a sitemap. This function processes "
"the request, fetches the appropriate sitemap detail response, and sets the "
"Content-Type header for XML."
msgstr ""
-#: engine/core/views.py:141
+#: engine/core/views.py:156
msgid ""
"Returns a list of supported languages and their corresponding information."
msgstr ""
-#: engine/core/views.py:173
+#: engine/core/views.py:183
msgid "Returns the parameters of the website as a JSON object."
msgstr ""
-#: engine/core/views.py:192
+#: engine/core/views.py:199
msgid ""
"Handles cache operations such as reading and setting cache data with a "
"specified key and timeout."
msgstr ""
-#: engine/core/views.py:219
+#: engine/core/views.py:221
msgid "Handles `contact us` form submissions."
msgstr ""
-#: engine/core/views.py:240
+#: engine/core/views.py:237
msgid ""
"Handles requests for processing and validating URLs from incoming POST "
"requests."
msgstr ""
-#: engine/core/views.py:280
+#: engine/core/views.py:274
msgid "Handles global search queries."
msgstr ""
-#: engine/core/views.py:295
+#: engine/core/views.py:290
msgid "Handles the logic of buying as a business without registration."
msgstr ""
-#: engine/core/views.py:332
+#: engine/core/views.py:338
msgid ""
"Handles the downloading of a digital asset associated with an order.\n"
"This function attempts to serve the digital asset file located in the "
@@ -2930,31 +2930,31 @@ msgid ""
"error is raised to indicate the resource is unavailable."
msgstr ""
-#: engine/core/views.py:343
+#: engine/core/views.py:349
msgid "order_product_uuid is required"
msgstr ""
-#: engine/core/views.py:350
+#: engine/core/views.py:356
msgid "order product does not exist"
msgstr ""
-#: engine/core/views.py:353
+#: engine/core/views.py:359
msgid "you can only download the digital asset once"
msgstr ""
-#: engine/core/views.py:356
+#: engine/core/views.py:363
msgid "the order must be paid before downloading the digital asset"
msgstr ""
-#: engine/core/views.py:362
+#: engine/core/views.py:370
msgid "the order product does not have a product"
msgstr ""
-#: engine/core/views.py:399
+#: engine/core/views.py:414
msgid "favicon not found"
msgstr ""
-#: engine/core/views.py:404
+#: engine/core/views.py:419
msgid ""
"Handles requests for the favicon of a website.\n"
"This function attempts to serve the favicon file located in the static "
@@ -2962,27 +2962,27 @@ msgid ""
"error is raised to indicate the resource is unavailable."
msgstr ""
-#: engine/core/views.py:416
+#: engine/core/views.py:431
msgid ""
"Redirects the request to the admin index page. The function handles incoming "
"HTTP requests and redirects them to the Django admin interface index page. "
"It uses Django's `redirect` function for handling the HTTP redirection."
msgstr ""
-#: engine/core/views.py:429
+#: engine/core/views.py:443
msgid "Returns current version of the eVibes. "
msgstr ""
-#: engine/core/views.py:623 engine/core/views.py:636
+#: engine/core/views.py:672 engine/core/views.py:687
#, python-format
msgid "Revenue & Orders (last %(days)d)"
msgstr ""
-#: engine/core/views.py:793
+#: engine/core/views.py:868
msgid "Returns custom variables for Dashboard. "
msgstr ""
-#: engine/core/viewsets.py:136
+#: engine/core/viewsets.py:139
msgid ""
"Defines a viewset for managing Evibes-related operations. The EvibesViewSet "
"class inherits from ModelViewSet and provides functionality for handling "
@@ -2991,7 +2991,7 @@ msgid ""
"and rendering formats."
msgstr ""
-#: engine/core/viewsets.py:156
+#: engine/core/viewsets.py:160
msgid ""
"Represents a viewset for managing AttributeGroup objects. Handles operations "
"related to AttributeGroup, including filtering, serialization, and retrieval "
@@ -2999,7 +2999,7 @@ msgid ""
"standardized way to process requests and responses for AttributeGroup data."
msgstr ""
-#: engine/core/viewsets.py:175
+#: engine/core/viewsets.py:179
msgid ""
"Handles operations related to Attribute objects within the application. "
"Provides a set of API endpoints to interact with Attribute data. This class "
@@ -3009,7 +3009,7 @@ msgid ""
"depending on the request."
msgstr ""
-#: engine/core/viewsets.py:194
+#: engine/core/viewsets.py:198
msgid ""
"A viewset for managing AttributeValue objects. This viewset provides "
"functionality for listing, retrieving, creating, updating, and deleting "
@@ -3018,7 +3018,7 @@ msgid ""
"capabilities are provided through the DjangoFilterBackend."
msgstr ""
-#: engine/core/viewsets.py:213
+#: engine/core/viewsets.py:217
msgid ""
"Manages views for Category-related operations. The CategoryViewSet class is "
"responsible for handling operations related to the Category model in the "
@@ -3027,7 +3027,7 @@ msgid ""
"can access specific data."
msgstr ""
-#: engine/core/viewsets.py:326
+#: engine/core/viewsets.py:346
msgid ""
"Represents a viewset for managing Brand instances. This class provides "
"functionality for querying, filtering, and serializing Brand objects. It "
@@ -3035,7 +3035,7 @@ msgid ""
"endpoints for Brand objects."
msgstr ""
-#: engine/core/viewsets.py:438
+#: engine/core/viewsets.py:458
msgid ""
"Manages operations related to the `Product` model in the system. This class "
"provides a viewset for managing products, including their filtering, "
@@ -3046,7 +3046,7 @@ msgid ""
"product."
msgstr ""
-#: engine/core/viewsets.py:574
+#: engine/core/viewsets.py:605
msgid ""
"Represents a viewset for managing Vendor objects. This viewset allows "
"fetching, filtering, and serializing Vendor data. It defines the queryset, "
@@ -3055,7 +3055,7 @@ msgid ""
"Vendor-related resources through the Django REST framework."
msgstr ""
-#: engine/core/viewsets.py:594
+#: engine/core/viewsets.py:625
msgid ""
"Representation of a view set handling Feedback objects. This class manages "
"operations related to Feedback objects, including listing, filtering, and "
@@ -3065,7 +3065,7 @@ msgid ""
"use of Django's filtering system for querying data."
msgstr ""
-#: engine/core/viewsets.py:621
+#: engine/core/viewsets.py:652
msgid ""
"ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes "
@@ -3076,7 +3076,7 @@ msgid ""
"enforces permissions accordingly while interacting with order data."
msgstr ""
-#: engine/core/viewsets.py:825
+#: engine/core/viewsets.py:914
msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It "
@@ -3085,25 +3085,25 @@ msgid ""
"feedback on OrderProduct instances"
msgstr ""
-#: engine/core/viewsets.py:879
+#: engine/core/viewsets.py:974
msgid "Manages operations related to Product images in the application. "
msgstr ""
-#: engine/core/viewsets.py:892
+#: engine/core/viewsets.py:988
msgid ""
"Manages the retrieval and handling of PromoCode instances through various "
"API actions."
msgstr ""
-#: engine/core/viewsets.py:914
+#: engine/core/viewsets.py:1019
msgid "Represents a view set for managing promotions. "
msgstr ""
-#: engine/core/viewsets.py:927
+#: engine/core/viewsets.py:1032
msgid "Handles operations related to Stock data in the system."
msgstr ""
-#: engine/core/viewsets.py:941
+#: engine/core/viewsets.py:1046
msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the "
@@ -3114,7 +3114,7 @@ msgid ""
"are granted."
msgstr ""
-#: engine/core/viewsets.py:1056
+#: engine/core/viewsets.py:1183
msgid ""
"This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom "
@@ -3123,12 +3123,12 @@ msgid ""
"on the request context."
msgstr ""
-#: engine/core/viewsets.py:1123
+#: engine/core/viewsets.py:1254
#, python-brace-format
msgid "Geocoding error: {e}"
msgstr ""
-#: engine/core/viewsets.py:1131
+#: engine/core/viewsets.py:1262
msgid ""
"Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing "
diff --git a/engine/core/locale/ko_KR/LC_MESSAGES/django.po b/engine/core/locale/ko_KR/LC_MESSAGES/django.po
index cb773846..b27f70b4 100644
--- a/engine/core/locale/ko_KR/LC_MESSAGES/django.po
+++ b/engine/core/locale/ko_KR/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 22:12+0300\n"
+"POT-Creation-Date: 2025-12-18 19:09+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -25,111 +25,110 @@ msgstr "고유 ID는 모든 데이터베이스 개체를 확실하게 식별하
msgid "is active"
msgstr "활성 상태"
-#: engine/core/abstract.py:21
+#: engine/core/abstract.py:22
msgid ""
-"if set to false, this object can't be seen by users without needed "
-"permission"
+"if set to false, this object can't be seen by users without needed permission"
msgstr "false로 설정하면 필요한 권한이 없는 사용자는 이 개체를 볼 수 없습니다."
-#: engine/core/abstract.py:23 engine/core/choices.py:18
+#: engine/core/abstract.py:26 engine/core/choices.py:18
msgid "created"
msgstr "생성됨"
-#: engine/core/abstract.py:23
+#: engine/core/abstract.py:26
msgid "when the object first appeared on the database"
msgstr "개체가 데이터베이스에 처음 나타난 시점"
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "modified"
msgstr "수정됨"
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "when the object was last modified"
msgstr "개체가 마지막으로 편집된 시기"
-#: engine/core/admin.py:85
+#: engine/core/admin.py:94
msgid "translations"
msgstr "번역"
-#: engine/core/admin.py:89
+#: engine/core/admin.py:102
msgid "general"
msgstr "일반"
-#: engine/core/admin.py:91
+#: engine/core/admin.py:106
msgid "relations"
msgstr "관계"
-#: engine/core/admin.py:93
+#: engine/core/admin.py:111
msgid "additional info"
msgstr "추가 정보"
-#: engine/core/admin.py:111
+#: engine/core/admin.py:133
msgid "metadata"
msgstr "메타데이터"
-#: engine/core/admin.py:118
+#: engine/core/admin.py:141
msgid "timestamps"
msgstr "타임스탬프"
-#: engine/core/admin.py:133
+#: engine/core/admin.py:157
#, python-format
msgid "activate selected %(verbose_name_plural)s"
msgstr "선택한 %(verbose_name_plural)s 활성화"
-#: engine/core/admin.py:138
+#: engine/core/admin.py:165
msgid "selected items have been activated."
msgstr "선택한 아이템이 활성화되었습니다!"
-#: engine/core/admin.py:144
+#: engine/core/admin.py:173
#, python-format
msgid "deactivate selected %(verbose_name_plural)s"
msgstr "선택한 %(verbose_name_plural)s 비활성화하기"
-#: engine/core/admin.py:149
+#: engine/core/admin.py:183
msgid "selected items have been deactivated."
msgstr "선택한 아이템이 비활성화되었습니다!"
-#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586
-#: engine/core/graphene/object_types.py:593 engine/core/models.py:801
-#: engine/core/models.py:809
+#: engine/core/admin.py:195 engine/core/graphene/object_types.py:650
+#: engine/core/graphene/object_types.py:657 engine/core/models.py:824
+#: engine/core/models.py:832
msgid "attribute value"
msgstr "속성 값"
-#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75
-#: engine/core/models.py:810
+#: engine/core/admin.py:196 engine/core/graphene/object_types.py:75
+#: engine/core/models.py:833
msgid "attribute values"
msgstr "속성 값"
-#: engine/core/admin.py:172
+#: engine/core/admin.py:207
msgid "image"
msgstr "이미지"
-#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474
+#: engine/core/admin.py:208 engine/core/graphene/object_types.py:527
msgid "images"
msgstr "이미지"
-#: engine/core/admin.py:184 engine/core/models.py:566
+#: engine/core/admin.py:219 engine/core/models.py:587
msgid "stock"
msgstr "재고"
-#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640
+#: engine/core/admin.py:220 engine/core/graphene/object_types.py:710
msgid "stocks"
msgstr "주식"
-#: engine/core/admin.py:196 engine/core/models.py:1818
+#: engine/core/admin.py:231 engine/core/models.py:1930
msgid "order product"
msgstr "제품 주문"
-#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389
-#: engine/core/models.py:1819
+#: engine/core/admin.py:232 engine/core/graphene/object_types.py:438
+#: engine/core/models.py:1931
msgid "order products"
msgstr "제품 주문"
-#: engine/core/admin.py:210 engine/core/admin.py:211
+#: engine/core/admin.py:250 engine/core/admin.py:251
msgid "children"
msgstr "어린이"
-#: engine/core/admin.py:977
+#: engine/core/admin.py:1059
msgid "Config"
msgstr "구성"
@@ -153,8 +152,7 @@ msgstr "배달됨"
msgid "canceled"
msgstr "취소됨"
-#: engine/core/choices.py:8 engine/core/choices.py:16
-#: engine/core/choices.py:24
+#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24
msgid "failed"
msgstr "실패"
@@ -182,24 +180,24 @@ msgstr "순간"
msgid "successful"
msgstr "성공"
-#: engine/core/docs/drf/views.py:31
+#: engine/core/docs/drf/views.py:30
msgid "OpenAPI schema in selected format with selected language"
msgstr "선택한 언어와 선택한 형식의 OpenAPI 스키마"
-#: engine/core/docs/drf/views.py:33
+#: engine/core/docs/drf/views.py:32
msgid ""
"OpenApi3 schema for this API. Format can be selected via content "
"negotiation. Language can be selected with Accept-Language and query "
"parameter both."
msgstr ""
-"OpenApi3 스키마를 사용합니다. 형식은 콘텐츠 협상을 통해 선택할 수 있습니다. 언어는 Accept-Language와 쿼리 "
-"매개변수를 모두 사용하여 선택할 수 있습니다."
+"OpenApi3 스키마를 사용합니다. 형식은 콘텐츠 협상을 통해 선택할 수 있습니다. "
+"언어는 Accept-Language와 쿼리 매개변수를 모두 사용하여 선택할 수 있습니다."
-#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37
+#: engine/core/docs/drf/views.py:43 engine/core/graphene/mutations.py:37
msgid "cache I/O"
msgstr "캐시 I/O"
-#: engine/core/docs/drf/views.py:46
+#: engine/core/docs/drf/views.py:45
msgid ""
"apply only a key to read permitted data from cache.\n"
"apply key, data and timeout with authentication to write data to cache."
@@ -207,987 +205,1011 @@ msgstr ""
"캐시에서 허용된 데이터를 읽으려면 키만 적용합니다.\n"
"캐시에 데이터를 쓰기 위해 키, 데이터 및 타임아웃을 인증과 함께 적용합니다."
-#: engine/core/docs/drf/views.py:62
+#: engine/core/docs/drf/views.py:63
msgid "get a list of supported languages"
msgstr "지원되는 언어 목록 보기"
-#: engine/core/docs/drf/views.py:74
+#: engine/core/docs/drf/views.py:75
msgid "get application's exposable parameters"
msgstr "애플리케이션의 노출 가능한 매개변수 가져오기"
-#: engine/core/docs/drf/views.py:84
+#: engine/core/docs/drf/views.py:89
msgid "send a message to the support team"
msgstr "지원팀에 메시지 보내기"
-#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57
+#: engine/core/docs/drf/views.py:103 engine/core/graphene/mutations.py:59
msgid "request a CORSed URL"
msgstr "CORSed URL을 요청합니다. https만 허용됩니다."
-#: engine/core/docs/drf/views.py:112
+#: engine/core/docs/drf/views.py:119
msgid "Search between products, categories and brands"
msgstr "제품, 카테고리 및 브랜드 간 검색"
-#: engine/core/docs/drf/views.py:130
+#: engine/core/docs/drf/views.py:141
msgid "global search endpoint to query across project's tables"
msgstr "프로젝트의 테이블 전체에서 쿼리할 수 있는 글로벌 검색 엔드포인트"
-#: engine/core/docs/drf/views.py:139
+#: engine/core/docs/drf/views.py:150
msgid "purchase an order as a business"
msgstr "비즈니스로 주문 구매"
-#: engine/core/docs/drf/views.py:146
+#: engine/core/docs/drf/views.py:158
msgid ""
"purchase an order as a business, using the provided `products` with "
"`product_uuid` and `attributes`."
-msgstr "제공된 '제품'과 '제품_uuid' 및 '속성'을 사용하여 비즈니스로서 주문을 구매합니다."
+msgstr ""
+"제공된 '제품'과 '제품_uuid' 및 '속성'을 사용하여 비즈니스로서 주문을 구매합니"
+"다."
-#: engine/core/docs/drf/views.py:164
+#: engine/core/docs/drf/views.py:177
msgid "download a digital asset from purchased digital order"
msgstr "구매한 디지털 주문에서 디지털 자산 다운로드"
-#: engine/core/docs/drf/viewsets.py:61
+#: engine/core/docs/drf/viewsets.py:65
msgid "list all attribute groups (simple view)"
msgstr "모든 속성 그룹 나열(단순 보기)"
-#: engine/core/docs/drf/viewsets.py:68
+#: engine/core/docs/drf/viewsets.py:75
msgid "retrieve a single attribute group (detailed view)"
msgstr "단일 속성 그룹 검색(상세 보기)"
-#: engine/core/docs/drf/viewsets.py:75
+#: engine/core/docs/drf/viewsets.py:82
msgid "create an attribute group"
msgstr "속성 그룹 만들기"
-#: engine/core/docs/drf/viewsets.py:82
+#: engine/core/docs/drf/viewsets.py:92
msgid "delete an attribute group"
msgstr "속성 그룹 삭제"
-#: engine/core/docs/drf/viewsets.py:89
+#: engine/core/docs/drf/viewsets.py:99
msgid "rewrite an existing attribute group saving non-editables"
msgstr "편집할 수 없는 항목을 저장하는 기존 속성 그룹 다시 작성하기"
-#: engine/core/docs/drf/viewsets.py:96
-msgid ""
-"rewrite some fields of an existing attribute group saving non-editables"
-msgstr "기존 속성 그룹의 일부 필드를 다시 작성하여 편집할 수 없는 항목을 저장합니다."
+#: engine/core/docs/drf/viewsets.py:107
+msgid "rewrite some fields of an existing attribute group saving non-editables"
+msgstr ""
+"기존 속성 그룹의 일부 필드를 다시 작성하여 편집할 수 없는 항목을 저장합니다."
-#: engine/core/docs/drf/viewsets.py:106
+#: engine/core/docs/drf/viewsets.py:118
msgid "list all attributes (simple view)"
msgstr "모든 속성 나열(단순 보기)"
-#: engine/core/docs/drf/viewsets.py:113
+#: engine/core/docs/drf/viewsets.py:128
msgid "retrieve a single attribute (detailed view)"
msgstr "단일 속성 검색(상세 보기)"
-#: engine/core/docs/drf/viewsets.py:120
+#: engine/core/docs/drf/viewsets.py:135
msgid "create an attribute"
msgstr "속성 만들기"
-#: engine/core/docs/drf/viewsets.py:127
+#: engine/core/docs/drf/viewsets.py:142
msgid "delete an attribute"
msgstr "속성 삭제"
-#: engine/core/docs/drf/viewsets.py:134
+#: engine/core/docs/drf/viewsets.py:149
msgid "rewrite an existing attribute saving non-editables"
msgstr "편집할 수 없는 속성을 저장하는 기존 속성 다시 작성하기"
-#: engine/core/docs/drf/viewsets.py:141
+#: engine/core/docs/drf/viewsets.py:156
msgid "rewrite some fields of an existing attribute saving non-editables"
msgstr "편집할 수 없는 기존 속성의 일부 필드를 다시 작성합니다."
-#: engine/core/docs/drf/viewsets.py:151
+#: engine/core/docs/drf/viewsets.py:166
msgid "list all attribute values (simple view)"
msgstr "모든 속성 값 나열(단순 보기)"
-#: engine/core/docs/drf/viewsets.py:158
+#: engine/core/docs/drf/viewsets.py:176
msgid "retrieve a single attribute value (detailed view)"
msgstr "단일 속성 값 검색(상세 보기)"
-#: engine/core/docs/drf/viewsets.py:165
+#: engine/core/docs/drf/viewsets.py:183
msgid "create an attribute value"
msgstr "속성 값 생성"
-#: engine/core/docs/drf/viewsets.py:172
+#: engine/core/docs/drf/viewsets.py:193
msgid "delete an attribute value"
msgstr "속성 값 삭제"
-#: engine/core/docs/drf/viewsets.py:179
+#: engine/core/docs/drf/viewsets.py:200
msgid "rewrite an existing attribute value saving non-editables"
msgstr "편집할 수 없는 기존 속성 값을 저장하여 다시 작성하기"
-#: engine/core/docs/drf/viewsets.py:186
-msgid ""
-"rewrite some fields of an existing attribute value saving non-editables"
-msgstr "기존 속성 값의 일부 필드를 다시 작성하여 편집할 수 없는 항목을 저장합니다."
+#: engine/core/docs/drf/viewsets.py:208
+msgid "rewrite some fields of an existing attribute value saving non-editables"
+msgstr ""
+"기존 속성 값의 일부 필드를 다시 작성하여 편집할 수 없는 항목을 저장합니다."
-#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197
+#: engine/core/docs/drf/viewsets.py:219 engine/core/docs/drf/viewsets.py:220
msgid "list all categories (simple view)"
msgstr "모든 카테고리 나열(간편 보기)"
-#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205
+#: engine/core/docs/drf/viewsets.py:230 engine/core/docs/drf/viewsets.py:231
msgid "retrieve a single category (detailed view)"
msgstr "단일 카테고리 검색(상세 보기)"
-#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258
+#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:286
msgid "Category UUID or slug"
msgstr "카테고리 UUID 또는 슬러그"
-#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221
+#: engine/core/docs/drf/viewsets.py:246 engine/core/docs/drf/viewsets.py:247
msgid "create a category"
msgstr "카테고리 만들기"
-#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229
+#: engine/core/docs/drf/viewsets.py:254 engine/core/docs/drf/viewsets.py:255
msgid "delete a category"
msgstr "카테고리 삭제"
-#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237
+#: engine/core/docs/drf/viewsets.py:262 engine/core/docs/drf/viewsets.py:263
msgid "rewrite an existing category saving non-editables"
msgstr "편집할 수 없는 항목을 저장하는 기존 카테고리 다시 작성하기"
-#: engine/core/docs/drf/viewsets.py:244 engine/core/docs/drf/viewsets.py:245
+#: engine/core/docs/drf/viewsets.py:270 engine/core/docs/drf/viewsets.py:272
msgid "rewrite some fields of an existing category saving non-editables"
msgstr "편집할 수 없는 항목을 저장하는 기존 카테고리의 일부 필드 다시 작성하기"
-#: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704
-#: engine/core/docs/drf/viewsets.py:988
+#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:1046
#: engine/core/graphene/object_types.py:117
-#: engine/core/graphene/object_types.py:207
-#: engine/core/graphene/object_types.py:482
+#: engine/core/graphene/object_types.py:236
+#: engine/core/graphene/object_types.py:537
msgid "SEO Meta snapshot"
msgstr "SEO 메타 스냅샷"
-#: engine/core/docs/drf/viewsets.py:253
+#: engine/core/docs/drf/viewsets.py:281
msgid "returns a snapshot of the category's SEO meta data"
msgstr "카테고리의 SEO 메타 데이터 스냅샷을 반환합니다."
-#: engine/core/docs/drf/viewsets.py:274
+#: engine/core/docs/drf/viewsets.py:302
msgid "list all orders (simple view)"
msgstr "모든 카테고리 나열(간편 보기)"
-#: engine/core/docs/drf/viewsets.py:275
+#: engine/core/docs/drf/viewsets.py:303
msgid "for non-staff users, only their own orders are returned."
msgstr "직원이 아닌 사용자의 경우 자신의 주문만 반환됩니다."
-#: engine/core/docs/drf/viewsets.py:281
+#: engine/core/docs/drf/viewsets.py:309
msgid ""
-"Case-insensitive substring search across human_readable_id, "
-"order_products.product.name, and order_products.product.partnumber"
+"Case-insensitive substring search across human_readable_id, order_products."
+"product.name, and order_products.product.partnumber"
msgstr ""
-"대소문자를 구분하지 않는 하위 문자열 검색(human_readable_id, order_products.product.name 및 "
-"order_products.product.partnerumber)"
+"대소문자를 구분하지 않는 하위 문자열 검색(human_readable_id, order_products."
+"product.name 및 order_products.product.partnerumber)"
-#: engine/core/docs/drf/viewsets.py:288
+#: engine/core/docs/drf/viewsets.py:316
msgid "Filter orders with buy_time >= this ISO 8601 datetime"
msgstr "buy_time >= 이 ISO 8601 날짜 시간으로 주문 필터링"
-#: engine/core/docs/drf/viewsets.py:293
+#: engine/core/docs/drf/viewsets.py:321
msgid "Filter orders with buy_time <= this ISO 8601 datetime"
msgstr "buy_time <= 이 ISO 8601 날짜 시간으로 주문 필터링"
-#: engine/core/docs/drf/viewsets.py:298
+#: engine/core/docs/drf/viewsets.py:326
msgid "Filter by exact order UUID"
msgstr "정확한 주문 UUID로 필터링"
-#: engine/core/docs/drf/viewsets.py:303
+#: engine/core/docs/drf/viewsets.py:331
msgid "Filter by exact human-readable order ID"
msgstr "사람이 읽을 수 있는 정확한 주문 ID로 필터링"
-#: engine/core/docs/drf/viewsets.py:308
+#: engine/core/docs/drf/viewsets.py:336
msgid "Filter by user's email (case-insensitive exact match)"
msgstr "사용자 이메일로 필터링(대소문자를 구분하지 않는 일치 검색)"
-#: engine/core/docs/drf/viewsets.py:313
+#: engine/core/docs/drf/viewsets.py:341
msgid "Filter by user's UUID"
msgstr "사용자의 UUID로 필터링"
-#: engine/core/docs/drf/viewsets.py:318
+#: engine/core/docs/drf/viewsets.py:347
msgid "Filter by order status (case-insensitive substring match)"
msgstr "주문 상태별 필터링(대소문자를 구분하지 않는 하위 문자열 일치)"
-#: engine/core/docs/drf/viewsets.py:324
+#: engine/core/docs/drf/viewsets.py:354
msgid ""
-"Order by one of: uuid, human_readable_id, user_email, user, status, created,"
-" modified, buy_time, random. Prefix with '-' for descending (e.g. "
-"'-buy_time')."
+"Order by one of: uuid, human_readable_id, user_email, user, status, created, "
+"modified, buy_time, random. Prefix with '-' for descending (e.g. '-"
+"buy_time')."
msgstr ""
-"uuid, human_readable_id, user_email, 사용자, 상태, 생성됨, 수정됨, 구매 시간, 무작위 중 하나로 "
-"정렬합니다. 접두사 앞에 '-'를 붙여 내림차순으로 정렬합니다(예: '-buy_time')."
+"uuid, human_readable_id, user_email, 사용자, 상태, 생성됨, 수정됨, 구매 시"
+"간, 무작위 중 하나로 정렬합니다. 접두사 앞에 '-'를 붙여 내림차순으로 정렬합니"
+"다(예: '-buy_time')."
-#: engine/core/docs/drf/viewsets.py:336
+#: engine/core/docs/drf/viewsets.py:366
msgid "retrieve a single order (detailed view)"
msgstr "단일 카테고리 검색(상세 보기)"
-#: engine/core/docs/drf/viewsets.py:341
+#: engine/core/docs/drf/viewsets.py:371
msgid "Order UUID or human-readable id"
msgstr "주문 UUID 또는 사람이 읽을 수 있는 ID"
-#: engine/core/docs/drf/viewsets.py:351
+#: engine/core/docs/drf/viewsets.py:381
msgid "create an order"
msgstr "속성 만들기"
-#: engine/core/docs/drf/viewsets.py:352
+#: engine/core/docs/drf/viewsets.py:382
msgid "doesn't work for non-staff users."
msgstr "직원이 아닌 사용자에게는 작동하지 않습니다."
-#: engine/core/docs/drf/viewsets.py:359
+#: engine/core/docs/drf/viewsets.py:389
msgid "delete an order"
msgstr "속성 삭제"
-#: engine/core/docs/drf/viewsets.py:366
+#: engine/core/docs/drf/viewsets.py:396
msgid "rewrite an existing order saving non-editables"
msgstr "편집할 수 없는 항목을 저장하는 기존 카테고리 다시 작성하기"
-#: engine/core/docs/drf/viewsets.py:373
+#: engine/core/docs/drf/viewsets.py:403
msgid "rewrite some fields of an existing order saving non-editables"
msgstr "편집할 수 없는 항목을 저장하는 기존 카테고리의 일부 필드 다시 작성하기"
-#: engine/core/docs/drf/viewsets.py:380
+#: engine/core/docs/drf/viewsets.py:410
msgid "purchase an order"
msgstr "주문 시점의 구매 가격"
-#: engine/core/docs/drf/viewsets.py:382
+#: engine/core/docs/drf/viewsets.py:412
msgid ""
"finalizes the order purchase. if `force_balance` is used, the purchase is "
"completed using the user's balance; if `force_payment` is used, a "
"transaction is initiated."
msgstr ""
-"주문 구매를 완료합니다. 강제 잔액`을 사용하면 사용자의 잔액을 사용하여 구매가 완료되고, `강제 결제`를 사용하면 거래가 시작됩니다."
+"주문 구매를 완료합니다. 강제 잔액`을 사용하면 사용자의 잔액을 사용하여 구매"
+"가 완료되고, `강제 결제`를 사용하면 거래가 시작됩니다."
-#: engine/core/docs/drf/viewsets.py:397
+#: engine/core/docs/drf/viewsets.py:427
msgid "retrieve current pending order of a user"
msgstr "사용자의 현재 대기 주문 검색하기"
-#: engine/core/docs/drf/viewsets.py:398
+#: engine/core/docs/drf/viewsets.py:428
msgid "retrieves a current pending order of an authenticated user"
msgstr "인증된 사용자의 현재 대기 주문을 검색합니다."
-#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334
+#: engine/core/docs/drf/viewsets.py:438 engine/core/graphene/mutations.py:354
msgid "purchase an order without account creation"
msgstr "계정 생성 없이 주문 구매"
-#: engine/core/docs/drf/viewsets.py:409
+#: engine/core/docs/drf/viewsets.py:439
msgid "finalizes the order purchase for a non-registered user."
msgstr "미등록 사용자의 주문 구매를 완료합니다."
-#: engine/core/docs/drf/viewsets.py:420
+#: engine/core/docs/drf/viewsets.py:450
msgid "add product to order"
msgstr "주문에 제품 추가"
-#: engine/core/docs/drf/viewsets.py:421
+#: engine/core/docs/drf/viewsets.py:452
msgid ""
"adds a product to an order using the provided `product_uuid` and "
"`attributes`."
-msgstr "제공된 `product_uuid` 및 `attributes`를 사용하여 주문에 제품을 추가합니다."
+msgstr ""
+"제공된 `product_uuid` 및 `attributes`를 사용하여 주문에 제품을 추가합니다."
-#: engine/core/docs/drf/viewsets.py:429
+#: engine/core/docs/drf/viewsets.py:461
msgid "add a list of products to order, quantities will not count"
msgstr "주문할 제품 목록을 추가하면 수량은 계산되지 않습니다."
-#: engine/core/docs/drf/viewsets.py:430
+#: engine/core/docs/drf/viewsets.py:463
msgid ""
"adds a list of products to an order using the provided `product_uuid` and "
"`attributes`."
-msgstr "제공된 `product_uuid` 및 `attributes`를 사용하여 주문에 제품 목록을 추가합니다."
+msgstr ""
+"제공된 `product_uuid` 및 `attributes`를 사용하여 주문에 제품 목록을 추가합니"
+"다."
-#: engine/core/docs/drf/viewsets.py:438
+#: engine/core/docs/drf/viewsets.py:472
msgid "remove product from order"
msgstr "주문에서 제품 제거"
-#: engine/core/docs/drf/viewsets.py:439
+#: engine/core/docs/drf/viewsets.py:474
msgid ""
"removes a product from an order using the provided `product_uuid` and "
"`attributes`."
-msgstr "제공된 `product_uuid` 및 `attributes`를 사용하여 주문에서 제품을 제거합니다."
+msgstr ""
+"제공된 `product_uuid` 및 `attributes`를 사용하여 주문에서 제품을 제거합니다."
-#: engine/core/docs/drf/viewsets.py:447
+#: engine/core/docs/drf/viewsets.py:483
msgid "remove product from order, quantities will not count"
msgstr "주문에서 제품을 제거하면 수량이 계산되지 않습니다."
-#: engine/core/docs/drf/viewsets.py:448
+#: engine/core/docs/drf/viewsets.py:485
msgid ""
"removes a list of products from an order using the provided `product_uuid` "
"and `attributes`"
-msgstr "제공된 `product_uuid` 및 `attributes`를 사용하여 주문에서 제품 목록을 제거합니다."
+msgstr ""
+"제공된 `product_uuid` 및 `attributes`를 사용하여 주문에서 제품 목록을 제거합"
+"니다."
-#: engine/core/docs/drf/viewsets.py:459
+#: engine/core/docs/drf/viewsets.py:497
msgid "list all wishlists (simple view)"
msgstr "모든 속성 나열(단순 보기)"
-#: engine/core/docs/drf/viewsets.py:460
+#: engine/core/docs/drf/viewsets.py:498
msgid "for non-staff users, only their own wishlists are returned."
msgstr "직원이 아닌 사용자의 경우 자신의 위시리스트만 반환됩니다."
-#: engine/core/docs/drf/viewsets.py:467
+#: engine/core/docs/drf/viewsets.py:508
msgid "retrieve a single wishlist (detailed view)"
msgstr "단일 속성 검색(상세 보기)"
-#: engine/core/docs/drf/viewsets.py:474
+#: engine/core/docs/drf/viewsets.py:515
msgid "create an wishlist"
msgstr "속성 만들기"
-#: engine/core/docs/drf/viewsets.py:475
+#: engine/core/docs/drf/viewsets.py:516
msgid "Doesn't work for non-staff users."
msgstr "직원이 아닌 사용자에게는 작동하지 않습니다."
-#: engine/core/docs/drf/viewsets.py:482
+#: engine/core/docs/drf/viewsets.py:523
msgid "delete an wishlist"
msgstr "속성 삭제"
-#: engine/core/docs/drf/viewsets.py:489
+#: engine/core/docs/drf/viewsets.py:530
msgid "rewrite an existing wishlist saving non-editables"
msgstr "편집할 수 없는 속성을 저장하는 기존 속성 다시 작성하기"
-#: engine/core/docs/drf/viewsets.py:496
+#: engine/core/docs/drf/viewsets.py:537
msgid "rewrite some fields of an existing wishlist saving non-editables"
msgstr "편집할 수 없는 기존 속성의 일부 필드를 다시 작성합니다."
-#: engine/core/docs/drf/viewsets.py:503
+#: engine/core/docs/drf/viewsets.py:544
msgid "retrieve current pending wishlist of a user"
msgstr "사용자의 현재 보류 중인 위시리스트 검색"
-#: engine/core/docs/drf/viewsets.py:504
+#: engine/core/docs/drf/viewsets.py:545
msgid "retrieves a current pending wishlist of an authenticated user"
msgstr "인증된 사용자의 현재 보류 중인 위시리스트를 검색합니다."
-#: engine/core/docs/drf/viewsets.py:514
+#: engine/core/docs/drf/viewsets.py:555
msgid "add product to wishlist"
msgstr "주문에 제품 추가"
-#: engine/core/docs/drf/viewsets.py:515
+#: engine/core/docs/drf/viewsets.py:557
msgid "adds a product to an wishlist using the provided `product_uuid`"
msgstr "제공된 `product_uuid`를 사용하여 위시리스트에 제품을 추가합니다."
-#: engine/core/docs/drf/viewsets.py:523
+#: engine/core/docs/drf/viewsets.py:566
msgid "remove product from wishlist"
msgstr "위시리스트에서 제품 제거"
-#: engine/core/docs/drf/viewsets.py:524
+#: engine/core/docs/drf/viewsets.py:568
msgid "removes a product from an wishlist using the provided `product_uuid`"
msgstr "제공된 `product_uuid`를 사용하여 위시리스트에서 제품을 제거합니다."
-#: engine/core/docs/drf/viewsets.py:532
+#: engine/core/docs/drf/viewsets.py:577
msgid "add many products to wishlist"
msgstr "위시리스트에 많은 제품 추가"
-#: engine/core/docs/drf/viewsets.py:533
+#: engine/core/docs/drf/viewsets.py:579
msgid "adds many products to an wishlist using the provided `product_uuids`"
msgstr "제공된 `product_uuids`를 사용하여 위시리스트에 많은 제품을 추가합니다."
-#: engine/core/docs/drf/viewsets.py:541
+#: engine/core/docs/drf/viewsets.py:588
msgid "remove many products from wishlist"
msgstr "주문에서 제품 제거"
-#: engine/core/docs/drf/viewsets.py:542
+#: engine/core/docs/drf/viewsets.py:590
msgid ""
"removes many products from an wishlist using the provided `product_uuids`"
-msgstr "제공된 `product_uuids`를 사용하여 위시리스트에서 많은 제품을 제거합니다."
+msgstr ""
+"제공된 `product_uuids`를 사용하여 위시리스트에서 많은 제품을 제거합니다."
-#: engine/core/docs/drf/viewsets.py:549
+#: engine/core/docs/drf/viewsets.py:598
msgid ""
"Filter by one or more attribute name/value pairs. \n"
"• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n"
-"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n"
-"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n"
+"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, "
+"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, "
+"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n"
+"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), "
+"`true`/`false` for booleans, integers, floats; otherwise treated as "
+"string. \n"
"• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n"
"Examples: \n"
-"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n"
+"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\","
+"\"bluetooth\"]`, \n"
"`b64-description=icontains-aGVhdC1jb2xk`"
msgstr ""
"하나 이상의 속성 이름/값 쌍을 기준으로 필터링합니다. \n"
"- 구문**: `attr_name=메소드-값[;attr2=메소드2-값2]...`\n"
-"- **방법**(생략 시 기본값은 `icontains`): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`\n"
-"- **값 입력**: JSON이 먼저 시도되며(목록/딕을 전달할 수 있도록), 부울, 정수, 부동 소수점의 경우 `true`/`false`, 그렇지 않으면 문자열로 처리됩니다. \n"
-"- Base64**: 접두사 앞에 `b64-`를 추가하여 URL에 안전한 base64로 원시 값을 인코딩합니다. \n"
+"- **방법**(생략 시 기본값은 `icontains`): `iexact`, `exact`, `icontains`, "
+"`contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, "
+"`regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`\n"
+"- **값 입력**: JSON이 먼저 시도되며(목록/딕을 전달할 수 있도록), 부울, 정수, "
+"부동 소수점의 경우 `true`/`false`, 그렇지 않으면 문자열로 처리됩니다. \n"
+"- Base64**: 접두사 앞에 `b64-`를 추가하여 URL에 안전한 base64로 원시 값을 인"
+"코딩합니다. \n"
"예시: \n"
"색상=정확-빨간색`, `크기=gt-10`, `기능=in-[\"wifi\",\"블루투스\"]`,\n"
"b64-description=icontains-aGVhdC1jb2xk`"
-#: engine/core/docs/drf/viewsets.py:568 engine/core/docs/drf/viewsets.py:569
+#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
msgid "list all products (simple view)"
msgstr "모든 제품 나열(간편 보기)"
-#: engine/core/docs/drf/viewsets.py:574
+#: engine/core/docs/drf/viewsets.py:623
msgid "(exact) Product UUID"
msgstr "(정확한) 제품 UUID"
-#: engine/core/docs/drf/viewsets.py:581
+#: engine/core/docs/drf/viewsets.py:630
msgid ""
-"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n"
+"Comma-separated list of fields to sort by. Prefix with `-` for "
+"descending. \n"
"**Allowed:** uuid, rating, name, slug, created, modified, price, random"
msgstr ""
-"정렬할 필드의 쉼표로 구분된 목록입니다. 접두사 앞에 `-`를 붙여 내림차순으로 정렬합니다. \n"
+"정렬할 필드의 쉼표로 구분된 목록입니다. 접두사 앞에 `-`를 붙여 내림차순으로 "
+"정렬합니다. \n"
"**허용됨:** uuid, 등급, 이름, 슬러그, 생성, 수정, 가격, 랜덤"
-#: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599
+#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
msgid "retrieve a single product (detailed view)"
msgstr "단일 제품 검색(상세 보기)"
-#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634
-#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672
-#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710
+#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683
+#: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725
+#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763
msgid "Product UUID or slug"
msgstr "제품 UUID 또는 슬러그"
-#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
+#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
#: engine/core/graphene/dashboard_mutations/product.py:80
#: engine/core/graphene/dashboard_mutations/product.py:118
#: engine/core/graphene/dashboard_mutations/product.py:166
msgid "create a product"
msgstr "제품 만들기"
-#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629
+#: engine/core/docs/drf/viewsets.py:677 engine/core/docs/drf/viewsets.py:678
msgid "rewrite an existing product, preserving non-editable fields"
msgstr "편집할 수 없는 필드를 유지하면서 기존 제품을 다시 작성합니다."
-#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
+#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:700
msgid ""
"update some fields of an existing product, preserving non-editable fields"
msgstr "기존 제품의 일부 필드를 업데이트하여 편집할 수 없는 필드는 유지합니다."
-#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
+#: engine/core/docs/drf/viewsets.py:719 engine/core/docs/drf/viewsets.py:720
msgid "delete a product"
msgstr "제품 삭제"
-#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686
+#: engine/core/docs/drf/viewsets.py:738 engine/core/docs/drf/viewsets.py:739
msgid "lists all permitted feedbacks for a product"
msgstr "제품에 대해 허용된 모든 피드백을 나열합니다."
-#: engine/core/docs/drf/viewsets.py:705
+#: engine/core/docs/drf/viewsets.py:758
msgid "returns a snapshot of the product's SEO meta data"
msgstr "제품의 SEO 메타 데이터 스냅샷을 반환합니다."
-#: engine/core/docs/drf/viewsets.py:726
+#: engine/core/docs/drf/viewsets.py:779
msgid "list all addresses"
msgstr "모든 주소 나열"
-#: engine/core/docs/drf/viewsets.py:736
+#: engine/core/docs/drf/viewsets.py:789
msgid "retrieve a single address"
msgstr "단일 주소 검색"
-#: engine/core/docs/drf/viewsets.py:746
+#: engine/core/docs/drf/viewsets.py:799
msgid "create a new address"
msgstr "새 주소 만들기"
-#: engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:810
msgid "delete an address"
msgstr "주소 삭제"
-#: engine/core/docs/drf/viewsets.py:767
+#: engine/core/docs/drf/viewsets.py:820
msgid "update an entire address"
msgstr "전체 주소 업데이트"
-#: engine/core/docs/drf/viewsets.py:778
+#: engine/core/docs/drf/viewsets.py:831
msgid "partially update an address"
msgstr "주소 부분 업데이트"
-#: engine/core/docs/drf/viewsets.py:789
+#: engine/core/docs/drf/viewsets.py:842
msgid "autocomplete address suggestions"
msgstr "주소 자동 완성 입력"
-#: engine/core/docs/drf/viewsets.py:794
+#: engine/core/docs/drf/viewsets.py:848
msgid "raw data query string, please append with data from geo-IP endpoint"
msgstr "원시 데이터 쿼리 문자열, 지오-IP 엔드포인트의 데이터를 추가하세요."
-#: engine/core/docs/drf/viewsets.py:800
+#: engine/core/docs/drf/viewsets.py:855
msgid "limit the results amount, 1 < limit < 10, default: 5"
msgstr "결과 금액을 제한합니다(1 < 제한 < 10, 기본값: 5)."
-#: engine/core/docs/drf/viewsets.py:816
+#: engine/core/docs/drf/viewsets.py:871
msgid "list all feedbacks (simple view)"
msgstr "모든 피드백 나열(간편 보기)"
-#: engine/core/docs/drf/viewsets.py:823
+#: engine/core/docs/drf/viewsets.py:881
msgid "retrieve a single feedback (detailed view)"
msgstr "단일 피드백 검색(상세 보기)"
-#: engine/core/docs/drf/viewsets.py:830
+#: engine/core/docs/drf/viewsets.py:888
msgid "create a feedback"
msgstr "피드백 만들기"
-#: engine/core/docs/drf/viewsets.py:837
+#: engine/core/docs/drf/viewsets.py:895
msgid "delete a feedback"
msgstr "피드백 삭제"
-#: engine/core/docs/drf/viewsets.py:844
+#: engine/core/docs/drf/viewsets.py:902
msgid "rewrite an existing feedback saving non-editables"
msgstr "편집할 수 없는 기존 피드백을 다시 작성합니다."
-#: engine/core/docs/drf/viewsets.py:851
+#: engine/core/docs/drf/viewsets.py:909
msgid "rewrite some fields of an existing feedback saving non-editables"
-msgstr "기존 피드백의 일부 필드를 다시 작성하여 편집할 수 없는 항목을 저장합니다."
+msgstr ""
+"기존 피드백의 일부 필드를 다시 작성하여 편집할 수 없는 항목을 저장합니다."
-#: engine/core/docs/drf/viewsets.py:861
+#: engine/core/docs/drf/viewsets.py:919
msgid "list all order–product relations (simple view)"
msgstr "모든 주문-제품 관계 나열(단순 보기)"
-#: engine/core/docs/drf/viewsets.py:871
+#: engine/core/docs/drf/viewsets.py:929
msgid "retrieve a single order–product relation (detailed view)"
msgstr "단일 주문-제품 관계 검색(상세 보기)"
-#: engine/core/docs/drf/viewsets.py:881
+#: engine/core/docs/drf/viewsets.py:939
msgid "create a new order–product relation"
msgstr "새 주문-제품 관계 생성"
-#: engine/core/docs/drf/viewsets.py:891
+#: engine/core/docs/drf/viewsets.py:949
msgid "replace an existing order–product relation"
msgstr "기존 주문-제품 관계 교체"
-#: engine/core/docs/drf/viewsets.py:901
+#: engine/core/docs/drf/viewsets.py:959
msgid "partially update an existing order–product relation"
msgstr "기존 주문-제품 관계를 부분적으로 업데이트합니다."
-#: engine/core/docs/drf/viewsets.py:911
+#: engine/core/docs/drf/viewsets.py:969
msgid "delete an order–product relation"
msgstr "주문-제품 관계 삭제"
-#: engine/core/docs/drf/viewsets.py:921
+#: engine/core/docs/drf/viewsets.py:979
msgid "add or remove feedback on an order–product relation"
msgstr "주문-제품 관계에 대한 피드백 추가 또는 제거"
-#: engine/core/docs/drf/viewsets.py:938
+#: engine/core/docs/drf/viewsets.py:996
msgid "list all brands (simple view)"
msgstr "모든 브랜드 나열(간편 보기)"
-#: engine/core/docs/drf/viewsets.py:945
+#: engine/core/docs/drf/viewsets.py:1003
msgid "retrieve a single brand (detailed view)"
msgstr "단일 브랜드 검색(상세 보기)"
-#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993
+#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051
msgid "Brand UUID or slug"
msgstr "브랜드 UUID 또는 슬러그"
-#: engine/core/docs/drf/viewsets.py:960
+#: engine/core/docs/drf/viewsets.py:1018
msgid "create a brand"
msgstr "브랜드 만들기"
-#: engine/core/docs/drf/viewsets.py:967
+#: engine/core/docs/drf/viewsets.py:1025
msgid "delete a brand"
msgstr "브랜드 삭제"
-#: engine/core/docs/drf/viewsets.py:974
+#: engine/core/docs/drf/viewsets.py:1032
msgid "rewrite an existing brand saving non-editables"
msgstr "편집할 수 없는 기존 브랜드를 저장하여 다시 작성하기"
-#: engine/core/docs/drf/viewsets.py:981
+#: engine/core/docs/drf/viewsets.py:1039
msgid "rewrite some fields of an existing brand saving non-editables"
msgstr "편집할 수 없는 항목을 저장하여 기존 브랜드의 일부 필드 다시 작성하기"
-#: engine/core/docs/drf/viewsets.py:1006
+#: engine/core/docs/drf/viewsets.py:1064
msgid "list all vendors (simple view)"
msgstr "모든 공급업체 목록(간편 보기)"
-#: engine/core/docs/drf/viewsets.py:1013
+#: engine/core/docs/drf/viewsets.py:1074
msgid "retrieve a single vendor (detailed view)"
msgstr "단일 공급업체 검색(상세 보기)"
-#: engine/core/docs/drf/viewsets.py:1020
+#: engine/core/docs/drf/viewsets.py:1081
msgid "create a vendor"
msgstr "공급업체 만들기"
-#: engine/core/docs/drf/viewsets.py:1027
+#: engine/core/docs/drf/viewsets.py:1088
msgid "delete a vendor"
msgstr "공급업체 삭제"
-#: engine/core/docs/drf/viewsets.py:1034
+#: engine/core/docs/drf/viewsets.py:1095
msgid "rewrite an existing vendor saving non-editables"
msgstr "편집할 수 없는 기존 벤더를 저장하여 다시 작성하기"
-#: engine/core/docs/drf/viewsets.py:1041
+#: engine/core/docs/drf/viewsets.py:1102
msgid "rewrite some fields of an existing vendor saving non-editables"
msgstr "편집할 수 없는 기존 공급업체의 일부 필드 다시 작성"
-#: engine/core/docs/drf/viewsets.py:1051
+#: engine/core/docs/drf/viewsets.py:1112
msgid "list all product images (simple view)"
msgstr "모든 제품 이미지 나열(간편 보기)"
-#: engine/core/docs/drf/viewsets.py:1058
+#: engine/core/docs/drf/viewsets.py:1122
msgid "retrieve a single product image (detailed view)"
msgstr "단일 제품 이미지 검색(상세 보기)"
-#: engine/core/docs/drf/viewsets.py:1065
+#: engine/core/docs/drf/viewsets.py:1129
msgid "create a product image"
msgstr "제품 이미지 만들기"
-#: engine/core/docs/drf/viewsets.py:1072
+#: engine/core/docs/drf/viewsets.py:1139
msgid "delete a product image"
msgstr "제품 이미지 삭제"
-#: engine/core/docs/drf/viewsets.py:1079
+#: engine/core/docs/drf/viewsets.py:1146
msgid "rewrite an existing product image saving non-editables"
msgstr "편집할 수 없는 기존 제품 이미지 다시 작성하기"
-#: engine/core/docs/drf/viewsets.py:1086
+#: engine/core/docs/drf/viewsets.py:1154
msgid "rewrite some fields of an existing product image saving non-editables"
msgstr "편집할 수 없는 기존 제품 이미지의 일부 필드를 다시 작성합니다."
-#: engine/core/docs/drf/viewsets.py:1096
+#: engine/core/docs/drf/viewsets.py:1165
msgid "list all promo codes (simple view)"
msgstr "모든 프로모션 코드 목록(간편 보기)"
-#: engine/core/docs/drf/viewsets.py:1103
+#: engine/core/docs/drf/viewsets.py:1175
msgid "retrieve a single promo code (detailed view)"
msgstr "단일 프로모션 코드 검색(상세 보기)"
-#: engine/core/docs/drf/viewsets.py:1110
+#: engine/core/docs/drf/viewsets.py:1182
msgid "create a promo code"
msgstr "프로모션 코드 생성"
-#: engine/core/docs/drf/viewsets.py:1117
+#: engine/core/docs/drf/viewsets.py:1189
msgid "delete a promo code"
msgstr "프로모션 코드 삭제"
-#: engine/core/docs/drf/viewsets.py:1124
+#: engine/core/docs/drf/viewsets.py:1196
msgid "rewrite an existing promo code saving non-editables"
msgstr "편집할 수 없는 기존 프로모션 코드 다시 작성하기"
-#: engine/core/docs/drf/viewsets.py:1131
+#: engine/core/docs/drf/viewsets.py:1203
msgid "rewrite some fields of an existing promo code saving non-editables"
msgstr "편집할 수 없는 기존 프로모션 코드의 일부 필드를 다시 작성합니다."
-#: engine/core/docs/drf/viewsets.py:1141
+#: engine/core/docs/drf/viewsets.py:1213
msgid "list all promotions (simple view)"
msgstr "모든 프로모션 목록(간편 보기)"
-#: engine/core/docs/drf/viewsets.py:1148
+#: engine/core/docs/drf/viewsets.py:1223
msgid "retrieve a single promotion (detailed view)"
msgstr "단일 프로모션 검색(상세 보기)"
-#: engine/core/docs/drf/viewsets.py:1155
+#: engine/core/docs/drf/viewsets.py:1230
msgid "create a promotion"
msgstr "프로모션 만들기"
-#: engine/core/docs/drf/viewsets.py:1162
+#: engine/core/docs/drf/viewsets.py:1237
msgid "delete a promotion"
msgstr "프로모션 삭제"
-#: engine/core/docs/drf/viewsets.py:1169
+#: engine/core/docs/drf/viewsets.py:1244
msgid "rewrite an existing promotion saving non-editables"
msgstr "편집할 수 없는 항목을 저장하여 기존 프로모션 다시 작성하기"
-#: engine/core/docs/drf/viewsets.py:1176
+#: engine/core/docs/drf/viewsets.py:1251
msgid "rewrite some fields of an existing promotion saving non-editables"
msgstr "편집할 수 없는 항목을 저장하여 기존 프로모션의 일부 필드 다시 작성하기"
-#: engine/core/docs/drf/viewsets.py:1186
+#: engine/core/docs/drf/viewsets.py:1261
msgid "list all stocks (simple view)"
msgstr "모든 종목 목록(간편 보기)"
-#: engine/core/docs/drf/viewsets.py:1193
+#: engine/core/docs/drf/viewsets.py:1268
msgid "retrieve a single stock (detailed view)"
msgstr "단일 재고 검색(상세 보기)"
-#: engine/core/docs/drf/viewsets.py:1200
+#: engine/core/docs/drf/viewsets.py:1275
msgid "create a stock record"
msgstr "재고 기록 만들기"
-#: engine/core/docs/drf/viewsets.py:1207
+#: engine/core/docs/drf/viewsets.py:1282
msgid "delete a stock record"
msgstr "재고 기록 삭제"
-#: engine/core/docs/drf/viewsets.py:1214
+#: engine/core/docs/drf/viewsets.py:1289
msgid "rewrite an existing stock record saving non-editables"
msgstr "편집할 수 없는 항목을 저장하여 기존 재고 레코드 다시 작성하기"
-#: engine/core/docs/drf/viewsets.py:1221
+#: engine/core/docs/drf/viewsets.py:1297
msgid "rewrite some fields of an existing stock record saving non-editables"
msgstr "편집할 수 없는 항목을 저장하는 기존 재고 레코드의 일부 필드 다시 쓰기"
-#: engine/core/docs/drf/viewsets.py:1231
+#: engine/core/docs/drf/viewsets.py:1308
msgid "list all product tags (simple view)"
msgstr "모든 제품 태그 나열(간편 보기)"
-#: engine/core/docs/drf/viewsets.py:1238
+#: engine/core/docs/drf/viewsets.py:1318
msgid "retrieve a single product tag (detailed view)"
msgstr "단일 제품 태그 검색(상세 보기)"
-#: engine/core/docs/drf/viewsets.py:1245
+#: engine/core/docs/drf/viewsets.py:1325
msgid "create a product tag"
msgstr "제품 태그 생성"
-#: engine/core/docs/drf/viewsets.py:1252
+#: engine/core/docs/drf/viewsets.py:1335
msgid "delete a product tag"
msgstr "제품 태그 삭제"
-#: engine/core/docs/drf/viewsets.py:1259
+#: engine/core/docs/drf/viewsets.py:1342
msgid "rewrite an existing product tag saving non-editables"
msgstr "편집할 수 없는 기존 제품 태그 다시 작성하기"
-#: engine/core/docs/drf/viewsets.py:1266
+#: engine/core/docs/drf/viewsets.py:1350
msgid "rewrite some fields of an existing product tag saving non-editables"
msgstr "편집할 수 없는 기존 제품 태그의 일부 필드를 다시 작성합니다."
-#: engine/core/elasticsearch/__init__.py:122
-#: engine/core/elasticsearch/__init__.py:570
+#: engine/core/elasticsearch/__init__.py:127
+#: engine/core/elasticsearch/__init__.py:627
msgid "no search term provided."
msgstr "검색어가 입력되지 않았습니다."
-#: engine/core/filters.py:69 engine/core/filters.py:426
-#: engine/core/filters.py:553
+#: engine/core/filters.py:78 engine/core/filters.py:484
+#: engine/core/filters.py:625
msgid "Search"
msgstr "검색"
-#: engine/core/filters.py:70 engine/core/filters.py:583
-#: engine/core/filters.py:612
+#: engine/core/filters.py:79 engine/core/filters.py:662
+#: engine/core/filters.py:691
msgid "UUID"
msgstr "UUID"
-#: engine/core/filters.py:71 engine/core/filters.py:428
-#: engine/core/filters.py:555
+#: engine/core/filters.py:80 engine/core/filters.py:487
+#: engine/core/filters.py:627
msgid "Name"
msgstr "이름"
-#: engine/core/filters.py:72 engine/core/filters.py:557
+#: engine/core/filters.py:82 engine/core/filters.py:630
msgid "Categories"
msgstr "카테고리"
-#: engine/core/filters.py:74
+#: engine/core/filters.py:86
msgid "Categories Slugs"
msgstr "카테고리 슬러그"
-#: engine/core/filters.py:75 engine/core/filters.py:436
+#: engine/core/filters.py:88 engine/core/filters.py:495
msgid "Tags"
msgstr "태그"
-#: engine/core/filters.py:76
+#: engine/core/filters.py:90
msgid "Min Price"
msgstr "최소 가격"
-#: engine/core/filters.py:77
+#: engine/core/filters.py:93
msgid "Max Price"
msgstr "최대 가격"
-#: engine/core/filters.py:78
+#: engine/core/filters.py:95
msgid "Is Active"
msgstr "활성 상태"
-#: engine/core/filters.py:79
+#: engine/core/filters.py:96
msgid "Brand"
msgstr "브랜드"
-#: engine/core/filters.py:80
+#: engine/core/filters.py:97
msgid "Attributes"
msgstr "속성"
-#: engine/core/filters.py:81
+#: engine/core/filters.py:99
msgid "Quantity"
msgstr "수량"
-#: engine/core/filters.py:82 engine/core/filters.py:430
-#: engine/core/filters.py:556 engine/core/models.py:321
-#: engine/core/models.py:489 engine/core/models.py:644
+#: engine/core/filters.py:101 engine/core/filters.py:489
+#: engine/core/filters.py:628 engine/core/models.py:327
+#: engine/core/models.py:508 engine/core/models.py:665
msgid "Slug"
msgstr "슬러그"
-#: engine/core/filters.py:83
+#: engine/core/filters.py:102
msgid "Is Digital"
msgstr "디지털"
-#: engine/core/filters.py:84
+#: engine/core/filters.py:104
msgid "Include sub-categories"
msgstr "하위 카테고리 포함"
-#: engine/core/filters.py:87
+#: engine/core/filters.py:108
msgid "Include personal ordered"
msgstr "개인 주문 제품 포함"
-#: engine/core/filters.py:89 engine/core/models.py:648
+#: engine/core/filters.py:110 engine/core/models.py:669
msgid "SKU"
msgstr "SKU"
-#: engine/core/filters.py:184
+#: engine/core/filters.py:212
msgid "there must be a category_uuid to use include_subcategories flag"
-msgstr "include_subcategories 플래그를 사용하려면 category_uuid가 있어야 합니다."
+msgstr ""
+"include_subcategories 플래그를 사용하려면 category_uuid가 있어야 합니다."
-#: engine/core/filters.py:353
+#: engine/core/filters.py:398
msgid "Search (ID, product name or part number)"
msgstr "검색(ID, 제품명 또는 부품 번호)"
-#: engine/core/filters.py:356
+#: engine/core/filters.py:402
msgid "Bought after (inclusive)"
msgstr "구매 후(포함)"
-#: engine/core/filters.py:357
+#: engine/core/filters.py:405
msgid "Bought before (inclusive)"
msgstr "이전 구매(포함)"
-#: engine/core/filters.py:360 engine/core/filters.py:407
-#: engine/core/filters.py:614
+#: engine/core/filters.py:410 engine/core/filters.py:461
+#: engine/core/filters.py:696
msgid "User email"
msgstr "사용자 이메일"
-#: engine/core/filters.py:361 engine/core/filters.py:408
-#: engine/core/filters.py:592 engine/core/filters.py:613
+#: engine/core/filters.py:413 engine/core/filters.py:464
+#: engine/core/filters.py:671 engine/core/filters.py:693
msgid "User UUID"
msgstr "사용자 UUID"
-#: engine/core/filters.py:362
+#: engine/core/filters.py:415
msgid "Status"
msgstr "상태"
-#: engine/core/filters.py:366
+#: engine/core/filters.py:419
msgid "Human Readable ID"
msgstr "사람이 읽을 수 있는 ID"
-#: engine/core/filters.py:429
+#: engine/core/filters.py:488
msgid "Parent"
msgstr "부모"
-#: engine/core/filters.py:433
+#: engine/core/filters.py:492
msgid "Whole category(has at least 1 product or not)"
msgstr "전체 카테고리(1개 이상의 제품 보유 여부)"
-#: engine/core/filters.py:437
+#: engine/core/filters.py:496
msgid "Level"
msgstr "레벨"
-#: engine/core/filters.py:587
+#: engine/core/filters.py:666
msgid "Product UUID"
msgstr "제품 UUID"
-#: engine/core/graphene/mutations.py:40
+#: engine/core/graphene/mutations.py:41
msgid "key to look for in or set into the cache"
msgstr "캐시에서 찾거나 캐시에 설정할 키"
-#: engine/core/graphene/mutations.py:41
+#: engine/core/graphene/mutations.py:43
msgid "data to store in cache"
msgstr "캐시에 저장할 데이터"
-#: engine/core/graphene/mutations.py:44
+#: engine/core/graphene/mutations.py:46
msgid "timeout in seconds to set the data for into the cache"
msgstr "캐시에 저장할 데이터를 설정하는 데 걸리는 시간(초)"
-#: engine/core/graphene/mutations.py:47
+#: engine/core/graphene/mutations.py:49
msgid "cached data"
msgstr "캐시된 데이터"
-#: engine/core/graphene/mutations.py:62
+#: engine/core/graphene/mutations.py:64
msgid "camelized JSON data from the requested URL"
msgstr "요청된 URL의 카멜라이즈된 JSON 데이터"
-#: engine/core/graphene/mutations.py:67 engine/core/views.py:257
+#: engine/core/graphene/mutations.py:69 engine/core/views.py:249
msgid "only URLs starting with http(s):// are allowed"
msgstr "http(s)://로 시작하는 URL만 허용됩니다."
-#: engine/core/graphene/mutations.py:83
+#: engine/core/graphene/mutations.py:87
msgid "add a product to the order"
msgstr "주문에 제품 추가"
-#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131
-#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287
+#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139
+#: engine/core/graphene/mutations.py:255 engine/core/graphene/mutations.py:307
#, python-brace-format
msgid "order {order_uuid} not found"
msgstr "주문 {order_uuid}을 찾을 수 없습니다!"
-#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159
+#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167
msgid "remove a product from the order"
msgstr "주문에서 제품 제거"
-#: engine/core/graphene/mutations.py:137
+#: engine/core/graphene/mutations.py:145
msgid "remove all products from the order"
msgstr "주문에서 모든 제품 제거"
-#: engine/core/graphene/mutations.py:182
+#: engine/core/graphene/mutations.py:190
msgid "buy an order"
msgstr "주문 구매"
-#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265
+#: engine/core/graphene/mutations.py:221 engine/core/graphene/mutations.py:283
msgid "please provide either order_uuid or order_hr_id - mutually exclusive"
msgstr "주문_uuid 또는 주문_hr_id 중 하나를 입력하세요 - 상호 배타적입니다!"
-#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501
-#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712
+#: engine/core/graphene/mutations.py:250 engine/core/graphene/mutations.py:525
+#: engine/core/graphene/mutations.py:574 engine/core/viewsets.py:753
msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr "order.buy() 메서드에서 잘못된 유형이 발생했습니다: {type(instance)!s}"
-#: engine/core/graphene/mutations.py:245
+#: engine/core/graphene/mutations.py:261
msgid "perform an action on a list of products in the order"
msgstr "제품 목록에 대한 작업을 순서대로 수행합니다."
-#: engine/core/graphene/mutations.py:250
+#: engine/core/graphene/mutations.py:266
msgid "remove/add"
msgstr "제거/추가"
-#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323
+#: engine/core/graphene/mutations.py:302 engine/core/graphene/mutations.py:343
msgid "action must be either add or remove"
msgstr "작업은 \"추가\" 또는 \"제거\"여야 합니다!"
-#: engine/core/graphene/mutations.py:293
+#: engine/core/graphene/mutations.py:313
msgid "perform an action on a list of products in the wishlist"
msgstr "위시리스트의 제품 목록에서 작업 수행하기"
-#: engine/core/graphene/mutations.py:311
+#: engine/core/graphene/mutations.py:331
msgid "please provide wishlist_uuid value"
msgstr "위시리스트_유아이디` 값을 입력하세요."
-#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404
-#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460
-#: engine/core/graphene/mutations.py:504
+#: engine/core/graphene/mutations.py:348 engine/core/graphene/mutations.py:424
+#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480
+#: engine/core/graphene/mutations.py:530
#, python-brace-format
msgid "wishlist {wishlist_uuid} not found"
msgstr "위시리스트 {wishlist_uuid}를 찾을 수 없습니다!"
-#: engine/core/graphene/mutations.py:382
+#: engine/core/graphene/mutations.py:402
msgid "add a product to the wishlist"
msgstr "주문에 제품 추가"
-#: engine/core/graphene/mutations.py:410
+#: engine/core/graphene/mutations.py:430
msgid "remove a product from the wishlist"
msgstr "주문에서 제품 제거"
-#: engine/core/graphene/mutations.py:438
+#: engine/core/graphene/mutations.py:458
msgid "remove all products from the wishlist"
msgstr "주문에서 제품 제거"
-#: engine/core/graphene/mutations.py:466
+#: engine/core/graphene/mutations.py:486
msgid "buy all products from the wishlist"
msgstr "주문에서 제품 제거"
-#: engine/core/graphene/mutations.py:510
+#: engine/core/graphene/mutations.py:536
msgid "buy a product"
msgstr "주문 구매"
-#: engine/core/graphene/mutations.py:516
+#: engine/core/graphene/mutations.py:543
msgid ""
-"please send the attributes as the string formatted like "
-"attr1=value1,attr2=value2"
+"please send the attributes as the string formatted like attr1=value1,"
+"attr2=value2"
msgstr "속성을 attr1=value1,attr2=value2와 같은 형식의 문자열로 보내주세요."
-#: engine/core/graphene/mutations.py:549
+#: engine/core/graphene/mutations.py:581
msgid "add or delete a feedback for orderproduct"
msgstr "주문 제품에 대한 피드백 추가 또는 삭제"
-#: engine/core/graphene/mutations.py:573
+#: engine/core/graphene/mutations.py:607
msgid "action must be either `add` or `remove`"
msgstr "작업은 '추가' 또는 '제거' 중 하나여야 합니다!"
-#: engine/core/graphene/mutations.py:576
+#: engine/core/graphene/mutations.py:610
#, python-brace-format
msgid "order product {order_product_uuid} not found"
msgstr "주문 제품 {order_product_uuid}을 찾을 수 없습니다!"
-#: engine/core/graphene/mutations.py:582
+#: engine/core/graphene/mutations.py:617
msgid "original address string provided by the user"
msgstr "사용자가 제공한 원본 주소 문자열"
-#: engine/core/graphene/mutations.py:618 engine/core/models.py:955
-#: engine/core/models.py:968 engine/core/models.py:1383
-#: engine/core/models.py:1412 engine/core/models.py:1437
-#: engine/core/viewsets.py:715
+#: engine/core/graphene/mutations.py:654 engine/core/models.py:978
+#: engine/core/models.py:991 engine/core/models.py:1435
+#: engine/core/models.py:1466 engine/core/models.py:1497
+#: engine/core/viewsets.py:760
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr "{name}가 존재하지 않습니다: {uuid}!"
-#: engine/core/graphene/mutations.py:632
+#: engine/core/graphene/mutations.py:668
msgid "limit must be between 1 and 10"
msgstr "한도는 1에서 10 사이여야 합니다."
-#: engine/core/graphene/mutations.py:681
+#: engine/core/graphene/mutations.py:717
msgid "elasticsearch - works like a charm"
msgstr "ElasticSearch - 마법처럼 작동"
#: engine/core/graphene/object_types.py:82
-#: engine/core/graphene/object_types.py:370
-#: engine/core/graphene/object_types.py:417 engine/core/models.py:772
-#: engine/core/models.py:1250 engine/core/models.py:1897
+#: engine/core/graphene/object_types.py:417
+#: engine/core/graphene/object_types.py:468 engine/core/models.py:795
+#: engine/core/models.py:1289 engine/core/models.py:2021
msgid "attributes"
msgstr "속성"
@@ -1200,140 +1222,141 @@ msgid "groups of attributes"
msgstr "속성 그룹"
#: engine/core/graphene/object_types.py:116
-#: engine/core/graphene/object_types.py:193
-#: engine/core/graphene/object_types.py:223 engine/core/models.py:432
+#: engine/core/graphene/object_types.py:214
+#: engine/core/graphene/object_types.py:252 engine/core/models.py:451
msgid "categories"
msgstr "카테고리"
-#: engine/core/graphene/object_types.py:124 engine/core/models.py:503
+#: engine/core/graphene/object_types.py:132 engine/core/models.py:522
msgid "brands"
msgstr "브랜드"
-#: engine/core/graphene/object_types.py:195
+#: engine/core/graphene/object_types.py:216
msgid "category image url"
msgstr "카테고리"
-#: engine/core/graphene/object_types.py:196
-#: engine/core/graphene/object_types.py:317 engine/core/models.py:283
+#: engine/core/graphene/object_types.py:217
+#: engine/core/graphene/object_types.py:362 engine/core/models.py:289
msgid "markup percentage"
msgstr "마크업 퍼센트"
-#: engine/core/graphene/object_types.py:199
+#: engine/core/graphene/object_types.py:221
msgid "which attributes and values can be used for filtering this category."
msgstr "이 카테고리를 필터링하는 데 사용할 수 있는 속성 및 값입니다."
-#: engine/core/graphene/object_types.py:203
-msgid ""
-"minimum and maximum prices for products in this category, if available."
+#: engine/core/graphene/object_types.py:227
+msgid "minimum and maximum prices for products in this category, if available."
msgstr "이 카테고리의 제품에 대한 최소 및 최대 가격(가능한 경우)."
-#: engine/core/graphene/object_types.py:205
+#: engine/core/graphene/object_types.py:231
msgid "tags for this category"
msgstr "이 카테고리의 태그"
-#: engine/core/graphene/object_types.py:206
+#: engine/core/graphene/object_types.py:234
msgid "products in this category"
msgstr "이 카테고리의 제품"
-#: engine/core/graphene/object_types.py:324 engine/core/models.py:188
+#: engine/core/graphene/object_types.py:369 engine/core/models.py:194
msgid "vendors"
msgstr "공급업체"
-#: engine/core/graphene/object_types.py:328
+#: engine/core/graphene/object_types.py:373
msgid "Latitude (Y coordinate)"
msgstr "위도(Y 좌표)"
-#: engine/core/graphene/object_types.py:329
+#: engine/core/graphene/object_types.py:374
msgid "Longitude (X coordinate)"
msgstr "경도(X 좌표)"
-#: engine/core/graphene/object_types.py:358
+#: engine/core/graphene/object_types.py:403
msgid "comment"
msgstr "방법"
-#: engine/core/graphene/object_types.py:359
-#: engine/core/graphene/object_types.py:483
+#: engine/core/graphene/object_types.py:405
+#: engine/core/graphene/object_types.py:539
msgid "rating value from 1 to 10, inclusive, or 0 if not set."
msgstr "1에서 10까지의 등급 값(포함) 또는 설정하지 않은 경우 0입니다."
-#: engine/core/graphene/object_types.py:366
+#: engine/core/graphene/object_types.py:413
msgid "represents feedback from a user."
msgstr "사용자의 피드백을 나타냅니다."
-#: engine/core/graphene/object_types.py:371
-#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244
+#: engine/core/graphene/object_types.py:418
+#: engine/core/graphene/object_types.py:469 engine/core/models.py:1283
msgid "notifications"
msgstr "알림"
-#: engine/core/graphene/object_types.py:372
+#: engine/core/graphene/object_types.py:420
msgid "download url for this order product if applicable"
msgstr "해당되는 경우 이 주문 제품의 URL 다운로드"
-#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736
+#: engine/core/graphene/object_types.py:422 engine/core/models.py:1848
msgid "feedback"
msgstr "피드백"
-#: engine/core/graphene/object_types.py:407
+#: engine/core/graphene/object_types.py:456
msgid "a list of order products in this order"
msgstr "주문 제품 목록은 다음 순서로 표시됩니다."
-#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214
+#: engine/core/graphene/object_types.py:458 engine/core/models.py:1253
msgid "billing address"
msgstr "청구서 수신 주소"
-#: engine/core/graphene/object_types.py:412
+#: engine/core/graphene/object_types.py:462
msgid ""
"shipping address for this order, leave blank if same as billing address or "
"if not applicable"
-msgstr "이 주문의 배송 주소는 청구지 주소와 동일하거나 해당되지 않는 경우 비워 둡니다."
+msgstr ""
+"이 주문의 배송 주소는 청구지 주소와 동일하거나 해당되지 않는 경우 비워 둡니"
+"다."
-#: engine/core/graphene/object_types.py:414
+#: engine/core/graphene/object_types.py:465
msgid "total price of this order"
msgstr "이 주문의 총 가격"
-#: engine/core/graphene/object_types.py:415
+#: engine/core/graphene/object_types.py:466
msgid "total quantity of products in order"
msgstr "주문한 제품의 총 수량"
-#: engine/core/graphene/object_types.py:416
+#: engine/core/graphene/object_types.py:467
msgid "are all products in the order digital"
msgstr "주문에 포함된 모든 제품이 디지털 제품인가요?"
-#: engine/core/graphene/object_types.py:419
+#: engine/core/graphene/object_types.py:471
msgid "transactions for this order"
msgstr "이 주문에 대한 거래"
-#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278
+#: engine/core/graphene/object_types.py:491 engine/core/models.py:1317
msgid "orders"
msgstr "주문"
-#: engine/core/graphene/object_types.py:459
+#: engine/core/graphene/object_types.py:512
msgid "image url"
msgstr "이미지 URL"
-#: engine/core/graphene/object_types.py:466
+#: engine/core/graphene/object_types.py:519
msgid "product's images"
msgstr "제품 이미지"
-#: engine/core/graphene/object_types.py:473 engine/core/models.py:431
-#: engine/core/models.py:586
+#: engine/core/graphene/object_types.py:526 engine/core/models.py:450
+#: engine/core/models.py:607
msgid "category"
msgstr "카테고리"
-#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737
+#: engine/core/graphene/object_types.py:528 engine/core/models.py:1849
msgid "feedbacks"
msgstr "피드백"
-#: engine/core/graphene/object_types.py:476 engine/core/models.py:502
-#: engine/core/models.py:595
+#: engine/core/graphene/object_types.py:529 engine/core/models.py:521
+#: engine/core/models.py:616
msgid "brand"
msgstr "브랜드"
-#: engine/core/graphene/object_types.py:477 engine/core/models.py:106
+#: engine/core/graphene/object_types.py:531 engine/core/models.py:106
msgid "attribute groups"
msgstr "속성 그룹"
-#: engine/core/graphene/object_types.py:478
+#: engine/core/graphene/object_types.py:533
#: engine/core/templates/digital_order_created_email.html:111
#: engine/core/templates/digital_order_delivered_email.html:109
#: engine/core/templates/shipped_order_created_email.html:109
@@ -1341,7 +1364,7 @@ msgstr "속성 그룹"
msgid "price"
msgstr "가격"
-#: engine/core/graphene/object_types.py:479
+#: engine/core/graphene/object_types.py:534
#: engine/core/templates/digital_order_created_email.html:110
#: engine/core/templates/digital_order_delivered_email.html:108
#: engine/core/templates/shipped_order_created_email.html:108
@@ -1349,39 +1372,39 @@ msgstr "가격"
msgid "quantity"
msgstr "수량"
-#: engine/core/graphene/object_types.py:480
+#: engine/core/graphene/object_types.py:535
msgid "number of feedbacks"
msgstr "피드백 수"
-#: engine/core/graphene/object_types.py:481
+#: engine/core/graphene/object_types.py:536
msgid "only available for personal orders"
msgstr "개인 주문만 가능한 제품"
-#: engine/core/graphene/object_types.py:484
+#: engine/core/graphene/object_types.py:541
msgid "discount price"
msgstr "할인 가격"
-#: engine/core/graphene/object_types.py:508 engine/core/models.py:658
+#: engine/core/graphene/object_types.py:565 engine/core/models.py:679
msgid "products"
msgstr "제품"
-#: engine/core/graphene/object_types.py:611
+#: engine/core/graphene/object_types.py:675
msgid "promocodes"
msgstr "프로모션 코드"
-#: engine/core/graphene/object_types.py:621
+#: engine/core/graphene/object_types.py:690
msgid "products on sale"
msgstr "판매 중인 제품"
-#: engine/core/graphene/object_types.py:628 engine/core/models.py:904
+#: engine/core/graphene/object_types.py:698 engine/core/models.py:927
msgid "promotions"
msgstr "프로모션"
-#: engine/core/graphene/object_types.py:632 engine/core/models.py:187
+#: engine/core/graphene/object_types.py:702 engine/core/models.py:193
msgid "vendor"
msgstr "공급업체"
-#: engine/core/graphene/object_types.py:633 engine/core/models.py:657
+#: engine/core/graphene/object_types.py:703 engine/core/models.py:678
#: engine/core/templates/digital_order_created_email.html:109
#: engine/core/templates/digital_order_delivered_email.html:107
#: engine/core/templates/shipped_order_created_email.html:107
@@ -1389,98 +1412,99 @@ msgstr "공급업체"
msgid "product"
msgstr "제품"
-#: engine/core/graphene/object_types.py:644 engine/core/models.py:927
+#: engine/core/graphene/object_types.py:715 engine/core/models.py:950
msgid "wishlisted products"
msgstr "위시리스트 제품"
-#: engine/core/graphene/object_types.py:650 engine/core/models.py:944
+#: engine/core/graphene/object_types.py:722 engine/core/models.py:967
msgid "wishlists"
msgstr "위시리스트"
-#: engine/core/graphene/object_types.py:654
+#: engine/core/graphene/object_types.py:727
msgid "tagged products"
msgstr "태그가 지정된 제품"
-#: engine/core/graphene/object_types.py:661 engine/core/models.py:224
-#: engine/core/models.py:601
+#: engine/core/graphene/object_types.py:735 engine/core/models.py:230
+#: engine/core/models.py:622
msgid "product tags"
msgstr "제품 태그"
-#: engine/core/graphene/object_types.py:665
+#: engine/core/graphene/object_types.py:740
msgid "tagged categories"
msgstr "태그가 지정된 카테고리"
-#: engine/core/graphene/object_types.py:672
+#: engine/core/graphene/object_types.py:748
msgid "categories tags"
msgstr "카테고리 태그"
-#: engine/core/graphene/object_types.py:676
+#: engine/core/graphene/object_types.py:752
msgid "project name"
msgstr "프로젝트 이름"
-#: engine/core/graphene/object_types.py:677
+#: engine/core/graphene/object_types.py:753
msgid "company name"
msgstr "회사 이름"
-#: engine/core/graphene/object_types.py:678
+#: engine/core/graphene/object_types.py:754
msgid "company address"
msgstr "회사 주소"
-#: engine/core/graphene/object_types.py:679
+#: engine/core/graphene/object_types.py:755
msgid "company phone number"
msgstr "회사 전화번호"
-#: engine/core/graphene/object_types.py:680
+#: engine/core/graphene/object_types.py:758
msgid "email from, sometimes it must be used instead of host user value"
-msgstr "'이메일 보낸 사람'을 호스트 사용자 값 대신 사용해야 하는 경우가 있습니다."
+msgstr ""
+"'이메일 보낸 사람'을 호스트 사용자 값 대신 사용해야 하는 경우가 있습니다."
-#: engine/core/graphene/object_types.py:681
+#: engine/core/graphene/object_types.py:761
msgid "email host user"
msgstr "이메일 호스트 사용자"
-#: engine/core/graphene/object_types.py:682
+#: engine/core/graphene/object_types.py:762
msgid "maximum amount for payment"
msgstr "최대 결제 금액"
-#: engine/core/graphene/object_types.py:683
+#: engine/core/graphene/object_types.py:763
msgid "minimum amount for payment"
msgstr "최소 결제 금액"
-#: engine/core/graphene/object_types.py:684
+#: engine/core/graphene/object_types.py:764
msgid "analytics data"
msgstr "애널리틱스 데이터"
-#: engine/core/graphene/object_types.py:685
+#: engine/core/graphene/object_types.py:765
msgid "advertisement data"
msgstr "광고 데이터"
-#: engine/core/graphene/object_types.py:688
+#: engine/core/graphene/object_types.py:768
msgid "company configuration"
msgstr "구성"
-#: engine/core/graphene/object_types.py:692
+#: engine/core/graphene/object_types.py:772
msgid "language code"
msgstr "언어 코드"
-#: engine/core/graphene/object_types.py:693
+#: engine/core/graphene/object_types.py:773
msgid "language name"
msgstr "언어 이름"
-#: engine/core/graphene/object_types.py:694
+#: engine/core/graphene/object_types.py:774
msgid "language flag, if exists :)"
msgstr "언어 플래그가 있는 경우 :)"
-#: engine/core/graphene/object_types.py:697
+#: engine/core/graphene/object_types.py:777
msgid "supported languages"
msgstr "지원되는 언어 목록 보기"
-#: engine/core/graphene/object_types.py:728
-#: engine/core/graphene/object_types.py:729
-#: engine/core/graphene/object_types.py:730
+#: engine/core/graphene/object_types.py:809
+#: engine/core/graphene/object_types.py:812
+#: engine/core/graphene/object_types.py:815
msgid "products search results"
msgstr "제품 검색 결과"
-#: engine/core/graphene/object_types.py:731
+#: engine/core/graphene/object_types.py:817
msgid "posts search results"
msgstr "제품 검색 결과"
@@ -1491,8 +1515,10 @@ msgid ""
"parent group, forming a hierarchical structure. This can be useful for "
"categorizing and managing attributes more effectively in acomplex system."
msgstr ""
-"계층적일 수 있는 속성 그룹을 나타냅니다. 이 클래스는 속성 그룹을 관리하고 구성하는 데 사용됩니다. 속성 그룹은 상위 그룹을 가질 수 "
-"있으며 계층 구조를 형성할 수 있습니다. 이는 복잡한 시스템에서 속성을 보다 효과적으로 분류하고 관리하는 데 유용할 수 있습니다."
+"계층적일 수 있는 속성 그룹을 나타냅니다. 이 클래스는 속성 그룹을 관리하고 구"
+"성하는 데 사용됩니다. 속성 그룹은 상위 그룹을 가질 수 있으며 계층 구조를 형성"
+"할 수 있습니다. 이는 복잡한 시스템에서 속성을 보다 효과적으로 분류하고 관리하"
+"는 데 유용할 수 있습니다."
#: engine/core/models.py:91
msgid "parent of this group"
@@ -1506,7 +1532,7 @@ msgstr "상위 속성 그룹"
msgid "attribute group's name"
msgstr "속성 그룹의 이름"
-#: engine/core/models.py:105 engine/core/models.py:734
+#: engine/core/models.py:105 engine/core/models.py:755
msgid "attribute group"
msgstr "속성 그룹"
@@ -1520,52 +1546,54 @@ msgid ""
"also maintains additional metadata and constraints, making it suitable for "
"use in systems that interact with third-party vendors."
msgstr ""
-"외부 공급업체 및 해당 공급업체의 상호 작용 요구 사항에 대한 정보를 저장할 수 있는 공급업체 엔티티를 나타냅니다. 공급업체 클래스는 "
-"외부 공급업체와 관련된 정보를 정의하고 관리하는 데 사용됩니다. 공급업체의 이름, 통신에 필요한 인증 세부 정보, 공급업체에서 검색한 "
-"제품에 적용된 마크업 비율을 저장합니다. 또한 이 모델은 추가 메타데이터 및 제약 조건을 유지하므로 타사 공급업체와 상호 작용하는 "
-"시스템에서 사용하기에 적합합니다."
+"외부 공급업체 및 해당 공급업체의 상호 작용 요구 사항에 대한 정보를 저장할 수 "
+"있는 공급업체 엔티티를 나타냅니다. 공급업체 클래스는 외부 공급업체와 관련된 "
+"정보를 정의하고 관리하는 데 사용됩니다. 공급업체의 이름, 통신에 필요한 인증 "
+"세부 정보, 공급업체에서 검색한 제품에 적용된 마크업 비율을 저장합니다. 또한 "
+"이 모델은 추가 메타데이터 및 제약 조건을 유지하므로 타사 공급업체와 상호 작용"
+"하는 시스템에서 사용하기에 적합합니다."
-#: engine/core/models.py:124
+#: engine/core/models.py:125
msgid "stores credentials and endpoints required for vendor communication"
msgstr "공급업체의 API 통신에 필요한 자격 증명과 엔드포인트를 저장합니다."
-#: engine/core/models.py:125
+#: engine/core/models.py:127
msgid "authentication info"
msgstr "인증 정보"
-#: engine/core/models.py:130
+#: engine/core/models.py:132
msgid "define the markup for products retrieved from this vendor"
msgstr "이 공급업체에서 검색된 제품에 대한 마크업을 정의합니다."
-#: engine/core/models.py:131
+#: engine/core/models.py:133
msgid "vendor markup percentage"
msgstr "공급업체 마크업 비율"
-#: engine/core/models.py:135
+#: engine/core/models.py:137
msgid "name of this vendor"
msgstr "이 공급업체의 이름"
-#: engine/core/models.py:136
+#: engine/core/models.py:138
msgid "vendor name"
msgstr "공급업체 이름"
-#: engine/core/models.py:147
+#: engine/core/models.py:153
msgid "response file"
msgstr "응답 파일"
-#: engine/core/models.py:148
+#: engine/core/models.py:154
msgid "vendor's last processing response"
msgstr "공급업체의 마지막 처리 응답"
-#: engine/core/models.py:154
+#: engine/core/models.py:160
msgid "vendor's integration file path"
msgstr "공급업체의 통합 파일 경로"
-#: engine/core/models.py:155
+#: engine/core/models.py:161
msgid "integration path"
msgstr "통합 경로"
-#: engine/core/models.py:197
+#: engine/core/models.py:203
msgid ""
"Represents a product tag used for classifying or identifying products. The "
"ProductTag class is designed to uniquely identify and classify products "
@@ -1573,48 +1601,50 @@ msgid ""
"display name. It supports operations exported through mixins and provides "
"metadata customization for administrative purposes."
msgstr ""
-"제품을 분류하거나 식별하는 데 사용되는 제품 태그를 나타냅니다. ProductTag 클래스는 내부 태그 식별자와 사용자 친화적인 표시 "
-"이름의 조합을 통해 제품을 고유하게 식별하고 분류하도록 설계되었습니다. 믹스인을 통해 내보낸 작업을 지원하며 관리 목적으로 메타데이터 "
-"사용자 지정을 제공합니다."
+"제품을 분류하거나 식별하는 데 사용되는 제품 태그를 나타냅니다. ProductTag 클"
+"래스는 내부 태그 식별자와 사용자 친화적인 표시 이름의 조합을 통해 제품을 고유"
+"하게 식별하고 분류하도록 설계되었습니다. 믹스인을 통해 내보낸 작업을 지원하"
+"며 관리 목적으로 메타데이터 사용자 지정을 제공합니다."
-#: engine/core/models.py:209 engine/core/models.py:240
+#: engine/core/models.py:215 engine/core/models.py:246
msgid "internal tag identifier for the product tag"
msgstr "제품 태그의 내부 태그 식별자"
-#: engine/core/models.py:210 engine/core/models.py:241
+#: engine/core/models.py:216 engine/core/models.py:247
msgid "tag name"
msgstr "태그 이름"
-#: engine/core/models.py:214 engine/core/models.py:245
+#: engine/core/models.py:220 engine/core/models.py:251
msgid "user-friendly name for the product tag"
msgstr "제품 태그의 사용자 친화적인 이름"
-#: engine/core/models.py:215 engine/core/models.py:246
+#: engine/core/models.py:221 engine/core/models.py:252
msgid "tag display name"
msgstr "태그 표시 이름"
-#: engine/core/models.py:223
+#: engine/core/models.py:229
msgid "product tag"
msgstr "제품 태그"
-#: engine/core/models.py:229
+#: engine/core/models.py:235
msgid ""
"Represents a category tag used for products. This class models a category "
"tag that can be used to associate and classify products. It includes "
"attributes for an internal tag identifier and a user-friendly display name."
msgstr ""
-"제품에 사용되는 카테고리 태그를 나타냅니다. 이 클래스는 제품을 연결하고 분류하는 데 사용할 수 있는 카테고리 태그를 모델링합니다. 내부"
-" 태그 식별자 및 사용자 친화적인 표시 이름에 대한 속성을 포함합니다."
+"제품에 사용되는 카테고리 태그를 나타냅니다. 이 클래스는 제품을 연결하고 분류"
+"하는 데 사용할 수 있는 카테고리 태그를 모델링합니다. 내부 태그 식별자 및 사용"
+"자 친화적인 표시 이름에 대한 속성을 포함합니다."
-#: engine/core/models.py:254
+#: engine/core/models.py:260
msgid "category tag"
msgstr "카테고리 태그"
-#: engine/core/models.py:255 engine/core/models.py:327
+#: engine/core/models.py:261 engine/core/models.py:333
msgid "category tags"
msgstr "카테고리 태그"
-#: engine/core/models.py:260
+#: engine/core/models.py:266
msgid ""
"Represents a category entity to organize and group related items in a "
"hierarchical structure. Categories may have hierarchical relationships with "
@@ -1626,185 +1656,189 @@ msgid ""
"hierarchy of categories, as well as assign attributes like images, tags, or "
"priority."
msgstr ""
-"관련 항목을 계층 구조로 정리하고 그룹화할 카테고리 엔티티를 나타냅니다. 카테고리는 다른 카테고리와 계층적 관계를 가질 수 있으며, "
-"상위-하위 관계를 지원합니다. 이 클래스에는 카테고리 관련 기능의 기반이 되는 메타데이터 및 시각적 표현을 위한 필드가 포함되어 "
-"있습니다. 이 클래스는 일반적으로 애플리케이션 내에서 제품 카테고리 또는 기타 유사한 그룹을 정의하고 관리하는 데 사용되며, 사용자나 "
-"관리자가 카테고리의 이름, 설명 및 계층 구조를 지정하고 이미지, 태그 또는 우선순위와 같은 속성을 할당할 수 있도록 합니다."
+"관련 항목을 계층 구조로 정리하고 그룹화할 카테고리 엔티티를 나타냅니다. 카테"
+"고리는 다른 카테고리와 계층적 관계를 가질 수 있으며, 상위-하위 관계를 지원합"
+"니다. 이 클래스에는 카테고리 관련 기능의 기반이 되는 메타데이터 및 시각적 표"
+"현을 위한 필드가 포함되어 있습니다. 이 클래스는 일반적으로 애플리케이션 내에"
+"서 제품 카테고리 또는 기타 유사한 그룹을 정의하고 관리하는 데 사용되며, 사용"
+"자나 관리자가 카테고리의 이름, 설명 및 계층 구조를 지정하고 이미지, 태그 또"
+"는 우선순위와 같은 속성을 할당할 수 있도록 합니다."
-#: engine/core/models.py:274
+#: engine/core/models.py:280
msgid "upload an image representing this category"
msgstr "이 카테고리를 대표하는 이미지 업로드"
-#: engine/core/models.py:277
+#: engine/core/models.py:283
msgid "category image"
msgstr "카테고리 이미지"
-#: engine/core/models.py:282
+#: engine/core/models.py:288
msgid "define a markup percentage for products in this category"
msgstr "이 카테고리의 제품에 대한 마크업 비율을 정의합니다."
-#: engine/core/models.py:291
+#: engine/core/models.py:297
msgid "parent of this category to form a hierarchical structure"
msgstr "계층 구조를 형성하는 이 카테고리의 상위 카테고리"
-#: engine/core/models.py:292
+#: engine/core/models.py:298
msgid "parent category"
msgstr "상위 카테고리"
-#: engine/core/models.py:297
+#: engine/core/models.py:303
msgid "category name"
msgstr "카테고리 이름"
-#: engine/core/models.py:298
+#: engine/core/models.py:304
msgid "provide a name for this category"
msgstr "이 카테고리의 이름을 입력합니다."
-#: engine/core/models.py:305
+#: engine/core/models.py:311
msgid "add a detailed description for this category"
msgstr "이 카테고리에 대한 자세한 설명 추가"
-#: engine/core/models.py:306
+#: engine/core/models.py:312
msgid "category description"
msgstr "카테고리 설명"
-#: engine/core/models.py:326
+#: engine/core/models.py:332
msgid "tags that help describe or group this category"
msgstr "이 카테고리를 설명하거나 그룹화하는 데 도움이 되는 태그"
-#: engine/core/models.py:333 engine/core/models.py:495
+#: engine/core/models.py:339 engine/core/models.py:514
msgid "priority"
msgstr "우선순위"
-#: engine/core/models.py:438
+#: engine/core/models.py:457
msgid ""
"Represents a Brand object in the system. This class handles information and "
"attributes related to a brand, including its name, logos, description, "
"associated categories, a unique slug, and priority order. It allows for the "
-"organization and representation of brand-related data within the "
-"application."
+"organization and representation of brand-related data within the application."
msgstr ""
-"시스템에서 브랜드 객체를 나타냅니다. 이 클래스는 이름, 로고, 설명, 관련 카테고리, 고유 슬러그, 우선순위 등 브랜드와 관련된 정보 "
-"및 속성을 처리합니다. 이를 통해 애플리케이션 내에서 브랜드 관련 데이터를 구성하고 표현할 수 있습니다."
+"시스템에서 브랜드 객체를 나타냅니다. 이 클래스는 이름, 로고, 설명, 관련 카테"
+"고리, 고유 슬러그, 우선순위 등 브랜드와 관련된 정보 및 속성을 처리합니다. 이"
+"를 통해 애플리케이션 내에서 브랜드 관련 데이터를 구성하고 표현할 수 있습니다."
-#: engine/core/models.py:448
+#: engine/core/models.py:467
msgid "name of this brand"
msgstr "이 브랜드 이름"
-#: engine/core/models.py:449
+#: engine/core/models.py:468
msgid "brand name"
msgstr "브랜드 이름"
-#: engine/core/models.py:456
+#: engine/core/models.py:475
msgid "upload a logo representing this brand"
msgstr "이 브랜드를 대표하는 로고 업로드"
-#: engine/core/models.py:458
+#: engine/core/models.py:477
msgid "brand small image"
msgstr "브랜드 작은 이미지"
-#: engine/core/models.py:464
+#: engine/core/models.py:483
msgid "upload a big logo representing this brand"
msgstr "이 브랜드를 대표하는 큰 로고 업로드"
-#: engine/core/models.py:466
+#: engine/core/models.py:485
msgid "brand big image"
msgstr "브랜드 빅 이미지"
-#: engine/core/models.py:471
+#: engine/core/models.py:490
msgid "add a detailed description of the brand"
msgstr "브랜드에 대한 자세한 설명 추가"
-#: engine/core/models.py:472
+#: engine/core/models.py:491
msgid "brand description"
msgstr "브랜드 설명"
-#: engine/core/models.py:477
+#: engine/core/models.py:496
msgid "optional categories that this brand is associated with"
msgstr "이 브랜드와 연관된 선택적 카테고리"
-#: engine/core/models.py:478
+#: engine/core/models.py:497
msgid "associated categories"
msgstr "카테고리"
-#: engine/core/models.py:508
+#: engine/core/models.py:527
msgid ""
-"Represents the stock of a product managed in the system. This class provides"
-" details about the relationship between vendors, products, and their stock "
+"Represents the stock of a product managed in the system. This class provides "
+"details about the relationship between vendors, products, and their stock "
"information, as well as inventory-related properties like price, purchase "
"price, quantity, SKU, and digital assets. It is part of the inventory "
"management system to allow tracking and evaluation of products available "
"from various vendors."
msgstr ""
-"시스템에서 관리되는 제품의 재고를 나타냅니다. 이 클래스는 공급업체, 제품, 재고 정보 간의 관계와 가격, 구매 가격, 수량, SKU 및"
-" 디지털 자산과 같은 재고 관련 속성에 대한 세부 정보를 제공합니다. 다양한 공급업체에서 제공하는 제품을 추적하고 평가할 수 있도록 하는"
-" 재고 관리 시스템의 일부입니다."
+"시스템에서 관리되는 제품의 재고를 나타냅니다. 이 클래스는 공급업체, 제품, 재"
+"고 정보 간의 관계와 가격, 구매 가격, 수량, SKU 및 디지털 자산과 같은 재고 관"
+"련 속성에 대한 세부 정보를 제공합니다. 다양한 공급업체에서 제공하는 제품을 추"
+"적하고 평가할 수 있도록 하는 재고 관리 시스템의 일부입니다."
-#: engine/core/models.py:520
+#: engine/core/models.py:539
msgid "the vendor supplying this product stock"
msgstr "이 제품 재고를 공급하는 공급업체"
-#: engine/core/models.py:521
+#: engine/core/models.py:540
msgid "associated vendor"
msgstr "관련 공급업체"
-#: engine/core/models.py:525
+#: engine/core/models.py:544
msgid "final price to the customer after markups"
msgstr "마크업 후 고객에게 제공되는 최종 가격"
-#: engine/core/models.py:526
+#: engine/core/models.py:545
msgid "selling price"
msgstr "판매 가격"
-#: engine/core/models.py:531
+#: engine/core/models.py:550
msgid "the product associated with this stock entry"
msgstr "이 주식 항목과 관련된 제품"
-#: engine/core/models.py:532 engine/core/models.py:797
-#: engine/core/models.py:843 engine/core/models.py:1792
+#: engine/core/models.py:551 engine/core/models.py:820
+#: engine/core/models.py:866 engine/core/models.py:1904
msgid "associated product"
msgstr "관련 제품"
-#: engine/core/models.py:539
+#: engine/core/models.py:558
msgid "the price paid to the vendor for this product"
msgstr "이 제품에 대해 공급업체에 지불한 가격"
-#: engine/core/models.py:540
+#: engine/core/models.py:559
msgid "vendor purchase price"
msgstr "공급업체 구매 가격"
-#: engine/core/models.py:544
+#: engine/core/models.py:563
msgid "available quantity of the product in stock"
msgstr "재고가 있는 제품의 사용 가능한 수량"
-#: engine/core/models.py:545
+#: engine/core/models.py:564
msgid "quantity in stock"
msgstr "재고 수량"
-#: engine/core/models.py:549
+#: engine/core/models.py:568
msgid "vendor-assigned SKU for identifying the product"
msgstr "제품 식별을 위해 공급업체에서 할당하는 SKU"
-#: engine/core/models.py:550
+#: engine/core/models.py:569
msgid "vendor sku"
msgstr "공급업체의 SKU"
-#: engine/core/models.py:556
+#: engine/core/models.py:575
msgid "digital file associated with this stock if applicable"
msgstr "해당되는 경우 이 주식과 관련된 디지털 파일"
-#: engine/core/models.py:557
+#: engine/core/models.py:576
msgid "digital file"
msgstr "디지털 파일"
-#: engine/core/models.py:560
+#: engine/core/models.py:580
msgid "system attributes"
msgstr "시스템 속성"
-#: engine/core/models.py:567
+#: engine/core/models.py:588
msgid "stock entries"
msgstr "재고 항목"
-#: engine/core/models.py:572
+#: engine/core/models.py:593
msgid ""
"Represents a product with attributes such as category, brand, tags, digital "
"status, name, description, part number, and slug. Provides related utility "
@@ -1815,358 +1849,373 @@ msgid ""
"properties to improve performance. It is used to define and manipulate "
"product data and its associated information within an application."
msgstr ""
-"카테고리, 브랜드, 태그, 디지털 상태, 이름, 설명, 부품 번호, 슬러그 등의 속성을 가진 제품을 나타냅니다. 평점, 피드백 수, "
-"가격, 수량, 총 주문 수 등을 검색할 수 있는 관련 유틸리티 속성을 제공합니다. 이커머스 또는 재고 관리를 처리하는 시스템에서 "
-"사용하도록 설계되었습니다. 이 클래스는 관련 모델(예: 카테고리, 브랜드, 제품 태그)과 상호 작용하고 자주 액세스하는 속성에 대한 "
-"캐싱을 관리하여 성능을 개선합니다. 애플리케이션 내에서 제품 데이터 및 관련 정보를 정의하고 조작하는 데 사용됩니다."
+"카테고리, 브랜드, 태그, 디지털 상태, 이름, 설명, 부품 번호, 슬러그 등의 속성"
+"을 가진 제품을 나타냅니다. 평점, 피드백 수, 가격, 수량, 총 주문 수 등을 검색"
+"할 수 있는 관련 유틸리티 속성을 제공합니다. 이커머스 또는 재고 관리를 처리하"
+"는 시스템에서 사용하도록 설계되었습니다. 이 클래스는 관련 모델(예: 카테고리, "
+"브랜드, 제품 태그)과 상호 작용하고 자주 액세스하는 속성에 대한 캐싱을 관리하"
+"여 성능을 개선합니다. 애플리케이션 내에서 제품 데이터 및 관련 정보를 정의하"
+"고 조작하는 데 사용됩니다."
-#: engine/core/models.py:585
+#: engine/core/models.py:606
msgid "category this product belongs to"
msgstr "이 제품이 속한 카테고리"
-#: engine/core/models.py:594
+#: engine/core/models.py:615
msgid "optionally associate this product with a brand"
msgstr "선택 사항으로 이 제품을 브랜드와 연결"
-#: engine/core/models.py:600
+#: engine/core/models.py:621
msgid "tags that help describe or group this product"
msgstr "이 제품을 설명하거나 그룹화하는 데 도움이 되는 태그"
-#: engine/core/models.py:605
+#: engine/core/models.py:626
msgid "indicates whether this product is digitally delivered"
msgstr "이 제품이 디지털 방식으로 배송되는지 여부를 나타냅니다."
-#: engine/core/models.py:606
+#: engine/core/models.py:627
msgid "is product digital"
msgstr "제품 디지털화 여부"
-#: engine/core/models.py:612
+#: engine/core/models.py:633
msgid "provide a clear identifying name for the product"
msgstr "제품에 대한 명확한 식별 이름 제공"
-#: engine/core/models.py:613
+#: engine/core/models.py:634
msgid "product name"
msgstr "제품 이름"
-#: engine/core/models.py:619 engine/core/models.py:892
+#: engine/core/models.py:640 engine/core/models.py:915
msgid "add a detailed description of the product"
msgstr "제품에 대한 자세한 설명 추가"
-#: engine/core/models.py:620
+#: engine/core/models.py:641
msgid "product description"
msgstr "제품 설명"
-#: engine/core/models.py:627
+#: engine/core/models.py:648
msgid "part number for this product"
msgstr "이 제품의 부품 번호"
-#: engine/core/models.py:628
+#: engine/core/models.py:649
msgid "part number"
msgstr "부품 번호"
-#: engine/core/models.py:647
+#: engine/core/models.py:668
msgid "stock keeping unit for this product"
msgstr "이 제품의 재고 보관 단위"
-#: engine/core/models.py:720
+#: engine/core/models.py:741
msgid ""
"Represents an attribute in the system. This class is used to define and "
"manage attributes, which are customizable pieces of data that can be "
"associated with other entities. Attributes have associated categories, "
-"groups, value types, and names. The model supports multiple types of values,"
-" including string, integer, float, boolean, array, and object. This allows "
+"groups, value types, and names. The model supports multiple types of values, "
+"including string, integer, float, boolean, array, and object. This allows "
"for dynamic and flexible data structuring."
msgstr ""
-"시스템의 속성을 나타냅니다. 이 클래스는 다른 엔티티와 연결할 수 있는 사용자 지정 가능한 데이터 조각인 속성을 정의하고 관리하는 데 "
-"사용됩니다. 속성에는 연관된 카테고리, 그룹, 값 유형 및 이름이 있습니다. 이 모델은 문자열, 정수, 실수, 부울, 배열, 객체 등 "
-"여러 유형의 값을 지원합니다. 이를 통해 동적이고 유연한 데이터 구조화가 가능합니다."
+"시스템의 속성을 나타냅니다. 이 클래스는 다른 엔티티와 연결할 수 있는 사용자 "
+"지정 가능한 데이터 조각인 속성을 정의하고 관리하는 데 사용됩니다. 속성에는 연"
+"관된 카테고리, 그룹, 값 유형 및 이름이 있습니다. 이 모델은 문자열, 정수, 실"
+"수, 부울, 배열, 객체 등 여러 유형의 값을 지원합니다. 이를 통해 동적이고 유연"
+"한 데이터 구조화가 가능합니다."
-#: engine/core/models.py:733
+#: engine/core/models.py:754
msgid "group of this attribute"
msgstr "이 속성의 그룹"
-#: engine/core/models.py:739
+#: engine/core/models.py:760
msgid "string"
msgstr "문자열"
-#: engine/core/models.py:740
+#: engine/core/models.py:761
msgid "integer"
msgstr "정수"
-#: engine/core/models.py:741
+#: engine/core/models.py:762
msgid "float"
msgstr "Float"
-#: engine/core/models.py:742
+#: engine/core/models.py:763
msgid "boolean"
msgstr "부울"
-#: engine/core/models.py:743
+#: engine/core/models.py:764
msgid "array"
msgstr "배열"
-#: engine/core/models.py:744
+#: engine/core/models.py:765
msgid "object"
msgstr "개체"
-#: engine/core/models.py:746
+#: engine/core/models.py:767
msgid "type of the attribute's value"
msgstr "속성 값의 유형"
-#: engine/core/models.py:747
+#: engine/core/models.py:768
msgid "value type"
msgstr "값 유형"
-#: engine/core/models.py:752
+#: engine/core/models.py:773
msgid "name of this attribute"
msgstr "이 속성의 이름"
-#: engine/core/models.py:753
+#: engine/core/models.py:774
msgid "attribute's name"
msgstr "속성 이름"
-#: engine/core/models.py:758
+#: engine/core/models.py:779
msgid "is filterable"
msgstr "필터링 가능"
-#: engine/core/models.py:759
+#: engine/core/models.py:781
msgid "designates whether this attribute can be used for filtering or not"
msgstr "는 이 속성을 필터링에 사용할 수 있는지 여부를 지정합니다."
-#: engine/core/models.py:771 engine/core/models.py:789
+#: engine/core/models.py:794 engine/core/models.py:812
#: engine/core/templates/digital_order_delivered_email.html:134
msgid "attribute"
msgstr "속성"
-#: engine/core/models.py:777
+#: engine/core/models.py:800
msgid ""
-"Represents a specific value for an attribute that is linked to a product. It"
-" links the 'attribute' to a unique 'value', allowing better organization and"
-" dynamic representation of product characteristics."
+"Represents a specific value for an attribute that is linked to a product. It "
+"links the 'attribute' to a unique 'value', allowing better organization and "
+"dynamic representation of product characteristics."
msgstr ""
-"상품에 연결된 속성의 특정 값을 나타냅니다. '속성'을 고유한 '값'에 연결하여 제품 특성을 더 잘 구성하고 동적으로 표현할 수 "
-"있습니다."
+"상품에 연결된 속성의 특정 값을 나타냅니다. '속성'을 고유한 '값'에 연결하여 제"
+"품 특성을 더 잘 구성하고 동적으로 표현할 수 있습니다."
-#: engine/core/models.py:788
+#: engine/core/models.py:811
msgid "attribute of this value"
msgstr "이 값의 속성"
-#: engine/core/models.py:796
+#: engine/core/models.py:819
msgid "the specific product associated with this attribute's value"
msgstr "이 속성 값과 연관된 특정 제품"
-#: engine/core/models.py:802
+#: engine/core/models.py:825
msgid "the specific value for this attribute"
msgstr "이 속성의 구체적인 값은 다음과 같습니다."
-#: engine/core/models.py:815
+#: engine/core/models.py:838
msgid ""
"Represents a product image associated with a product in the system. This "
-"class is designed to manage images for products, including functionality for"
-" uploading image files, associating them with specific products, and "
+"class is designed to manage images for products, including functionality for "
+"uploading image files, associating them with specific products, and "
"determining their display order. It also includes an accessibility feature "
"with alternative text for the images."
msgstr ""
-"시스템에서 제품과 연관된 제품 이미지를 나타냅니다. 이 클래스는 이미지 파일 업로드, 특정 제품과의 연결, 표시 순서 결정 등의 기능을 "
-"포함하여 제품의 이미지를 관리하도록 설계되었습니다. 또한 이미지에 대한 대체 텍스트가 포함된 접근성 기능도 포함되어 있습니다."
+"시스템에서 제품과 연관된 제품 이미지를 나타냅니다. 이 클래스는 이미지 파일 업"
+"로드, 특정 제품과의 연결, 표시 순서 결정 등의 기능을 포함하여 제품의 이미지"
+"를 관리하도록 설계되었습니다. 또한 이미지에 대한 대체 텍스트가 포함된 접근성 "
+"기능도 포함되어 있습니다."
-#: engine/core/models.py:826
+#: engine/core/models.py:849
msgid "provide alternative text for the image for accessibility"
msgstr "접근성을 위해 이미지에 대체 텍스트 제공"
-#: engine/core/models.py:827
+#: engine/core/models.py:850
msgid "image alt text"
msgstr "이미지 대체 텍스트"
-#: engine/core/models.py:830
+#: engine/core/models.py:853
msgid "upload the image file for this product"
msgstr "이 제품의 이미지 파일 업로드"
-#: engine/core/models.py:831 engine/core/models.py:862
+#: engine/core/models.py:854 engine/core/models.py:885
msgid "product image"
msgstr "제품 이미지"
-#: engine/core/models.py:836
+#: engine/core/models.py:859
msgid "determines the order in which images are displayed"
msgstr "이미지가 표시되는 순서를 결정합니다."
-#: engine/core/models.py:837
+#: engine/core/models.py:860
msgid "display priority"
msgstr "우선순위 표시"
-#: engine/core/models.py:842
+#: engine/core/models.py:865
msgid "the product that this image represents"
msgstr "이 이미지가 나타내는 제품"
-#: engine/core/models.py:863
+#: engine/core/models.py:886
msgid "product images"
msgstr "제품 이미지"
-#: engine/core/models.py:868
+#: engine/core/models.py:891
msgid ""
"Represents a promotional campaign for products with a discount. This class "
"is used to define and manage promotional campaigns that offer a percentage-"
"based discount for products. The class includes attributes for setting the "
"discount rate, providing details about the promotion, and linking it to the "
-"applicable products. It integrates with the product catalog to determine the"
-" affected items in the campaign."
+"applicable products. It integrates with the product catalog to determine the "
+"affected items in the campaign."
msgstr ""
-"할인이 적용되는 제품에 대한 프로모션 캠페인을 나타냅니다. 이 클래스는 제품에 대해 백분율 기반 할인을 제공하는 프로모션 캠페인을 "
-"정의하고 관리하는 데 사용됩니다. 이 클래스에는 할인율 설정, 프로모션에 대한 세부 정보 제공 및 해당 제품에 대한 링크를 위한 속성이 "
-"포함되어 있습니다. 제품 카탈로그와 통합되어 캠페인에서 영향을 받는 품목을 결정합니다."
+"할인이 적용되는 제품에 대한 프로모션 캠페인을 나타냅니다. 이 클래스는 제품에 "
+"대해 백분율 기반 할인을 제공하는 프로모션 캠페인을 정의하고 관리하는 데 사용"
+"됩니다. 이 클래스에는 할인율 설정, 프로모션에 대한 세부 정보 제공 및 해당 제"
+"품에 대한 링크를 위한 속성이 포함되어 있습니다. 제품 카탈로그와 통합되어 캠페"
+"인에서 영향을 받는 품목을 결정합니다."
-#: engine/core/models.py:880
+#: engine/core/models.py:903
msgid "percentage discount for the selected products"
msgstr "선택한 제품에 대한 할인 비율"
-#: engine/core/models.py:881
+#: engine/core/models.py:904
msgid "discount percentage"
msgstr "할인 비율"
-#: engine/core/models.py:886
+#: engine/core/models.py:909
msgid "provide a unique name for this promotion"
msgstr "이 프로모션의 고유한 이름을 입력하세요."
-#: engine/core/models.py:887
+#: engine/core/models.py:910
msgid "promotion name"
msgstr "프로모션 이름"
-#: engine/core/models.py:893
+#: engine/core/models.py:916
msgid "promotion description"
msgstr "프로모션 설명"
-#: engine/core/models.py:898
+#: engine/core/models.py:921
msgid "select which products are included in this promotion"
msgstr "이 프로모션에 포함되는 제품 선택"
-#: engine/core/models.py:899
+#: engine/core/models.py:922
msgid "included products"
msgstr "포함된 제품"
-#: engine/core/models.py:903
+#: engine/core/models.py:926
msgid "promotion"
msgstr "프로모션"
-#: engine/core/models.py:914
+#: engine/core/models.py:937
msgid ""
"Represents a user's wishlist for storing and managing desired products. The "
"class provides functionality to manage a collection of products, supporting "
"operations such as adding and removing products, as well as supporting "
"operations for adding and removing multiple products at once."
msgstr ""
-"원하는 상품을 저장하고 관리하기 위한 사용자의 위시리스트를 나타냅니다. 이 클래스는 제품 컬렉션을 관리하는 기능을 제공하여 제품 추가 및"
-" 제거와 같은 작업을 지원할 뿐만 아니라 여러 제품을 한 번에 추가 및 제거하는 작업도 지원합니다."
+"원하는 상품을 저장하고 관리하기 위한 사용자의 위시리스트를 나타냅니다. 이 클"
+"래스는 제품 컬렉션을 관리하는 기능을 제공하여 제품 추가 및 제거와 같은 작업"
+"을 지원할 뿐만 아니라 여러 제품을 한 번에 추가 및 제거하는 작업도 지원합니다."
-#: engine/core/models.py:926
+#: engine/core/models.py:949
msgid "products that the user has marked as wanted"
msgstr "사용자가 원하는 것으로 표시한 제품"
-#: engine/core/models.py:934
+#: engine/core/models.py:957
msgid "user who owns this wishlist"
msgstr "이 위시리스트를 소유한 사용자"
-#: engine/core/models.py:935
+#: engine/core/models.py:958
msgid "wishlist owner"
msgstr "위시리스트의 소유자"
-#: engine/core/models.py:943
+#: engine/core/models.py:966
msgid "wishlist"
msgstr "위시리스트"
-#: engine/core/models.py:985
+#: engine/core/models.py:1008
msgid ""
"Represents a documentary record tied to a product. This class is used to "
"store information about documentaries related to specific products, "
"including file uploads and their metadata. It contains methods and "
"properties to handle the file type and storage path for the documentary "
-"files. It extends functionality from specific mixins and provides additional"
-" custom features."
+"files. It extends functionality from specific mixins and provides additional "
+"custom features."
msgstr ""
-"상품에 연결된 다큐멘터리 레코드를 나타냅니다. 이 클래스는 파일 업로드 및 메타데이터를 포함하여 특정 제품과 관련된 다큐멘터리에 대한 "
-"정보를 저장하는 데 사용됩니다. 여기에는 다큐멘터리 파일의 파일 유형과 저장 경로를 처리하는 메서드와 프로퍼티가 포함되어 있습니다. 특정"
-" 믹스인의 기능을 확장하고 추가 사용자 정의 기능을 제공합니다."
+"상품에 연결된 다큐멘터리 레코드를 나타냅니다. 이 클래스는 파일 업로드 및 메타"
+"데이터를 포함하여 특정 제품과 관련된 다큐멘터리에 대한 정보를 저장하는 데 사"
+"용됩니다. 여기에는 다큐멘터리 파일의 파일 유형과 저장 경로를 처리하는 메서드"
+"와 프로퍼티가 포함되어 있습니다. 특정 믹스인의 기능을 확장하고 추가 사용자 정"
+"의 기능을 제공합니다."
-#: engine/core/models.py:998
+#: engine/core/models.py:1023
msgid "documentary"
msgstr "다큐멘터리"
-#: engine/core/models.py:999
+#: engine/core/models.py:1024
msgid "documentaries"
msgstr "다큐멘터리"
-#: engine/core/models.py:1009
+#: engine/core/models.py:1034
msgid "unresolved"
msgstr "해결되지 않음"
-#: engine/core/models.py:1014
+#: engine/core/models.py:1039
msgid ""
-"Represents an address entity that includes location details and associations"
-" with a user. Provides functionality for geographic and address data "
-"storage, as well as integration with geocoding services. This class is "
-"designed to store detailed address information including components like "
-"street, city, region, country, and geolocation (longitude and latitude). It "
-"supports integration with geocoding APIs, enabling the storage of raw API "
-"responses for further processing or inspection. The class also allows "
-"associating an address with a user, facilitating personalized data handling."
+"Represents an address entity that includes location details and associations "
+"with a user. Provides functionality for geographic and address data storage, "
+"as well as integration with geocoding services. This class is designed to "
+"store detailed address information including components like street, city, "
+"region, country, and geolocation (longitude and latitude). It supports "
+"integration with geocoding APIs, enabling the storage of raw API responses "
+"for further processing or inspection. The class also allows associating an "
+"address with a user, facilitating personalized data handling."
msgstr ""
-"위치 세부 정보 및 사용자와의 연결을 포함하는 주소 엔티티를 나타냅니다. 지리적 및 주소 데이터 저장과 지오코딩 서비스와의 통합을 위한 "
-"기능을 제공합니다. 이 클래스는 거리, 도시, 지역, 국가, 지리적 위치(경도 및 위도)와 같은 구성 요소를 포함한 상세한 주소 정보를 "
-"저장하도록 설계되었습니다. 지오코딩 API와의 통합을 지원하여 추가 처리 또는 검사를 위해 원시 API 응답을 저장할 수 있습니다. 또한"
-" 이 클래스를 사용하면 주소를 사용자와 연결하여 개인화된 데이터 처리를 용이하게 할 수 있습니다."
+"위치 세부 정보 및 사용자와의 연결을 포함하는 주소 엔티티를 나타냅니다. 지리"
+"적 및 주소 데이터 저장과 지오코딩 서비스와의 통합을 위한 기능을 제공합니다. "
+"이 클래스는 거리, 도시, 지역, 국가, 지리적 위치(경도 및 위도)와 같은 구성 요"
+"소를 포함한 상세한 주소 정보를 저장하도록 설계되었습니다. 지오코딩 API와의 통"
+"합을 지원하여 추가 처리 또는 검사를 위해 원시 API 응답을 저장할 수 있습니다. "
+"또한 이 클래스를 사용하면 주소를 사용자와 연결하여 개인화된 데이터 처리를 용"
+"이하게 할 수 있습니다."
-#: engine/core/models.py:1029
+#: engine/core/models.py:1054
msgid "address line for the customer"
msgstr "고객 주소 라인"
-#: engine/core/models.py:1030
+#: engine/core/models.py:1055
msgid "address line"
msgstr "주소 라인"
-#: engine/core/models.py:1032
+#: engine/core/models.py:1057
msgid "street"
msgstr "거리"
-#: engine/core/models.py:1033
+#: engine/core/models.py:1058
msgid "district"
msgstr "지구"
-#: engine/core/models.py:1034
+#: engine/core/models.py:1059
msgid "city"
msgstr "도시"
-#: engine/core/models.py:1035
+#: engine/core/models.py:1060
msgid "region"
msgstr "지역"
-#: engine/core/models.py:1036
+#: engine/core/models.py:1061
msgid "postal code"
msgstr "우편 번호"
-#: engine/core/models.py:1037
+#: engine/core/models.py:1062
msgid "country"
msgstr "국가"
-#: engine/core/models.py:1044
+#: engine/core/models.py:1069
msgid "geolocation point: (longitude, latitude)"
msgstr "지리적 위치 포인트(경도, 위도)"
-#: engine/core/models.py:1047
+#: engine/core/models.py:1075
msgid "full JSON response from geocoder for this address"
msgstr "이 주소에 대한 지오코더의 전체 JSON 응답"
-#: engine/core/models.py:1052
+#: engine/core/models.py:1081
msgid "stored JSON response from the geocoding service"
msgstr "지오코딩 서비스의 저장된 JSON 응답"
-#: engine/core/models.py:1060
+#: engine/core/models.py:1091
msgid "address"
msgstr "주소"
-#: engine/core/models.py:1061
+#: engine/core/models.py:1092
msgid "addresses"
msgstr "주소"
-#: engine/core/models.py:1073
+#: engine/core/models.py:1104
msgid ""
"Represents a promotional code that can be used for discounts, managing its "
"validity, type of discount, and application. The PromoCode class stores "
@@ -2175,241 +2224,252 @@ msgid ""
"any), and status of its usage. It includes functionality to validate and "
"apply the promo code to an order while ensuring constraints are met."
msgstr ""
-"할인에 사용할 수 있는 프로모션 코드를 나타내며, 유효 기간, 할인 유형 및 적용을 관리합니다. 프로모션 코드 클래스는 고유 식별자, "
-"할인 속성(금액 또는 백분율), 유효 기간, 관련 사용자(있는 경우), 사용 상태 등 프로모션 코드에 대한 세부 정보를 저장합니다. "
-"여기에는 제약 조건이 충족되는지 확인하면서 프로모션 코드의 유효성을 검사하고 주문에 적용하는 기능이 포함되어 있습니다."
+"할인에 사용할 수 있는 프로모션 코드를 나타내며, 유효 기간, 할인 유형 및 적용"
+"을 관리합니다. 프로모션 코드 클래스는 고유 식별자, 할인 속성(금액 또는 백분"
+"율), 유효 기간, 관련 사용자(있는 경우), 사용 상태 등 프로모션 코드에 대한 세"
+"부 정보를 저장합니다. 여기에는 제약 조건이 충족되는지 확인하면서 프로모션 코"
+"드의 유효성을 검사하고 주문에 적용하는 기능이 포함되어 있습니다."
-#: engine/core/models.py:1087
+#: engine/core/models.py:1118
msgid "unique code used by a user to redeem a discount"
msgstr "사용자가 할인을 받기 위해 사용하는 고유 코드"
-#: engine/core/models.py:1088
+#: engine/core/models.py:1119
msgid "promo code identifier"
msgstr "프로모션 코드 식별자"
-#: engine/core/models.py:1095
+#: engine/core/models.py:1126
msgid "fixed discount amount applied if percent is not used"
msgstr "퍼센트를 사용하지 않을 경우 고정 할인 금액 적용"
-#: engine/core/models.py:1096
+#: engine/core/models.py:1127
msgid "fixed discount amount"
msgstr "고정 할인 금액"
-#: engine/core/models.py:1102
+#: engine/core/models.py:1133
msgid "percentage discount applied if fixed amount is not used"
msgstr "고정 금액 미사용 시 적용되는 할인 비율"
-#: engine/core/models.py:1103
+#: engine/core/models.py:1134
msgid "percentage discount"
msgstr "백분율 할인"
-#: engine/core/models.py:1108
+#: engine/core/models.py:1139
msgid "timestamp when the promocode expires"
msgstr "프로모션 코드 만료 시 타임스탬프"
-#: engine/core/models.py:1109
+#: engine/core/models.py:1140
msgid "end validity time"
msgstr "유효 기간 종료 시간"
-#: engine/core/models.py:1114
+#: engine/core/models.py:1145
msgid "timestamp from which this promocode is valid"
msgstr "이 프로모코드의 타임스탬프가 유효한 시점"
-#: engine/core/models.py:1115
+#: engine/core/models.py:1146
msgid "start validity time"
msgstr "유효 기간 시작 시간"
-#: engine/core/models.py:1120
+#: engine/core/models.py:1151
msgid "timestamp when the promocode was used, blank if not used yet"
msgstr "프로모코드가 사용된 타임스탬프, 아직 사용되지 않은 경우 비워둡니다."
-#: engine/core/models.py:1121
+#: engine/core/models.py:1152
msgid "usage timestamp"
msgstr "사용 타임스탬프"
-#: engine/core/models.py:1126
+#: engine/core/models.py:1157
msgid "user assigned to this promocode if applicable"
msgstr "해당되는 경우 이 프로모코드에 할당된 사용자"
-#: engine/core/models.py:1127
+#: engine/core/models.py:1158
msgid "assigned user"
msgstr "할당된 사용자"
-#: engine/core/models.py:1134
+#: engine/core/models.py:1165
msgid "promo code"
msgstr "프로모션 코드"
-#: engine/core/models.py:1135
+#: engine/core/models.py:1166
msgid "promo codes"
msgstr "프로모션 코드"
-#: engine/core/models.py:1150
+#: engine/core/models.py:1182
msgid ""
"only one type of discount should be defined (amount or percent), but not "
"both or neither."
-msgstr "할인 유형(금액 또는 백분율)은 한 가지 유형만 정의해야 하며, 두 가지 모두 또는 둘 다 정의해서는 안 됩니다."
+msgstr ""
+"할인 유형(금액 또는 백분율)은 한 가지 유형만 정의해야 하며, 두 가지 모두 또"
+"는 둘 다 정의해서는 안 됩니다."
-#: engine/core/models.py:1171
+#: engine/core/models.py:1204
msgid "promocode already used"
msgstr "프로모코드가 이미 사용되었습니다."
-#: engine/core/models.py:1187
+#: engine/core/models.py:1226
#, python-brace-format
msgid "invalid discount type for promocode {self.uuid}"
msgstr "프로모션 코드 {self.uuid}의 할인 유형이 잘못되었습니다!"
-#: engine/core/models.py:1196
+#: engine/core/models.py:1235
msgid ""
"Represents an order placed by a user. This class models an order within the "
"application, including its various attributes such as billing and shipping "
-"information, status, associated user, notifications, and related operations."
-" Orders can have associated products, promotions can be applied, addresses "
+"information, status, associated user, notifications, and related operations. "
+"Orders can have associated products, promotions can be applied, addresses "
"set, and shipping or billing details updated. Equally, functionality "
"supports managing the products in the order lifecycle."
msgstr ""
-"사용자가 진행한 주문을 나타냅니다. 이 클래스는 청구 및 배송 정보, 상태, 연결된 사용자, 알림 및 관련 작업과 같은 다양한 속성을 "
-"포함하여 애플리케이션 내에서 주문을 모델링합니다. 주문에는 연결된 제품, 프로모션 적용, 주소 설정, 배송 또는 청구 세부 정보 "
-"업데이트가 가능합니다. 또한 주문 수명 주기에서 제품을 관리하는 기능도 지원합니다."
+"사용자가 진행한 주문을 나타냅니다. 이 클래스는 청구 및 배송 정보, 상태, 연결"
+"된 사용자, 알림 및 관련 작업과 같은 다양한 속성을 포함하여 애플리케이션 내에"
+"서 주문을 모델링합니다. 주문에는 연결된 제품, 프로모션 적용, 주소 설정, 배송 "
+"또는 청구 세부 정보 업데이트가 가능합니다. 또한 주문 수명 주기에서 제품을 관"
+"리하는 기능도 지원합니다."
-#: engine/core/models.py:1213
+#: engine/core/models.py:1252
msgid "the billing address used for this order"
msgstr "이 주문에 사용된 청구 주소"
-#: engine/core/models.py:1221
+#: engine/core/models.py:1260
msgid "optional promo code applied to this order"
msgstr "이 주문에 적용된 프로모션 코드(선택 사항)"
-#: engine/core/models.py:1222
+#: engine/core/models.py:1261
msgid "applied promo code"
msgstr "프로모션 코드 적용"
-#: engine/core/models.py:1230
+#: engine/core/models.py:1269
msgid "the shipping address used for this order"
msgstr "이 주문에 사용된 배송지 주소"
-#: engine/core/models.py:1231
+#: engine/core/models.py:1270
msgid "shipping address"
msgstr "배송 주소"
-#: engine/core/models.py:1237
+#: engine/core/models.py:1276
msgid "current status of the order in its lifecycle"
msgstr "라이프사이클 내 주문의 현재 상태"
-#: engine/core/models.py:1238
+#: engine/core/models.py:1277
msgid "order status"
msgstr "주문 상태"
-#: engine/core/models.py:1243 engine/core/models.py:1769
+#: engine/core/models.py:1282 engine/core/models.py:1881
msgid "json structure of notifications to display to users"
-msgstr "사용자에게 표시할 알림의 JSON 구조, 관리자 UI에서는 테이블 보기가 사용됩니다."
+msgstr ""
+"사용자에게 표시할 알림의 JSON 구조, 관리자 UI에서는 테이블 보기가 사용됩니다."
-#: engine/core/models.py:1249
+#: engine/core/models.py:1288
msgid "json representation of order attributes for this order"
msgstr "이 주문에 대한 주문 속성의 JSON 표현"
-#: engine/core/models.py:1255
+#: engine/core/models.py:1294
msgid "the user who placed the order"
msgstr "주문한 사용자"
-#: engine/core/models.py:1256
+#: engine/core/models.py:1295
msgid "user"
msgstr "사용자"
-#: engine/core/models.py:1262
+#: engine/core/models.py:1301
msgid "the timestamp when the order was finalized"
msgstr "주문이 완료된 타임스탬프"
-#: engine/core/models.py:1263
+#: engine/core/models.py:1302
msgid "buy time"
msgstr "시간 확보"
-#: engine/core/models.py:1270
+#: engine/core/models.py:1309
msgid "a human-readable identifier for the order"
msgstr "사람이 읽을 수 있는 주문 식별자"
-#: engine/core/models.py:1271
+#: engine/core/models.py:1310
msgid "human readable id"
msgstr "사람이 읽을 수 있는 ID"
-#: engine/core/models.py:1277
+#: engine/core/models.py:1316
msgid "order"
msgstr "주문"
-#: engine/core/models.py:1319
+#: engine/core/models.py:1363
msgid "a user must have only one pending order at a time"
msgstr "사용자는 한 번에 하나의 대기 주문만 보유해야 합니다!"
-#: engine/core/models.py:1351
+#: engine/core/models.py:1396
msgid "you cannot add products to an order that is not a pending one"
msgstr "보류 중인 주문이 아닌 주문에는 제품을 추가할 수 없습니다."
-#: engine/core/models.py:1356
+#: engine/core/models.py:1402
msgid "you cannot add inactive products to order"
msgstr "주문에 비활성 제품을 추가할 수 없습니다."
-#: engine/core/models.py:1373
+#: engine/core/models.py:1424
msgid "you cannot add more products than available in stock"
msgstr "재고가 있는 제품보다 많은 제품을 추가할 수 없습니다."
-#: engine/core/models.py:1395 engine/core/models.py:1420
-#: engine/core/models.py:1428
+#: engine/core/models.py:1448 engine/core/models.py:1477
+#: engine/core/models.py:1487
msgid "you cannot remove products from an order that is not a pending one"
msgstr "보류 중인 주문이 아닌 주문에서는 제품을 제거할 수 없습니다."
-#: engine/core/models.py:1416
+#: engine/core/models.py:1472
#, python-brace-format
msgid "{name} does not exist with query <{query}>"
msgstr "쿼리 <{query}>에 {name}가 존재하지 않습니다!"
-#: engine/core/models.py:1448
+#: engine/core/models.py:1511
msgid "promocode does not exist"
msgstr "프로모코드가 존재하지 않습니다."
-#: engine/core/models.py:1454
+#: engine/core/models.py:1526
msgid "you can only buy physical products with shipping address specified"
msgstr "배송 주소가 지정된 실제 제품만 구매할 수 있습니다!"
-#: engine/core/models.py:1473
+#: engine/core/models.py:1547
msgid "address does not exist"
msgstr "주소가 존재하지 않습니다."
-#: engine/core/models.py:1494 engine/core/models.py:1563
+#: engine/core/models.py:1569 engine/core/models.py:1648
msgid "you can not buy at this moment, please try again in a few minutes"
msgstr "지금은 구매할 수 없습니다. 몇 분 후에 다시 시도해 주세요."
-#: engine/core/models.py:1497 engine/core/models.py:1559
+#: engine/core/models.py:1575 engine/core/models.py:1641
msgid "invalid force value"
msgstr "잘못된 힘 값"
-#: engine/core/models.py:1503 engine/core/models.py:1566
+#: engine/core/models.py:1581 engine/core/models.py:1652
msgid "you cannot purchase an empty order!"
msgstr "빈 주문은 구매할 수 없습니다!"
-#: engine/core/models.py:1522
+#: engine/core/models.py:1602
msgid "you cannot buy an order without a user"
msgstr "사용자 없이는 주문을 구매할 수 없습니다!"
-#: engine/core/models.py:1536
+#: engine/core/models.py:1616
msgid "a user without a balance cannot buy with balance"
msgstr "잔액이 없는 사용자는 잔액으로 구매할 수 없습니다!"
-#: engine/core/models.py:1541
+#: engine/core/models.py:1622
msgid "insufficient funds to complete the order"
msgstr "주문을 완료하기에 자금이 부족합니다."
-#: engine/core/models.py:1575
+#: engine/core/models.py:1663
msgid ""
"you cannot buy without registration, please provide the following "
"information: customer name, customer email, customer phone number"
-msgstr "등록하지 않으면 구매할 수 없으므로 고객 이름, 고객 이메일, 고객 전화 번호 등의 정보를 제공하세요."
+msgstr ""
+"등록하지 않으면 구매할 수 없으므로 고객 이름, 고객 이메일, 고객 전화 번호 등"
+"의 정보를 제공하세요."
-#: engine/core/models.py:1584
+#: engine/core/models.py:1674
#, python-brace-format
msgid ""
"invalid payment method: {payment_method} from {available_payment_methods}"
-msgstr "결제 방법이 잘못되었습니다: {payment_method}에서 {available_payment_methods}로!"
+msgstr ""
+"결제 방법이 잘못되었습니다: {payment_method}에서 {available_payment_methods}"
+"로!"
-#: engine/core/models.py:1699
+#: engine/core/models.py:1805
msgid ""
"Manages user feedback for products. This class is designed to capture and "
"store user feedback for specific products that they have purchased. It "
@@ -2417,36 +2477,37 @@ msgid ""
"product in the order, and a user-assigned rating. The class uses database "
"fields to effectively model and manage feedback data."
msgstr ""
-"제품에 대한 사용자 피드백을 관리합니다. 이 클래스는 사용자가 구매한 특정 제품에 대한 사용자 피드백을 캡처하고 저장하도록 "
-"설계되었습니다. 여기에는 사용자 댓글, 주문에서 관련 제품에 대한 참조 및 사용자가 지정한 등급을 저장하는 속성이 포함되어 있습니다. 이"
-" 클래스는 데이터베이스 필드를 사용하여 피드백 데이터를 효과적으로 모델링하고 관리합니다."
+"제품에 대한 사용자 피드백을 관리합니다. 이 클래스는 사용자가 구매한 특정 제품"
+"에 대한 사용자 피드백을 캡처하고 저장하도록 설계되었습니다. 여기에는 사용자 "
+"댓글, 주문에서 관련 제품에 대한 참조 및 사용자가 지정한 등급을 저장하는 속성"
+"이 포함되어 있습니다. 이 클래스는 데이터베이스 필드를 사용하여 피드백 데이터"
+"를 효과적으로 모델링하고 관리합니다."
-#: engine/core/models.py:1711
+#: engine/core/models.py:1817
msgid "user-provided comments about their experience with the product"
msgstr "제품 사용 경험에 대한 사용자 제공 의견"
-#: engine/core/models.py:1712
+#: engine/core/models.py:1818
msgid "feedback comments"
msgstr "피드백 댓글"
-#: engine/core/models.py:1719
-msgid ""
-"references the specific product in an order that this feedback is about"
+#: engine/core/models.py:1826
+msgid "references the specific product in an order that this feedback is about"
msgstr "이 피드백에 대한 순서대로 특정 제품을 참조합니다."
-#: engine/core/models.py:1720
+#: engine/core/models.py:1828
msgid "related order product"
msgstr "관련 주문 제품"
-#: engine/core/models.py:1725
+#: engine/core/models.py:1833
msgid "user-assigned rating for the product"
msgstr "제품에 대한 사용자 지정 평점"
-#: engine/core/models.py:1726
+#: engine/core/models.py:1834
msgid "product rating"
msgstr "제품 평가"
-#: engine/core/models.py:1742
+#: engine/core/models.py:1854
msgid ""
"Represents products associated with orders and their attributes. The "
"OrderProduct model maintains information about a product that is part of an "
@@ -2458,134 +2519,139 @@ msgid ""
"download URL for digital products. The model integrates with the Order and "
"Product models and stores a reference to them."
msgstr ""
-"주문과 관련된 제품 및 해당 속성을 나타냅니다. 주문 제품 모델은 구매 가격, 수량, 제품 속성 및 상태 등의 세부 정보를 포함하여 "
-"주문의 일부인 제품에 대한 정보를 유지 관리합니다. 사용자 및 관리자에 대한 알림을 관리하고 제품 잔액 반환 또는 피드백 추가와 같은 "
-"작업을 처리합니다. 또한 이 모델은 총 가격 계산이나 디지털 제품의 다운로드 URL 생성 등 비즈니스 로직을 지원하는 메서드와 속성을 "
-"제공합니다. 이 모델은 주문 및 제품 모델과 통합되며 해당 모델에 대한 참조를 저장합니다."
+"주문과 관련된 제품 및 해당 속성을 나타냅니다. 주문 제품 모델은 구매 가격, 수"
+"량, 제품 속성 및 상태 등의 세부 정보를 포함하여 주문의 일부인 제품에 대한 정"
+"보를 유지 관리합니다. 사용자 및 관리자에 대한 알림을 관리하고 제품 잔액 반환 "
+"또는 피드백 추가와 같은 작업을 처리합니다. 또한 이 모델은 총 가격 계산이나 디"
+"지털 제품의 다운로드 URL 생성 등 비즈니스 로직을 지원하는 메서드와 속성을 제"
+"공합니다. 이 모델은 주문 및 제품 모델과 통합되며 해당 모델에 대한 참조를 저장"
+"합니다."
-#: engine/core/models.py:1757
+#: engine/core/models.py:1869
msgid "the price paid by the customer for this product at purchase time"
msgstr "구매 시점에 고객이 이 제품에 대해 지불한 가격입니다."
-#: engine/core/models.py:1758
+#: engine/core/models.py:1870
msgid "purchase price at order time"
msgstr "주문 시점의 구매 가격"
-#: engine/core/models.py:1763
+#: engine/core/models.py:1875
msgid "internal comments for admins about this ordered product"
msgstr "주문한 제품에 대한 관리자용 내부 댓글"
-#: engine/core/models.py:1764
+#: engine/core/models.py:1876
msgid "internal comments"
msgstr "내부 의견"
-#: engine/core/models.py:1770
+#: engine/core/models.py:1882
msgid "user notifications"
msgstr "사용자 알림"
-#: engine/core/models.py:1775
+#: engine/core/models.py:1887
msgid "json representation of this item's attributes"
msgstr "이 항목의 속성에 대한 JSON 표현"
-#: engine/core/models.py:1776
+#: engine/core/models.py:1888
msgid "ordered product attributes"
msgstr "주문한 제품 속성"
-#: engine/core/models.py:1781
+#: engine/core/models.py:1893
msgid "reference to the parent order that contains this product"
msgstr "이 제품이 포함된 상위 주문 참조"
-#: engine/core/models.py:1782
+#: engine/core/models.py:1894
msgid "parent order"
msgstr "상위 주문"
-#: engine/core/models.py:1791
+#: engine/core/models.py:1903
msgid "the specific product associated with this order line"
msgstr "이 주문 라인과 연결된 특정 제품"
-#: engine/core/models.py:1798
+#: engine/core/models.py:1910
msgid "quantity of this specific product in the order"
msgstr "이 특정 제품의 주문 수량"
-#: engine/core/models.py:1799
+#: engine/core/models.py:1911
msgid "product quantity"
msgstr "제품 수량"
-#: engine/core/models.py:1806
+#: engine/core/models.py:1918
msgid "current status of this product in the order"
msgstr "이 제품의 현재 상태 순서"
-#: engine/core/models.py:1807
+#: engine/core/models.py:1919
msgid "product line status"
msgstr "제품 라인 상태"
-#: engine/core/models.py:1872
+#: engine/core/models.py:1986
msgid "order product must have an order"
msgstr "주문제품에는 연결된 주문이 있어야 합니다!"
-#: engine/core/models.py:1874
+#: engine/core/models.py:1988
#, python-brace-format
msgid "wrong action specified for feedback: {action}"
msgstr "피드백에 지정된 작업이 잘못되었습니다: {action}!"
-#: engine/core/models.py:1888
+#: engine/core/models.py:2005
msgid "you cannot feedback an order which is not received"
msgstr "받지 않은 주문에 대해서는 피드백을 제공할 수 없습니다."
-#: engine/core/models.py:1894
+#: engine/core/models.py:2014
msgid "name"
msgstr "이름"
-#: engine/core/models.py:1895
+#: engine/core/models.py:2016
msgid "URL of the integration"
msgstr "통합 URL"
-#: engine/core/models.py:1896
+#: engine/core/models.py:2019
msgid "authentication credentials"
msgstr "인증 자격 증명"
-#: engine/core/models.py:1918
+#: engine/core/models.py:2042
msgid "you can only have one default CRM provider"
msgstr "기본 CRM 공급업체는 하나만 사용할 수 있습니다."
-#: engine/core/models.py:1928
+#: engine/core/models.py:2052
msgid "CRM"
msgstr "CRM"
-#: engine/core/models.py:1929
+#: engine/core/models.py:2053
msgid "CRMs"
msgstr "CRM"
-#: engine/core/models.py:1941
+#: engine/core/models.py:2069
msgid "order CRM link"
msgstr "주문의 CRM 링크"
-#: engine/core/models.py:1942
+#: engine/core/models.py:2070
msgid "orders CRM links"
msgstr "주문의 CRM 링크"
-#: engine/core/models.py:1947
+#: engine/core/models.py:2075
msgid ""
"Represents the downloading functionality for digital assets associated with "
"orders. The DigitalAssetDownload class provides the ability to manage and "
"access downloads related to order products. It maintains information about "
-"the associated order product, the number of downloads, and whether the asset"
-" is publicly visible. It includes a method to generate a URL for downloading"
-" the asset when the associated order is in a completed status."
+"the associated order product, the number of downloads, and whether the asset "
+"is publicly visible. It includes a method to generate a URL for downloading "
+"the asset when the associated order is in a completed status."
msgstr ""
-"주문과 관련된 디지털 자산의 다운로드 기능을 나타냅니다. 디지털 자산 다운로드 클래스는 주문 상품과 관련된 다운로드를 관리하고 액세스할 "
-"수 있는 기능을 제공합니다. 연결된 주문 상품, 다운로드 횟수, 자산이 공개적으로 표시되는지 여부에 대한 정보를 유지 관리합니다. "
-"여기에는 연결된 주문이 완료 상태일 때 자산을 다운로드할 수 있는 URL을 생성하는 메서드가 포함되어 있습니다."
+"주문과 관련된 디지털 자산의 다운로드 기능을 나타냅니다. 디지털 자산 다운로드 "
+"클래스는 주문 상품과 관련된 다운로드를 관리하고 액세스할 수 있는 기능을 제공"
+"합니다. 연결된 주문 상품, 다운로드 횟수, 자산이 공개적으로 표시되는지 여부에 "
+"대한 정보를 유지 관리합니다. 여기에는 연결된 주문이 완료 상태일 때 자산을 다"
+"운로드할 수 있는 URL을 생성하는 메서드가 포함되어 있습니다."
-#: engine/core/models.py:1961
+#: engine/core/models.py:2091
msgid "download"
msgstr "다운로드"
-#: engine/core/models.py:1962
+#: engine/core/models.py:2092
msgid "downloads"
msgstr "다운로드"
-#: engine/core/serializers/utility.py:89
+#: engine/core/serializers/utility.py:91
msgid ""
"you must provide a comment, rating, and order product uuid to add feedback."
msgstr "피드백을 추가하려면 댓글, 평점, 주문 제품 고유번호를 제공해야 합니다."
@@ -2780,10 +2846,12 @@ msgstr "안녕하세요 %(order.user.first_name)s,"
#, python-format
msgid ""
"thank you for your order #%(order.pk)s! we are pleased to inform you that\n"
-" we have taken your order into work. below are the details of your\n"
+" we have taken your order into work. below are "
+"the details of your\n"
" order:"
msgstr ""
-"주문해 주셔서 감사합니다 #%(order.pk)s! 주문하신 상품이 입고되었음을 알려드립니다. 주문 세부 정보는 아래와 같습니다:"
+"주문해 주셔서 감사합니다 #%(order.pk)s! 주문하신 상품이 입고되었음을 알려드립"
+"니다. 주문 세부 정보는 아래와 같습니다:"
#: engine/core/templates/digital_order_created_email.html:112
#: engine/core/templates/digital_order_delivered_email.html:110
@@ -2806,7 +2874,8 @@ msgstr "총 가격"
msgid ""
"if you have any questions, feel free to contact our support at\n"
" %(config.EMAIL_HOST_USER)s."
-msgstr "궁금한 점이 있으면 언제든지 %(config.EMAIL_HOST_USER)s로 지원팀에 문의하세요."
+msgstr ""
+"궁금한 점이 있으면 언제든지 %(config.EMAIL_HOST_USER)s로 지원팀에 문의하세요."
#: engine/core/templates/digital_order_created_email.html:133
#, python-format
@@ -2834,7 +2903,9 @@ msgstr "안녕하세요 %(user_first_name)s,"
msgid ""
"we have successfully processed your order №%(order_uuid)s! below are the\n"
" details of your order:"
-msgstr "주문이 성공적으로 처리되었습니다 №%(order_uuid)s! 주문 세부 정보는 아래와 같습니다:"
+msgstr ""
+"주문이 성공적으로 처리되었습니다 №%(order_uuid)s! 주문 세부 정보는 아래와 같"
+"습니다:"
#: engine/core/templates/digital_order_delivered_email.html:128
msgid ""
@@ -2887,9 +2958,12 @@ msgstr ""
#: engine/core/templates/shipped_order_created_email.html:101
#: engine/core/templates/shipped_order_delivered_email.html:101
msgid ""
-"thank you for your order! we are pleased to confirm your purchase. below are\n"
+"thank you for your order! we are pleased to confirm your purchase. below "
+"are\n"
" the details of your order:"
-msgstr "주문해 주셔서 감사합니다! 구매를 확인하게 되어 기쁩니다. 주문 세부 정보는 아래와 같습니다:"
+msgstr ""
+"주문해 주셔서 감사합니다! 구매를 확인하게 되어 기쁩니다. 주문 세부 정보는 아"
+"래와 같습니다:"
#: engine/core/templates/shipped_order_created_email.html:123
#: engine/core/templates/shipped_order_delivered_email.html:123
@@ -2916,11 +2990,11 @@ msgstr ""
"모든 권리\n"
" 예약됨"
-#: engine/core/utils/caching.py:44
+#: engine/core/utils/caching.py:48
msgid "both data and timeout are required"
msgstr "데이터와 시간 초과가 모두 필요합니다."
-#: engine/core/utils/caching.py:46
+#: engine/core/utils/caching.py:51
msgid "invalid timeout value, it must be between 0 and 216000 seconds"
msgstr "잘못된 시간 초과 값, 0~216000초 사이여야 합니다."
@@ -2929,17 +3003,17 @@ msgstr "잘못된 시간 초과 값, 0~216000초 사이여야 합니다."
msgid "{settings.PROJECT_NAME} | contact us initiated"
msgstr "{settings.PROJECT_NAME} | 문의 시작됨"
-#: engine/core/utils/emailing.py:73
+#: engine/core/utils/emailing.py:81
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order confirmation"
msgstr "{settings.PROJECT_NAME} | 주문 확인"
-#: engine/core/utils/emailing.py:105
+#: engine/core/utils/emailing.py:115
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order delivered"
msgstr "{settings.PROJECT_NAME} | 주문 배송"
-#: engine/core/utils/emailing.py:188
+#: engine/core/utils/emailing.py:203
#, python-brace-format
msgid "{settings.PROJECT_NAME} | promocode granted"
msgstr "{settings.PROJECT_NAME} | 프로모코드 부여됨"
@@ -2952,123 +3026,137 @@ msgstr "이 작업을 수행할 수 있는 권한이 없습니다."
msgid "NOMINATIM_URL must be configured."
msgstr "NOMINATIM_URL 파라미터를 설정해야 합니다!"
-#: engine/core/validators.py:19
+#: engine/core/validators.py:21
#, python-brace-format
msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels"
-msgstr "이미지 크기는 w{max_width} x h{max_height} 픽셀을 초과하지 않아야 합니다!"
+msgstr ""
+"이미지 크기는 w{max_width} x h{max_height} 픽셀을 초과하지 않아야 합니다!"
-#: engine/core/views.py:91
+#: engine/core/views.py:105
msgid ""
"Handles the request for the sitemap index and returns an XML response. It "
"ensures the response includes the appropriate content type header for XML."
msgstr ""
-"사이트맵 색인에 대한 요청을 처리하고 XML 응답을 반환합니다. 응답에 XML에 적합한 콘텐츠 유형 헤더가 포함되어 있는지 확인합니다."
+"사이트맵 색인에 대한 요청을 처리하고 XML 응답을 반환합니다. 응답에 XML에 적합"
+"한 콘텐츠 유형 헤더가 포함되어 있는지 확인합니다."
-#: engine/core/views.py:106
+#: engine/core/views.py:120
msgid ""
"Handles the detailed view response for a sitemap. This function processes "
"the request, fetches the appropriate sitemap detail response, and sets the "
"Content-Type header for XML."
msgstr ""
-"사이트맵에 대한 상세 보기 응답을 처리합니다. 이 함수는 요청을 처리하고 적절한 사이트맵 상세 보기 응답을 가져온 다음 XML의 "
-"Content-Type 헤더를 설정합니다."
+"사이트맵에 대한 상세 보기 응답을 처리합니다. 이 함수는 요청을 처리하고 적절"
+"한 사이트맵 상세 보기 응답을 가져온 다음 XML의 Content-Type 헤더를 설정합니"
+"다."
-#: engine/core/views.py:141
+#: engine/core/views.py:156
msgid ""
"Returns a list of supported languages and their corresponding information."
msgstr "지원되는 언어 목록과 해당 정보를 반환합니다."
-#: engine/core/views.py:173
+#: engine/core/views.py:183
msgid "Returns the parameters of the website as a JSON object."
msgstr "웹사이트의 매개변수를 JSON 객체로 반환합니다."
-#: engine/core/views.py:192
+#: engine/core/views.py:199
msgid ""
"Handles cache operations such as reading and setting cache data with a "
"specified key and timeout."
-msgstr "지정된 키와 시간 초과로 캐시 데이터를 읽고 설정하는 등의 캐시 작업을 처리합니다."
+msgstr ""
+"지정된 키와 시간 초과로 캐시 데이터를 읽고 설정하는 등의 캐시 작업을 처리합니"
+"다."
-#: engine/core/views.py:219
+#: engine/core/views.py:221
msgid "Handles `contact us` form submissions."
msgstr "'문의하기' 양식 제출을 처리합니다."
-#: engine/core/views.py:240
+#: engine/core/views.py:237
msgid ""
"Handles requests for processing and validating URLs from incoming POST "
"requests."
msgstr "들어오는 POST 요청의 URL 처리 및 유효성 검사 요청을 처리합니다."
-#: engine/core/views.py:280
+#: engine/core/views.py:274
msgid "Handles global search queries."
msgstr "글로벌 검색 쿼리를 처리합니다."
-#: engine/core/views.py:295
+#: engine/core/views.py:290
msgid "Handles the logic of buying as a business without registration."
msgstr "등록하지 않고 비즈니스로 구매하는 로직을 처리합니다."
-#: engine/core/views.py:332
+#: engine/core/views.py:338
msgid ""
"Handles the downloading of a digital asset associated with an order.\n"
-"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the digital asset file located in the "
+"storage directory of the project. If the file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
msgstr ""
"주문과 관련된 디지털 자산의 다운로드를 처리합니다.\n"
-"이 함수는 프로젝트의 저장소 디렉토리에 있는 디지털 자산 파일을 제공하려고 시도합니다. 파일을 찾을 수 없으면 HTTP 404 오류가 발생하여 리소스를 사용할 수 없음을 나타냅니다."
+"이 함수는 프로젝트의 저장소 디렉토리에 있는 디지털 자산 파일을 제공하려고 시"
+"도합니다. 파일을 찾을 수 없으면 HTTP 404 오류가 발생하여 리소스를 사용할 수 "
+"없음을 나타냅니다."
-#: engine/core/views.py:343
+#: engine/core/views.py:349
msgid "order_product_uuid is required"
msgstr "주문_제품_UUID는 필수입니다."
-#: engine/core/views.py:350
+#: engine/core/views.py:356
msgid "order product does not exist"
msgstr "주문 제품이 존재하지 않습니다."
-#: engine/core/views.py:353
+#: engine/core/views.py:359
msgid "you can only download the digital asset once"
msgstr "디지털 자산은 한 번만 다운로드할 수 있습니다."
-#: engine/core/views.py:356
+#: engine/core/views.py:363
msgid "the order must be paid before downloading the digital asset"
msgstr "디지털 자산을 다운로드하기 전에 주문을 결제해야 합니다."
-#: engine/core/views.py:362
+#: engine/core/views.py:370
msgid "the order product does not have a product"
msgstr "주문 제품에 제품이 없습니다."
-#: engine/core/views.py:399
+#: engine/core/views.py:414
msgid "favicon not found"
msgstr "파비콘을 찾을 수 없습니다."
-#: engine/core/views.py:404
+#: engine/core/views.py:419
msgid ""
"Handles requests for the favicon of a website.\n"
-"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the favicon file located in the static "
+"directory of the project. If the favicon file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
msgstr ""
"웹사이트의 파비콘 요청을 처리합니다.\n"
-"이 함수는 프로젝트의 정적 디렉토리에 있는 파비콘 파일을 제공하려고 시도합니다. 파비콘 파일을 찾을 수 없는 경우 HTTP 404 오류가 발생하여 리소스를 사용할 수 없음을 나타냅니다."
+"이 함수는 프로젝트의 정적 디렉토리에 있는 파비콘 파일을 제공하려고 시도합니"
+"다. 파비콘 파일을 찾을 수 없는 경우 HTTP 404 오류가 발생하여 리소스를 사용할 "
+"수 없음을 나타냅니다."
-#: engine/core/views.py:416
+#: engine/core/views.py:431
msgid ""
-"Redirects the request to the admin index page. The function handles incoming"
-" HTTP requests and redirects them to the Django admin interface index page. "
+"Redirects the request to the admin index page. The function handles incoming "
+"HTTP requests and redirects them to the Django admin interface index page. "
"It uses Django's `redirect` function for handling the HTTP redirection."
msgstr ""
-"요청을 관리자 색인 페이지로 리디렉션합니다. 이 함수는 들어오는 HTTP 요청을 처리하여 Django 관리자 인터페이스 인덱스 페이지로 "
-"리디렉션합니다. HTTP 리디렉션을 처리하기 위해 Django의 `redirect` 함수를 사용합니다."
+"요청을 관리자 색인 페이지로 리디렉션합니다. 이 함수는 들어오는 HTTP 요청을 처"
+"리하여 Django 관리자 인터페이스 인덱스 페이지로 리디렉션합니다. HTTP 리디렉션"
+"을 처리하기 위해 Django의 `redirect` 함수를 사용합니다."
-#: engine/core/views.py:429
+#: engine/core/views.py:443
msgid "Returns current version of the eVibes. "
msgstr "현재 버전의 eVibes를 반환합니다."
-#: engine/core/views.py:623 engine/core/views.py:636
+#: engine/core/views.py:672 engine/core/views.py:687
#, python-format
msgid "Revenue & Orders (last %(days)d)"
msgstr "수익 및 주문(마지막 %(days)d)"
-#: engine/core/views.py:793
+#: engine/core/views.py:868
msgid "Returns custom variables for Dashboard. "
msgstr "대시보드에 대한 사용자 지정 변수를 반환합니다."
-#: engine/core/viewsets.py:136
+#: engine/core/viewsets.py:139
msgid ""
"Defines a viewset for managing Evibes-related operations. The EvibesViewSet "
"class inherits from ModelViewSet and provides functionality for handling "
@@ -3076,23 +3164,24 @@ msgid ""
"serializer classes based on the current action, customizable permissions, "
"and rendering formats."
msgstr ""
-"Evibes 관련 작업을 관리하기 위한 뷰셋을 정의합니다. EvibesViewSet 클래스는 ModelViewSet에서 상속되며 "
-"Evibes 엔티티에 대한 액션 및 연산을 처리하는 기능을 제공합니다. 여기에는 현재 작업을 기반으로 하는 동적 직렬화기 클래스, 사용자"
-" 지정 가능한 권한 및 렌더링 형식에 대한 지원이 포함됩니다."
+"Evibes 관련 작업을 관리하기 위한 뷰셋을 정의합니다. EvibesViewSet 클래스는 "
+"ModelViewSet에서 상속되며 Evibes 엔티티에 대한 액션 및 연산을 처리하는 기능"
+"을 제공합니다. 여기에는 현재 작업을 기반으로 하는 동적 직렬화기 클래스, 사용"
+"자 지정 가능한 권한 및 렌더링 형식에 대한 지원이 포함됩니다."
-#: engine/core/viewsets.py:156
+#: engine/core/viewsets.py:160
msgid ""
-"Represents a viewset for managing AttributeGroup objects. Handles operations"
-" related to AttributeGroup, including filtering, serialization, and "
-"retrieval of data. This class is part of the application's API layer and "
-"provides a standardized way to process requests and responses for "
-"AttributeGroup data."
+"Represents a viewset for managing AttributeGroup objects. Handles operations "
+"related to AttributeGroup, including filtering, serialization, and retrieval "
+"of data. This class is part of the application's API layer and provides a "
+"standardized way to process requests and responses for AttributeGroup data."
msgstr ""
-"속성 그룹 객체를 관리하기 위한 뷰셋을 나타냅니다. 데이터의 필터링, 직렬화, 검색 등 AttributeGroup과 관련된 작업을 "
-"처리합니다. 이 클래스는 애플리케이션의 API 계층의 일부이며 AttributeGroup 데이터에 대한 요청 및 응답을 처리하는 표준화된"
-" 방법을 제공합니다."
+"속성 그룹 객체를 관리하기 위한 뷰셋을 나타냅니다. 데이터의 필터링, 직렬화, 검"
+"색 등 AttributeGroup과 관련된 작업을 처리합니다. 이 클래스는 애플리케이션의 "
+"API 계층의 일부이며 AttributeGroup 데이터에 대한 요청 및 응답을 처리하는 표준"
+"화된 방법을 제공합니다."
-#: engine/core/viewsets.py:175
+#: engine/core/viewsets.py:179
msgid ""
"Handles operations related to Attribute objects within the application. "
"Provides a set of API endpoints to interact with Attribute data. This class "
@@ -3101,23 +3190,26 @@ msgid ""
"specific fields or retrieving detailed versus simplified information "
"depending on the request."
msgstr ""
-"애플리케이션 내에서 속성 개체와 관련된 작업을 처리합니다. 속성 데이터와 상호 작용할 수 있는 API 엔드포인트 세트를 제공합니다. 이 "
-"클래스는 속성 개체의 쿼리, 필터링 및 직렬화를 관리하여 특정 필드별로 필터링하거나 요청에 따라 단순화된 정보와 상세한 정보를 검색하는 "
-"등 반환되는 데이터를 동적으로 제어할 수 있도록 합니다."
+"애플리케이션 내에서 속성 개체와 관련된 작업을 처리합니다. 속성 데이터와 상호 "
+"작용할 수 있는 API 엔드포인트 세트를 제공합니다. 이 클래스는 속성 개체의 쿼"
+"리, 필터링 및 직렬화를 관리하여 특정 필드별로 필터링하거나 요청에 따라 단순화"
+"된 정보와 상세한 정보를 검색하는 등 반환되는 데이터를 동적으로 제어할 수 있도"
+"록 합니다."
-#: engine/core/viewsets.py:194
+#: engine/core/viewsets.py:198
msgid ""
"A viewset for managing AttributeValue objects. This viewset provides "
"functionality for listing, retrieving, creating, updating, and deleting "
"AttributeValue objects. It integrates with Django REST Framework's viewset "
-"mechanisms and uses appropriate serializers for different actions. Filtering"
-" capabilities are provided through the DjangoFilterBackend."
+"mechanisms and uses appropriate serializers for different actions. Filtering "
+"capabilities are provided through the DjangoFilterBackend."
msgstr ""
-"속성값 객체를 관리하기 위한 뷰셋입니다. 이 뷰셋은 AttributeValue 객체를 나열, 검색, 생성, 업데이트 및 삭제하기 위한 "
-"기능을 제공합니다. 이 뷰셋은 장고 REST 프레임워크의 뷰셋 메커니즘과 통합되며 다양한 작업에 적절한 직렬화기를 사용합니다. 필터링 "
-"기능은 DjangoFilterBackend를 통해 제공됩니다."
+"속성값 객체를 관리하기 위한 뷰셋입니다. 이 뷰셋은 AttributeValue 객체를 나"
+"열, 검색, 생성, 업데이트 및 삭제하기 위한 기능을 제공합니다. 이 뷰셋은 장고 "
+"REST 프레임워크의 뷰셋 메커니즘과 통합되며 다양한 작업에 적절한 직렬화기를 사"
+"용합니다. 필터링 기능은 DjangoFilterBackend를 통해 제공됩니다."
-#: engine/core/viewsets.py:213
+#: engine/core/viewsets.py:217
msgid ""
"Manages views for Category-related operations. The CategoryViewSet class is "
"responsible for handling operations related to the Category model in the "
@@ -3125,21 +3217,23 @@ msgid ""
"The viewset also enforces permissions to ensure that only authorized users "
"can access specific data."
msgstr ""
-"카테고리 관련 작업에 대한 보기를 관리합니다. CategoryViewSet 클래스는 시스템에서 카테고리 모델과 관련된 작업을 처리하는 "
-"역할을 담당합니다. 카테고리 데이터 검색, 필터링 및 직렬화를 지원합니다. 또한 이 뷰 집합은 권한이 부여된 사용자만 특정 데이터에 "
-"액세스할 수 있도록 권한을 적용합니다."
+"카테고리 관련 작업에 대한 보기를 관리합니다. CategoryViewSet 클래스는 시스템"
+"에서 카테고리 모델과 관련된 작업을 처리하는 역할을 담당합니다. 카테고리 데이"
+"터 검색, 필터링 및 직렬화를 지원합니다. 또한 이 뷰 집합은 권한이 부여된 사용"
+"자만 특정 데이터에 액세스할 수 있도록 권한을 적용합니다."
-#: engine/core/viewsets.py:326
+#: engine/core/viewsets.py:346
msgid ""
"Represents a viewset for managing Brand instances. This class provides "
"functionality for querying, filtering, and serializing Brand objects. It "
"uses Django's ViewSet framework to simplify the implementation of API "
"endpoints for Brand objects."
msgstr ""
-"브랜드 인스턴스를 관리하기 위한 뷰셋을 나타냅니다. 이 클래스는 브랜드 객체를 쿼리, 필터링 및 직렬화하기 위한 기능을 제공합니다. 이 "
-"클래스는 장고의 뷰셋 프레임워크를 사용하여 브랜드 객체에 대한 API 엔드포인트의 구현을 간소화합니다."
+"브랜드 인스턴스를 관리하기 위한 뷰셋을 나타냅니다. 이 클래스는 브랜드 객체를 "
+"쿼리, 필터링 및 직렬화하기 위한 기능을 제공합니다. 이 클래스는 장고의 뷰셋 프"
+"레임워크를 사용하여 브랜드 객체에 대한 API 엔드포인트의 구현을 간소화합니다."
-#: engine/core/viewsets.py:438
+#: engine/core/viewsets.py:458
msgid ""
"Manages operations related to the `Product` model in the system. This class "
"provides a viewset for managing products, including their filtering, "
@@ -3149,12 +3243,13 @@ msgid ""
"product details, applying permissions, and accessing related feedback of a "
"product."
msgstr ""
-"시스템에서 `Product` 모델과 관련된 작업을 관리합니다. 이 클래스는 필터링, 직렬화 및 특정 인스턴스에 대한 작업을 포함하여 "
-"제품을 관리하기 위한 뷰셋을 제공합니다. 이 클래스는 공통 기능을 사용하기 위해 `EvibesViewSet`에서 확장되며 RESTful "
-"API 작업을 위해 Django REST 프레임워크와 통합됩니다. 제품 세부 정보 검색, 권한 적용, 제품의 관련 피드백에 액세스하는 "
-"메서드가 포함되어 있습니다."
+"시스템에서 `Product` 모델과 관련된 작업을 관리합니다. 이 클래스는 필터링, 직"
+"렬화 및 특정 인스턴스에 대한 작업을 포함하여 제품을 관리하기 위한 뷰셋을 제공"
+"합니다. 이 클래스는 공통 기능을 사용하기 위해 `EvibesViewSet`에서 확장되며 "
+"RESTful API 작업을 위해 Django REST 프레임워크와 통합됩니다. 제품 세부 정보 "
+"검색, 권한 적용, 제품의 관련 피드백에 액세스하는 메서드가 포함되어 있습니다."
-#: engine/core/viewsets.py:574
+#: engine/core/viewsets.py:605
msgid ""
"Represents a viewset for managing Vendor objects. This viewset allows "
"fetching, filtering, and serializing Vendor data. It defines the queryset, "
@@ -3162,84 +3257,94 @@ msgid ""
"actions. The purpose of this class is to provide streamlined access to "
"Vendor-related resources through the Django REST framework."
msgstr ""
-"벤더 객체를 관리하기 위한 뷰셋을 나타냅니다. 이 뷰셋을 통해 벤더 데이터를 가져오고, 필터링하고, 직렬화할 수 있습니다. 다양한 작업을"
-" 처리하는 데 사용되는 쿼리 집합, 필터 구성 및 직렬화기 클래스를 정의합니다. 이 클래스의 목적은 Django REST 프레임워크를 "
-"통해 공급업체 관련 리소스에 대한 간소화된 액세스를 제공하는 것입니다."
+"벤더 객체를 관리하기 위한 뷰셋을 나타냅니다. 이 뷰셋을 통해 벤더 데이터를 가"
+"져오고, 필터링하고, 직렬화할 수 있습니다. 다양한 작업을 처리하는 데 사용되는 "
+"쿼리 집합, 필터 구성 및 직렬화기 클래스를 정의합니다. 이 클래스의 목적은 "
+"Django REST 프레임워크를 통해 공급업체 관련 리소스에 대한 간소화된 액세스를 "
+"제공하는 것입니다."
-#: engine/core/viewsets.py:594
+#: engine/core/viewsets.py:625
msgid ""
"Representation of a view set handling Feedback objects. This class manages "
"operations related to Feedback objects, including listing, filtering, and "
"retrieving details. The purpose of this view set is to provide different "
-"serializers for different actions and implement permission-based handling of"
-" accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
+"serializers for different actions and implement permission-based handling of "
+"accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
"use of Django's filtering system for querying data."
msgstr ""
-"피드백 개체를 처리하는 뷰 집합의 표현입니다. 이 클래스는 세부 정보 나열, 필터링 및 검색을 포함하여 피드백 개체에 관련된 작업을 "
-"관리합니다. 이 뷰 세트의 목적은 다양한 작업에 대해 서로 다른 직렬화기를 제공하고 접근 가능한 피드백 객체에 대한 권한 기반 처리를 "
-"구현하는 것입니다. 이 클래스는 기본 `EvibesViewSet`을 확장하고 데이터 쿼리를 위해 Django의 필터링 시스템을 "
-"사용합니다."
+"피드백 개체를 처리하는 뷰 집합의 표현입니다. 이 클래스는 세부 정보 나열, 필터"
+"링 및 검색을 포함하여 피드백 개체에 관련된 작업을 관리합니다. 이 뷰 세트의 목"
+"적은 다양한 작업에 대해 서로 다른 직렬화기를 제공하고 접근 가능한 피드백 객체"
+"에 대한 권한 기반 처리를 구현하는 것입니다. 이 클래스는 기본 `EvibesViewSet`"
+"을 확장하고 데이터 쿼리를 위해 Django의 필터링 시스템을 사용합니다."
-#: engine/core/viewsets.py:621
+#: engine/core/viewsets.py:652
msgid ""
"ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes "
"various endpoints for handling order operations such as adding or removing "
-"products, performing purchases for registered as well as unregistered users,"
-" and retrieving the current authenticated user's pending orders. The ViewSet"
-" uses multiple serializers based on the specific action being performed and "
+"products, performing purchases for registered as well as unregistered users, "
+"and retrieving the current authenticated user's pending orders. The ViewSet "
+"uses multiple serializers based on the specific action being performed and "
"enforces permissions accordingly while interacting with order data."
msgstr ""
-"주문 및 관련 작업을 관리하기 위한 뷰셋입니다. 이 클래스는 주문 객체를 검색, 수정, 관리하는 기능을 제공합니다. 여기에는 제품 추가 "
-"또는 제거, 등록 및 미등록 사용자에 대한 구매 수행, 현재 인증된 사용자의 보류 중인 주문 검색 등 주문 작업을 처리하기 위한 다양한 "
-"엔드포인트가 포함되어 있습니다. 뷰셋은 수행되는 특정 작업에 따라 여러 직렬화기를 사용하며 주문 데이터와 상호 작용하는 동안 그에 따라 "
-"권한을 적용합니다."
+"주문 및 관련 작업을 관리하기 위한 뷰셋입니다. 이 클래스는 주문 객체를 검색, "
+"수정, 관리하는 기능을 제공합니다. 여기에는 제품 추가 또는 제거, 등록 및 미등"
+"록 사용자에 대한 구매 수행, 현재 인증된 사용자의 보류 중인 주문 검색 등 주문 "
+"작업을 처리하기 위한 다양한 엔드포인트가 포함되어 있습니다. 뷰셋은 수행되는 "
+"특정 작업에 따라 여러 직렬화기를 사용하며 주문 데이터와 상호 작용하는 동안 그"
+"에 따라 권한을 적용합니다."
-#: engine/core/viewsets.py:825
+#: engine/core/viewsets.py:914
msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It "
-"includes filtering, permission checks, and serializer switching based on the"
-" requested action. Additionally, it provides a detailed action for handling "
+"includes filtering, permission checks, and serializer switching based on the "
+"requested action. Additionally, it provides a detailed action for handling "
"feedback on OrderProduct instances"
msgstr ""
-"주문 제품 엔티티를 관리하기 위한 뷰셋을 제공합니다. 이 뷰셋을 사용하면 주문 제품 모델에 특정한 CRUD 작업 및 사용자 지정 작업을 "
-"수행할 수 있습니다. 여기에는 요청된 작업을 기반으로 필터링, 권한 확인 및 직렬화기 전환이 포함됩니다. 또한 주문 제품 인스턴스에 대한"
-" 피드백 처리를 위한 세부 작업도 제공합니다."
+"주문 제품 엔티티를 관리하기 위한 뷰셋을 제공합니다. 이 뷰셋을 사용하면 주문 "
+"제품 모델에 특정한 CRUD 작업 및 사용자 지정 작업을 수행할 수 있습니다. 여기에"
+"는 요청된 작업을 기반으로 필터링, 권한 확인 및 직렬화기 전환이 포함됩니다. 또"
+"한 주문 제품 인스턴스에 대한 피드백 처리를 위한 세부 작업도 제공합니다."
-#: engine/core/viewsets.py:879
+#: engine/core/viewsets.py:974
msgid "Manages operations related to Product images in the application. "
msgstr "애플리케이션에서 제품 이미지와 관련된 작업을 관리합니다."
-#: engine/core/viewsets.py:892
+#: engine/core/viewsets.py:988
msgid ""
"Manages the retrieval and handling of PromoCode instances through various "
"API actions."
-msgstr "다양한 API 작업을 통해 프로모션 코드 인스턴스의 검색 및 처리를 관리합니다."
+msgstr ""
+"다양한 API 작업을 통해 프로모션 코드 인스턴스의 검색 및 처리를 관리합니다."
-#: engine/core/viewsets.py:914
+#: engine/core/viewsets.py:1019
msgid "Represents a view set for managing promotions. "
msgstr "프로모션을 관리하기 위한 보기 세트를 나타냅니다."
-#: engine/core/viewsets.py:927
+#: engine/core/viewsets.py:1032
msgid "Handles operations related to Stock data in the system."
msgstr "시스템에서 주식 데이터와 관련된 작업을 처리합니다."
-#: engine/core/viewsets.py:941
+#: engine/core/viewsets.py:1046
msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the "
-"retrieval, modification, and customization of products within the wish list."
-" This ViewSet facilitates functionality such as adding, removing, and bulk "
+"retrieval, modification, and customization of products within the wish list. "
+"This ViewSet facilitates functionality such as adding, removing, and bulk "
"actions for wishlist products. Permission checks are integrated to ensure "
"that users can only manage their own wishlists unless explicit permissions "
"are granted."
msgstr ""
-"위시리스트 작업을 관리하기 위한 뷰셋입니다. 위시리스트뷰셋은 사용자의 위시리스트와 상호 작용할 수 있는 엔드포인트를 제공하여 위시리스트 "
-"내의 제품을 검색, 수정 및 사용자 지정할 수 있도록 합니다. 이 뷰셋은 위시리스트 제품에 대한 추가, 제거 및 대량 작업과 같은 기능을"
-" 용이하게 합니다. 명시적인 권한이 부여되지 않는 한 사용자가 자신의 위시리스트만 관리할 수 있도록 권한 검사가 통합되어 있습니다."
+"위시리스트 작업을 관리하기 위한 뷰셋입니다. 위시리스트뷰셋은 사용자의 위시리"
+"스트와 상호 작용할 수 있는 엔드포인트를 제공하여 위시리스트 내의 제품을 검"
+"색, 수정 및 사용자 지정할 수 있도록 합니다. 이 뷰셋은 위시리스트 제품에 대한 "
+"추가, 제거 및 대량 작업과 같은 기능을 용이하게 합니다. 명시적인 권한이 부여되"
+"지 않는 한 사용자가 자신의 위시리스트만 관리할 수 있도록 권한 검사가 통합되"
+"어 있습니다."
-#: engine/core/viewsets.py:1056
+#: engine/core/viewsets.py:1183
msgid ""
"This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom "
@@ -3247,16 +3352,17 @@ msgid ""
"different HTTP methods, serializer overrides, and permission handling based "
"on the request context."
msgstr ""
-"이 클래스는 `주소` 객체를 관리하기 위한 뷰셋 기능을 제공합니다. 주소 뷰셋 클래스는 주소 엔티티와 관련된 CRUD 작업, 필터링 및 "
-"사용자 정의 작업을 가능하게 합니다. 여기에는 다양한 HTTP 메서드, 직렬화기 재정의, 요청 컨텍스트에 따른 권한 처리를 위한 특수 "
-"동작이 포함되어 있습니다."
+"이 클래스는 `주소` 객체를 관리하기 위한 뷰셋 기능을 제공합니다. 주소 뷰셋 클"
+"래스는 주소 엔티티와 관련된 CRUD 작업, 필터링 및 사용자 정의 작업을 가능하게 "
+"합니다. 여기에는 다양한 HTTP 메서드, 직렬화기 재정의, 요청 컨텍스트에 따른 권"
+"한 처리를 위한 특수 동작이 포함되어 있습니다."
-#: engine/core/viewsets.py:1123
+#: engine/core/viewsets.py:1254
#, python-brace-format
msgid "Geocoding error: {e}"
msgstr "지오코딩 오류입니다: {e}"
-#: engine/core/viewsets.py:1131
+#: engine/core/viewsets.py:1262
msgid ""
"Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing "
@@ -3264,6 +3370,7 @@ msgid ""
"using the specified filter backend and dynamically uses different "
"serializers based on the action being performed."
msgstr ""
-"애플리케이션 내에서 제품 태그와 관련된 작업을 처리합니다. 이 클래스는 제품 태그 객체를 검색, 필터링 및 직렬화하기 위한 기능을 "
-"제공합니다. 지정된 필터 백엔드를 사용하여 특정 속성에 대한 유연한 필터링을 지원하며 수행 중인 작업에 따라 다양한 직렬화기를 동적으로 "
-"사용합니다."
+"애플리케이션 내에서 제품 태그와 관련된 작업을 처리합니다. 이 클래스는 제품 태"
+"그 객체를 검색, 필터링 및 직렬화하기 위한 기능을 제공합니다. 지정된 필터 백엔"
+"드를 사용하여 특정 속성에 대한 유연한 필터링을 지원하며 수행 중인 작업에 따"
+"라 다양한 직렬화기를 동적으로 사용합니다."
diff --git a/engine/core/locale/nl_NL/LC_MESSAGES/django.po b/engine/core/locale/nl_NL/LC_MESSAGES/django.po
index 6b0e3167..8fb9327c 100644
--- a/engine/core/locale/nl_NL/LC_MESSAGES/django.po
+++ b/engine/core/locale/nl_NL/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 22:12+0300\n"
+"POT-Creation-Date: 2025-12-18 19:09+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -25,113 +25,112 @@ msgstr "Unieke ID wordt gebruikt om elk databaseobject te identificeren"
msgid "is active"
msgstr "Is actief"
-#: engine/core/abstract.py:21
+#: engine/core/abstract.py:22
msgid ""
-"if set to false, this object can't be seen by users without needed "
-"permission"
+"if set to false, this object can't be seen by users without needed permission"
msgstr ""
"Als false is ingesteld, kan dit object niet worden gezien door gebruikers "
"zonder de benodigde toestemming"
-#: engine/core/abstract.py:23 engine/core/choices.py:18
+#: engine/core/abstract.py:26 engine/core/choices.py:18
msgid "created"
msgstr "Gemaakt"
-#: engine/core/abstract.py:23
+#: engine/core/abstract.py:26
msgid "when the object first appeared on the database"
msgstr "Wanneer het object voor het eerst in de database verscheen"
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "modified"
msgstr "Gewijzigd"
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "when the object was last modified"
msgstr "Wanneer het object voor het laatst bewerkt is"
-#: engine/core/admin.py:85
+#: engine/core/admin.py:94
msgid "translations"
msgstr "Vertalingen"
-#: engine/core/admin.py:89
+#: engine/core/admin.py:102
msgid "general"
msgstr "Algemeen"
-#: engine/core/admin.py:91
+#: engine/core/admin.py:106
msgid "relations"
msgstr "Relaties"
-#: engine/core/admin.py:93
+#: engine/core/admin.py:111
msgid "additional info"
msgstr "extra informatie"
-#: engine/core/admin.py:111
+#: engine/core/admin.py:133
msgid "metadata"
msgstr "Metagegevens"
-#: engine/core/admin.py:118
+#: engine/core/admin.py:141
msgid "timestamps"
msgstr "Tijdstempels"
-#: engine/core/admin.py:133
+#: engine/core/admin.py:157
#, python-format
msgid "activate selected %(verbose_name_plural)s"
msgstr "Activeer geselecteerde %(verbose_name_plural)s"
-#: engine/core/admin.py:138
+#: engine/core/admin.py:165
msgid "selected items have been activated."
msgstr "Geselecteerde items zijn geactiveerd!"
-#: engine/core/admin.py:144
+#: engine/core/admin.py:173
#, python-format
msgid "deactivate selected %(verbose_name_plural)s"
msgstr "Deactiveer geselecteerd %(verbose_name_plural)s"
-#: engine/core/admin.py:149
+#: engine/core/admin.py:183
msgid "selected items have been deactivated."
msgstr "Geselecteerde items zijn gedeactiveerd!"
-#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586
-#: engine/core/graphene/object_types.py:593 engine/core/models.py:801
-#: engine/core/models.py:809
+#: engine/core/admin.py:195 engine/core/graphene/object_types.py:650
+#: engine/core/graphene/object_types.py:657 engine/core/models.py:824
+#: engine/core/models.py:832
msgid "attribute value"
msgstr "Attribuut Waarde"
-#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75
-#: engine/core/models.py:810
+#: engine/core/admin.py:196 engine/core/graphene/object_types.py:75
+#: engine/core/models.py:833
msgid "attribute values"
msgstr "Attribuutwaarden"
-#: engine/core/admin.py:172
+#: engine/core/admin.py:207
msgid "image"
msgstr "Afbeelding"
-#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474
+#: engine/core/admin.py:208 engine/core/graphene/object_types.py:527
msgid "images"
msgstr "Afbeeldingen"
-#: engine/core/admin.py:184 engine/core/models.py:566
+#: engine/core/admin.py:219 engine/core/models.py:587
msgid "stock"
msgstr "Voorraad"
-#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640
+#: engine/core/admin.py:220 engine/core/graphene/object_types.py:710
msgid "stocks"
msgstr "Aandelen"
-#: engine/core/admin.py:196 engine/core/models.py:1818
+#: engine/core/admin.py:231 engine/core/models.py:1930
msgid "order product"
msgstr "Product bestellen"
-#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389
-#: engine/core/models.py:1819
+#: engine/core/admin.py:232 engine/core/graphene/object_types.py:438
+#: engine/core/models.py:1931
msgid "order products"
msgstr "Producten bestellen"
-#: engine/core/admin.py:210 engine/core/admin.py:211
+#: engine/core/admin.py:250 engine/core/admin.py:251
msgid "children"
msgstr "Kinderen"
-#: engine/core/admin.py:977
+#: engine/core/admin.py:1059
msgid "Config"
msgstr "Config"
@@ -155,8 +154,7 @@ msgstr "Geleverd"
msgid "canceled"
msgstr "Geannuleerd"
-#: engine/core/choices.py:8 engine/core/choices.py:16
-#: engine/core/choices.py:24
+#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24
msgid "failed"
msgstr "Mislukt"
@@ -184,11 +182,11 @@ msgstr "Momental"
msgid "successful"
msgstr "Succesvol"
-#: engine/core/docs/drf/views.py:31
+#: engine/core/docs/drf/views.py:30
msgid "OpenAPI schema in selected format with selected language"
msgstr "OpenAPI schema in geselecteerd formaat met geselecteerde taal"
-#: engine/core/docs/drf/views.py:33
+#: engine/core/docs/drf/views.py:32
msgid ""
"OpenApi3 schema for this API. Format can be selected via content "
"negotiation. Language can be selected with Accept-Language and query "
@@ -198,48 +196,49 @@ msgstr ""
"inhoudsonderhandeling. Taal kan worden geselecteerd met zowel Accept-"
"Language als query parameter."
-#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37
+#: engine/core/docs/drf/views.py:43 engine/core/graphene/mutations.py:37
msgid "cache I/O"
msgstr "Cache I/O"
-#: engine/core/docs/drf/views.py:46
+#: engine/core/docs/drf/views.py:45
msgid ""
"apply only a key to read permitted data from cache.\n"
"apply key, data and timeout with authentication to write data to cache."
msgstr ""
"Alleen een sleutel gebruiken om toegestane gegevens uit de cache te lezen.\n"
-"Sleutel, gegevens en time-out met verificatie toepassen om gegevens naar de cache te schrijven."
+"Sleutel, gegevens en time-out met verificatie toepassen om gegevens naar de "
+"cache te schrijven."
-#: engine/core/docs/drf/views.py:62
+#: engine/core/docs/drf/views.py:63
msgid "get a list of supported languages"
msgstr "Een lijst met ondersteunde talen opvragen"
-#: engine/core/docs/drf/views.py:74
+#: engine/core/docs/drf/views.py:75
msgid "get application's exposable parameters"
msgstr "Verkrijg de blootstelbare parameters van de applicatie"
-#: engine/core/docs/drf/views.py:84
+#: engine/core/docs/drf/views.py:89
msgid "send a message to the support team"
msgstr "Stuur een bericht naar het ondersteuningsteam"
-#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57
+#: engine/core/docs/drf/views.py:103 engine/core/graphene/mutations.py:59
msgid "request a CORSed URL"
msgstr "Vraag een CORSed URL op. Alleen https toegestaan."
-#: engine/core/docs/drf/views.py:112
+#: engine/core/docs/drf/views.py:119
msgid "Search between products, categories and brands"
msgstr "Zoeken tussen producten, categorieën en merken"
-#: engine/core/docs/drf/views.py:130
+#: engine/core/docs/drf/views.py:141
msgid "global search endpoint to query across project's tables"
msgstr ""
"Eindpunt voor globaal zoeken om in alle tabellen van het project te zoeken"
-#: engine/core/docs/drf/views.py:139
+#: engine/core/docs/drf/views.py:150
msgid "purchase an order as a business"
msgstr "Een bestelling kopen als bedrijf"
-#: engine/core/docs/drf/views.py:146
+#: engine/core/docs/drf/views.py:158
msgid ""
"purchase an order as a business, using the provided `products` with "
"`product_uuid` and `attributes`."
@@ -247,231 +246,227 @@ msgstr ""
"Koop een bestelling in als een bedrijf, met behulp van de meegeleverde "
"`producten` met `product_uuid` en `attributen`."
-#: engine/core/docs/drf/views.py:164
+#: engine/core/docs/drf/views.py:177
msgid "download a digital asset from purchased digital order"
msgstr "een digitaal goed downloaden van een gekochte digitale bestelling"
-#: engine/core/docs/drf/viewsets.py:61
+#: engine/core/docs/drf/viewsets.py:65
msgid "list all attribute groups (simple view)"
msgstr "Alle attribuutgroepen weergeven (eenvoudige weergave)"
-#: engine/core/docs/drf/viewsets.py:68
+#: engine/core/docs/drf/viewsets.py:75
msgid "retrieve a single attribute group (detailed view)"
msgstr "Een enkele groep kenmerken ophalen (gedetailleerde weergave)"
-#: engine/core/docs/drf/viewsets.py:75
+#: engine/core/docs/drf/viewsets.py:82
msgid "create an attribute group"
msgstr "Een attribuutgroep maken"
-#: engine/core/docs/drf/viewsets.py:82
+#: engine/core/docs/drf/viewsets.py:92
msgid "delete an attribute group"
msgstr "Een attribuutgroep verwijderen"
-#: engine/core/docs/drf/viewsets.py:89
+#: engine/core/docs/drf/viewsets.py:99
msgid "rewrite an existing attribute group saving non-editables"
msgstr ""
"Een bestaande attribuutgroep herschrijven en niet-wijzigbare attributen "
"opslaan"
-#: engine/core/docs/drf/viewsets.py:96
-msgid ""
-"rewrite some fields of an existing attribute group saving non-editables"
+#: engine/core/docs/drf/viewsets.py:107
+msgid "rewrite some fields of an existing attribute group saving non-editables"
msgstr ""
"Enkele velden van een bestaande attribuutgroep herschrijven door niet-"
"wijzigbare velden op te slaan"
-#: engine/core/docs/drf/viewsets.py:106
+#: engine/core/docs/drf/viewsets.py:118
msgid "list all attributes (simple view)"
msgstr "Alle attributen weergeven (eenvoudige weergave)"
-#: engine/core/docs/drf/viewsets.py:113
+#: engine/core/docs/drf/viewsets.py:128
msgid "retrieve a single attribute (detailed view)"
msgstr "Een enkel kenmerk ophalen (gedetailleerde weergave)"
-#: engine/core/docs/drf/viewsets.py:120
+#: engine/core/docs/drf/viewsets.py:135
msgid "create an attribute"
msgstr "Een attribuut maken"
-#: engine/core/docs/drf/viewsets.py:127
+#: engine/core/docs/drf/viewsets.py:142
msgid "delete an attribute"
msgstr "Een attribuut verwijderen"
-#: engine/core/docs/drf/viewsets.py:134
+#: engine/core/docs/drf/viewsets.py:149
msgid "rewrite an existing attribute saving non-editables"
msgstr ""
"Een bestaand attribuut herschrijven en niet-wijzigbare attributen opslaan"
-#: engine/core/docs/drf/viewsets.py:141
+#: engine/core/docs/drf/viewsets.py:156
msgid "rewrite some fields of an existing attribute saving non-editables"
msgstr ""
"Herschrijf sommige velden van een bestaand attribuut door niet-wijzigbare "
"velden op te slaan"
-#: engine/core/docs/drf/viewsets.py:151
+#: engine/core/docs/drf/viewsets.py:166
msgid "list all attribute values (simple view)"
msgstr "Alle attribuutwaarden weergeven (eenvoudige weergave)"
-#: engine/core/docs/drf/viewsets.py:158
+#: engine/core/docs/drf/viewsets.py:176
msgid "retrieve a single attribute value (detailed view)"
msgstr "Een waarde voor een enkel kenmerk ophalen (gedetailleerde weergave)"
-#: engine/core/docs/drf/viewsets.py:165
+#: engine/core/docs/drf/viewsets.py:183
msgid "create an attribute value"
msgstr "Een attribuutwaarde maken"
-#: engine/core/docs/drf/viewsets.py:172
+#: engine/core/docs/drf/viewsets.py:193
msgid "delete an attribute value"
msgstr "Een attribuutwaarde verwijderen"
-#: engine/core/docs/drf/viewsets.py:179
+#: engine/core/docs/drf/viewsets.py:200
msgid "rewrite an existing attribute value saving non-editables"
msgstr ""
"Een bestaande attribuutwaarde herschrijven waarbij niet-wijzigbare "
"attributen worden opgeslagen"
-#: engine/core/docs/drf/viewsets.py:186
-msgid ""
-"rewrite some fields of an existing attribute value saving non-editables"
+#: engine/core/docs/drf/viewsets.py:208
+msgid "rewrite some fields of an existing attribute value saving non-editables"
msgstr ""
"Herschrijf sommige velden van een bestaande attribuutwaarde door niet-"
"wijzigbare velden op te slaan"
-#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197
+#: engine/core/docs/drf/viewsets.py:219 engine/core/docs/drf/viewsets.py:220
msgid "list all categories (simple view)"
msgstr "Alle categorieën weergeven (eenvoudige weergave)"
-#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205
+#: engine/core/docs/drf/viewsets.py:230 engine/core/docs/drf/viewsets.py:231
msgid "retrieve a single category (detailed view)"
msgstr "Een enkele categorie ophalen (gedetailleerde weergave)"
-#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258
+#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:286
msgid "Category UUID or slug"
msgstr "Categorie UUID of slug"
-#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221
+#: engine/core/docs/drf/viewsets.py:246 engine/core/docs/drf/viewsets.py:247
msgid "create a category"
msgstr "Een categorie maken"
-#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229
+#: engine/core/docs/drf/viewsets.py:254 engine/core/docs/drf/viewsets.py:255
msgid "delete a category"
msgstr "Een categorie verwijderen"
-#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237
+#: engine/core/docs/drf/viewsets.py:262 engine/core/docs/drf/viewsets.py:263
msgid "rewrite an existing category saving non-editables"
msgstr "Een bestaande categorie herschrijven en niet-wijzigbare items opslaan"
-#: engine/core/docs/drf/viewsets.py:244 engine/core/docs/drf/viewsets.py:245
+#: engine/core/docs/drf/viewsets.py:270 engine/core/docs/drf/viewsets.py:272
msgid "rewrite some fields of an existing category saving non-editables"
msgstr ""
"Herschrijf sommige velden van een bestaande categorie door niet-wijzigbare "
"velden op te slaan"
-#: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704
-#: engine/core/docs/drf/viewsets.py:988
+#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:1046
#: engine/core/graphene/object_types.py:117
-#: engine/core/graphene/object_types.py:207
-#: engine/core/graphene/object_types.py:482
+#: engine/core/graphene/object_types.py:236
+#: engine/core/graphene/object_types.py:537
msgid "SEO Meta snapshot"
msgstr "SEO Meta momentopname"
-#: engine/core/docs/drf/viewsets.py:253
+#: engine/core/docs/drf/viewsets.py:281
msgid "returns a snapshot of the category's SEO meta data"
msgstr ""
-"Geeft als resultaat een momentopname van de SEO-metagegevens van de "
-"categorie"
+"Geeft als resultaat een momentopname van de SEO-metagegevens van de categorie"
-#: engine/core/docs/drf/viewsets.py:274
+#: engine/core/docs/drf/viewsets.py:302
msgid "list all orders (simple view)"
msgstr "Alle categorieën weergeven (eenvoudige weergave)"
-#: engine/core/docs/drf/viewsets.py:275
+#: engine/core/docs/drf/viewsets.py:303
msgid "for non-staff users, only their own orders are returned."
msgstr ""
-"Voor niet-personeelsleden worden alleen hun eigen bestellingen "
-"geretourneerd."
+"Voor niet-personeelsleden worden alleen hun eigen bestellingen geretourneerd."
-#: engine/core/docs/drf/viewsets.py:281
+#: engine/core/docs/drf/viewsets.py:309
msgid ""
-"Case-insensitive substring search across human_readable_id, "
-"order_products.product.name, and order_products.product.partnumber"
+"Case-insensitive substring search across human_readable_id, order_products."
+"product.name, and order_products.product.partnumber"
msgstr ""
-"Hoofdlettergevoelig substring zoeken in human_readable_id, "
-"order_products.product.name en order_products.product.partnumber"
+"Hoofdlettergevoelig substring zoeken in human_readable_id, order_products."
+"product.name en order_products.product.partnumber"
-#: engine/core/docs/drf/viewsets.py:288
+#: engine/core/docs/drf/viewsets.py:316
msgid "Filter orders with buy_time >= this ISO 8601 datetime"
msgstr "Filter orders met buy_time >= deze ISO 8601 datetime"
-#: engine/core/docs/drf/viewsets.py:293
+#: engine/core/docs/drf/viewsets.py:321
msgid "Filter orders with buy_time <= this ISO 8601 datetime"
msgstr "Filter orders met buy_time <= deze ISO 8601 datetime"
-#: engine/core/docs/drf/viewsets.py:298
+#: engine/core/docs/drf/viewsets.py:326
msgid "Filter by exact order UUID"
msgstr "Filter op exacte volgorde UUID"
-#: engine/core/docs/drf/viewsets.py:303
+#: engine/core/docs/drf/viewsets.py:331
msgid "Filter by exact human-readable order ID"
msgstr "Filter op exacte, door mensen leesbare bestel-ID"
-#: engine/core/docs/drf/viewsets.py:308
+#: engine/core/docs/drf/viewsets.py:336
msgid "Filter by user's email (case-insensitive exact match)"
msgstr ""
"Filter op e-mail van gebruiker (hoofdlettergevoelige exacte overeenkomst)"
-#: engine/core/docs/drf/viewsets.py:313
+#: engine/core/docs/drf/viewsets.py:341
msgid "Filter by user's UUID"
msgstr "Filter op UUID van gebruiker"
-#: engine/core/docs/drf/viewsets.py:318
+#: engine/core/docs/drf/viewsets.py:347
msgid "Filter by order status (case-insensitive substring match)"
msgstr "Filter op bestelstatus (hoofdlettergevoelige substringmatch)"
-#: engine/core/docs/drf/viewsets.py:324
+#: engine/core/docs/drf/viewsets.py:354
msgid ""
-"Order by one of: uuid, human_readable_id, user_email, user, status, created,"
-" modified, buy_time, random. Prefix with '-' for descending (e.g. "
-"'-buy_time')."
+"Order by one of: uuid, human_readable_id, user_email, user, status, created, "
+"modified, buy_time, random. Prefix with '-' for descending (e.g. '-"
+"buy_time')."
msgstr ""
"Sorteer op een van: uuid, human_readable_id, user_email, gebruiker, status, "
-"gemaakt, gewijzigd, buy_time, willekeurig. Voorvoegsel met '-' voor aflopend"
-" (bijv. '-buy_time')."
+"gemaakt, gewijzigd, buy_time, willekeurig. Voorvoegsel met '-' voor aflopend "
+"(bijv. '-buy_time')."
-#: engine/core/docs/drf/viewsets.py:336
+#: engine/core/docs/drf/viewsets.py:366
msgid "retrieve a single order (detailed view)"
msgstr "Een enkele categorie ophalen (gedetailleerde weergave)"
-#: engine/core/docs/drf/viewsets.py:341
+#: engine/core/docs/drf/viewsets.py:371
msgid "Order UUID or human-readable id"
msgstr "Order UUID of menselijk leesbare id"
-#: engine/core/docs/drf/viewsets.py:351
+#: engine/core/docs/drf/viewsets.py:381
msgid "create an order"
msgstr "Een attribuut maken"
-#: engine/core/docs/drf/viewsets.py:352
+#: engine/core/docs/drf/viewsets.py:382
msgid "doesn't work for non-staff users."
msgstr "Werkt niet voor gebruikers die geen personeel zijn."
-#: engine/core/docs/drf/viewsets.py:359
+#: engine/core/docs/drf/viewsets.py:389
msgid "delete an order"
msgstr "Een attribuut verwijderen"
-#: engine/core/docs/drf/viewsets.py:366
+#: engine/core/docs/drf/viewsets.py:396
msgid "rewrite an existing order saving non-editables"
msgstr "Een bestaande categorie herschrijven en niet-wijzigbare items opslaan"
-#: engine/core/docs/drf/viewsets.py:373
+#: engine/core/docs/drf/viewsets.py:403
msgid "rewrite some fields of an existing order saving non-editables"
msgstr ""
"Herschrijf sommige velden van een bestaande categorie door niet-wijzigbare "
"velden op te slaan"
-#: engine/core/docs/drf/viewsets.py:380
+#: engine/core/docs/drf/viewsets.py:410
msgid "purchase an order"
msgstr "Aankoopprijs bij bestelling"
-#: engine/core/docs/drf/viewsets.py:382
+#: engine/core/docs/drf/viewsets.py:412
msgid ""
"finalizes the order purchase. if `force_balance` is used, the purchase is "
"completed using the user's balance; if `force_payment` is used, a "
@@ -481,29 +476,28 @@ msgstr ""
"wordt de aankoop afgerond met het saldo van de gebruiker; als "
"`force_payment` wordt gebruikt, wordt een transactie gestart."
-#: engine/core/docs/drf/viewsets.py:397
+#: engine/core/docs/drf/viewsets.py:427
msgid "retrieve current pending order of a user"
msgstr "huidige lopende order van een gebruiker ophalen"
-#: engine/core/docs/drf/viewsets.py:398
+#: engine/core/docs/drf/viewsets.py:428
msgid "retrieves a current pending order of an authenticated user"
msgstr "haalt een huidige lopende order op van een geverifieerde gebruiker"
-#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334
+#: engine/core/docs/drf/viewsets.py:438 engine/core/graphene/mutations.py:354
msgid "purchase an order without account creation"
msgstr "een bestelling kopen zonder een account aan te maken"
-#: engine/core/docs/drf/viewsets.py:409
+#: engine/core/docs/drf/viewsets.py:439
msgid "finalizes the order purchase for a non-registered user."
msgstr ""
-"Rondt de aankoop van de bestelling af voor een niet-geregistreerde "
-"gebruiker."
+"Rondt de aankoop van de bestelling af voor een niet-geregistreerde gebruiker."
-#: engine/core/docs/drf/viewsets.py:420
+#: engine/core/docs/drf/viewsets.py:450
msgid "add product to order"
msgstr "Een product aan de bestelling toevoegen"
-#: engine/core/docs/drf/viewsets.py:421
+#: engine/core/docs/drf/viewsets.py:452
msgid ""
"adds a product to an order using the provided `product_uuid` and "
"`attributes`."
@@ -511,13 +505,13 @@ msgstr ""
"Voegt een product toe aan een bestelling met de opgegeven `product_uuid` en "
"`attributen`."
-#: engine/core/docs/drf/viewsets.py:429
+#: engine/core/docs/drf/viewsets.py:461
msgid "add a list of products to order, quantities will not count"
msgstr ""
"Voeg een lijst met producten toe om te bestellen, hoeveelheden tellen niet "
"mee"
-#: engine/core/docs/drf/viewsets.py:430
+#: engine/core/docs/drf/viewsets.py:463
msgid ""
"adds a list of products to an order using the provided `product_uuid` and "
"`attributes`."
@@ -525,11 +519,11 @@ msgstr ""
"Voegt een lijst met producten toe aan een bestelling met behulp van de "
"opgegeven `product_uuid` en `attributen`."
-#: engine/core/docs/drf/viewsets.py:438
+#: engine/core/docs/drf/viewsets.py:472
msgid "remove product from order"
msgstr "Een product uit de bestelling verwijderen"
-#: engine/core/docs/drf/viewsets.py:439
+#: engine/core/docs/drf/viewsets.py:474
msgid ""
"removes a product from an order using the provided `product_uuid` and "
"`attributes`."
@@ -537,11 +531,11 @@ msgstr ""
"Verwijdert een product uit een bestelling met behulp van de opgegeven "
"`product_uuid` en `attributen`."
-#: engine/core/docs/drf/viewsets.py:447
+#: engine/core/docs/drf/viewsets.py:483
msgid "remove product from order, quantities will not count"
msgstr "Verwijder een product uit de bestelling, hoeveelheden tellen niet mee"
-#: engine/core/docs/drf/viewsets.py:448
+#: engine/core/docs/drf/viewsets.py:485
msgid ""
"removes a list of products from an order using the provided `product_uuid` "
"and `attributes`"
@@ -549,735 +543,747 @@ msgstr ""
"Verwijdert een lijst met producten uit een bestelling met behulp van de "
"opgegeven `product_uuid` en `attributen`."
-#: engine/core/docs/drf/viewsets.py:459
+#: engine/core/docs/drf/viewsets.py:497
msgid "list all wishlists (simple view)"
msgstr "Alle attributen weergeven (eenvoudige weergave)"
-#: engine/core/docs/drf/viewsets.py:460
+#: engine/core/docs/drf/viewsets.py:498
msgid "for non-staff users, only their own wishlists are returned."
msgstr ""
"Voor niet-personeelsleden worden alleen hun eigen verlanglijstjes "
"geretourneerd."
-#: engine/core/docs/drf/viewsets.py:467
+#: engine/core/docs/drf/viewsets.py:508
msgid "retrieve a single wishlist (detailed view)"
msgstr "Een enkel kenmerk ophalen (gedetailleerde weergave)"
-#: engine/core/docs/drf/viewsets.py:474
+#: engine/core/docs/drf/viewsets.py:515
msgid "create an wishlist"
msgstr "Een attribuut maken"
-#: engine/core/docs/drf/viewsets.py:475
+#: engine/core/docs/drf/viewsets.py:516
msgid "Doesn't work for non-staff users."
msgstr "Werkt niet voor gebruikers die geen personeel zijn."
-#: engine/core/docs/drf/viewsets.py:482
+#: engine/core/docs/drf/viewsets.py:523
msgid "delete an wishlist"
msgstr "Een attribuut verwijderen"
-#: engine/core/docs/drf/viewsets.py:489
+#: engine/core/docs/drf/viewsets.py:530
msgid "rewrite an existing wishlist saving non-editables"
msgstr ""
"Een bestaand attribuut herschrijven en niet-wijzigbare attributen opslaan"
-#: engine/core/docs/drf/viewsets.py:496
+#: engine/core/docs/drf/viewsets.py:537
msgid "rewrite some fields of an existing wishlist saving non-editables"
msgstr ""
"Herschrijf sommige velden van een bestaand attribuut door niet-wijzigbare "
"velden op te slaan"
-#: engine/core/docs/drf/viewsets.py:503
+#: engine/core/docs/drf/viewsets.py:544
msgid "retrieve current pending wishlist of a user"
msgstr "huidige wachtlijst van een gebruiker ophalen"
-#: engine/core/docs/drf/viewsets.py:504
+#: engine/core/docs/drf/viewsets.py:545
msgid "retrieves a current pending wishlist of an authenticated user"
msgstr ""
"haalt een huidig afwachtend verlanglijstje op van een geauthenticeerde "
"gebruiker"
-#: engine/core/docs/drf/viewsets.py:514
+#: engine/core/docs/drf/viewsets.py:555
msgid "add product to wishlist"
msgstr "Een product aan de bestelling toevoegen"
-#: engine/core/docs/drf/viewsets.py:515
+#: engine/core/docs/drf/viewsets.py:557
msgid "adds a product to an wishlist using the provided `product_uuid`"
msgstr ""
"Voegt een product toe aan een verlanglijstje met behulp van de opgegeven "
"`product_uuid`."
-#: engine/core/docs/drf/viewsets.py:523
+#: engine/core/docs/drf/viewsets.py:566
msgid "remove product from wishlist"
msgstr "Een product uit het verlanglijstje verwijderen"
-#: engine/core/docs/drf/viewsets.py:524
+#: engine/core/docs/drf/viewsets.py:568
msgid "removes a product from an wishlist using the provided `product_uuid`"
msgstr ""
"Verwijdert een product van een verlanglijstje met behulp van de opgegeven "
"`product_uuid`."
-#: engine/core/docs/drf/viewsets.py:532
+#: engine/core/docs/drf/viewsets.py:577
msgid "add many products to wishlist"
msgstr "Veel producten toevoegen aan het verlanglijstje"
-#: engine/core/docs/drf/viewsets.py:533
+#: engine/core/docs/drf/viewsets.py:579
msgid "adds many products to an wishlist using the provided `product_uuids`"
msgstr ""
"Voegt veel producten toe aan een verlanglijstje met behulp van de opgegeven "
"`product_uuids`."
-#: engine/core/docs/drf/viewsets.py:541
+#: engine/core/docs/drf/viewsets.py:588
msgid "remove many products from wishlist"
msgstr "Een product uit de bestelling verwijderen"
-#: engine/core/docs/drf/viewsets.py:542
+#: engine/core/docs/drf/viewsets.py:590
msgid ""
"removes many products from an wishlist using the provided `product_uuids`"
msgstr ""
"Verwijdert een groot aantal producten uit een verlanglijstje met behulp van "
"de opgegeven `product_uuids`."
-#: engine/core/docs/drf/viewsets.py:549
+#: engine/core/docs/drf/viewsets.py:598
msgid ""
"Filter by one or more attribute name/value pairs. \n"
"• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n"
-"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n"
-"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n"
+"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, "
+"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, "
+"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n"
+"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), "
+"`true`/`false` for booleans, integers, floats; otherwise treated as "
+"string. \n"
"• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n"
"Examples: \n"
-"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n"
+"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\","
+"\"bluetooth\"]`, \n"
"`b64-description=icontains-aGVhdC1jb2xk`"
msgstr ""
"Filter op een of meer attribuutnaam-/waardeparen. \n"
"- **Syntaxis**: `attr_name=methode-waarde[;attr2=methode2-waarde2]...`\n"
-"- **Methodes** (standaard op `icontains` indien weggelaten): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`.\n"
-"- Waarde typen**: JSON wordt eerst geprobeerd (zodat je lijsten/dicten kunt doorgeven), `true`/`false` voor booleans, integers, floats; anders behandeld als string. \n"
-"- **Base64**: prefix met `b64-` om URL-veilige base64-encodering van de ruwe waarde. \n"
+"- **Methodes** (standaard op `icontains` indien weggelaten): `iexact`, "
+"`exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, "
+"`endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`.\n"
+"- Waarde typen**: JSON wordt eerst geprobeerd (zodat je lijsten/dicten kunt "
+"doorgeven), `true`/`false` voor booleans, integers, floats; anders behandeld "
+"als string. \n"
+"- **Base64**: prefix met `b64-` om URL-veilige base64-encodering van de ruwe "
+"waarde. \n"
"Voorbeelden: \n"
"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`,\n"
"`b64-description=icontains-aGVhdC1jb2xk`."
-#: engine/core/docs/drf/viewsets.py:568 engine/core/docs/drf/viewsets.py:569
+#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
msgid "list all products (simple view)"
msgstr "Alle producten weergeven (eenvoudige weergave)"
-#: engine/core/docs/drf/viewsets.py:574
+#: engine/core/docs/drf/viewsets.py:623
msgid "(exact) Product UUID"
msgstr "(exacte) UUID van product"
-#: engine/core/docs/drf/viewsets.py:581
+#: engine/core/docs/drf/viewsets.py:630
msgid ""
-"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n"
+"Comma-separated list of fields to sort by. Prefix with `-` for "
+"descending. \n"
"**Allowed:** uuid, rating, name, slug, created, modified, price, random"
msgstr ""
-"Door komma's gescheiden lijst van velden om op te sorteren. Voorvoegsel met `-` voor aflopend. \n"
-"**Toegestaan:** uuid, beoordeling, naam, slug, gemaakt, gewijzigd, prijs, willekeurig"
+"Door komma's gescheiden lijst van velden om op te sorteren. Voorvoegsel met "
+"`-` voor aflopend. \n"
+"**Toegestaan:** uuid, beoordeling, naam, slug, gemaakt, gewijzigd, prijs, "
+"willekeurig"
-#: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599
+#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
msgid "retrieve a single product (detailed view)"
msgstr "Een enkel product ophalen (gedetailleerde weergave)"
-#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634
-#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672
-#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710
+#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683
+#: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725
+#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763
msgid "Product UUID or slug"
msgstr "Product UUID of Slug"
-#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
+#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
#: engine/core/graphene/dashboard_mutations/product.py:80
#: engine/core/graphene/dashboard_mutations/product.py:118
#: engine/core/graphene/dashboard_mutations/product.py:166
msgid "create a product"
msgstr "Een product maken"
-#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629
+#: engine/core/docs/drf/viewsets.py:677 engine/core/docs/drf/viewsets.py:678
msgid "rewrite an existing product, preserving non-editable fields"
msgstr ""
"Een bestaand product herschrijven met behoud van niet-wijzigbare velden"
-#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
+#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:700
msgid ""
"update some fields of an existing product, preserving non-editable fields"
msgstr ""
"Enkele velden van een bestaand product bijwerken, met behoud van niet-"
"wijzigbare velden"
-#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
+#: engine/core/docs/drf/viewsets.py:719 engine/core/docs/drf/viewsets.py:720
msgid "delete a product"
msgstr "Een product verwijderen"
-#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686
+#: engine/core/docs/drf/viewsets.py:738 engine/core/docs/drf/viewsets.py:739
msgid "lists all permitted feedbacks for a product"
msgstr "somt alle toegestane feedbacks voor een product op"
-#: engine/core/docs/drf/viewsets.py:705
+#: engine/core/docs/drf/viewsets.py:758
msgid "returns a snapshot of the product's SEO meta data"
msgstr ""
"Geeft als resultaat een momentopname van de SEO-metagegevens van het product"
-#: engine/core/docs/drf/viewsets.py:726
+#: engine/core/docs/drf/viewsets.py:779
msgid "list all addresses"
msgstr "Vermeld alle adressen"
-#: engine/core/docs/drf/viewsets.py:736
+#: engine/core/docs/drf/viewsets.py:789
msgid "retrieve a single address"
msgstr "Een enkel adres ophalen"
-#: engine/core/docs/drf/viewsets.py:746
+#: engine/core/docs/drf/viewsets.py:799
msgid "create a new address"
msgstr "Een nieuw adres maken"
-#: engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:810
msgid "delete an address"
msgstr "Een adres verwijderen"
-#: engine/core/docs/drf/viewsets.py:767
+#: engine/core/docs/drf/viewsets.py:820
msgid "update an entire address"
msgstr "Een heel adres bijwerken"
-#: engine/core/docs/drf/viewsets.py:778
+#: engine/core/docs/drf/viewsets.py:831
msgid "partially update an address"
msgstr "Een adres gedeeltelijk bijwerken"
-#: engine/core/docs/drf/viewsets.py:789
+#: engine/core/docs/drf/viewsets.py:842
msgid "autocomplete address suggestions"
msgstr "Automatische adresinvoer"
-#: engine/core/docs/drf/viewsets.py:794
+#: engine/core/docs/drf/viewsets.py:848
msgid "raw data query string, please append with data from geo-IP endpoint"
msgstr ""
"Ruwe gegevensquerystring, gelieve aan te vullen met gegevens van geo-IP "
"eindpunt"
-#: engine/core/docs/drf/viewsets.py:800
+#: engine/core/docs/drf/viewsets.py:855
msgid "limit the results amount, 1 < limit < 10, default: 5"
msgstr "beperkt de hoeveelheid resultaten, 1 < limiet < 10, standaard: 5"
-#: engine/core/docs/drf/viewsets.py:816
+#: engine/core/docs/drf/viewsets.py:871
msgid "list all feedbacks (simple view)"
msgstr "alle feedbacks weergeven (eenvoudige weergave)"
-#: engine/core/docs/drf/viewsets.py:823
+#: engine/core/docs/drf/viewsets.py:881
msgid "retrieve a single feedback (detailed view)"
msgstr "een enkele feedback ophalen (gedetailleerde weergave)"
-#: engine/core/docs/drf/viewsets.py:830
+#: engine/core/docs/drf/viewsets.py:888
msgid "create a feedback"
msgstr "een feedback creëren"
-#: engine/core/docs/drf/viewsets.py:837
+#: engine/core/docs/drf/viewsets.py:895
msgid "delete a feedback"
msgstr "een feedback verwijderen"
-#: engine/core/docs/drf/viewsets.py:844
+#: engine/core/docs/drf/viewsets.py:902
msgid "rewrite an existing feedback saving non-editables"
msgstr ""
"een bestaande feedback herschrijven waarbij niet-wijzigbare gegevens worden "
"opgeslagen"
-#: engine/core/docs/drf/viewsets.py:851
+#: engine/core/docs/drf/viewsets.py:909
msgid "rewrite some fields of an existing feedback saving non-editables"
msgstr ""
"Herschrijf sommige velden van een bestaande categorie door niet-wijzigbare "
"velden op te slaan"
-#: engine/core/docs/drf/viewsets.py:861
+#: engine/core/docs/drf/viewsets.py:919
msgid "list all order–product relations (simple view)"
msgstr "alle order-productrelaties weergeven (eenvoudige weergave)"
-#: engine/core/docs/drf/viewsets.py:871
+#: engine/core/docs/drf/viewsets.py:929
msgid "retrieve a single order–product relation (detailed view)"
-msgstr ""
-"een enkele bestelling-productrelatie ophalen (gedetailleerde weergave)"
+msgstr "een enkele bestelling-productrelatie ophalen (gedetailleerde weergave)"
-#: engine/core/docs/drf/viewsets.py:881
+#: engine/core/docs/drf/viewsets.py:939
msgid "create a new order–product relation"
msgstr "een nieuwe bestelling-product relatie maken"
-#: engine/core/docs/drf/viewsets.py:891
+#: engine/core/docs/drf/viewsets.py:949
msgid "replace an existing order–product relation"
msgstr "een bestaande order-productrelatie vervangen"
-#: engine/core/docs/drf/viewsets.py:901
+#: engine/core/docs/drf/viewsets.py:959
msgid "partially update an existing order–product relation"
msgstr "een bestaande order-productrelatie gedeeltelijk bijwerken"
-#: engine/core/docs/drf/viewsets.py:911
+#: engine/core/docs/drf/viewsets.py:969
msgid "delete an order–product relation"
msgstr "een order-productrelatie verwijderen"
-#: engine/core/docs/drf/viewsets.py:921
+#: engine/core/docs/drf/viewsets.py:979
msgid "add or remove feedback on an order–product relation"
msgstr "feedback toevoegen of verwijderen op een order-productrelatie"
-#: engine/core/docs/drf/viewsets.py:938
+#: engine/core/docs/drf/viewsets.py:996
msgid "list all brands (simple view)"
msgstr "Alle merken weergeven (eenvoudige weergave)"
-#: engine/core/docs/drf/viewsets.py:945
+#: engine/core/docs/drf/viewsets.py:1003
msgid "retrieve a single brand (detailed view)"
msgstr "Een enkel merk ophalen (gedetailleerde weergave)"
-#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993
+#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051
msgid "Brand UUID or slug"
msgstr "Merk UUID of slug"
-#: engine/core/docs/drf/viewsets.py:960
+#: engine/core/docs/drf/viewsets.py:1018
msgid "create a brand"
msgstr "Een merk creëren"
-#: engine/core/docs/drf/viewsets.py:967
+#: engine/core/docs/drf/viewsets.py:1025
msgid "delete a brand"
msgstr "Een merk verwijderen"
-#: engine/core/docs/drf/viewsets.py:974
+#: engine/core/docs/drf/viewsets.py:1032
msgid "rewrite an existing brand saving non-editables"
msgstr "Een bestaand merk herschrijven door niet-editables op te slaan"
-#: engine/core/docs/drf/viewsets.py:981
+#: engine/core/docs/drf/viewsets.py:1039
msgid "rewrite some fields of an existing brand saving non-editables"
msgstr ""
"Herschrijf sommige velden van een bestaande categorie door niet-wijzigbare "
"velden op te slaan"
-#: engine/core/docs/drf/viewsets.py:1006
+#: engine/core/docs/drf/viewsets.py:1064
msgid "list all vendors (simple view)"
msgstr "Alle leveranciers weergeven (eenvoudige weergave)"
-#: engine/core/docs/drf/viewsets.py:1013
+#: engine/core/docs/drf/viewsets.py:1074
msgid "retrieve a single vendor (detailed view)"
msgstr "Een enkele leverancier ophalen (gedetailleerde weergave)"
-#: engine/core/docs/drf/viewsets.py:1020
+#: engine/core/docs/drf/viewsets.py:1081
msgid "create a vendor"
msgstr "Een leverancier maken"
-#: engine/core/docs/drf/viewsets.py:1027
+#: engine/core/docs/drf/viewsets.py:1088
msgid "delete a vendor"
msgstr "Een verkoper verwijderen"
-#: engine/core/docs/drf/viewsets.py:1034
+#: engine/core/docs/drf/viewsets.py:1095
msgid "rewrite an existing vendor saving non-editables"
msgstr ""
"Een bestaande verkoper herschrijven en niet-wijzigbare gegevens opslaan"
-#: engine/core/docs/drf/viewsets.py:1041
+#: engine/core/docs/drf/viewsets.py:1102
msgid "rewrite some fields of an existing vendor saving non-editables"
msgstr ""
"Herschrijf sommige velden van een bestaande categorie door niet-wijzigbare "
"velden op te slaan"
-#: engine/core/docs/drf/viewsets.py:1051
+#: engine/core/docs/drf/viewsets.py:1112
msgid "list all product images (simple view)"
msgstr "Alle productafbeeldingen weergeven (eenvoudige weergave)"
-#: engine/core/docs/drf/viewsets.py:1058
+#: engine/core/docs/drf/viewsets.py:1122
msgid "retrieve a single product image (detailed view)"
msgstr "Een enkele productafbeelding ophalen (gedetailleerde weergave)"
-#: engine/core/docs/drf/viewsets.py:1065
+#: engine/core/docs/drf/viewsets.py:1129
msgid "create a product image"
msgstr "Een productafbeelding maken"
-#: engine/core/docs/drf/viewsets.py:1072
+#: engine/core/docs/drf/viewsets.py:1139
msgid "delete a product image"
msgstr "Een productafbeelding verwijderen"
-#: engine/core/docs/drf/viewsets.py:1079
+#: engine/core/docs/drf/viewsets.py:1146
msgid "rewrite an existing product image saving non-editables"
msgstr ""
"Een bestaande productafbeelding herschrijven waarbij niet-wijzigbare "
"gegevens worden opgeslagen"
-#: engine/core/docs/drf/viewsets.py:1086
+#: engine/core/docs/drf/viewsets.py:1154
msgid "rewrite some fields of an existing product image saving non-editables"
msgstr ""
"Herschrijf sommige velden van een bestaande categorie door niet-wijzigbare "
"velden op te slaan"
-#: engine/core/docs/drf/viewsets.py:1096
+#: engine/core/docs/drf/viewsets.py:1165
msgid "list all promo codes (simple view)"
msgstr "Alle promotiecodes weergeven (eenvoudige weergave)"
-#: engine/core/docs/drf/viewsets.py:1103
+#: engine/core/docs/drf/viewsets.py:1175
msgid "retrieve a single promo code (detailed view)"
msgstr "Een enkele promotiecode ophalen (gedetailleerde weergave)"
-#: engine/core/docs/drf/viewsets.py:1110
+#: engine/core/docs/drf/viewsets.py:1182
msgid "create a promo code"
msgstr "Een promotiecode maken"
-#: engine/core/docs/drf/viewsets.py:1117
+#: engine/core/docs/drf/viewsets.py:1189
msgid "delete a promo code"
msgstr "Een promotiecode verwijderen"
-#: engine/core/docs/drf/viewsets.py:1124
+#: engine/core/docs/drf/viewsets.py:1196
msgid "rewrite an existing promo code saving non-editables"
msgstr "Een bestaande promocode herschrijven die niet-wijzigbaar is"
-#: engine/core/docs/drf/viewsets.py:1131
+#: engine/core/docs/drf/viewsets.py:1203
msgid "rewrite some fields of an existing promo code saving non-editables"
msgstr ""
"Herschrijf sommige velden van een bestaande categorie door niet-wijzigbare "
"velden op te slaan"
-#: engine/core/docs/drf/viewsets.py:1141
+#: engine/core/docs/drf/viewsets.py:1213
msgid "list all promotions (simple view)"
msgstr "Alle promoties weergeven (eenvoudige weergave)"
-#: engine/core/docs/drf/viewsets.py:1148
+#: engine/core/docs/drf/viewsets.py:1223
msgid "retrieve a single promotion (detailed view)"
msgstr "Een enkele promotie ophalen (gedetailleerde weergave)"
-#: engine/core/docs/drf/viewsets.py:1155
+#: engine/core/docs/drf/viewsets.py:1230
msgid "create a promotion"
msgstr "Maak een promotie"
-#: engine/core/docs/drf/viewsets.py:1162
+#: engine/core/docs/drf/viewsets.py:1237
msgid "delete a promotion"
msgstr "Een promotie verwijderen"
-#: engine/core/docs/drf/viewsets.py:1169
+#: engine/core/docs/drf/viewsets.py:1244
msgid "rewrite an existing promotion saving non-editables"
msgstr ""
"Een bestaande promotie herschrijven waarbij niet-wijzigbare gegevens worden "
"opgeslagen"
-#: engine/core/docs/drf/viewsets.py:1176
+#: engine/core/docs/drf/viewsets.py:1251
msgid "rewrite some fields of an existing promotion saving non-editables"
msgstr ""
"Herschrijf sommige velden van een bestaande categorie door niet-wijzigbare "
"velden op te slaan"
-#: engine/core/docs/drf/viewsets.py:1186
+#: engine/core/docs/drf/viewsets.py:1261
msgid "list all stocks (simple view)"
msgstr "Alle aandelen weergeven (eenvoudige weergave)"
-#: engine/core/docs/drf/viewsets.py:1193
+#: engine/core/docs/drf/viewsets.py:1268
msgid "retrieve a single stock (detailed view)"
msgstr "Een enkele voorraad ophalen (gedetailleerde weergave)"
-#: engine/core/docs/drf/viewsets.py:1200
+#: engine/core/docs/drf/viewsets.py:1275
msgid "create a stock record"
msgstr "Een voorraadrecord maken"
-#: engine/core/docs/drf/viewsets.py:1207
+#: engine/core/docs/drf/viewsets.py:1282
msgid "delete a stock record"
msgstr "Een voorraadrecord verwijderen"
-#: engine/core/docs/drf/viewsets.py:1214
+#: engine/core/docs/drf/viewsets.py:1289
msgid "rewrite an existing stock record saving non-editables"
msgstr ""
"Een bestaand voorraadrecord herschrijven waarbij niet-wijzigbare gegevens "
"worden opgeslagen"
-#: engine/core/docs/drf/viewsets.py:1221
+#: engine/core/docs/drf/viewsets.py:1297
msgid "rewrite some fields of an existing stock record saving non-editables"
msgstr ""
"Herschrijf sommige velden van een bestaande categorie door niet-wijzigbare "
"velden op te slaan"
-#: engine/core/docs/drf/viewsets.py:1231
+#: engine/core/docs/drf/viewsets.py:1308
msgid "list all product tags (simple view)"
msgstr "Alle producttags weergeven (eenvoudige weergave)"
-#: engine/core/docs/drf/viewsets.py:1238
+#: engine/core/docs/drf/viewsets.py:1318
msgid "retrieve a single product tag (detailed view)"
msgstr "Een enkele producttag ophalen (gedetailleerde weergave)"
-#: engine/core/docs/drf/viewsets.py:1245
+#: engine/core/docs/drf/viewsets.py:1325
msgid "create a product tag"
msgstr "Een producttag maken"
-#: engine/core/docs/drf/viewsets.py:1252
+#: engine/core/docs/drf/viewsets.py:1335
msgid "delete a product tag"
msgstr "Een producttag verwijderen"
-#: engine/core/docs/drf/viewsets.py:1259
+#: engine/core/docs/drf/viewsets.py:1342
msgid "rewrite an existing product tag saving non-editables"
msgstr "Een bestaande producttag herschrijven en niet-wijzigbare tags opslaan"
-#: engine/core/docs/drf/viewsets.py:1266
+#: engine/core/docs/drf/viewsets.py:1350
msgid "rewrite some fields of an existing product tag saving non-editables"
msgstr ""
"Herschrijf sommige velden van een bestaande categorie door niet-wijzigbare "
"velden op te slaan"
-#: engine/core/elasticsearch/__init__.py:122
-#: engine/core/elasticsearch/__init__.py:570
+#: engine/core/elasticsearch/__init__.py:127
+#: engine/core/elasticsearch/__init__.py:627
msgid "no search term provided."
msgstr "Geen zoekterm opgegeven."
-#: engine/core/filters.py:69 engine/core/filters.py:426
-#: engine/core/filters.py:553
+#: engine/core/filters.py:78 engine/core/filters.py:484
+#: engine/core/filters.py:625
msgid "Search"
msgstr "Zoek op"
-#: engine/core/filters.py:70 engine/core/filters.py:583
-#: engine/core/filters.py:612
+#: engine/core/filters.py:79 engine/core/filters.py:662
+#: engine/core/filters.py:691
msgid "UUID"
msgstr "UUID"
-#: engine/core/filters.py:71 engine/core/filters.py:428
-#: engine/core/filters.py:555
+#: engine/core/filters.py:80 engine/core/filters.py:487
+#: engine/core/filters.py:627
msgid "Name"
msgstr "Naam"
-#: engine/core/filters.py:72 engine/core/filters.py:557
+#: engine/core/filters.py:82 engine/core/filters.py:630
msgid "Categories"
msgstr "Categorieën"
-#: engine/core/filters.py:74
+#: engine/core/filters.py:86
msgid "Categories Slugs"
msgstr "Categorieën Naaktslakken"
-#: engine/core/filters.py:75 engine/core/filters.py:436
+#: engine/core/filters.py:88 engine/core/filters.py:495
msgid "Tags"
msgstr "Tags"
-#: engine/core/filters.py:76
+#: engine/core/filters.py:90
msgid "Min Price"
msgstr "Min Prijs"
-#: engine/core/filters.py:77
+#: engine/core/filters.py:93
msgid "Max Price"
msgstr "Maximale prijs"
-#: engine/core/filters.py:78
+#: engine/core/filters.py:95
msgid "Is Active"
msgstr "Is actief"
-#: engine/core/filters.py:79
+#: engine/core/filters.py:96
msgid "Brand"
msgstr "Merk"
-#: engine/core/filters.py:80
+#: engine/core/filters.py:97
msgid "Attributes"
msgstr "Attributen"
-#: engine/core/filters.py:81
+#: engine/core/filters.py:99
msgid "Quantity"
msgstr "Hoeveelheid"
-#: engine/core/filters.py:82 engine/core/filters.py:430
-#: engine/core/filters.py:556 engine/core/models.py:321
-#: engine/core/models.py:489 engine/core/models.py:644
+#: engine/core/filters.py:101 engine/core/filters.py:489
+#: engine/core/filters.py:628 engine/core/models.py:327
+#: engine/core/models.py:508 engine/core/models.py:665
msgid "Slug"
msgstr "Slak"
-#: engine/core/filters.py:83
+#: engine/core/filters.py:102
msgid "Is Digital"
msgstr "Is digitaal"
-#: engine/core/filters.py:84
+#: engine/core/filters.py:104
msgid "Include sub-categories"
msgstr "Subcategorieën opnemen"
-#: engine/core/filters.py:87
+#: engine/core/filters.py:108
msgid "Include personal ordered"
msgstr "Inclusief persoonlijk bestelde producten"
-#: engine/core/filters.py:89 engine/core/models.py:648
+#: engine/core/filters.py:110 engine/core/models.py:669
msgid "SKU"
msgstr "SKU"
-#: engine/core/filters.py:184
+#: engine/core/filters.py:212
msgid "there must be a category_uuid to use include_subcategories flag"
msgstr ""
"Er moet een categorie_uuid zijn om include_subcategories vlag te gebruiken"
-#: engine/core/filters.py:353
+#: engine/core/filters.py:398
msgid "Search (ID, product name or part number)"
msgstr "Zoeken (ID, productnaam of onderdeelnummer)"
-#: engine/core/filters.py:356
+#: engine/core/filters.py:402
msgid "Bought after (inclusive)"
msgstr "Gekocht na (inclusief)"
-#: engine/core/filters.py:357
+#: engine/core/filters.py:405
msgid "Bought before (inclusive)"
msgstr "Eerder gekocht (inclusief)"
-#: engine/core/filters.py:360 engine/core/filters.py:407
-#: engine/core/filters.py:614
+#: engine/core/filters.py:410 engine/core/filters.py:461
+#: engine/core/filters.py:696
msgid "User email"
msgstr "E-mail gebruiker"
-#: engine/core/filters.py:361 engine/core/filters.py:408
-#: engine/core/filters.py:592 engine/core/filters.py:613
+#: engine/core/filters.py:413 engine/core/filters.py:464
+#: engine/core/filters.py:671 engine/core/filters.py:693
msgid "User UUID"
msgstr "Gebruiker UUID"
-#: engine/core/filters.py:362
+#: engine/core/filters.py:415
msgid "Status"
msgstr "Status"
-#: engine/core/filters.py:366
+#: engine/core/filters.py:419
msgid "Human Readable ID"
msgstr "Menselijk leesbare ID"
-#: engine/core/filters.py:429
+#: engine/core/filters.py:488
msgid "Parent"
msgstr "Ouder"
-#: engine/core/filters.py:433
+#: engine/core/filters.py:492
msgid "Whole category(has at least 1 product or not)"
msgstr "Hele categorie (heeft minstens 1 product of niet)"
-#: engine/core/filters.py:437
+#: engine/core/filters.py:496
msgid "Level"
msgstr "Niveau"
-#: engine/core/filters.py:587
+#: engine/core/filters.py:666
msgid "Product UUID"
msgstr "Product UUID"
-#: engine/core/graphene/mutations.py:40
+#: engine/core/graphene/mutations.py:41
msgid "key to look for in or set into the cache"
msgstr "Sleutel om te zoeken of te plaatsen in de cache"
-#: engine/core/graphene/mutations.py:41
+#: engine/core/graphene/mutations.py:43
msgid "data to store in cache"
msgstr "Gegevens om op te slaan in de cache"
-#: engine/core/graphene/mutations.py:44
+#: engine/core/graphene/mutations.py:46
msgid "timeout in seconds to set the data for into the cache"
msgstr "Time-out in seconden om de gegevens in de cache te plaatsen"
-#: engine/core/graphene/mutations.py:47
+#: engine/core/graphene/mutations.py:49
msgid "cached data"
msgstr "Gecachte gegevens"
-#: engine/core/graphene/mutations.py:62
+#: engine/core/graphene/mutations.py:64
msgid "camelized JSON data from the requested URL"
msgstr "Camelized JSON-gegevens van de opgevraagde URL"
-#: engine/core/graphene/mutations.py:67 engine/core/views.py:257
+#: engine/core/graphene/mutations.py:69 engine/core/views.py:249
msgid "only URLs starting with http(s):// are allowed"
msgstr "Alleen URL's die beginnen met http(s):// zijn toegestaan"
-#: engine/core/graphene/mutations.py:83
+#: engine/core/graphene/mutations.py:87
msgid "add a product to the order"
msgstr "Een product aan de bestelling toevoegen"
-#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131
-#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287
+#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139
+#: engine/core/graphene/mutations.py:255 engine/core/graphene/mutations.py:307
#, python-brace-format
msgid "order {order_uuid} not found"
msgstr "Bestelling {order_uuid} niet gevonden!"
-#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159
+#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167
msgid "remove a product from the order"
msgstr "Een product uit de bestelling verwijderen"
-#: engine/core/graphene/mutations.py:137
+#: engine/core/graphene/mutations.py:145
msgid "remove all products from the order"
msgstr "Alle producten uit de bestelling verwijderen"
-#: engine/core/graphene/mutations.py:182
+#: engine/core/graphene/mutations.py:190
msgid "buy an order"
msgstr "Een bestelling kopen"
-#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265
+#: engine/core/graphene/mutations.py:221 engine/core/graphene/mutations.py:283
msgid "please provide either order_uuid or order_hr_id - mutually exclusive"
msgstr "Geef order_uuid of order_hr_id - wederzijds exclusief!"
-#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501
-#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712
+#: engine/core/graphene/mutations.py:250 engine/core/graphene/mutations.py:525
+#: engine/core/graphene/mutations.py:574 engine/core/viewsets.py:753
msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr "Verkeerd type kwam uit order.buy() methode: {type(instance)!s}"
-#: engine/core/graphene/mutations.py:245
+#: engine/core/graphene/mutations.py:261
msgid "perform an action on a list of products in the order"
msgstr "Een actie uitvoeren op een lijst met producten in de bestelling"
-#: engine/core/graphene/mutations.py:250
+#: engine/core/graphene/mutations.py:266
msgid "remove/add"
msgstr "Verwijderen/toevoegen"
-#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323
+#: engine/core/graphene/mutations.py:302 engine/core/graphene/mutations.py:343
msgid "action must be either add or remove"
msgstr "De actie moet \"toevoegen\" of \"verwijderen\" zijn!"
-#: engine/core/graphene/mutations.py:293
+#: engine/core/graphene/mutations.py:313
msgid "perform an action on a list of products in the wishlist"
msgstr "Een actie uitvoeren op een lijst met producten in het verlanglijstje"
-#: engine/core/graphene/mutations.py:311
+#: engine/core/graphene/mutations.py:331
msgid "please provide wishlist_uuid value"
msgstr "Geef de waarde `wishlist_uuid` op."
-#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404
-#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460
-#: engine/core/graphene/mutations.py:504
+#: engine/core/graphene/mutations.py:348 engine/core/graphene/mutations.py:424
+#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480
+#: engine/core/graphene/mutations.py:530
#, python-brace-format
msgid "wishlist {wishlist_uuid} not found"
msgstr "wens {wishlist_uuid} niet gevonden!"
-#: engine/core/graphene/mutations.py:382
+#: engine/core/graphene/mutations.py:402
msgid "add a product to the wishlist"
msgstr "Een product aan de bestelling toevoegen"
-#: engine/core/graphene/mutations.py:410
+#: engine/core/graphene/mutations.py:430
msgid "remove a product from the wishlist"
msgstr "Een product uit de bestelling verwijderen"
-#: engine/core/graphene/mutations.py:438
+#: engine/core/graphene/mutations.py:458
msgid "remove all products from the wishlist"
msgstr "Een product uit de bestelling verwijderen"
-#: engine/core/graphene/mutations.py:466
+#: engine/core/graphene/mutations.py:486
msgid "buy all products from the wishlist"
msgstr "Een product uit de bestelling verwijderen"
-#: engine/core/graphene/mutations.py:510
+#: engine/core/graphene/mutations.py:536
msgid "buy a product"
msgstr "Een bestelling kopen"
-#: engine/core/graphene/mutations.py:516
+#: engine/core/graphene/mutations.py:543
msgid ""
-"please send the attributes as the string formatted like "
-"attr1=value1,attr2=value2"
+"please send the attributes as the string formatted like attr1=value1,"
+"attr2=value2"
msgstr ""
"Stuur de attributen als de string opgemaakt als attr1=waarde1,attr2=waarde2"
-#: engine/core/graphene/mutations.py:549
+#: engine/core/graphene/mutations.py:581
msgid "add or delete a feedback for orderproduct"
msgstr "Feedback toevoegen of verwijderen voor het orderproduct"
-#: engine/core/graphene/mutations.py:573
+#: engine/core/graphene/mutations.py:607
msgid "action must be either `add` or `remove`"
msgstr "De actie moet `toevoegen` of `verwijderen` zijn!"
-#: engine/core/graphene/mutations.py:576
+#: engine/core/graphene/mutations.py:610
#, python-brace-format
msgid "order product {order_product_uuid} not found"
msgstr "Orderproduct {order_product_uuid} niet gevonden!"
-#: engine/core/graphene/mutations.py:582
+#: engine/core/graphene/mutations.py:617
msgid "original address string provided by the user"
msgstr "Originele adresstring geleverd door de gebruiker"
-#: engine/core/graphene/mutations.py:618 engine/core/models.py:955
-#: engine/core/models.py:968 engine/core/models.py:1383
-#: engine/core/models.py:1412 engine/core/models.py:1437
-#: engine/core/viewsets.py:715
+#: engine/core/graphene/mutations.py:654 engine/core/models.py:978
+#: engine/core/models.py:991 engine/core/models.py:1435
+#: engine/core/models.py:1466 engine/core/models.py:1497
+#: engine/core/viewsets.py:760
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr "{name} bestaat niet: {uuid}!"
-#: engine/core/graphene/mutations.py:632
+#: engine/core/graphene/mutations.py:668
msgid "limit must be between 1 and 10"
msgstr "Limiet moet tussen 1 en 10 liggen"
-#: engine/core/graphene/mutations.py:681
+#: engine/core/graphene/mutations.py:717
msgid "elasticsearch - works like a charm"
msgstr "ElasticSearch - werkt als een charme"
#: engine/core/graphene/object_types.py:82
-#: engine/core/graphene/object_types.py:370
-#: engine/core/graphene/object_types.py:417 engine/core/models.py:772
-#: engine/core/models.py:1250 engine/core/models.py:1897
+#: engine/core/graphene/object_types.py:417
+#: engine/core/graphene/object_types.py:468 engine/core/models.py:795
+#: engine/core/models.py:1289 engine/core/models.py:2021
msgid "attributes"
msgstr "Attributen"
@@ -1290,92 +1296,91 @@ msgid "groups of attributes"
msgstr "Groepen van kenmerken"
#: engine/core/graphene/object_types.py:116
-#: engine/core/graphene/object_types.py:193
-#: engine/core/graphene/object_types.py:223 engine/core/models.py:432
+#: engine/core/graphene/object_types.py:214
+#: engine/core/graphene/object_types.py:252 engine/core/models.py:451
msgid "categories"
msgstr "Categorieën"
-#: engine/core/graphene/object_types.py:124 engine/core/models.py:503
+#: engine/core/graphene/object_types.py:132 engine/core/models.py:522
msgid "brands"
msgstr "Merken"
-#: engine/core/graphene/object_types.py:195
+#: engine/core/graphene/object_types.py:216
msgid "category image url"
msgstr "Categorieën"
-#: engine/core/graphene/object_types.py:196
-#: engine/core/graphene/object_types.py:317 engine/core/models.py:283
+#: engine/core/graphene/object_types.py:217
+#: engine/core/graphene/object_types.py:362 engine/core/models.py:289
msgid "markup percentage"
msgstr "Opwaarderingspercentage"
-#: engine/core/graphene/object_types.py:199
+#: engine/core/graphene/object_types.py:221
msgid "which attributes and values can be used for filtering this category."
msgstr ""
"Welke attributen en waarden kunnen worden gebruikt om deze categorie te "
"filteren."
-#: engine/core/graphene/object_types.py:203
-msgid ""
-"minimum and maximum prices for products in this category, if available."
+#: engine/core/graphene/object_types.py:227
+msgid "minimum and maximum prices for products in this category, if available."
msgstr ""
"Minimale en maximale prijzen voor producten in deze categorie, indien "
"beschikbaar."
-#: engine/core/graphene/object_types.py:205
+#: engine/core/graphene/object_types.py:231
msgid "tags for this category"
msgstr "Tags voor deze categorie"
-#: engine/core/graphene/object_types.py:206
+#: engine/core/graphene/object_types.py:234
msgid "products in this category"
msgstr "Producten in deze categorie"
-#: engine/core/graphene/object_types.py:324 engine/core/models.py:188
+#: engine/core/graphene/object_types.py:369 engine/core/models.py:194
msgid "vendors"
msgstr "Verkopers"
-#: engine/core/graphene/object_types.py:328
+#: engine/core/graphene/object_types.py:373
msgid "Latitude (Y coordinate)"
msgstr "Breedtegraad (Y-coördinaat)"
-#: engine/core/graphene/object_types.py:329
+#: engine/core/graphene/object_types.py:374
msgid "Longitude (X coordinate)"
msgstr "Lengtegraad (X-coördinaat)"
-#: engine/core/graphene/object_types.py:358
+#: engine/core/graphene/object_types.py:403
msgid "comment"
msgstr "Hoe"
-#: engine/core/graphene/object_types.py:359
-#: engine/core/graphene/object_types.py:483
+#: engine/core/graphene/object_types.py:405
+#: engine/core/graphene/object_types.py:539
msgid "rating value from 1 to 10, inclusive, or 0 if not set."
msgstr "Waarderingswaarde van 1 tot en met 10, of 0 indien niet ingesteld."
-#: engine/core/graphene/object_types.py:366
+#: engine/core/graphene/object_types.py:413
msgid "represents feedback from a user."
msgstr "Vertegenwoordigt feedback van een gebruiker."
-#: engine/core/graphene/object_types.py:371
-#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244
+#: engine/core/graphene/object_types.py:418
+#: engine/core/graphene/object_types.py:469 engine/core/models.py:1283
msgid "notifications"
msgstr "Meldingen"
-#: engine/core/graphene/object_types.py:372
+#: engine/core/graphene/object_types.py:420
msgid "download url for this order product if applicable"
msgstr "Download url voor dit bestelproduct indien van toepassing"
-#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736
+#: engine/core/graphene/object_types.py:422 engine/core/models.py:1848
msgid "feedback"
msgstr "Feedback"
-#: engine/core/graphene/object_types.py:407
+#: engine/core/graphene/object_types.py:456
msgid "a list of order products in this order"
msgstr "Een lijst met bestelde producten in deze bestelling"
-#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214
+#: engine/core/graphene/object_types.py:458 engine/core/models.py:1253
msgid "billing address"
msgstr "Factuuradres"
-#: engine/core/graphene/object_types.py:412
+#: engine/core/graphene/object_types.py:462
msgid ""
"shipping address for this order, leave blank if same as billing address or "
"if not applicable"
@@ -1383,53 +1388,53 @@ msgstr ""
"Verzendadres voor deze bestelling, leeg laten als dit hetzelfde is als het "
"factuuradres of als dit niet van toepassing is"
-#: engine/core/graphene/object_types.py:414
+#: engine/core/graphene/object_types.py:465
msgid "total price of this order"
msgstr "Totale prijs van deze bestelling"
-#: engine/core/graphene/object_types.py:415
+#: engine/core/graphene/object_types.py:466
msgid "total quantity of products in order"
msgstr "Totale hoeveelheid producten in bestelling"
-#: engine/core/graphene/object_types.py:416
+#: engine/core/graphene/object_types.py:467
msgid "are all products in the order digital"
msgstr "Zijn alle producten in de bestelling digitaal"
-#: engine/core/graphene/object_types.py:419
+#: engine/core/graphene/object_types.py:471
msgid "transactions for this order"
msgstr "Transacties voor deze bestelling"
-#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278
+#: engine/core/graphene/object_types.py:491 engine/core/models.py:1317
msgid "orders"
msgstr "Bestellingen"
-#: engine/core/graphene/object_types.py:459
+#: engine/core/graphene/object_types.py:512
msgid "image url"
msgstr "Afbeelding URL"
-#: engine/core/graphene/object_types.py:466
+#: engine/core/graphene/object_types.py:519
msgid "product's images"
msgstr "Afbeeldingen van het product"
-#: engine/core/graphene/object_types.py:473 engine/core/models.py:431
-#: engine/core/models.py:586
+#: engine/core/graphene/object_types.py:526 engine/core/models.py:450
+#: engine/core/models.py:607
msgid "category"
msgstr "Categorie"
-#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737
+#: engine/core/graphene/object_types.py:528 engine/core/models.py:1849
msgid "feedbacks"
msgstr "Reacties"
-#: engine/core/graphene/object_types.py:476 engine/core/models.py:502
-#: engine/core/models.py:595
+#: engine/core/graphene/object_types.py:529 engine/core/models.py:521
+#: engine/core/models.py:616
msgid "brand"
msgstr "Merk"
-#: engine/core/graphene/object_types.py:477 engine/core/models.py:106
+#: engine/core/graphene/object_types.py:531 engine/core/models.py:106
msgid "attribute groups"
msgstr "Attribuutgroepen"
-#: engine/core/graphene/object_types.py:478
+#: engine/core/graphene/object_types.py:533
#: engine/core/templates/digital_order_created_email.html:111
#: engine/core/templates/digital_order_delivered_email.html:109
#: engine/core/templates/shipped_order_created_email.html:109
@@ -1437,7 +1442,7 @@ msgstr "Attribuutgroepen"
msgid "price"
msgstr "Prijs"
-#: engine/core/graphene/object_types.py:479
+#: engine/core/graphene/object_types.py:534
#: engine/core/templates/digital_order_created_email.html:110
#: engine/core/templates/digital_order_delivered_email.html:108
#: engine/core/templates/shipped_order_created_email.html:108
@@ -1445,39 +1450,39 @@ msgstr "Prijs"
msgid "quantity"
msgstr "Hoeveelheid"
-#: engine/core/graphene/object_types.py:480
+#: engine/core/graphene/object_types.py:535
msgid "number of feedbacks"
msgstr "Aantal terugkoppelingen"
-#: engine/core/graphene/object_types.py:481
+#: engine/core/graphene/object_types.py:536
msgid "only available for personal orders"
msgstr "Producten alleen beschikbaar voor persoonlijke bestellingen"
-#: engine/core/graphene/object_types.py:484
+#: engine/core/graphene/object_types.py:541
msgid "discount price"
msgstr "Korting"
-#: engine/core/graphene/object_types.py:508 engine/core/models.py:658
+#: engine/core/graphene/object_types.py:565 engine/core/models.py:679
msgid "products"
msgstr "Producten"
-#: engine/core/graphene/object_types.py:611
+#: engine/core/graphene/object_types.py:675
msgid "promocodes"
msgstr "Promocodes"
-#: engine/core/graphene/object_types.py:621
+#: engine/core/graphene/object_types.py:690
msgid "products on sale"
msgstr "Producten te koop"
-#: engine/core/graphene/object_types.py:628 engine/core/models.py:904
+#: engine/core/graphene/object_types.py:698 engine/core/models.py:927
msgid "promotions"
msgstr "Promoties"
-#: engine/core/graphene/object_types.py:632 engine/core/models.py:187
+#: engine/core/graphene/object_types.py:702 engine/core/models.py:193
msgid "vendor"
msgstr "Verkoper"
-#: engine/core/graphene/object_types.py:633 engine/core/models.py:657
+#: engine/core/graphene/object_types.py:703 engine/core/models.py:678
#: engine/core/templates/digital_order_created_email.html:109
#: engine/core/templates/digital_order_delivered_email.html:107
#: engine/core/templates/shipped_order_created_email.html:107
@@ -1485,100 +1490,100 @@ msgstr "Verkoper"
msgid "product"
msgstr "Product"
-#: engine/core/graphene/object_types.py:644 engine/core/models.py:927
+#: engine/core/graphene/object_types.py:715 engine/core/models.py:950
msgid "wishlisted products"
msgstr "Gewenste producten"
-#: engine/core/graphene/object_types.py:650 engine/core/models.py:944
+#: engine/core/graphene/object_types.py:722 engine/core/models.py:967
msgid "wishlists"
msgstr "Verlanglijst"
-#: engine/core/graphene/object_types.py:654
+#: engine/core/graphene/object_types.py:727
msgid "tagged products"
msgstr "Getagde producten"
-#: engine/core/graphene/object_types.py:661 engine/core/models.py:224
-#: engine/core/models.py:601
+#: engine/core/graphene/object_types.py:735 engine/core/models.py:230
+#: engine/core/models.py:622
msgid "product tags"
msgstr "Product tags"
-#: engine/core/graphene/object_types.py:665
+#: engine/core/graphene/object_types.py:740
msgid "tagged categories"
msgstr "Getagde categorieën"
-#: engine/core/graphene/object_types.py:672
+#: engine/core/graphene/object_types.py:748
msgid "categories tags"
msgstr "Categorieën' tags"
-#: engine/core/graphene/object_types.py:676
+#: engine/core/graphene/object_types.py:752
msgid "project name"
msgstr "Naam project"
-#: engine/core/graphene/object_types.py:677
+#: engine/core/graphene/object_types.py:753
msgid "company name"
msgstr "Bedrijfsnaam"
-#: engine/core/graphene/object_types.py:678
+#: engine/core/graphene/object_types.py:754
msgid "company address"
msgstr "Adres"
-#: engine/core/graphene/object_types.py:679
+#: engine/core/graphene/object_types.py:755
msgid "company phone number"
msgstr "Telefoonnummer bedrijf"
-#: engine/core/graphene/object_types.py:680
+#: engine/core/graphene/object_types.py:758
msgid "email from, sometimes it must be used instead of host user value"
msgstr ""
"e-mail van', soms moet deze worden gebruikt in plaats van de "
"hostgebruikerswaarde"
-#: engine/core/graphene/object_types.py:681
+#: engine/core/graphene/object_types.py:761
msgid "email host user"
msgstr "Gebruiker e-mail hosten"
-#: engine/core/graphene/object_types.py:682
+#: engine/core/graphene/object_types.py:762
msgid "maximum amount for payment"
msgstr "Maximumbedrag voor betaling"
-#: engine/core/graphene/object_types.py:683
+#: engine/core/graphene/object_types.py:763
msgid "minimum amount for payment"
msgstr "Minimumbedrag voor betaling"
-#: engine/core/graphene/object_types.py:684
+#: engine/core/graphene/object_types.py:764
msgid "analytics data"
msgstr "Analytics-gegevens"
-#: engine/core/graphene/object_types.py:685
+#: engine/core/graphene/object_types.py:765
msgid "advertisement data"
msgstr "Advertentiegegevens"
-#: engine/core/graphene/object_types.py:688
+#: engine/core/graphene/object_types.py:768
msgid "company configuration"
msgstr "Configuratie"
-#: engine/core/graphene/object_types.py:692
+#: engine/core/graphene/object_types.py:772
msgid "language code"
msgstr "Taalcode"
-#: engine/core/graphene/object_types.py:693
+#: engine/core/graphene/object_types.py:773
msgid "language name"
msgstr "Naam van de taal"
-#: engine/core/graphene/object_types.py:694
+#: engine/core/graphene/object_types.py:774
msgid "language flag, if exists :)"
msgstr "Taalvlag, indien aanwezig :)"
-#: engine/core/graphene/object_types.py:697
+#: engine/core/graphene/object_types.py:777
msgid "supported languages"
msgstr "Een lijst met ondersteunde talen opvragen"
-#: engine/core/graphene/object_types.py:728
-#: engine/core/graphene/object_types.py:729
-#: engine/core/graphene/object_types.py:730
+#: engine/core/graphene/object_types.py:809
+#: engine/core/graphene/object_types.py:812
+#: engine/core/graphene/object_types.py:815
msgid "products search results"
msgstr "Producten zoekresultaten"
-#: engine/core/graphene/object_types.py:731
+#: engine/core/graphene/object_types.py:817
msgid "posts search results"
msgstr "Zoekresultaten"
@@ -1592,8 +1597,8 @@ msgstr ""
"Vertegenwoordigt een groep attributen, die hiërarchisch kan zijn. Deze "
"klasse wordt gebruikt om groepen van attributen te beheren en te "
"organiseren. Een attribuutgroep kan een bovenliggende groep hebben, die een "
-"hiërarchische structuur vormt. Dit kan nuttig zijn voor het categoriseren en"
-" effectiever beheren van attributen in een complex systeem."
+"hiërarchische structuur vormt. Dit kan nuttig zijn voor het categoriseren en "
+"effectiever beheren van attributen in een complex systeem."
#: engine/core/models.py:91
msgid "parent of this group"
@@ -1607,7 +1612,7 @@ msgstr "Ouderattribuutgroep"
msgid "attribute group's name"
msgstr "Naam attribuutgroep"
-#: engine/core/models.py:105 engine/core/models.py:734
+#: engine/core/models.py:105 engine/core/models.py:755
msgid "attribute group"
msgstr "Attribuutgroep"
@@ -1621,8 +1626,8 @@ msgid ""
"also maintains additional metadata and constraints, making it suitable for "
"use in systems that interact with third-party vendors."
msgstr ""
-"Vertegenwoordigt een verkopersentiteit die informatie over externe verkopers"
-" en hun interactievereisten kan opslaan. De klasse Vendor wordt gebruikt om "
+"Vertegenwoordigt een verkopersentiteit die informatie over externe verkopers "
+"en hun interactievereisten kan opslaan. De klasse Vendor wordt gebruikt om "
"informatie over een externe verkoper te definiëren en te beheren. Het slaat "
"de naam van de verkoper op, authenticatiegegevens die nodig zijn voor "
"communicatie en het opmaakpercentage dat wordt toegepast op producten die "
@@ -1630,50 +1635,50 @@ msgstr ""
"metadata en beperkingen, waardoor het geschikt is voor gebruik in systemen "
"die communiceren met externe verkopers."
-#: engine/core/models.py:124
+#: engine/core/models.py:125
msgid "stores credentials and endpoints required for vendor communication"
msgstr ""
"Slaat referenties en eindpunten op die vereist zijn voor API-communicatie "
"van de verkoper"
-#: engine/core/models.py:125
+#: engine/core/models.py:127
msgid "authentication info"
msgstr "Authenticatie-info"
-#: engine/core/models.py:130
+#: engine/core/models.py:132
msgid "define the markup for products retrieved from this vendor"
msgstr ""
"Definieer de opmaak voor producten die zijn opgehaald bij deze leverancier"
-#: engine/core/models.py:131
+#: engine/core/models.py:133
msgid "vendor markup percentage"
msgstr "Verkoper winstpercentage"
-#: engine/core/models.py:135
+#: engine/core/models.py:137
msgid "name of this vendor"
msgstr "Naam van deze verkoper"
-#: engine/core/models.py:136
+#: engine/core/models.py:138
msgid "vendor name"
msgstr "Naam verkoper"
-#: engine/core/models.py:147
+#: engine/core/models.py:153
msgid "response file"
msgstr "responsbestand"
-#: engine/core/models.py:148
+#: engine/core/models.py:154
msgid "vendor's last processing response"
msgstr "laatste verwerkingsreactie van verkoper"
-#: engine/core/models.py:154
+#: engine/core/models.py:160
msgid "vendor's integration file path"
msgstr "Pad integratiebestand verkoper"
-#: engine/core/models.py:155
+#: engine/core/models.py:161
msgid "integration path"
msgstr "Integratie pad"
-#: engine/core/models.py:197
+#: engine/core/models.py:203
msgid ""
"Represents a product tag used for classifying or identifying products. The "
"ProductTag class is designed to uniquely identify and classify products "
@@ -1683,32 +1688,32 @@ msgid ""
msgstr ""
"Vertegenwoordigt een producttag die wordt gebruikt om producten te "
"classificeren of te identificeren. De klasse ProductTag is ontworpen om "
-"producten uniek te identificeren en te classificeren door een combinatie van"
-" een interne tagidentifier en een gebruiksvriendelijke weergavenaam. Het "
+"producten uniek te identificeren en te classificeren door een combinatie van "
+"een interne tagidentifier en een gebruiksvriendelijke weergavenaam. Het "
"ondersteunt bewerkingen die geëxporteerd worden door mixins en biedt "
"aanpassing van metadata voor administratieve doeleinden."
-#: engine/core/models.py:209 engine/core/models.py:240
+#: engine/core/models.py:215 engine/core/models.py:246
msgid "internal tag identifier for the product tag"
msgstr "Interne tagidentifier voor de producttag"
-#: engine/core/models.py:210 engine/core/models.py:241
+#: engine/core/models.py:216 engine/core/models.py:247
msgid "tag name"
msgstr "Tag naam"
-#: engine/core/models.py:214 engine/core/models.py:245
+#: engine/core/models.py:220 engine/core/models.py:251
msgid "user-friendly name for the product tag"
msgstr "Gebruiksvriendelijke naam voor de producttag"
-#: engine/core/models.py:215 engine/core/models.py:246
+#: engine/core/models.py:221 engine/core/models.py:252
msgid "tag display name"
msgstr "Tag weergavenaam"
-#: engine/core/models.py:223
+#: engine/core/models.py:229
msgid "product tag"
msgstr "Productlabel"
-#: engine/core/models.py:229
+#: engine/core/models.py:235
msgid ""
"Represents a category tag used for products. This class models a category "
"tag that can be used to associate and classify products. It includes "
@@ -1719,15 +1724,15 @@ msgstr ""
"associëren en te classificeren. Ze bevat attributen voor een interne "
"tagidentifier en een gebruiksvriendelijke weergavenaam."
-#: engine/core/models.py:254
+#: engine/core/models.py:260
msgid "category tag"
msgstr "categorie tag"
-#: engine/core/models.py:255 engine/core/models.py:327
+#: engine/core/models.py:261 engine/core/models.py:333
msgid "category tags"
msgstr "categorie tags"
-#: engine/core/models.py:260
+#: engine/core/models.py:266
msgid ""
"Represents a category entity to organize and group related items in a "
"hierarchical structure. Categories may have hierarchical relationships with "
@@ -1742,65 +1747,64 @@ msgstr ""
"Vertegenwoordigt een categorie-entiteit voor het organiseren en groeperen "
"van gerelateerde items in een hiërarchische structuur. Categorieën kunnen "
"hiërarchische relaties hebben met andere categorieën, waarbij ouder-kind "
-"relaties worden ondersteund. De klasse bevat velden voor metadata en visuele"
-" weergave, die dienen als basis voor categorie-gerelateerde functies. Deze "
-"klasse wordt meestal gebruikt om productcategorieën of andere gelijksoortige"
-" groeperingen binnen een applicatie te definiëren en te beheren, waarbij "
-"gebruikers of beheerders de naam, beschrijving en hiërarchie van categorieën"
-" kunnen specificeren en attributen zoals afbeeldingen, tags of prioriteit "
+"relaties worden ondersteund. De klasse bevat velden voor metadata en visuele "
+"weergave, die dienen als basis voor categorie-gerelateerde functies. Deze "
+"klasse wordt meestal gebruikt om productcategorieën of andere gelijksoortige "
+"groeperingen binnen een applicatie te definiëren en te beheren, waarbij "
+"gebruikers of beheerders de naam, beschrijving en hiërarchie van categorieën "
+"kunnen specificeren en attributen zoals afbeeldingen, tags of prioriteit "
"kunnen toekennen."
-#: engine/core/models.py:274
+#: engine/core/models.py:280
msgid "upload an image representing this category"
msgstr "Upload een afbeelding die deze categorie vertegenwoordigt"
-#: engine/core/models.py:277
+#: engine/core/models.py:283
msgid "category image"
msgstr "Categorie afbeelding"
-#: engine/core/models.py:282
+#: engine/core/models.py:288
msgid "define a markup percentage for products in this category"
msgstr "Definieer een toeslagpercentage voor producten in deze categorie"
-#: engine/core/models.py:291
+#: engine/core/models.py:297
msgid "parent of this category to form a hierarchical structure"
msgstr "Ouder van deze categorie om een hiërarchische structuur te vormen"
-#: engine/core/models.py:292
+#: engine/core/models.py:298
msgid "parent category"
msgstr "Oudercategorie"
-#: engine/core/models.py:297
+#: engine/core/models.py:303
msgid "category name"
msgstr "Naam categorie"
-#: engine/core/models.py:298
+#: engine/core/models.py:304
msgid "provide a name for this category"
msgstr "Geef deze categorie een naam"
-#: engine/core/models.py:305
+#: engine/core/models.py:311
msgid "add a detailed description for this category"
msgstr "Voeg een gedetailleerde beschrijving toe voor deze categorie"
-#: engine/core/models.py:306
+#: engine/core/models.py:312
msgid "category description"
msgstr "Categorie beschrijving"
-#: engine/core/models.py:326
+#: engine/core/models.py:332
msgid "tags that help describe or group this category"
msgstr "tags die deze categorie helpen beschrijven of groeperen"
-#: engine/core/models.py:333 engine/core/models.py:495
+#: engine/core/models.py:339 engine/core/models.py:514
msgid "priority"
msgstr "Prioriteit"
-#: engine/core/models.py:438
+#: engine/core/models.py:457
msgid ""
"Represents a Brand object in the system. This class handles information and "
"attributes related to a brand, including its name, logos, description, "
"associated categories, a unique slug, and priority order. It allows for the "
-"organization and representation of brand-related data within the "
-"application."
+"organization and representation of brand-related data within the application."
msgstr ""
"Vertegenwoordigt een merkobject in het systeem. Deze klasse behandelt "
"informatie en attributen met betrekking tot een merk, inclusief de naam, "
@@ -1808,50 +1812,50 @@ msgstr ""
"prioriteitsvolgorde. Hiermee kunnen merkgerelateerde gegevens worden "
"georganiseerd en weergegeven in de applicatie."
-#: engine/core/models.py:448
+#: engine/core/models.py:467
msgid "name of this brand"
msgstr "Naam van dit merk"
-#: engine/core/models.py:449
+#: engine/core/models.py:468
msgid "brand name"
msgstr "Merknaam"
-#: engine/core/models.py:456
+#: engine/core/models.py:475
msgid "upload a logo representing this brand"
msgstr "Upload een logo dat dit merk vertegenwoordigt"
-#: engine/core/models.py:458
+#: engine/core/models.py:477
msgid "brand small image"
msgstr "Klein merkimago"
-#: engine/core/models.py:464
+#: engine/core/models.py:483
msgid "upload a big logo representing this brand"
msgstr "Upload een groot logo dat dit merk vertegenwoordigt"
-#: engine/core/models.py:466
+#: engine/core/models.py:485
msgid "brand big image"
msgstr "Groot merkimago"
-#: engine/core/models.py:471
+#: engine/core/models.py:490
msgid "add a detailed description of the brand"
msgstr "Een gedetailleerde beschrijving van het merk toevoegen"
-#: engine/core/models.py:472
+#: engine/core/models.py:491
msgid "brand description"
msgstr "Merknaam"
-#: engine/core/models.py:477
+#: engine/core/models.py:496
msgid "optional categories that this brand is associated with"
msgstr "Optionele categorieën waarmee dit merk wordt geassocieerd"
-#: engine/core/models.py:478
+#: engine/core/models.py:497
msgid "associated categories"
msgstr "Categorieën"
-#: engine/core/models.py:508
+#: engine/core/models.py:527
msgid ""
-"Represents the stock of a product managed in the system. This class provides"
-" details about the relationship between vendors, products, and their stock "
+"Represents the stock of a product managed in the system. This class provides "
+"details about the relationship between vendors, products, and their stock "
"information, as well as inventory-related properties like price, purchase "
"price, quantity, SKU, and digital assets. It is part of the inventory "
"management system to allow tracking and evaluation of products available "
@@ -1865,72 +1869,72 @@ msgstr ""
"evalueren van beschikbare producten van verschillende leveranciers mogelijk "
"te maken."
-#: engine/core/models.py:520
+#: engine/core/models.py:539
msgid "the vendor supplying this product stock"
msgstr "De verkoper die dit product levert"
-#: engine/core/models.py:521
+#: engine/core/models.py:540
msgid "associated vendor"
msgstr "Geassocieerde verkoper"
-#: engine/core/models.py:525
+#: engine/core/models.py:544
msgid "final price to the customer after markups"
msgstr "Eindprijs voor de klant na winstmarges"
-#: engine/core/models.py:526
+#: engine/core/models.py:545
msgid "selling price"
msgstr "Verkoopprijs"
-#: engine/core/models.py:531
+#: engine/core/models.py:550
msgid "the product associated with this stock entry"
msgstr "Het product dat bij deze voorraadvermelding hoort"
-#: engine/core/models.py:532 engine/core/models.py:797
-#: engine/core/models.py:843 engine/core/models.py:1792
+#: engine/core/models.py:551 engine/core/models.py:820
+#: engine/core/models.py:866 engine/core/models.py:1904
msgid "associated product"
msgstr "Bijbehorend product"
-#: engine/core/models.py:539
+#: engine/core/models.py:558
msgid "the price paid to the vendor for this product"
msgstr "De prijs die voor dit product aan de verkoper is betaald"
-#: engine/core/models.py:540
+#: engine/core/models.py:559
msgid "vendor purchase price"
msgstr "Aankoopprijs verkoper"
-#: engine/core/models.py:544
+#: engine/core/models.py:563
msgid "available quantity of the product in stock"
msgstr "Beschikbare hoeveelheid van het product in voorraad"
-#: engine/core/models.py:545
+#: engine/core/models.py:564
msgid "quantity in stock"
msgstr "Hoeveelheid op voorraad"
-#: engine/core/models.py:549
+#: engine/core/models.py:568
msgid "vendor-assigned SKU for identifying the product"
msgstr "Door de verkoper toegewezen SKU om het product te identificeren"
-#: engine/core/models.py:550
+#: engine/core/models.py:569
msgid "vendor sku"
msgstr "Verkoper SKU"
-#: engine/core/models.py:556
+#: engine/core/models.py:575
msgid "digital file associated with this stock if applicable"
msgstr "Digitaal bestand gekoppeld aan deze voorraad indien van toepassing"
-#: engine/core/models.py:557
+#: engine/core/models.py:576
msgid "digital file"
msgstr "Digitaal bestand"
-#: engine/core/models.py:560
+#: engine/core/models.py:580
msgid "system attributes"
msgstr "Systeemeigenschappen"
-#: engine/core/models.py:567
+#: engine/core/models.py:588
msgid "stock entries"
msgstr "Voorraadboekingen"
-#: engine/core/models.py:572
+#: engine/core/models.py:593
msgid ""
"Represents a product with attributes such as category, brand, tags, digital "
"status, name, description, part number, and slug. Provides related utility "
@@ -1951,158 +1955,158 @@ msgstr ""
"verbeteren. Het wordt gebruikt om productgegevens en de bijbehorende "
"informatie te definiëren en te manipuleren binnen een applicatie."
-#: engine/core/models.py:585
+#: engine/core/models.py:606
msgid "category this product belongs to"
msgstr "Categorie waartoe dit product behoort"
-#: engine/core/models.py:594
+#: engine/core/models.py:615
msgid "optionally associate this product with a brand"
msgstr "Dit product optioneel koppelen aan een merk"
-#: engine/core/models.py:600
+#: engine/core/models.py:621
msgid "tags that help describe or group this product"
msgstr "Tags die dit product helpen beschrijven of groeperen"
-#: engine/core/models.py:605
+#: engine/core/models.py:626
msgid "indicates whether this product is digitally delivered"
msgstr "Geeft aan of dit product digitaal wordt geleverd"
-#: engine/core/models.py:606
+#: engine/core/models.py:627
msgid "is product digital"
msgstr "Is product digitaal"
-#: engine/core/models.py:612
+#: engine/core/models.py:633
msgid "provide a clear identifying name for the product"
msgstr "Zorg voor een duidelijke identificerende naam voor het product"
-#: engine/core/models.py:613
+#: engine/core/models.py:634
msgid "product name"
msgstr "Naam product"
-#: engine/core/models.py:619 engine/core/models.py:892
+#: engine/core/models.py:640 engine/core/models.py:915
msgid "add a detailed description of the product"
msgstr "Voeg een gedetailleerde beschrijving van het product toe"
-#: engine/core/models.py:620
+#: engine/core/models.py:641
msgid "product description"
msgstr "Productbeschrijving"
-#: engine/core/models.py:627
+#: engine/core/models.py:648
msgid "part number for this product"
msgstr "Onderdeelnummer voor dit product"
-#: engine/core/models.py:628
+#: engine/core/models.py:649
msgid "part number"
msgstr "Onderdeelnummer"
-#: engine/core/models.py:647
+#: engine/core/models.py:668
msgid "stock keeping unit for this product"
msgstr "Voorraadhoudende eenheid voor dit product"
-#: engine/core/models.py:720
+#: engine/core/models.py:741
msgid ""
"Represents an attribute in the system. This class is used to define and "
"manage attributes, which are customizable pieces of data that can be "
"associated with other entities. Attributes have associated categories, "
-"groups, value types, and names. The model supports multiple types of values,"
-" including string, integer, float, boolean, array, and object. This allows "
+"groups, value types, and names. The model supports multiple types of values, "
+"including string, integer, float, boolean, array, and object. This allows "
"for dynamic and flexible data structuring."
msgstr ""
-"Vertegenwoordigt een attribuut in het systeem. Deze klasse wordt gebruikt om"
-" attributen te definiëren en te beheren. Dit zijn aanpasbare stukjes data "
-"die kunnen worden geassocieerd met andere entiteiten. Attributen hebben "
+"Vertegenwoordigt een attribuut in het systeem. Deze klasse wordt gebruikt om "
+"attributen te definiëren en te beheren. Dit zijn aanpasbare stukjes data die "
+"kunnen worden geassocieerd met andere entiteiten. Attributen hebben "
"geassocieerde categorieën, groepen, waardetypes en namen. Het model "
"ondersteunt meerdere typen waarden, waaronder string, integer, float, "
"boolean, array en object. Dit maakt dynamische en flexibele "
"gegevensstructurering mogelijk."
-#: engine/core/models.py:733
+#: engine/core/models.py:754
msgid "group of this attribute"
msgstr "Groep van dit kenmerk"
-#: engine/core/models.py:739
+#: engine/core/models.py:760
msgid "string"
msgstr "String"
-#: engine/core/models.py:740
+#: engine/core/models.py:761
msgid "integer"
msgstr "Integer"
-#: engine/core/models.py:741
+#: engine/core/models.py:762
msgid "float"
msgstr "Vlotter"
-#: engine/core/models.py:742
+#: engine/core/models.py:763
msgid "boolean"
msgstr "Booleaans"
-#: engine/core/models.py:743
+#: engine/core/models.py:764
msgid "array"
msgstr "Array"
-#: engine/core/models.py:744
+#: engine/core/models.py:765
msgid "object"
msgstr "Object"
-#: engine/core/models.py:746
+#: engine/core/models.py:767
msgid "type of the attribute's value"
msgstr "Type waarde van het kenmerk"
-#: engine/core/models.py:747
+#: engine/core/models.py:768
msgid "value type"
msgstr "Waardetype"
-#: engine/core/models.py:752
+#: engine/core/models.py:773
msgid "name of this attribute"
msgstr "Naam van dit kenmerk"
-#: engine/core/models.py:753
+#: engine/core/models.py:774
msgid "attribute's name"
msgstr "Naam attribuut"
-#: engine/core/models.py:758
+#: engine/core/models.py:779
msgid "is filterable"
msgstr "kan worden gefilterd"
-#: engine/core/models.py:759
+#: engine/core/models.py:781
msgid "designates whether this attribute can be used for filtering or not"
msgstr ""
"Welke attributen en waarden kunnen worden gebruikt om deze categorie te "
"filteren."
-#: engine/core/models.py:771 engine/core/models.py:789
+#: engine/core/models.py:794 engine/core/models.py:812
#: engine/core/templates/digital_order_delivered_email.html:134
msgid "attribute"
msgstr "Attribuut"
-#: engine/core/models.py:777
+#: engine/core/models.py:800
msgid ""
-"Represents a specific value for an attribute that is linked to a product. It"
-" links the 'attribute' to a unique 'value', allowing better organization and"
-" dynamic representation of product characteristics."
+"Represents a specific value for an attribute that is linked to a product. It "
+"links the 'attribute' to a unique 'value', allowing better organization and "
+"dynamic representation of product characteristics."
msgstr ""
-"Vertegenwoordigt een specifieke waarde voor een kenmerk dat is gekoppeld aan"
-" een product. Het koppelt het 'kenmerk' aan een unieke 'waarde', wat een "
+"Vertegenwoordigt een specifieke waarde voor een kenmerk dat is gekoppeld aan "
+"een product. Het koppelt het 'kenmerk' aan een unieke 'waarde', wat een "
"betere organisatie en dynamische weergave van productkenmerken mogelijk "
"maakt."
-#: engine/core/models.py:788
+#: engine/core/models.py:811
msgid "attribute of this value"
msgstr "Attribuut van deze waarde"
-#: engine/core/models.py:796
+#: engine/core/models.py:819
msgid "the specific product associated with this attribute's value"
msgstr "Het specifieke product geassocieerd met de waarde van dit kenmerk"
-#: engine/core/models.py:802
+#: engine/core/models.py:825
msgid "the specific value for this attribute"
msgstr "De specifieke waarde voor dit kenmerk"
-#: engine/core/models.py:815
+#: engine/core/models.py:838
msgid ""
"Represents a product image associated with a product in the system. This "
-"class is designed to manage images for products, including functionality for"
-" uploading image files, associating them with specific products, and "
+"class is designed to manage images for products, including functionality for "
+"uploading image files, associating them with specific products, and "
"determining their display order. It also includes an accessibility feature "
"with alternative text for the images."
msgstr ""
@@ -2113,46 +2117,46 @@ msgstr ""
"weergavevolgorde te bepalen. Het bevat ook een toegankelijkheidsfunctie met "
"alternatieve tekst voor de afbeeldingen."
-#: engine/core/models.py:826
+#: engine/core/models.py:849
msgid "provide alternative text for the image for accessibility"
msgstr "Geef alternatieve tekst voor de afbeelding voor toegankelijkheid"
-#: engine/core/models.py:827
+#: engine/core/models.py:850
msgid "image alt text"
msgstr "Alt-tekst afbeelding"
-#: engine/core/models.py:830
+#: engine/core/models.py:853
msgid "upload the image file for this product"
msgstr "Upload het afbeeldingsbestand voor dit product"
-#: engine/core/models.py:831 engine/core/models.py:862
+#: engine/core/models.py:854 engine/core/models.py:885
msgid "product image"
msgstr "Product afbeelding"
-#: engine/core/models.py:836
+#: engine/core/models.py:859
msgid "determines the order in which images are displayed"
msgstr "Bepaalt de volgorde waarin afbeeldingen worden weergegeven"
-#: engine/core/models.py:837
+#: engine/core/models.py:860
msgid "display priority"
msgstr "Prioriteit weergeven"
-#: engine/core/models.py:842
+#: engine/core/models.py:865
msgid "the product that this image represents"
msgstr "Het product dat deze afbeelding vertegenwoordigt"
-#: engine/core/models.py:863
+#: engine/core/models.py:886
msgid "product images"
msgstr "Product afbeeldingen"
-#: engine/core/models.py:868
+#: engine/core/models.py:891
msgid ""
"Represents a promotional campaign for products with a discount. This class "
"is used to define and manage promotional campaigns that offer a percentage-"
"based discount for products. The class includes attributes for setting the "
"discount rate, providing details about the promotion, and linking it to the "
-"applicable products. It integrates with the product catalog to determine the"
-" affected items in the campaign."
+"applicable products. It integrates with the product catalog to determine the "
+"affected items in the campaign."
msgstr ""
"Vertegenwoordigt een promotiecampagne voor producten met een korting. Deze "
"klasse wordt gebruikt om promotiecampagnes te definiëren en beheren die een "
@@ -2162,39 +2166,39 @@ msgstr ""
"integreert met de productcatalogus om de betreffende artikelen in de "
"campagne te bepalen."
-#: engine/core/models.py:880
+#: engine/core/models.py:903
msgid "percentage discount for the selected products"
msgstr "Kortingspercentage voor de geselecteerde producten"
-#: engine/core/models.py:881
+#: engine/core/models.py:904
msgid "discount percentage"
msgstr "Kortingspercentage"
-#: engine/core/models.py:886
+#: engine/core/models.py:909
msgid "provide a unique name for this promotion"
msgstr "Geef deze promotie een unieke naam"
-#: engine/core/models.py:887
+#: engine/core/models.py:910
msgid "promotion name"
msgstr "Naam promotie"
-#: engine/core/models.py:893
+#: engine/core/models.py:916
msgid "promotion description"
msgstr "Promotie beschrijving"
-#: engine/core/models.py:898
+#: engine/core/models.py:921
msgid "select which products are included in this promotion"
msgstr "Selecteer welke producten onder deze promotie vallen"
-#: engine/core/models.py:899
+#: engine/core/models.py:922
msgid "included products"
msgstr "Meegeleverde producten"
-#: engine/core/models.py:903
+#: engine/core/models.py:926
msgid "promotion"
msgstr "Promotie"
-#: engine/core/models.py:914
+#: engine/core/models.py:937
msgid ""
"Represents a user's wishlist for storing and managing desired products. The "
"class provides functionality to manage a collection of products, supporting "
@@ -2207,30 +2211,30 @@ msgstr ""
"toevoegen en verwijderen van producten, maar ook bewerkingen voor het "
"toevoegen en verwijderen van meerdere producten tegelijk."
-#: engine/core/models.py:926
+#: engine/core/models.py:949
msgid "products that the user has marked as wanted"
msgstr "Producten die de gebruiker als gewenst heeft gemarkeerd"
-#: engine/core/models.py:934
+#: engine/core/models.py:957
msgid "user who owns this wishlist"
msgstr "Gebruiker die eigenaar is van deze verlanglijst"
-#: engine/core/models.py:935
+#: engine/core/models.py:958
msgid "wishlist owner"
msgstr "Eigenaar verlanglijstje"
-#: engine/core/models.py:943
+#: engine/core/models.py:966
msgid "wishlist"
msgstr "Verlanglijst"
-#: engine/core/models.py:985
+#: engine/core/models.py:1008
msgid ""
"Represents a documentary record tied to a product. This class is used to "
"store information about documentaries related to specific products, "
"including file uploads and their metadata. It contains methods and "
"properties to handle the file type and storage path for the documentary "
-"files. It extends functionality from specific mixins and provides additional"
-" custom features."
+"files. It extends functionality from specific mixins and provides additional "
+"custom features."
msgstr ""
"Vertegenwoordigt een documentair record gekoppeld aan een product. Deze "
"klasse wordt gebruikt om informatie op te slaan over documentaires met "
@@ -2240,92 +2244,92 @@ msgstr ""
"Het breidt functionaliteit uit van specifieke mixins en biedt extra "
"aangepaste functies."
-#: engine/core/models.py:998
+#: engine/core/models.py:1023
msgid "documentary"
msgstr "Documentaire"
-#: engine/core/models.py:999
+#: engine/core/models.py:1024
msgid "documentaries"
msgstr "Documentaires"
-#: engine/core/models.py:1009
+#: engine/core/models.py:1034
msgid "unresolved"
msgstr "Onopgelost"
-#: engine/core/models.py:1014
+#: engine/core/models.py:1039
msgid ""
-"Represents an address entity that includes location details and associations"
-" with a user. Provides functionality for geographic and address data "
-"storage, as well as integration with geocoding services. This class is "
-"designed to store detailed address information including components like "
-"street, city, region, country, and geolocation (longitude and latitude). It "
-"supports integration with geocoding APIs, enabling the storage of raw API "
-"responses for further processing or inspection. The class also allows "
-"associating an address with a user, facilitating personalized data handling."
+"Represents an address entity that includes location details and associations "
+"with a user. Provides functionality for geographic and address data storage, "
+"as well as integration with geocoding services. This class is designed to "
+"store detailed address information including components like street, city, "
+"region, country, and geolocation (longitude and latitude). It supports "
+"integration with geocoding APIs, enabling the storage of raw API responses "
+"for further processing or inspection. The class also allows associating an "
+"address with a user, facilitating personalized data handling."
msgstr ""
"Vertegenwoordigt een adresentiteit met locatiegegevens en associaties met "
"een gebruiker. Biedt functionaliteit voor het opslaan van geografische en "
"adresgegevens, evenals integratie met geocoderingsservices. Deze klasse is "
-"ontworpen om gedetailleerde adresgegevens op te slaan, inclusief componenten"
-" als straat, stad, regio, land en geolocatie (lengtegraad en breedtegraad). "
+"ontworpen om gedetailleerde adresgegevens op te slaan, inclusief componenten "
+"als straat, stad, regio, land en geolocatie (lengtegraad en breedtegraad). "
"Het ondersteunt integratie met geocodering API's, waardoor de opslag van "
"ruwe API antwoorden voor verdere verwerking of inspectie mogelijk wordt. De "
"klasse maakt het ook mogelijk om een adres met een gebruiker te associëren, "
"wat het verwerken van gepersonaliseerde gegevens vergemakkelijkt."
-#: engine/core/models.py:1029
+#: engine/core/models.py:1054
msgid "address line for the customer"
msgstr "Adresregel voor de klant"
-#: engine/core/models.py:1030
+#: engine/core/models.py:1055
msgid "address line"
msgstr "Adresregel"
-#: engine/core/models.py:1032
+#: engine/core/models.py:1057
msgid "street"
msgstr "Straat"
-#: engine/core/models.py:1033
+#: engine/core/models.py:1058
msgid "district"
msgstr "District"
-#: engine/core/models.py:1034
+#: engine/core/models.py:1059
msgid "city"
msgstr "Stad"
-#: engine/core/models.py:1035
+#: engine/core/models.py:1060
msgid "region"
msgstr "Regio"
-#: engine/core/models.py:1036
+#: engine/core/models.py:1061
msgid "postal code"
msgstr "Postcode"
-#: engine/core/models.py:1037
+#: engine/core/models.py:1062
msgid "country"
msgstr "Land"
-#: engine/core/models.py:1044
+#: engine/core/models.py:1069
msgid "geolocation point: (longitude, latitude)"
msgstr "Geolocatie Punt (lengtegraad, breedtegraad)"
-#: engine/core/models.py:1047
+#: engine/core/models.py:1075
msgid "full JSON response from geocoder for this address"
msgstr "Volledig JSON-antwoord van geocoder voor dit adres"
-#: engine/core/models.py:1052
+#: engine/core/models.py:1081
msgid "stored JSON response from the geocoding service"
msgstr "Opgeslagen JSON-antwoord van de geocoderingsservice"
-#: engine/core/models.py:1060
+#: engine/core/models.py:1091
msgid "address"
msgstr "Adres"
-#: engine/core/models.py:1061
+#: engine/core/models.py:1092
msgid "addresses"
msgstr "Adressen"
-#: engine/core/models.py:1073
+#: engine/core/models.py:1104
msgid ""
"Represents a promotional code that can be used for discounts, managing its "
"validity, type of discount, and application. The PromoCode class stores "
@@ -2343,98 +2347,97 @@ msgstr ""
"te valideren en toe te passen op een bestelling, waarbij ervoor wordt "
"gezorgd dat aan de beperkingen wordt voldaan."
-#: engine/core/models.py:1087
+#: engine/core/models.py:1118
msgid "unique code used by a user to redeem a discount"
msgstr "Unieke code die een gebruiker gebruikt om een korting te verzilveren"
-#: engine/core/models.py:1088
+#: engine/core/models.py:1119
msgid "promo code identifier"
msgstr "Promo code identificatie"
-#: engine/core/models.py:1095
+#: engine/core/models.py:1126
msgid "fixed discount amount applied if percent is not used"
msgstr ""
"Vast kortingsbedrag dat wordt toegepast als percentage niet wordt gebruikt"
-#: engine/core/models.py:1096
+#: engine/core/models.py:1127
msgid "fixed discount amount"
msgstr "Vast kortingsbedrag"
-#: engine/core/models.py:1102
+#: engine/core/models.py:1133
msgid "percentage discount applied if fixed amount is not used"
msgstr ""
"Kortingspercentage dat wordt toegepast als het vaste bedrag niet wordt "
"gebruikt"
-#: engine/core/models.py:1103
+#: engine/core/models.py:1134
msgid "percentage discount"
msgstr "Kortingspercentage"
-#: engine/core/models.py:1108
+#: engine/core/models.py:1139
msgid "timestamp when the promocode expires"
msgstr "Tijdstempel wanneer de promocode verloopt"
-#: engine/core/models.py:1109
+#: engine/core/models.py:1140
msgid "end validity time"
msgstr "Geldigheidsduur einde"
-#: engine/core/models.py:1114
+#: engine/core/models.py:1145
msgid "timestamp from which this promocode is valid"
msgstr "Tijdstempel vanaf wanneer deze promocode geldig is"
-#: engine/core/models.py:1115
+#: engine/core/models.py:1146
msgid "start validity time"
msgstr "Begin geldigheidsduur"
-#: engine/core/models.py:1120
+#: engine/core/models.py:1151
msgid "timestamp when the promocode was used, blank if not used yet"
msgstr ""
-"Tijdstempel wanneer de promocode werd gebruikt, leeg indien nog niet "
-"gebruikt"
+"Tijdstempel wanneer de promocode werd gebruikt, leeg indien nog niet gebruikt"
-#: engine/core/models.py:1121
+#: engine/core/models.py:1152
msgid "usage timestamp"
msgstr "Gebruik tijdstempel"
-#: engine/core/models.py:1126
+#: engine/core/models.py:1157
msgid "user assigned to this promocode if applicable"
msgstr "Gebruiker toegewezen aan deze promocode indien van toepassing"
-#: engine/core/models.py:1127
+#: engine/core/models.py:1158
msgid "assigned user"
msgstr "Toegewezen gebruiker"
-#: engine/core/models.py:1134
+#: engine/core/models.py:1165
msgid "promo code"
msgstr "Kortingscode"
-#: engine/core/models.py:1135
+#: engine/core/models.py:1166
msgid "promo codes"
msgstr "Actiecodes"
-#: engine/core/models.py:1150
+#: engine/core/models.py:1182
msgid ""
"only one type of discount should be defined (amount or percent), but not "
"both or neither."
msgstr ""
-"Er moet slechts één type korting worden gedefinieerd (bedrag of percentage),"
-" maar niet beide of geen van beide."
+"Er moet slechts één type korting worden gedefinieerd (bedrag of percentage), "
+"maar niet beide of geen van beide."
-#: engine/core/models.py:1171
+#: engine/core/models.py:1204
msgid "promocode already used"
msgstr "Promocode is al gebruikt"
-#: engine/core/models.py:1187
+#: engine/core/models.py:1226
#, python-brace-format
msgid "invalid discount type for promocode {self.uuid}"
msgstr "Ongeldig kortingstype voor promocode {self.uuid}!"
-#: engine/core/models.py:1196
+#: engine/core/models.py:1235
msgid ""
"Represents an order placed by a user. This class models an order within the "
"application, including its various attributes such as billing and shipping "
-"information, status, associated user, notifications, and related operations."
-" Orders can have associated products, promotions can be applied, addresses "
+"information, status, associated user, notifications, and related operations. "
+"Orders can have associated products, promotions can be applied, addresses "
"set, and shipping or billing details updated. Equally, functionality "
"supports managing the products in the order lifecycle."
msgstr ""
@@ -2447,142 +2450,142 @@ msgstr ""
"bijgewerkt. De functionaliteit ondersteunt ook het beheer van de producten "
"in de levenscyclus van de bestelling."
-#: engine/core/models.py:1213
+#: engine/core/models.py:1252
msgid "the billing address used for this order"
msgstr "Het factuuradres dat voor deze bestelling is gebruikt"
-#: engine/core/models.py:1221
+#: engine/core/models.py:1260
msgid "optional promo code applied to this order"
msgstr "Optionele promotiecode toegepast op deze bestelling"
-#: engine/core/models.py:1222
+#: engine/core/models.py:1261
msgid "applied promo code"
msgstr "Kortingscode toegepast"
-#: engine/core/models.py:1230
+#: engine/core/models.py:1269
msgid "the shipping address used for this order"
msgstr "Het verzendadres dat voor deze bestelling is gebruikt"
-#: engine/core/models.py:1231
+#: engine/core/models.py:1270
msgid "shipping address"
msgstr "Verzendadres"
-#: engine/core/models.py:1237
+#: engine/core/models.py:1276
msgid "current status of the order in its lifecycle"
msgstr "Huidige status van de order in zijn levenscyclus"
-#: engine/core/models.py:1238
+#: engine/core/models.py:1277
msgid "order status"
msgstr "Bestelstatus"
-#: engine/core/models.py:1243 engine/core/models.py:1769
+#: engine/core/models.py:1282 engine/core/models.py:1881
msgid "json structure of notifications to display to users"
msgstr ""
"JSON-structuur van meldingen om weer te geven aan gebruikers, in admin UI "
"wordt de tabelweergave gebruikt"
-#: engine/core/models.py:1249
+#: engine/core/models.py:1288
msgid "json representation of order attributes for this order"
msgstr "JSON-weergave van bestelattributen voor deze bestelling"
-#: engine/core/models.py:1255
+#: engine/core/models.py:1294
msgid "the user who placed the order"
msgstr "De gebruiker die de bestelling heeft geplaatst"
-#: engine/core/models.py:1256
+#: engine/core/models.py:1295
msgid "user"
msgstr "Gebruiker"
-#: engine/core/models.py:1262
+#: engine/core/models.py:1301
msgid "the timestamp when the order was finalized"
msgstr "De tijdstempel waarop de bestelling is afgerond"
-#: engine/core/models.py:1263
+#: engine/core/models.py:1302
msgid "buy time"
msgstr "Tijd kopen"
-#: engine/core/models.py:1270
+#: engine/core/models.py:1309
msgid "a human-readable identifier for the order"
msgstr "Een menselijk leesbare identificatiecode voor de bestelling"
-#: engine/core/models.py:1271
+#: engine/core/models.py:1310
msgid "human readable id"
msgstr "menselijk leesbare ID"
-#: engine/core/models.py:1277
+#: engine/core/models.py:1316
msgid "order"
msgstr "Bestel"
-#: engine/core/models.py:1319
+#: engine/core/models.py:1363
msgid "a user must have only one pending order at a time"
msgstr "Een gebruiker mag maar één lopende order tegelijk hebben!"
-#: engine/core/models.py:1351
+#: engine/core/models.py:1396
msgid "you cannot add products to an order that is not a pending one"
msgstr ""
"U kunt geen producten toevoegen aan een bestelling die niet in behandeling "
"is."
-#: engine/core/models.py:1356
+#: engine/core/models.py:1402
msgid "you cannot add inactive products to order"
msgstr "U kunt geen inactieve producten toevoegen aan uw bestelling"
-#: engine/core/models.py:1373
+#: engine/core/models.py:1424
msgid "you cannot add more products than available in stock"
msgstr "Je kunt niet meer producten toevoegen dan er op voorraad zijn"
-#: engine/core/models.py:1395 engine/core/models.py:1420
-#: engine/core/models.py:1428
+#: engine/core/models.py:1448 engine/core/models.py:1477
+#: engine/core/models.py:1487
msgid "you cannot remove products from an order that is not a pending one"
msgstr ""
-"U kunt geen producten verwijderen uit een bestelling die niet in behandeling"
-" is."
+"U kunt geen producten verwijderen uit een bestelling die niet in behandeling "
+"is."
-#: engine/core/models.py:1416
+#: engine/core/models.py:1472
#, python-brace-format
msgid "{name} does not exist with query <{query}>"
msgstr "{name} bestaat niet met query <{query}>!"
-#: engine/core/models.py:1448
+#: engine/core/models.py:1511
msgid "promocode does not exist"
msgstr "Promocode bestaat niet"
-#: engine/core/models.py:1454
+#: engine/core/models.py:1526
msgid "you can only buy physical products with shipping address specified"
msgstr "Je kunt alleen fysieke producten kopen met opgegeven verzendadres!"
-#: engine/core/models.py:1473
+#: engine/core/models.py:1547
msgid "address does not exist"
msgstr "Adres bestaat niet"
-#: engine/core/models.py:1494 engine/core/models.py:1563
+#: engine/core/models.py:1569 engine/core/models.py:1648
msgid "you can not buy at this moment, please try again in a few minutes"
msgstr ""
"U kunt op dit moment niet kopen. Probeer het over een paar minuten nog eens."
-#: engine/core/models.py:1497 engine/core/models.py:1559
+#: engine/core/models.py:1575 engine/core/models.py:1641
msgid "invalid force value"
msgstr "Ongeldige krachtwaarde"
-#: engine/core/models.py:1503 engine/core/models.py:1566
+#: engine/core/models.py:1581 engine/core/models.py:1652
msgid "you cannot purchase an empty order!"
msgstr "Je kunt geen lege bestelling kopen!"
-#: engine/core/models.py:1522
+#: engine/core/models.py:1602
msgid "you cannot buy an order without a user"
msgstr ""
-"U kunt geen producten verwijderen uit een bestelling die niet in behandeling"
-" is."
+"U kunt geen producten verwijderen uit een bestelling die niet in behandeling "
+"is."
-#: engine/core/models.py:1536
+#: engine/core/models.py:1616
msgid "a user without a balance cannot buy with balance"
msgstr "Een gebruiker zonder saldo kan niet kopen met saldo!"
-#: engine/core/models.py:1541
+#: engine/core/models.py:1622
msgid "insufficient funds to complete the order"
msgstr "Onvoldoende fondsen om de bestelling te voltooien"
-#: engine/core/models.py:1575
+#: engine/core/models.py:1663
msgid ""
"you cannot buy without registration, please provide the following "
"information: customer name, customer email, customer phone number"
@@ -2590,15 +2593,14 @@ msgstr ""
"u niet kunt kopen zonder registratie, geef dan de volgende informatie: "
"klantnaam, e-mail klant, telefoonnummer klant"
-#: engine/core/models.py:1584
+#: engine/core/models.py:1674
#, python-brace-format
msgid ""
"invalid payment method: {payment_method} from {available_payment_methods}"
msgstr ""
-"Ongeldige betalingsmethode: {payment_method} van "
-"{available_payment_methods}!"
+"Ongeldige betalingsmethode: {payment_method} van {available_payment_methods}!"
-#: engine/core/models.py:1699
+#: engine/core/models.py:1805
msgid ""
"Manages user feedback for products. This class is designed to capture and "
"store user feedback for specific products that they have purchased. It "
@@ -2607,41 +2609,40 @@ msgid ""
"fields to effectively model and manage feedback data."
msgstr ""
"Beheert gebruikersfeedback voor producten. Deze klasse is ontworpen om "
-"feedback van gebruikers over specifieke producten die ze hebben gekocht vast"
-" te leggen en op te slaan. De klasse bevat attributen voor het opslaan van "
+"feedback van gebruikers over specifieke producten die ze hebben gekocht vast "
+"te leggen en op te slaan. De klasse bevat attributen voor het opslaan van "
"opmerkingen van gebruikers, een verwijzing naar het betreffende product in "
"de bestelling en een door de gebruiker toegekende beoordeling. De klasse "
"gebruikt databasevelden om feedbackgegevens effectief te modelleren en te "
"beheren."
-#: engine/core/models.py:1711
+#: engine/core/models.py:1817
msgid "user-provided comments about their experience with the product"
msgstr "Opmerkingen van gebruikers over hun ervaring met het product"
-#: engine/core/models.py:1712
+#: engine/core/models.py:1818
msgid "feedback comments"
msgstr "Reacties"
-#: engine/core/models.py:1719
-msgid ""
-"references the specific product in an order that this feedback is about"
+#: engine/core/models.py:1826
+msgid "references the specific product in an order that this feedback is about"
msgstr ""
"Verwijst naar het specifieke product in een bestelling waar deze feedback "
"over gaat"
-#: engine/core/models.py:1720
+#: engine/core/models.py:1828
msgid "related order product"
msgstr "Gerelateerd product bestellen"
-#: engine/core/models.py:1725
+#: engine/core/models.py:1833
msgid "user-assigned rating for the product"
msgstr "Door de gebruiker toegekende waardering voor het product"
-#: engine/core/models.py:1726
+#: engine/core/models.py:1834
msgid "product rating"
msgstr "Productbeoordeling"
-#: engine/core/models.py:1742
+#: engine/core/models.py:1854
msgid ""
"Represents products associated with orders and their attributes. The "
"OrderProduct model maintains information about a product that is part of an "
@@ -2661,120 +2662,120 @@ msgstr ""
"het producttegoed of het toevoegen van feedback. Dit model biedt ook "
"methoden en eigenschappen die bedrijfslogica ondersteunen, zoals het "
"berekenen van de totaalprijs of het genereren van een download-URL voor "
-"digitale producten. Het model integreert met de modellen Order en Product en"
-" slaat een verwijzing ernaar op."
+"digitale producten. Het model integreert met de modellen Order en Product en "
+"slaat een verwijzing ernaar op."
-#: engine/core/models.py:1757
+#: engine/core/models.py:1869
msgid "the price paid by the customer for this product at purchase time"
msgstr "De prijs die de klant bij aankoop voor dit product heeft betaald"
-#: engine/core/models.py:1758
+#: engine/core/models.py:1870
msgid "purchase price at order time"
msgstr "Aankoopprijs bij bestelling"
-#: engine/core/models.py:1763
+#: engine/core/models.py:1875
msgid "internal comments for admins about this ordered product"
msgstr "Interne opmerkingen voor beheerders over dit bestelde product"
-#: engine/core/models.py:1764
+#: engine/core/models.py:1876
msgid "internal comments"
msgstr "Interne opmerkingen"
-#: engine/core/models.py:1770
+#: engine/core/models.py:1882
msgid "user notifications"
msgstr "Meldingen van gebruikers"
-#: engine/core/models.py:1775
+#: engine/core/models.py:1887
msgid "json representation of this item's attributes"
msgstr "JSON weergave van de attributen van dit item"
-#: engine/core/models.py:1776
+#: engine/core/models.py:1888
msgid "ordered product attributes"
msgstr "Geordende producteigenschappen"
-#: engine/core/models.py:1781
+#: engine/core/models.py:1893
msgid "reference to the parent order that contains this product"
msgstr "Verwijzing naar de bovenliggende bestelling die dit product bevat"
-#: engine/core/models.py:1782
+#: engine/core/models.py:1894
msgid "parent order"
msgstr "Ouderlijk bevel"
-#: engine/core/models.py:1791
+#: engine/core/models.py:1903
msgid "the specific product associated with this order line"
msgstr "Het specifieke product dat bij deze bestelregel hoort"
-#: engine/core/models.py:1798
+#: engine/core/models.py:1910
msgid "quantity of this specific product in the order"
msgstr "Hoeveelheid van dit specifieke product in de bestelling"
-#: engine/core/models.py:1799
+#: engine/core/models.py:1911
msgid "product quantity"
msgstr "Hoeveelheid product"
-#: engine/core/models.py:1806
+#: engine/core/models.py:1918
msgid "current status of this product in the order"
msgstr "Huidige status van dit product in de bestelling"
-#: engine/core/models.py:1807
+#: engine/core/models.py:1919
msgid "product line status"
msgstr "Status productlijn"
-#: engine/core/models.py:1872
+#: engine/core/models.py:1986
msgid "order product must have an order"
msgstr "Orderproduct moet een bijbehorende order hebben!"
-#: engine/core/models.py:1874
+#: engine/core/models.py:1988
#, python-brace-format
msgid "wrong action specified for feedback: {action}"
msgstr "Verkeerde actie opgegeven voor feedback: {action}!"
-#: engine/core/models.py:1888
+#: engine/core/models.py:2005
msgid "you cannot feedback an order which is not received"
msgstr ""
-"U kunt geen producten verwijderen uit een bestelling die niet in behandeling"
-" is."
+"U kunt geen producten verwijderen uit een bestelling die niet in behandeling "
+"is."
-#: engine/core/models.py:1894
+#: engine/core/models.py:2014
msgid "name"
msgstr "Naam"
-#: engine/core/models.py:1895
+#: engine/core/models.py:2016
msgid "URL of the integration"
msgstr "URL van de integratie"
-#: engine/core/models.py:1896
+#: engine/core/models.py:2019
msgid "authentication credentials"
msgstr "Authenticatiegegevens"
-#: engine/core/models.py:1918
+#: engine/core/models.py:2042
msgid "you can only have one default CRM provider"
msgstr "Je kunt maar één standaard CRM-provider hebben"
-#: engine/core/models.py:1928
+#: engine/core/models.py:2052
msgid "CRM"
msgstr "CRM"
-#: engine/core/models.py:1929
+#: engine/core/models.py:2053
msgid "CRMs"
msgstr "CRM's"
-#: engine/core/models.py:1941
+#: engine/core/models.py:2069
msgid "order CRM link"
msgstr "CRM link van bestelling"
-#: engine/core/models.py:1942
+#: engine/core/models.py:2070
msgid "orders CRM links"
msgstr "CRM-koppelingen voor bestellingen"
-#: engine/core/models.py:1947
+#: engine/core/models.py:2075
msgid ""
"Represents the downloading functionality for digital assets associated with "
"orders. The DigitalAssetDownload class provides the ability to manage and "
"access downloads related to order products. It maintains information about "
-"the associated order product, the number of downloads, and whether the asset"
-" is publicly visible. It includes a method to generate a URL for downloading"
-" the asset when the associated order is in a completed status."
+"the associated order product, the number of downloads, and whether the asset "
+"is publicly visible. It includes a method to generate a URL for downloading "
+"the asset when the associated order is in a completed status."
msgstr ""
"Vertegenwoordigt de downloadfunctionaliteit voor digitale activa gekoppeld "
"aan bestellingen. De DigitalAssetDownload klasse biedt de mogelijkheid om "
@@ -2784,15 +2785,15 @@ msgstr ""
"om een URL te genereren voor het downloaden van de activa wanneer de "
"bijbehorende order een voltooide status heeft."
-#: engine/core/models.py:1961
+#: engine/core/models.py:2091
msgid "download"
msgstr "Downloaden"
-#: engine/core/models.py:1962
+#: engine/core/models.py:2092
msgid "downloads"
msgstr "Downloads"
-#: engine/core/serializers/utility.py:89
+#: engine/core/serializers/utility.py:91
msgid ""
"you must provide a comment, rating, and order product uuid to add feedback."
msgstr ""
@@ -2989,7 +2990,8 @@ msgstr "Hallo %(order.user.first_name)s,"
#, python-format
msgid ""
"thank you for your order #%(order.pk)s! we are pleased to inform you that\n"
-" we have taken your order into work. below are the details of your\n"
+" we have taken your order into work. below are "
+"the details of your\n"
" order:"
msgstr ""
"Hartelijk dank voor uw bestelling #%(order.pk)s! We zijn blij om u te "
@@ -3104,7 +3106,8 @@ msgstr ""
#: engine/core/templates/shipped_order_created_email.html:101
#: engine/core/templates/shipped_order_delivered_email.html:101
msgid ""
-"thank you for your order! we are pleased to confirm your purchase. below are\n"
+"thank you for your order! we are pleased to confirm your purchase. below "
+"are\n"
" the details of your order:"
msgstr ""
"Bedankt voor uw bestelling! We zijn blij om uw aankoop te bevestigen. "
@@ -3135,31 +3138,30 @@ msgstr ""
"alle rechten\n"
" voorbehouden"
-#: engine/core/utils/caching.py:44
+#: engine/core/utils/caching.py:48
msgid "both data and timeout are required"
msgstr "Zowel gegevens als time-out zijn vereist"
-#: engine/core/utils/caching.py:46
+#: engine/core/utils/caching.py:51
msgid "invalid timeout value, it must be between 0 and 216000 seconds"
-msgstr ""
-"Ongeldige time-outwaarde, deze moet tussen 0 en 216000 seconden liggen"
+msgstr "Ongeldige time-outwaarde, deze moet tussen 0 en 216000 seconden liggen"
#: engine/core/utils/emailing.py:27
#, python-brace-format
msgid "{settings.PROJECT_NAME} | contact us initiated"
msgstr "{settings.PROJECT_NAME} | neem contact met ons op"
-#: engine/core/utils/emailing.py:73
+#: engine/core/utils/emailing.py:81
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order confirmation"
msgstr "{settings.PROJECT_NAME} | orderbevestiging"
-#: engine/core/utils/emailing.py:105
+#: engine/core/utils/emailing.py:115
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order delivered"
msgstr "{settings.PROJECT_NAME} | bestelling geleverd"
-#: engine/core/utils/emailing.py:188
+#: engine/core/utils/emailing.py:203
#, python-brace-format
msgid "{settings.PROJECT_NAME} | promocode granted"
msgstr "{settings.PROJECT_NAME} | promocode toegekend"
@@ -3172,14 +3174,14 @@ msgstr "U hebt geen toestemming om deze actie uit te voeren."
msgid "NOMINATIM_URL must be configured."
msgstr "De parameter NOMINATIM_URL moet worden geconfigureerd!"
-#: engine/core/validators.py:19
+#: engine/core/validators.py:21
#, python-brace-format
msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels"
msgstr ""
"Afbeeldingsafmetingen mogen niet groter zijn dan w{max_width} x "
"h{max_height} pixels"
-#: engine/core/views.py:91
+#: engine/core/views.py:105
msgid ""
"Handles the request for the sitemap index and returns an XML response. It "
"ensures the response includes the appropriate content type header for XML."
@@ -3188,7 +3190,7 @@ msgstr ""
"terug. Het zorgt ervoor dat het antwoord de juiste inhoudstype header voor "
"XML bevat."
-#: engine/core/views.py:106
+#: engine/core/views.py:120
msgid ""
"Handles the detailed view response for a sitemap. This function processes "
"the request, fetches the appropriate sitemap detail response, and sets the "
@@ -3198,89 +3200,100 @@ msgstr ""
"verwerkt het verzoek, haalt het juiste sitemap detail antwoord op en stelt "
"de Content-Type header in voor XML."
-#: engine/core/views.py:141
+#: engine/core/views.py:156
msgid ""
"Returns a list of supported languages and their corresponding information."
msgstr "Geeft een lijst met ondersteunde talen en de bijbehorende informatie."
-#: engine/core/views.py:173
+#: engine/core/views.py:183
msgid "Returns the parameters of the website as a JSON object."
msgstr "Retourneert de parameters van de website als een JSON-object."
-#: engine/core/views.py:192
+#: engine/core/views.py:199
msgid ""
"Handles cache operations such as reading and setting cache data with a "
"specified key and timeout."
msgstr ""
-"Verwerkt cachebewerkingen zoals het lezen en instellen van cachegegevens met"
-" een opgegeven sleutel en time-out."
+"Verwerkt cachebewerkingen zoals het lezen en instellen van cachegegevens met "
+"een opgegeven sleutel en time-out."
-#: engine/core/views.py:219
+#: engine/core/views.py:221
msgid "Handles `contact us` form submissions."
msgstr "Handelt `contact met ons` formulier inzendingen af."
-#: engine/core/views.py:240
+#: engine/core/views.py:237
msgid ""
"Handles requests for processing and validating URLs from incoming POST "
"requests."
msgstr ""
-"Handelt verzoeken af voor het verwerken en valideren van URL's van inkomende"
-" POST-verzoeken."
+"Handelt verzoeken af voor het verwerken en valideren van URL's van inkomende "
+"POST-verzoeken."
-#: engine/core/views.py:280
+#: engine/core/views.py:274
msgid "Handles global search queries."
msgstr "Handelt globale zoekopdrachten af."
-#: engine/core/views.py:295
+#: engine/core/views.py:290
msgid "Handles the logic of buying as a business without registration."
msgstr "Behandelt de logica van kopen als bedrijf zonder registratie."
-#: engine/core/views.py:332
+#: engine/core/views.py:338
msgid ""
"Handles the downloading of a digital asset associated with an order.\n"
-"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the digital asset file located in the "
+"storage directory of the project. If the file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
msgstr ""
-"Handelt het downloaden af van een digitaal actief dat is gekoppeld aan een bestelling.\n"
-"Deze functie probeert het digitale activabestand te serveren dat zich in de opslagmap van het project bevindt. Als het bestand niet wordt gevonden, wordt er een HTTP 404-fout weergegeven om aan te geven dat de bron niet beschikbaar is."
+"Handelt het downloaden af van een digitaal actief dat is gekoppeld aan een "
+"bestelling.\n"
+"Deze functie probeert het digitale activabestand te serveren dat zich in de "
+"opslagmap van het project bevindt. Als het bestand niet wordt gevonden, "
+"wordt er een HTTP 404-fout weergegeven om aan te geven dat de bron niet "
+"beschikbaar is."
-#: engine/core/views.py:343
+#: engine/core/views.py:349
msgid "order_product_uuid is required"
msgstr "order_product_uuid is vereist"
-#: engine/core/views.py:350
+#: engine/core/views.py:356
msgid "order product does not exist"
msgstr "bestelproduct bestaat niet"
-#: engine/core/views.py:353
+#: engine/core/views.py:359
msgid "you can only download the digital asset once"
msgstr "U kunt het digitale goed maar één keer downloaden"
-#: engine/core/views.py:356
+#: engine/core/views.py:363
msgid "the order must be paid before downloading the digital asset"
msgstr ""
"de bestelling moet worden betaald voordat het digitale actief kan worden "
"gedownload"
-#: engine/core/views.py:362
+#: engine/core/views.py:370
msgid "the order product does not have a product"
msgstr "Het bestelde product heeft geen product"
-#: engine/core/views.py:399
+#: engine/core/views.py:414
msgid "favicon not found"
msgstr "favicon niet gevonden"
-#: engine/core/views.py:404
+#: engine/core/views.py:419
msgid ""
"Handles requests for the favicon of a website.\n"
-"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the favicon file located in the static "
+"directory of the project. If the favicon file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
msgstr ""
"Handelt verzoeken af voor de favicon van een website.\n"
-"Deze functie probeert het favicon-bestand te serveren dat zich in de statische map van het project bevindt. Als het favicon-bestand niet wordt gevonden, wordt er een HTTP 404-fout weergegeven om aan te geven dat de bron niet beschikbaar is."
+"Deze functie probeert het favicon-bestand te serveren dat zich in de "
+"statische map van het project bevindt. Als het favicon-bestand niet wordt "
+"gevonden, wordt er een HTTP 404-fout weergegeven om aan te geven dat de bron "
+"niet beschikbaar is."
-#: engine/core/views.py:416
+#: engine/core/views.py:431
msgid ""
-"Redirects the request to the admin index page. The function handles incoming"
-" HTTP requests and redirects them to the Django admin interface index page. "
+"Redirects the request to the admin index page. The function handles incoming "
+"HTTP requests and redirects them to the Django admin interface index page. "
"It uses Django's `redirect` function for handling the HTTP redirection."
msgstr ""
"Stuurt het verzoek door naar de admin-indexpagina. De functie handelt "
@@ -3288,20 +3301,20 @@ msgstr ""
"Django admin-interface. Het gebruikt Django's `redirect` functie voor het "
"afhandelen van de HTTP-omleiding."
-#: engine/core/views.py:429
+#: engine/core/views.py:443
msgid "Returns current version of the eVibes. "
msgstr "Geeft als resultaat de huidige versie van eVibes."
-#: engine/core/views.py:623 engine/core/views.py:636
+#: engine/core/views.py:672 engine/core/views.py:687
#, python-format
msgid "Revenue & Orders (last %(days)d)"
msgstr "Inkomsten en orders (laatste %(days)d)"
-#: engine/core/views.py:793
+#: engine/core/views.py:868
msgid "Returns custom variables for Dashboard. "
msgstr "Geeft aangepaste variabelen voor Dashboard."
-#: engine/core/viewsets.py:136
+#: engine/core/viewsets.py:139
msgid ""
"Defines a viewset for managing Evibes-related operations. The EvibesViewSet "
"class inherits from ModelViewSet and provides functionality for handling "
@@ -3309,19 +3322,18 @@ msgid ""
"serializer classes based on the current action, customizable permissions, "
"and rendering formats."
msgstr ""
-"Definieert een viewset voor het beheren van Evibes-gerelateerde handelingen."
-" De klasse EvibesViewSet erft van ModelViewSet en biedt functionaliteit voor"
-" het afhandelen van acties en bewerkingen op Evibes-entiteiten. Het omvat "
+"Definieert een viewset voor het beheren van Evibes-gerelateerde handelingen. "
+"De klasse EvibesViewSet erft van ModelViewSet en biedt functionaliteit voor "
+"het afhandelen van acties en bewerkingen op Evibes-entiteiten. Het omvat "
"ondersteuning voor dynamische serializer klassen op basis van de huidige "
"actie, aanpasbare machtigingen, en rendering formaten."
-#: engine/core/viewsets.py:156
+#: engine/core/viewsets.py:160
msgid ""
-"Represents a viewset for managing AttributeGroup objects. Handles operations"
-" related to AttributeGroup, including filtering, serialization, and "
-"retrieval of data. This class is part of the application's API layer and "
-"provides a standardized way to process requests and responses for "
-"AttributeGroup data."
+"Represents a viewset for managing AttributeGroup objects. Handles operations "
+"related to AttributeGroup, including filtering, serialization, and retrieval "
+"of data. This class is part of the application's API layer and provides a "
+"standardized way to process requests and responses for AttributeGroup data."
msgstr ""
"Vertegenwoordigt een viewset voor het beheren van AttributeGroup objecten. "
"Verwerkt bewerkingen met betrekking tot AttributeGroup, inclusief filteren, "
@@ -3329,7 +3341,7 @@ msgstr ""
"laag van de applicatie en biedt een gestandaardiseerde manier om verzoeken "
"en reacties voor AttributeGroup-gegevens te verwerken."
-#: engine/core/viewsets.py:175
+#: engine/core/viewsets.py:179
msgid ""
"Handles operations related to Attribute objects within the application. "
"Provides a set of API endpoints to interact with Attribute data. This class "
@@ -3342,25 +3354,24 @@ msgstr ""
"applicatie. Biedt een set API-eindpunten voor interactie met "
"Attribuutgegevens. Deze klasse beheert het opvragen, filteren en seriëren "
"van Attribuutobjecten, waardoor dynamische controle over de geretourneerde "
-"gegevens mogelijk is, zoals filteren op specifieke velden of het ophalen van"
-" gedetailleerde versus vereenvoudigde informatie afhankelijk van het "
-"verzoek."
+"gegevens mogelijk is, zoals filteren op specifieke velden of het ophalen van "
+"gedetailleerde versus vereenvoudigde informatie afhankelijk van het verzoek."
-#: engine/core/viewsets.py:194
+#: engine/core/viewsets.py:198
msgid ""
"A viewset for managing AttributeValue objects. This viewset provides "
"functionality for listing, retrieving, creating, updating, and deleting "
"AttributeValue objects. It integrates with Django REST Framework's viewset "
-"mechanisms and uses appropriate serializers for different actions. Filtering"
-" capabilities are provided through the DjangoFilterBackend."
+"mechanisms and uses appropriate serializers for different actions. Filtering "
+"capabilities are provided through the DjangoFilterBackend."
msgstr ""
-"Een viewset voor het beheren van AttributeValue-objecten. Deze viewset biedt"
-" functionaliteit voor het opsommen, ophalen, maken, bijwerken en verwijderen"
-" van AttributeValue objecten. Het integreert met Django REST Framework's "
+"Een viewset voor het beheren van AttributeValue-objecten. Deze viewset biedt "
+"functionaliteit voor het opsommen, ophalen, maken, bijwerken en verwijderen "
+"van AttributeValue objecten. Het integreert met Django REST Framework's "
"viewset mechanismen en gebruikt passende serializers voor verschillende "
"acties. Filtermogelijkheden worden geleverd door de DjangoFilterBackend."
-#: engine/core/viewsets.py:213
+#: engine/core/viewsets.py:217
msgid ""
"Manages views for Category-related operations. The CategoryViewSet class is "
"responsible for handling operations related to the Category model in the "
@@ -3372,10 +3383,10 @@ msgstr ""
"CategoryViewSet is verantwoordelijk voor het afhandelen van bewerkingen met "
"betrekking tot het categoriemodel in het systeem. Het ondersteunt het "
"ophalen, filteren en seriëren van categoriegegevens. De viewset dwingt ook "
-"rechten af om ervoor te zorgen dat alleen bevoegde gebruikers toegang hebben"
-" tot specifieke gegevens."
+"rechten af om ervoor te zorgen dat alleen bevoegde gebruikers toegang hebben "
+"tot specifieke gegevens."
-#: engine/core/viewsets.py:326
+#: engine/core/viewsets.py:346
msgid ""
"Represents a viewset for managing Brand instances. This class provides "
"functionality for querying, filtering, and serializing Brand objects. It "
@@ -3387,7 +3398,7 @@ msgstr ""
"Merk objecten. Het gebruikt Django's ViewSet framework om de implementatie "
"van API endpoints voor Merk objecten te vereenvoudigen."
-#: engine/core/viewsets.py:438
+#: engine/core/viewsets.py:458
msgid ""
"Manages operations related to the `Product` model in the system. This class "
"provides a viewset for managing products, including their filtering, "
@@ -3406,7 +3417,7 @@ msgstr ""
"machtigingen en het verkrijgen van toegang tot gerelateerde feedback over "
"een product."
-#: engine/core/viewsets.py:574
+#: engine/core/viewsets.py:605
msgid ""
"Represents a viewset for managing Vendor objects. This viewset allows "
"fetching, filtering, and serializing Vendor data. It defines the queryset, "
@@ -3417,17 +3428,17 @@ msgstr ""
"Vertegenwoordigt een viewset voor het beheren van Vendor-objecten. Met deze "
"viewset kunnen gegevens van een verkoper worden opgehaald, gefilterd en "
"geserialiseerd. Het definieert de queryset, filter configuraties, en "
-"serializer klassen gebruikt om verschillende acties af te handelen. Het doel"
-" van deze klasse is om gestroomlijnde toegang te bieden tot Vendor-"
+"serializer klassen gebruikt om verschillende acties af te handelen. Het doel "
+"van deze klasse is om gestroomlijnde toegang te bieden tot Vendor-"
"gerelateerde bronnen via het Django REST framework."
-#: engine/core/viewsets.py:594
+#: engine/core/viewsets.py:625
msgid ""
"Representation of a view set handling Feedback objects. This class manages "
"operations related to Feedback objects, including listing, filtering, and "
"retrieving details. The purpose of this view set is to provide different "
-"serializers for different actions and implement permission-based handling of"
-" accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
+"serializers for different actions and implement permission-based handling of "
+"accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
"use of Django's filtering system for querying data."
msgstr ""
"Weergave van een weergaveset die Feedback-objecten afhandelt. Deze klasse "
@@ -3438,14 +3449,14 @@ msgstr ""
"implementeren. Het breidt de basis `EvibesViewSet` uit en maakt gebruik van "
"Django's filtersysteem voor het opvragen van gegevens."
-#: engine/core/viewsets.py:621
+#: engine/core/viewsets.py:652
msgid ""
"ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes "
"various endpoints for handling order operations such as adding or removing "
-"products, performing purchases for registered as well as unregistered users,"
-" and retrieving the current authenticated user's pending orders. The ViewSet"
-" uses multiple serializers based on the specific action being performed and "
+"products, performing purchases for registered as well as unregistered users, "
+"and retrieving the current authenticated user's pending orders. The ViewSet "
+"uses multiple serializers based on the specific action being performed and "
"enforces permissions accordingly while interacting with order data."
msgstr ""
"ViewSet voor het beheren van orders en gerelateerde operaties. Deze klasse "
@@ -3458,49 +3469,49 @@ msgstr ""
"gebaseerd op de specifieke actie die wordt uitgevoerd en dwingt "
"dienovereenkomstig permissies af tijdens de interactie met ordergegevens."
-#: engine/core/viewsets.py:825
+#: engine/core/viewsets.py:914
msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It "
-"includes filtering, permission checks, and serializer switching based on the"
-" requested action. Additionally, it provides a detailed action for handling "
+"includes filtering, permission checks, and serializer switching based on the "
+"requested action. Additionally, it provides a detailed action for handling "
"feedback on OrderProduct instances"
msgstr ""
-"Biedt een viewset voor het beheren van OrderProduct-entiteiten. Deze viewset"
-" maakt CRUD-bewerkingen en aangepaste acties mogelijk die specifiek zijn "
-"voor het OrderProduct-model. Het omvat filteren, toestemmingscontroles en "
-"serializer-omschakeling op basis van de gevraagde actie. Bovendien biedt het"
-" een gedetailleerde actie voor het afhandelen van feedback op OrderProduct "
+"Biedt een viewset voor het beheren van OrderProduct-entiteiten. Deze viewset "
+"maakt CRUD-bewerkingen en aangepaste acties mogelijk die specifiek zijn voor "
+"het OrderProduct-model. Het omvat filteren, toestemmingscontroles en "
+"serializer-omschakeling op basis van de gevraagde actie. Bovendien biedt het "
+"een gedetailleerde actie voor het afhandelen van feedback op OrderProduct "
"instanties"
-#: engine/core/viewsets.py:879
+#: engine/core/viewsets.py:974
msgid "Manages operations related to Product images in the application. "
msgstr ""
"Beheert bewerkingen met betrekking tot productafbeeldingen in de applicatie."
-#: engine/core/viewsets.py:892
+#: engine/core/viewsets.py:988
msgid ""
"Manages the retrieval and handling of PromoCode instances through various "
"API actions."
msgstr ""
-"Beheert het ophalen en afhandelen van PromoCode-instanties via verschillende"
-" API-acties."
+"Beheert het ophalen en afhandelen van PromoCode-instanties via verschillende "
+"API-acties."
-#: engine/core/viewsets.py:914
+#: engine/core/viewsets.py:1019
msgid "Represents a view set for managing promotions. "
msgstr "Vertegenwoordigt een view set voor het beheren van promoties."
-#: engine/core/viewsets.py:927
+#: engine/core/viewsets.py:1032
msgid "Handles operations related to Stock data in the system."
msgstr ""
"Verwerkt bewerkingen met betrekking tot voorraadgegevens in het systeem."
-#: engine/core/viewsets.py:941
+#: engine/core/viewsets.py:1046
msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the "
-"retrieval, modification, and customization of products within the wish list."
-" This ViewSet facilitates functionality such as adding, removing, and bulk "
+"retrieval, modification, and customization of products within the wish list. "
+"This ViewSet facilitates functionality such as adding, removing, and bulk "
"actions for wishlist products. Permission checks are integrated to ensure "
"that users can only manage their own wishlists unless explicit permissions "
"are granted."
@@ -3514,7 +3525,7 @@ msgstr ""
"verlanglijstjes kunnen beheren, tenzij er expliciete toestemmingen zijn "
"verleend."
-#: engine/core/viewsets.py:1056
+#: engine/core/viewsets.py:1183
msgid ""
"This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom "
@@ -3522,18 +3533,18 @@ msgid ""
"different HTTP methods, serializer overrides, and permission handling based "
"on the request context."
msgstr ""
-"Deze klasse biedt viewsetfunctionaliteit voor het beheren van "
-"`Adres`-objecten. De klasse AddressViewSet maakt CRUD-bewerkingen, filteren "
-"en aangepaste acties met betrekking tot adresentiteiten mogelijk. Het bevat "
+"Deze klasse biedt viewsetfunctionaliteit voor het beheren van `Adres`-"
+"objecten. De klasse AddressViewSet maakt CRUD-bewerkingen, filteren en "
+"aangepaste acties met betrekking tot adresentiteiten mogelijk. Het bevat "
"gespecialiseerde gedragingen voor verschillende HTTP methoden, serializer "
"omzeilingen en toestemmingsafhandeling gebaseerd op de verzoekcontext."
-#: engine/core/viewsets.py:1123
+#: engine/core/viewsets.py:1254
#, python-brace-format
msgid "Geocoding error: {e}"
msgstr "Fout bij geocodering: {e}"
-#: engine/core/viewsets.py:1131
+#: engine/core/viewsets.py:1262
msgid ""
"Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing "
@@ -3542,8 +3553,8 @@ msgid ""
"serializers based on the action being performed."
msgstr ""
"Behandelt bewerkingen met betrekking tot Product Tags binnen de applicatie. "
-"Deze klasse biedt functionaliteit voor het ophalen, filteren en serialiseren"
-" van Product Tag objecten. Het ondersteunt flexibel filteren op specifieke "
+"Deze klasse biedt functionaliteit voor het ophalen, filteren en serialiseren "
+"van Product Tag objecten. Het ondersteunt flexibel filteren op specifieke "
"attributen met behulp van de gespecificeerde filter backend en gebruikt "
"dynamisch verschillende serializers op basis van de actie die wordt "
"uitgevoerd."
diff --git a/engine/core/locale/no_NO/LC_MESSAGES/django.po b/engine/core/locale/no_NO/LC_MESSAGES/django.po
index 2859204b..f387e682 100644
--- a/engine/core/locale/no_NO/LC_MESSAGES/django.po
+++ b/engine/core/locale/no_NO/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 22:12+0300\n"
+"POT-Creation-Date: 2025-12-18 19:09+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -26,113 +26,112 @@ msgstr ""
msgid "is active"
msgstr "Er aktiv"
-#: engine/core/abstract.py:21
+#: engine/core/abstract.py:22
msgid ""
-"if set to false, this object can't be seen by users without needed "
-"permission"
+"if set to false, this object can't be seen by users without needed permission"
msgstr ""
"Hvis dette objektet er satt til false, kan det ikke ses av brukere uten "
"nødvendig tillatelse"
-#: engine/core/abstract.py:23 engine/core/choices.py:18
+#: engine/core/abstract.py:26 engine/core/choices.py:18
msgid "created"
msgstr "Opprettet"
-#: engine/core/abstract.py:23
+#: engine/core/abstract.py:26
msgid "when the object first appeared on the database"
msgstr "Når objektet først dukket opp i databasen"
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "modified"
msgstr "Modifisert"
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "when the object was last modified"
msgstr "Når objektet sist ble redigert"
-#: engine/core/admin.py:85
+#: engine/core/admin.py:94
msgid "translations"
msgstr "Oversettelser"
-#: engine/core/admin.py:89
+#: engine/core/admin.py:102
msgid "general"
msgstr "Generelt"
-#: engine/core/admin.py:91
+#: engine/core/admin.py:106
msgid "relations"
msgstr "Relasjoner"
-#: engine/core/admin.py:93
+#: engine/core/admin.py:111
msgid "additional info"
msgstr "ytterligere informasjon"
-#: engine/core/admin.py:111
+#: engine/core/admin.py:133
msgid "metadata"
msgstr "Metadata"
-#: engine/core/admin.py:118
+#: engine/core/admin.py:141
msgid "timestamps"
msgstr "Tidsstempler"
-#: engine/core/admin.py:133
+#: engine/core/admin.py:157
#, python-format
msgid "activate selected %(verbose_name_plural)s"
msgstr "Aktiver valgt %(verbose_name_plural)s"
-#: engine/core/admin.py:138
+#: engine/core/admin.py:165
msgid "selected items have been activated."
msgstr "Utvalgte elementer har blitt aktivert!"
-#: engine/core/admin.py:144
+#: engine/core/admin.py:173
#, python-format
msgid "deactivate selected %(verbose_name_plural)s"
msgstr "Deaktiver valgt %(verbose_name_plural)s"
-#: engine/core/admin.py:149
+#: engine/core/admin.py:183
msgid "selected items have been deactivated."
msgstr "Utvalgte elementer har blitt deaktivert!"
-#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586
-#: engine/core/graphene/object_types.py:593 engine/core/models.py:801
-#: engine/core/models.py:809
+#: engine/core/admin.py:195 engine/core/graphene/object_types.py:650
+#: engine/core/graphene/object_types.py:657 engine/core/models.py:824
+#: engine/core/models.py:832
msgid "attribute value"
msgstr "Attributtverdi"
-#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75
-#: engine/core/models.py:810
+#: engine/core/admin.py:196 engine/core/graphene/object_types.py:75
+#: engine/core/models.py:833
msgid "attribute values"
msgstr "Attributtverdier"
-#: engine/core/admin.py:172
+#: engine/core/admin.py:207
msgid "image"
msgstr "Bilde"
-#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474
+#: engine/core/admin.py:208 engine/core/graphene/object_types.py:527
msgid "images"
msgstr "Bilder"
-#: engine/core/admin.py:184 engine/core/models.py:566
+#: engine/core/admin.py:219 engine/core/models.py:587
msgid "stock"
msgstr "Lager"
-#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640
+#: engine/core/admin.py:220 engine/core/graphene/object_types.py:710
msgid "stocks"
msgstr "Aksjer"
-#: engine/core/admin.py:196 engine/core/models.py:1818
+#: engine/core/admin.py:231 engine/core/models.py:1930
msgid "order product"
msgstr "Bestill produkt"
-#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389
-#: engine/core/models.py:1819
+#: engine/core/admin.py:232 engine/core/graphene/object_types.py:438
+#: engine/core/models.py:1931
msgid "order products"
msgstr "Bestill produkter"
-#: engine/core/admin.py:210 engine/core/admin.py:211
+#: engine/core/admin.py:250 engine/core/admin.py:251
msgid "children"
msgstr "Barn"
-#: engine/core/admin.py:977
+#: engine/core/admin.py:1059
msgid "Config"
msgstr "Konfigurer"
@@ -156,8 +155,7 @@ msgstr "Leveres"
msgid "canceled"
msgstr "Avlyst"
-#: engine/core/choices.py:8 engine/core/choices.py:16
-#: engine/core/choices.py:24
+#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24
msgid "failed"
msgstr "Mislyktes"
@@ -185,60 +183,61 @@ msgstr "Momental"
msgid "successful"
msgstr "Vellykket"
-#: engine/core/docs/drf/views.py:31
+#: engine/core/docs/drf/views.py:30
msgid "OpenAPI schema in selected format with selected language"
msgstr "OpenAPI-skjema i valgt format med valgt språk"
-#: engine/core/docs/drf/views.py:33
+#: engine/core/docs/drf/views.py:32
msgid ""
"OpenApi3 schema for this API. Format can be selected via content "
"negotiation. Language can be selected with Accept-Language and query "
"parameter both."
msgstr ""
-"OpenApi3-skjema for dette API-et. Format kan velges via innholdsforhandling."
-" Språk kan velges både med Accept-Language og spørringsparameteren."
+"OpenApi3-skjema for dette API-et. Format kan velges via innholdsforhandling. "
+"Språk kan velges både med Accept-Language og spørringsparameteren."
-#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37
+#: engine/core/docs/drf/views.py:43 engine/core/graphene/mutations.py:37
msgid "cache I/O"
msgstr "Cache I/O"
-#: engine/core/docs/drf/views.py:46
+#: engine/core/docs/drf/views.py:45
msgid ""
"apply only a key to read permitted data from cache.\n"
"apply key, data and timeout with authentication to write data to cache."
msgstr ""
"Bruk bare en nøkkel for å lese tillatte data fra hurtigbufferen.\n"
-"Bruk nøkkel, data og tidsavbrudd med autentisering for å skrive data til hurtigbufferen."
+"Bruk nøkkel, data og tidsavbrudd med autentisering for å skrive data til "
+"hurtigbufferen."
-#: engine/core/docs/drf/views.py:62
+#: engine/core/docs/drf/views.py:63
msgid "get a list of supported languages"
msgstr "Få en liste over språk som støttes"
-#: engine/core/docs/drf/views.py:74
+#: engine/core/docs/drf/views.py:75
msgid "get application's exposable parameters"
msgstr "Hent applikasjonens eksponerbare parametere"
-#: engine/core/docs/drf/views.py:84
+#: engine/core/docs/drf/views.py:89
msgid "send a message to the support team"
msgstr "Send en melding til supportteamet"
-#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57
+#: engine/core/docs/drf/views.py:103 engine/core/graphene/mutations.py:59
msgid "request a CORSed URL"
msgstr "Be om en CORSed URL. Bare https er tillatt."
-#: engine/core/docs/drf/views.py:112
+#: engine/core/docs/drf/views.py:119
msgid "Search between products, categories and brands"
msgstr "Søk mellom produkter, kategorier og merker"
-#: engine/core/docs/drf/views.py:130
+#: engine/core/docs/drf/views.py:141
msgid "global search endpoint to query across project's tables"
msgstr "Globalt søkeendepunkt for å søke på tvers av prosjektets tabeller"
-#: engine/core/docs/drf/views.py:139
+#: engine/core/docs/drf/views.py:150
msgid "purchase an order as a business"
msgstr "Kjøp en ordre som en bedrift"
-#: engine/core/docs/drf/views.py:146
+#: engine/core/docs/drf/views.py:158
msgid ""
"purchase an order as a business, using the provided `products` with "
"`product_uuid` and `attributes`."
@@ -246,226 +245,224 @@ msgstr ""
"Kjøp en ordre som en bedrift, ved hjelp av de angitte `produktene` med "
"`product_uuid` og `attributter`."
-#: engine/core/docs/drf/views.py:164
+#: engine/core/docs/drf/views.py:177
msgid "download a digital asset from purchased digital order"
msgstr "laste ned en digital ressurs fra en kjøpt digital bestilling"
-#: engine/core/docs/drf/viewsets.py:61
+#: engine/core/docs/drf/viewsets.py:65
msgid "list all attribute groups (simple view)"
msgstr "Liste over alle attributtgrupper (enkel visning)"
-#: engine/core/docs/drf/viewsets.py:68
+#: engine/core/docs/drf/viewsets.py:75
msgid "retrieve a single attribute group (detailed view)"
msgstr "Hent en enkelt attributtgruppe (detaljert visning)"
-#: engine/core/docs/drf/viewsets.py:75
+#: engine/core/docs/drf/viewsets.py:82
msgid "create an attribute group"
msgstr "Opprett en attributtgruppe"
-#: engine/core/docs/drf/viewsets.py:82
+#: engine/core/docs/drf/viewsets.py:92
msgid "delete an attribute group"
msgstr "Slett en attributtgruppe"
-#: engine/core/docs/drf/viewsets.py:89
+#: engine/core/docs/drf/viewsets.py:99
msgid "rewrite an existing attribute group saving non-editables"
msgstr ""
"Skriv om en eksisterende attributtgruppe for å lagre ikke-redigerbare "
"attributter"
-#: engine/core/docs/drf/viewsets.py:96
-msgid ""
-"rewrite some fields of an existing attribute group saving non-editables"
+#: engine/core/docs/drf/viewsets.py:107
+msgid "rewrite some fields of an existing attribute group saving non-editables"
msgstr ""
"Skriv om noen av feltene i en eksisterende attributtgruppe for å lagre ikke-"
"redigerbare felt"
-#: engine/core/docs/drf/viewsets.py:106
+#: engine/core/docs/drf/viewsets.py:118
msgid "list all attributes (simple view)"
msgstr "Liste over alle attributter (enkel visning)"
-#: engine/core/docs/drf/viewsets.py:113
+#: engine/core/docs/drf/viewsets.py:128
msgid "retrieve a single attribute (detailed view)"
msgstr "Hent et enkelt attributt (detaljert visning)"
-#: engine/core/docs/drf/viewsets.py:120
+#: engine/core/docs/drf/viewsets.py:135
msgid "create an attribute"
msgstr "Opprett et attributt"
-#: engine/core/docs/drf/viewsets.py:127
+#: engine/core/docs/drf/viewsets.py:142
msgid "delete an attribute"
msgstr "Slett et attributt"
-#: engine/core/docs/drf/viewsets.py:134
+#: engine/core/docs/drf/viewsets.py:149
msgid "rewrite an existing attribute saving non-editables"
msgstr ""
"Skriv om et eksisterende attributt for å lagre ikke-redigerbare attributter"
-#: engine/core/docs/drf/viewsets.py:141
+#: engine/core/docs/drf/viewsets.py:156
msgid "rewrite some fields of an existing attribute saving non-editables"
msgstr ""
"Skriv om noen av feltene i et eksisterende attributt for å lagre ikke-"
"redigerbare felt"
-#: engine/core/docs/drf/viewsets.py:151
+#: engine/core/docs/drf/viewsets.py:166
msgid "list all attribute values (simple view)"
msgstr "Liste over alle attributtverdier (enkel visning)"
-#: engine/core/docs/drf/viewsets.py:158
+#: engine/core/docs/drf/viewsets.py:176
msgid "retrieve a single attribute value (detailed view)"
msgstr "Hent en enkelt attributtverdi (detaljert visning)"
-#: engine/core/docs/drf/viewsets.py:165
+#: engine/core/docs/drf/viewsets.py:183
msgid "create an attribute value"
msgstr "Opprett en attributtverdi"
-#: engine/core/docs/drf/viewsets.py:172
+#: engine/core/docs/drf/viewsets.py:193
msgid "delete an attribute value"
msgstr "Slett en attributtverdi"
-#: engine/core/docs/drf/viewsets.py:179
+#: engine/core/docs/drf/viewsets.py:200
msgid "rewrite an existing attribute value saving non-editables"
msgstr ""
"Omskrive en eksisterende attributtverdi for å lagre ikke-redigerbare "
"attributter"
-#: engine/core/docs/drf/viewsets.py:186
-msgid ""
-"rewrite some fields of an existing attribute value saving non-editables"
+#: engine/core/docs/drf/viewsets.py:208
+msgid "rewrite some fields of an existing attribute value saving non-editables"
msgstr ""
"Skriv om noen av feltene i en eksisterende attributtverdi og lagre ikke-"
"redigerbare felt"
-#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197
+#: engine/core/docs/drf/viewsets.py:219 engine/core/docs/drf/viewsets.py:220
msgid "list all categories (simple view)"
msgstr "Liste over alle kategorier (enkel visning)"
-#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205
+#: engine/core/docs/drf/viewsets.py:230 engine/core/docs/drf/viewsets.py:231
msgid "retrieve a single category (detailed view)"
msgstr "Hent en enkelt kategori (detaljert visning)"
-#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258
+#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:286
msgid "Category UUID or slug"
msgstr "Kategori UUID eller slug"
-#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221
+#: engine/core/docs/drf/viewsets.py:246 engine/core/docs/drf/viewsets.py:247
msgid "create a category"
msgstr "Opprett en kategori"
-#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229
+#: engine/core/docs/drf/viewsets.py:254 engine/core/docs/drf/viewsets.py:255
msgid "delete a category"
msgstr "Slett en kategori"
-#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237
+#: engine/core/docs/drf/viewsets.py:262 engine/core/docs/drf/viewsets.py:263
msgid "rewrite an existing category saving non-editables"
msgstr "Skriv om en eksisterende kategori som lagrer ikke-redigerbare filer"
-#: engine/core/docs/drf/viewsets.py:244 engine/core/docs/drf/viewsets.py:245
+#: engine/core/docs/drf/viewsets.py:270 engine/core/docs/drf/viewsets.py:272
msgid "rewrite some fields of an existing category saving non-editables"
msgstr ""
"Skriv om noen av feltene i en eksisterende kategori for å lagre ikke-"
"redigerbare"
-#: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704
-#: engine/core/docs/drf/viewsets.py:988
+#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:1046
#: engine/core/graphene/object_types.py:117
-#: engine/core/graphene/object_types.py:207
-#: engine/core/graphene/object_types.py:482
+#: engine/core/graphene/object_types.py:236
+#: engine/core/graphene/object_types.py:537
msgid "SEO Meta snapshot"
msgstr "SEO Meta-øyeblikksbilde"
-#: engine/core/docs/drf/viewsets.py:253
+#: engine/core/docs/drf/viewsets.py:281
msgid "returns a snapshot of the category's SEO meta data"
msgstr "Returnerer et øyeblikksbilde av kategoriens SEO-metadata"
-#: engine/core/docs/drf/viewsets.py:274
+#: engine/core/docs/drf/viewsets.py:302
msgid "list all orders (simple view)"
msgstr "Liste over alle kategorier (enkel visning)"
-#: engine/core/docs/drf/viewsets.py:275
+#: engine/core/docs/drf/viewsets.py:303
msgid "for non-staff users, only their own orders are returned."
msgstr "For ikke-ansatte brukere returneres bare deres egne bestillinger."
-#: engine/core/docs/drf/viewsets.py:281
+#: engine/core/docs/drf/viewsets.py:309
msgid ""
-"Case-insensitive substring search across human_readable_id, "
-"order_products.product.name, and order_products.product.partnumber"
+"Case-insensitive substring search across human_readable_id, order_products."
+"product.name, and order_products.product.partnumber"
msgstr ""
"Søk etter store og små bokstaver på tvers av human_readable_id, "
"order_products.product.name og order_products.product.partnumber"
-#: engine/core/docs/drf/viewsets.py:288
+#: engine/core/docs/drf/viewsets.py:316
msgid "Filter orders with buy_time >= this ISO 8601 datetime"
msgstr "Filtrer ordrer med buy_time >= denne ISO 8601-datoen"
-#: engine/core/docs/drf/viewsets.py:293
+#: engine/core/docs/drf/viewsets.py:321
msgid "Filter orders with buy_time <= this ISO 8601 datetime"
msgstr "Filtrer bestillinger med buy_time <= denne ISO 8601-datoen"
-#: engine/core/docs/drf/viewsets.py:298
+#: engine/core/docs/drf/viewsets.py:326
msgid "Filter by exact order UUID"
msgstr "Filtrer etter nøyaktig ordre UUID"
-#: engine/core/docs/drf/viewsets.py:303
+#: engine/core/docs/drf/viewsets.py:331
msgid "Filter by exact human-readable order ID"
msgstr "Filtrer etter nøyaktig bestillings-ID som kan leses av mennesker"
-#: engine/core/docs/drf/viewsets.py:308
+#: engine/core/docs/drf/viewsets.py:336
msgid "Filter by user's email (case-insensitive exact match)"
msgstr "Filtrer etter brukerens e-post (store og små bokstaver er ufølsomme)"
-#: engine/core/docs/drf/viewsets.py:313
+#: engine/core/docs/drf/viewsets.py:341
msgid "Filter by user's UUID"
msgstr "Filtrer etter brukerens UUID"
-#: engine/core/docs/drf/viewsets.py:318
+#: engine/core/docs/drf/viewsets.py:347
msgid "Filter by order status (case-insensitive substring match)"
msgstr "Filtrer etter ordrestatus (skiller mellom store og små bokstaver)"
-#: engine/core/docs/drf/viewsets.py:324
+#: engine/core/docs/drf/viewsets.py:354
msgid ""
-"Order by one of: uuid, human_readable_id, user_email, user, status, created,"
-" modified, buy_time, random. Prefix with '-' for descending (e.g. "
-"'-buy_time')."
+"Order by one of: uuid, human_readable_id, user_email, user, status, created, "
+"modified, buy_time, random. Prefix with '-' for descending (e.g. '-"
+"buy_time')."
msgstr ""
"Bestill etter en av: uuid, human_readable_id, user_email, user, status, "
-"created, modified, buy_time, random. Prefiks med '-' for synkende rekkefølge"
-" (f.eks. '-buy_time')."
+"created, modified, buy_time, random. Prefiks med '-' for synkende rekkefølge "
+"(f.eks. '-buy_time')."
-#: engine/core/docs/drf/viewsets.py:336
+#: engine/core/docs/drf/viewsets.py:366
msgid "retrieve a single order (detailed view)"
msgstr "Hent en enkelt kategori (detaljert visning)"
-#: engine/core/docs/drf/viewsets.py:341
+#: engine/core/docs/drf/viewsets.py:371
msgid "Order UUID or human-readable id"
msgstr "Bestill UUID eller menneskelig lesbar id"
-#: engine/core/docs/drf/viewsets.py:351
+#: engine/core/docs/drf/viewsets.py:381
msgid "create an order"
msgstr "Opprett et attributt"
-#: engine/core/docs/drf/viewsets.py:352
+#: engine/core/docs/drf/viewsets.py:382
msgid "doesn't work for non-staff users."
msgstr "Fungerer ikke for brukere som ikke er ansatte."
-#: engine/core/docs/drf/viewsets.py:359
+#: engine/core/docs/drf/viewsets.py:389
msgid "delete an order"
msgstr "Slett et attributt"
-#: engine/core/docs/drf/viewsets.py:366
+#: engine/core/docs/drf/viewsets.py:396
msgid "rewrite an existing order saving non-editables"
msgstr "Skriv om en eksisterende kategori som lagrer ikke-redigerbare filer"
-#: engine/core/docs/drf/viewsets.py:373
+#: engine/core/docs/drf/viewsets.py:403
msgid "rewrite some fields of an existing order saving non-editables"
msgstr ""
"Skriv om noen av feltene i en eksisterende kategori for å lagre ikke-"
"redigerbare"
-#: engine/core/docs/drf/viewsets.py:380
+#: engine/core/docs/drf/viewsets.py:410
msgid "purchase an order"
msgstr "Innkjøpspris på bestillingstidspunktet"
-#: engine/core/docs/drf/viewsets.py:382
+#: engine/core/docs/drf/viewsets.py:412
msgid ""
"finalizes the order purchase. if `force_balance` is used, the purchase is "
"completed using the user's balance; if `force_payment` is used, a "
@@ -475,40 +472,40 @@ msgstr ""
"hjelp av brukerens saldo; hvis `force_payment` brukes, iverksettes en "
"transaksjon."
-#: engine/core/docs/drf/viewsets.py:397
+#: engine/core/docs/drf/viewsets.py:427
msgid "retrieve current pending order of a user"
msgstr "hente en brukers nåværende ventende ordre"
-#: engine/core/docs/drf/viewsets.py:398
+#: engine/core/docs/drf/viewsets.py:428
msgid "retrieves a current pending order of an authenticated user"
msgstr "henter en gjeldende ventende ordre fra en autentisert bruker"
-#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334
+#: engine/core/docs/drf/viewsets.py:438 engine/core/graphene/mutations.py:354
msgid "purchase an order without account creation"
msgstr "kjøpe en ordre uten å opprette konto"
-#: engine/core/docs/drf/viewsets.py:409
+#: engine/core/docs/drf/viewsets.py:439
msgid "finalizes the order purchase for a non-registered user."
msgstr "fullfører bestillingen for en ikke-registrert bruker."
-#: engine/core/docs/drf/viewsets.py:420
+#: engine/core/docs/drf/viewsets.py:450
msgid "add product to order"
msgstr "Legg til et produkt i bestillingen"
-#: engine/core/docs/drf/viewsets.py:421
+#: engine/core/docs/drf/viewsets.py:452
msgid ""
"adds a product to an order using the provided `product_uuid` and "
"`attributes`."
msgstr ""
-"Legger til et produkt i en bestilling ved hjelp av de angitte `product_uuid`"
-" og `attributtene`."
+"Legger til et produkt i en bestilling ved hjelp av de angitte `product_uuid` "
+"og `attributtene`."
-#: engine/core/docs/drf/viewsets.py:429
+#: engine/core/docs/drf/viewsets.py:461
msgid "add a list of products to order, quantities will not count"
msgstr ""
"Legg til en liste over produkter som skal bestilles, antall vil ikke telle"
-#: engine/core/docs/drf/viewsets.py:430
+#: engine/core/docs/drf/viewsets.py:463
msgid ""
"adds a list of products to an order using the provided `product_uuid` and "
"`attributes`."
@@ -516,11 +513,11 @@ msgstr ""
"Legger til en liste med produkter i en bestilling ved hjelp av de angitte "
"`product_uuid` og `attributtene`."
-#: engine/core/docs/drf/viewsets.py:438
+#: engine/core/docs/drf/viewsets.py:472
msgid "remove product from order"
msgstr "Fjern et produkt fra bestillingen"
-#: engine/core/docs/drf/viewsets.py:439
+#: engine/core/docs/drf/viewsets.py:474
msgid ""
"removes a product from an order using the provided `product_uuid` and "
"`attributes`."
@@ -528,11 +525,11 @@ msgstr ""
"Fjerner et produkt fra en bestilling ved hjelp av de angitte `product_uuid` "
"og `attributtene`."
-#: engine/core/docs/drf/viewsets.py:447
+#: engine/core/docs/drf/viewsets.py:483
msgid "remove product from order, quantities will not count"
msgstr "Fjern et produkt fra bestillingen, antall vil ikke telle med"
-#: engine/core/docs/drf/viewsets.py:448
+#: engine/core/docs/drf/viewsets.py:485
msgid ""
"removes a list of products from an order using the provided `product_uuid` "
"and `attributes`"
@@ -540,726 +537,737 @@ msgstr ""
"Fjerner en liste med produkter fra en bestilling ved hjelp av de angitte "
"`product_uuid` og `attributtene`."
-#: engine/core/docs/drf/viewsets.py:459
+#: engine/core/docs/drf/viewsets.py:497
msgid "list all wishlists (simple view)"
msgstr "Liste over alle attributter (enkel visning)"
-#: engine/core/docs/drf/viewsets.py:460
+#: engine/core/docs/drf/viewsets.py:498
msgid "for non-staff users, only their own wishlists are returned."
msgstr ""
"For brukere som ikke er ansatte, returneres bare deres egne ønskelister."
-#: engine/core/docs/drf/viewsets.py:467
+#: engine/core/docs/drf/viewsets.py:508
msgid "retrieve a single wishlist (detailed view)"
msgstr "Hent et enkelt attributt (detaljert visning)"
-#: engine/core/docs/drf/viewsets.py:474
+#: engine/core/docs/drf/viewsets.py:515
msgid "create an wishlist"
msgstr "Opprett et attributt"
-#: engine/core/docs/drf/viewsets.py:475
+#: engine/core/docs/drf/viewsets.py:516
msgid "Doesn't work for non-staff users."
msgstr "Fungerer ikke for brukere som ikke er ansatte."
-#: engine/core/docs/drf/viewsets.py:482
+#: engine/core/docs/drf/viewsets.py:523
msgid "delete an wishlist"
msgstr "Slett et attributt"
-#: engine/core/docs/drf/viewsets.py:489
+#: engine/core/docs/drf/viewsets.py:530
msgid "rewrite an existing wishlist saving non-editables"
msgstr ""
"Skriv om et eksisterende attributt for å lagre ikke-redigerbare attributter"
-#: engine/core/docs/drf/viewsets.py:496
+#: engine/core/docs/drf/viewsets.py:537
msgid "rewrite some fields of an existing wishlist saving non-editables"
msgstr ""
"Skriv om noen av feltene i et eksisterende attributt for å lagre ikke-"
"redigerbare felt"
-#: engine/core/docs/drf/viewsets.py:503
+#: engine/core/docs/drf/viewsets.py:544
msgid "retrieve current pending wishlist of a user"
msgstr "hente en brukers nåværende ventende ønskeliste"
-#: engine/core/docs/drf/viewsets.py:504
+#: engine/core/docs/drf/viewsets.py:545
msgid "retrieves a current pending wishlist of an authenticated user"
msgstr "henter en aktuell ventende ønskeliste for en autentisert bruker"
-#: engine/core/docs/drf/viewsets.py:514
+#: engine/core/docs/drf/viewsets.py:555
msgid "add product to wishlist"
msgstr "Legg til et produkt i bestillingen"
-#: engine/core/docs/drf/viewsets.py:515
+#: engine/core/docs/drf/viewsets.py:557
msgid "adds a product to an wishlist using the provided `product_uuid`"
msgstr ""
"Legger til et produkt på en ønskeliste ved hjelp av den angitte "
"`product_uuid`."
-#: engine/core/docs/drf/viewsets.py:523
+#: engine/core/docs/drf/viewsets.py:566
msgid "remove product from wishlist"
msgstr "Fjern et produkt fra ønskelisten"
-#: engine/core/docs/drf/viewsets.py:524
+#: engine/core/docs/drf/viewsets.py:568
msgid "removes a product from an wishlist using the provided `product_uuid`"
msgstr ""
-"Fjerner et produkt fra en ønskeliste ved hjelp av den angitte "
-"`product_uuid`."
+"Fjerner et produkt fra en ønskeliste ved hjelp av den angitte `product_uuid`."
-#: engine/core/docs/drf/viewsets.py:532
+#: engine/core/docs/drf/viewsets.py:577
msgid "add many products to wishlist"
msgstr "Legg til mange produkter på ønskelisten"
-#: engine/core/docs/drf/viewsets.py:533
+#: engine/core/docs/drf/viewsets.py:579
msgid "adds many products to an wishlist using the provided `product_uuids`"
msgstr ""
"Legger til mange produkter på en ønskeliste ved hjelp av de angitte "
"`product_uuids`."
-#: engine/core/docs/drf/viewsets.py:541
+#: engine/core/docs/drf/viewsets.py:588
msgid "remove many products from wishlist"
msgstr "Fjern et produkt fra bestillingen"
-#: engine/core/docs/drf/viewsets.py:542
+#: engine/core/docs/drf/viewsets.py:590
msgid ""
"removes many products from an wishlist using the provided `product_uuids`"
msgstr ""
"Fjerner mange produkter fra en ønskeliste ved hjelp av de angitte "
"`product_uuids`."
-#: engine/core/docs/drf/viewsets.py:549
+#: engine/core/docs/drf/viewsets.py:598
msgid ""
"Filter by one or more attribute name/value pairs. \n"
"• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n"
-"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n"
-"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n"
+"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, "
+"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, "
+"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n"
+"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), "
+"`true`/`false` for booleans, integers, floats; otherwise treated as "
+"string. \n"
"• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n"
"Examples: \n"
-"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n"
+"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\","
+"\"bluetooth\"]`, \n"
"`b64-description=icontains-aGVhdC1jb2xk`"
msgstr ""
"Filtrer etter ett eller flere attributtnavn/verdipar. \n"
"- **Syntaks**: `attr_name=metode-verdi[;attr2=metode2-verdi2]...`.\n"
-"- **Metoder** (standardinnstilling er `icontains` hvis utelatt): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`.\n"
-"- **Vertyping av verdi**: JSON forsøkes først (slik at du kan sende lister/dikter), `true`/`false` for booleans, heltall, floats; ellers behandlet som streng. \n"
-"- **Base64**: prefiks med `b64-` for URL-sikker base64-koding av råverdien. \n"
+"- **Metoder** (standardinnstilling er `icontains` hvis utelatt): `iexact`, "
+"`exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, "
+"`endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`.\n"
+"- **Vertyping av verdi**: JSON forsøkes først (slik at du kan sende lister/"
+"dikter), `true`/`false` for booleans, heltall, floats; ellers behandlet som "
+"streng. \n"
+"- **Base64**: prefiks med `b64-` for URL-sikker base64-koding av "
+"råverdien. \n"
"Eksempler: \n"
"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`,\n"
"`b64-beskrivelse=icontains-aGVhdC1jb2xk`"
-#: engine/core/docs/drf/viewsets.py:568 engine/core/docs/drf/viewsets.py:569
+#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
msgid "list all products (simple view)"
msgstr "Liste over alle produkter (enkel visning)"
-#: engine/core/docs/drf/viewsets.py:574
+#: engine/core/docs/drf/viewsets.py:623
msgid "(exact) Product UUID"
msgstr "(nøyaktig) Produkt UUID"
-#: engine/core/docs/drf/viewsets.py:581
+#: engine/core/docs/drf/viewsets.py:630
msgid ""
-"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n"
+"Comma-separated list of fields to sort by. Prefix with `-` for "
+"descending. \n"
"**Allowed:** uuid, rating, name, slug, created, modified, price, random"
msgstr ""
-"Kommaseparert liste over felt som skal sorteres etter. Prefiks med `-` for synkende sortering. \n"
+"Kommaseparert liste over felt som skal sorteres etter. Prefiks med `-` for "
+"synkende sortering. \n"
"**Tillatt:** uuid, vurdering, navn, slug, opprettet, endret, pris, tilfeldig"
-#: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599
+#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
msgid "retrieve a single product (detailed view)"
msgstr "Hent et enkelt produkt (detaljert visning)"
-#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634
-#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672
-#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710
+#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683
+#: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725
+#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763
msgid "Product UUID or slug"
msgstr "Produkt UUID eller Slug"
-#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
+#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
#: engine/core/graphene/dashboard_mutations/product.py:80
#: engine/core/graphene/dashboard_mutations/product.py:118
#: engine/core/graphene/dashboard_mutations/product.py:166
msgid "create a product"
msgstr "Opprett et produkt"
-#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629
+#: engine/core/docs/drf/viewsets.py:677 engine/core/docs/drf/viewsets.py:678
msgid "rewrite an existing product, preserving non-editable fields"
msgstr "Skriv om et eksisterende produkt, og behold ikke-redigerbare felt"
-#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
+#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:700
msgid ""
"update some fields of an existing product, preserving non-editable fields"
msgstr ""
"Oppdater noen av feltene i et eksisterende produkt, men behold feltene som "
"ikke kan redigeres"
-#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
+#: engine/core/docs/drf/viewsets.py:719 engine/core/docs/drf/viewsets.py:720
msgid "delete a product"
msgstr "Slett et produkt"
-#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686
+#: engine/core/docs/drf/viewsets.py:738 engine/core/docs/drf/viewsets.py:739
msgid "lists all permitted feedbacks for a product"
msgstr "viser alle tillatte tilbakemeldinger for et produkt"
-#: engine/core/docs/drf/viewsets.py:705
+#: engine/core/docs/drf/viewsets.py:758
msgid "returns a snapshot of the product's SEO meta data"
msgstr "Returnerer et øyeblikksbilde av produktets SEO-metadata"
-#: engine/core/docs/drf/viewsets.py:726
+#: engine/core/docs/drf/viewsets.py:779
msgid "list all addresses"
msgstr "Liste over alle adresser"
-#: engine/core/docs/drf/viewsets.py:736
+#: engine/core/docs/drf/viewsets.py:789
msgid "retrieve a single address"
msgstr "Hent en enkelt adresse"
-#: engine/core/docs/drf/viewsets.py:746
+#: engine/core/docs/drf/viewsets.py:799
msgid "create a new address"
msgstr "Opprett en ny adresse"
-#: engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:810
msgid "delete an address"
msgstr "Slett en adresse"
-#: engine/core/docs/drf/viewsets.py:767
+#: engine/core/docs/drf/viewsets.py:820
msgid "update an entire address"
msgstr "Oppdater en hel adresse"
-#: engine/core/docs/drf/viewsets.py:778
+#: engine/core/docs/drf/viewsets.py:831
msgid "partially update an address"
msgstr "Delvis oppdatering av en adresse"
-#: engine/core/docs/drf/viewsets.py:789
+#: engine/core/docs/drf/viewsets.py:842
msgid "autocomplete address suggestions"
msgstr "Autofullfør adresseinndata"
-#: engine/core/docs/drf/viewsets.py:794
+#: engine/core/docs/drf/viewsets.py:848
msgid "raw data query string, please append with data from geo-IP endpoint"
msgstr ""
"Spørringsstreng for rådata, vennligst legg til data fra geo-IP-sluttpunkt"
-#: engine/core/docs/drf/viewsets.py:800
+#: engine/core/docs/drf/viewsets.py:855
msgid "limit the results amount, 1 < limit < 10, default: 5"
msgstr "begrenser resultatmengden, 1 < grense < 10, standard: 5"
-#: engine/core/docs/drf/viewsets.py:816
+#: engine/core/docs/drf/viewsets.py:871
msgid "list all feedbacks (simple view)"
msgstr "liste opp alle tilbakemeldinger (enkel visning)"
-#: engine/core/docs/drf/viewsets.py:823
+#: engine/core/docs/drf/viewsets.py:881
msgid "retrieve a single feedback (detailed view)"
msgstr "hente en enkelt tilbakemelding (detaljert visning)"
-#: engine/core/docs/drf/viewsets.py:830
+#: engine/core/docs/drf/viewsets.py:888
msgid "create a feedback"
msgstr "skape en tilbakemelding"
-#: engine/core/docs/drf/viewsets.py:837
+#: engine/core/docs/drf/viewsets.py:895
msgid "delete a feedback"
msgstr "slette en tilbakemelding"
-#: engine/core/docs/drf/viewsets.py:844
+#: engine/core/docs/drf/viewsets.py:902
msgid "rewrite an existing feedback saving non-editables"
msgstr ""
"omskrive en eksisterende tilbakemelding som lagrer ikke-redigerbare filer"
-#: engine/core/docs/drf/viewsets.py:851
+#: engine/core/docs/drf/viewsets.py:909
msgid "rewrite some fields of an existing feedback saving non-editables"
msgstr ""
"omskrive noen felter i en eksisterende tilbakemelding og lagre ikke-"
"redigerbare"
-#: engine/core/docs/drf/viewsets.py:861
+#: engine/core/docs/drf/viewsets.py:919
msgid "list all order–product relations (simple view)"
msgstr "liste opp alle ordre-produkt-relasjoner (enkel visning)"
-#: engine/core/docs/drf/viewsets.py:871
+#: engine/core/docs/drf/viewsets.py:929
msgid "retrieve a single order–product relation (detailed view)"
msgstr "hente en enkelt ordre-produkt-relasjon (detaljert visning)"
-#: engine/core/docs/drf/viewsets.py:881
+#: engine/core/docs/drf/viewsets.py:939
msgid "create a new order–product relation"
msgstr "opprette en ny ordre-produkt-relasjon"
-#: engine/core/docs/drf/viewsets.py:891
+#: engine/core/docs/drf/viewsets.py:949
msgid "replace an existing order–product relation"
msgstr "erstatte en eksisterende ordre-produkt-relasjon"
-#: engine/core/docs/drf/viewsets.py:901
+#: engine/core/docs/drf/viewsets.py:959
msgid "partially update an existing order–product relation"
msgstr "delvis oppdatere en eksisterende ordre-produkt-relasjon"
-#: engine/core/docs/drf/viewsets.py:911
+#: engine/core/docs/drf/viewsets.py:969
msgid "delete an order–product relation"
msgstr "slette en ordre-produkt-relasjon"
-#: engine/core/docs/drf/viewsets.py:921
+#: engine/core/docs/drf/viewsets.py:979
msgid "add or remove feedback on an order–product relation"
msgstr "legge til eller fjerne tilbakemeldinger på en ordre-produkt-relasjon"
-#: engine/core/docs/drf/viewsets.py:938
+#: engine/core/docs/drf/viewsets.py:996
msgid "list all brands (simple view)"
msgstr "Liste over alle merker (enkel visning)"
-#: engine/core/docs/drf/viewsets.py:945
+#: engine/core/docs/drf/viewsets.py:1003
msgid "retrieve a single brand (detailed view)"
msgstr "Hent ett enkelt merke (detaljert visning)"
-#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993
+#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051
msgid "Brand UUID or slug"
msgstr "Merkevare UUID eller slug"
-#: engine/core/docs/drf/viewsets.py:960
+#: engine/core/docs/drf/viewsets.py:1018
msgid "create a brand"
msgstr "Skap en merkevare"
-#: engine/core/docs/drf/viewsets.py:967
+#: engine/core/docs/drf/viewsets.py:1025
msgid "delete a brand"
msgstr "Slett et merke"
-#: engine/core/docs/drf/viewsets.py:974
+#: engine/core/docs/drf/viewsets.py:1032
msgid "rewrite an existing brand saving non-editables"
msgstr ""
"Skriv om en eksisterende merkevare som sparer ikke-redigerbare produkter"
-#: engine/core/docs/drf/viewsets.py:981
+#: engine/core/docs/drf/viewsets.py:1039
msgid "rewrite some fields of an existing brand saving non-editables"
msgstr ""
"Skriv om noen av feltene i en eksisterende kategori for å lagre ikke-"
"redigerbare"
-#: engine/core/docs/drf/viewsets.py:1006
+#: engine/core/docs/drf/viewsets.py:1064
msgid "list all vendors (simple view)"
msgstr "Liste over alle leverandører (enkel visning)"
-#: engine/core/docs/drf/viewsets.py:1013
+#: engine/core/docs/drf/viewsets.py:1074
msgid "retrieve a single vendor (detailed view)"
msgstr "Hent en enkelt leverandør (detaljert visning)"
-#: engine/core/docs/drf/viewsets.py:1020
+#: engine/core/docs/drf/viewsets.py:1081
msgid "create a vendor"
msgstr "Opprett en leverandør"
-#: engine/core/docs/drf/viewsets.py:1027
+#: engine/core/docs/drf/viewsets.py:1088
msgid "delete a vendor"
msgstr "Slett en leverandør"
-#: engine/core/docs/drf/viewsets.py:1034
+#: engine/core/docs/drf/viewsets.py:1095
msgid "rewrite an existing vendor saving non-editables"
msgstr "Skriv om en eksisterende leverandør som lagrer ikke-redigerbare filer"
-#: engine/core/docs/drf/viewsets.py:1041
+#: engine/core/docs/drf/viewsets.py:1102
msgid "rewrite some fields of an existing vendor saving non-editables"
msgstr ""
"Skriv om noen av feltene i en eksisterende kategori for å lagre ikke-"
"redigerbare"
-#: engine/core/docs/drf/viewsets.py:1051
+#: engine/core/docs/drf/viewsets.py:1112
msgid "list all product images (simple view)"
msgstr "Liste over alle produktbilder (enkel visning)"
-#: engine/core/docs/drf/viewsets.py:1058
+#: engine/core/docs/drf/viewsets.py:1122
msgid "retrieve a single product image (detailed view)"
msgstr "Hent et enkelt produktbilde (detaljert visning)"
-#: engine/core/docs/drf/viewsets.py:1065
+#: engine/core/docs/drf/viewsets.py:1129
msgid "create a product image"
msgstr "Lag et produktbilde"
-#: engine/core/docs/drf/viewsets.py:1072
+#: engine/core/docs/drf/viewsets.py:1139
msgid "delete a product image"
msgstr "Slett et produktbilde"
-#: engine/core/docs/drf/viewsets.py:1079
+#: engine/core/docs/drf/viewsets.py:1146
msgid "rewrite an existing product image saving non-editables"
msgstr ""
"Skriv om et eksisterende produktbilde og lagre ikke-redigerbare elementer"
-#: engine/core/docs/drf/viewsets.py:1086
+#: engine/core/docs/drf/viewsets.py:1154
msgid "rewrite some fields of an existing product image saving non-editables"
msgstr ""
"Skriv om noen av feltene i en eksisterende kategori for å lagre ikke-"
"redigerbare"
-#: engine/core/docs/drf/viewsets.py:1096
+#: engine/core/docs/drf/viewsets.py:1165
msgid "list all promo codes (simple view)"
msgstr "Liste over alle kampanjekoder (enkel visning)"
-#: engine/core/docs/drf/viewsets.py:1103
+#: engine/core/docs/drf/viewsets.py:1175
msgid "retrieve a single promo code (detailed view)"
msgstr "Hent en enkelt kampanjekode (detaljert visning)"
-#: engine/core/docs/drf/viewsets.py:1110
+#: engine/core/docs/drf/viewsets.py:1182
msgid "create a promo code"
msgstr "Opprett en kampanjekode"
-#: engine/core/docs/drf/viewsets.py:1117
+#: engine/core/docs/drf/viewsets.py:1189
msgid "delete a promo code"
msgstr "Slett en kampanjekode"
-#: engine/core/docs/drf/viewsets.py:1124
+#: engine/core/docs/drf/viewsets.py:1196
msgid "rewrite an existing promo code saving non-editables"
msgstr ""
"Skriv om en eksisterende kampanjekode for å lagre ikke-redigerbare koder"
-#: engine/core/docs/drf/viewsets.py:1131
+#: engine/core/docs/drf/viewsets.py:1203
msgid "rewrite some fields of an existing promo code saving non-editables"
msgstr ""
"Skriv om noen av feltene i en eksisterende kategori for å lagre ikke-"
"redigerbare"
-#: engine/core/docs/drf/viewsets.py:1141
+#: engine/core/docs/drf/viewsets.py:1213
msgid "list all promotions (simple view)"
msgstr "Liste over alle kampanjer (enkel visning)"
-#: engine/core/docs/drf/viewsets.py:1148
+#: engine/core/docs/drf/viewsets.py:1223
msgid "retrieve a single promotion (detailed view)"
msgstr "Hent en enkelt kampanje (detaljert visning)"
-#: engine/core/docs/drf/viewsets.py:1155
+#: engine/core/docs/drf/viewsets.py:1230
msgid "create a promotion"
msgstr "Opprett en kampanje"
-#: engine/core/docs/drf/viewsets.py:1162
+#: engine/core/docs/drf/viewsets.py:1237
msgid "delete a promotion"
msgstr "Slett en kampanje"
-#: engine/core/docs/drf/viewsets.py:1169
+#: engine/core/docs/drf/viewsets.py:1244
msgid "rewrite an existing promotion saving non-editables"
msgstr ""
"Skriv om en eksisterende kampanje for å lagre ikke-redigerbare elementer"
-#: engine/core/docs/drf/viewsets.py:1176
+#: engine/core/docs/drf/viewsets.py:1251
msgid "rewrite some fields of an existing promotion saving non-editables"
msgstr ""
"Skriv om noen av feltene i en eksisterende kategori for å lagre ikke-"
"redigerbare"
-#: engine/core/docs/drf/viewsets.py:1186
+#: engine/core/docs/drf/viewsets.py:1261
msgid "list all stocks (simple view)"
msgstr "Liste over alle aksjer (enkel visning)"
-#: engine/core/docs/drf/viewsets.py:1193
+#: engine/core/docs/drf/viewsets.py:1268
msgid "retrieve a single stock (detailed view)"
msgstr "Hent en enkelt aksje (detaljert visning)"
-#: engine/core/docs/drf/viewsets.py:1200
+#: engine/core/docs/drf/viewsets.py:1275
msgid "create a stock record"
msgstr "Opprett en lagerpost"
-#: engine/core/docs/drf/viewsets.py:1207
+#: engine/core/docs/drf/viewsets.py:1282
msgid "delete a stock record"
msgstr "Slett en lagerpost"
-#: engine/core/docs/drf/viewsets.py:1214
+#: engine/core/docs/drf/viewsets.py:1289
msgid "rewrite an existing stock record saving non-editables"
msgstr "Skriv om en eksisterende lagerpost og lagre ikke-redigerbare varer"
-#: engine/core/docs/drf/viewsets.py:1221
+#: engine/core/docs/drf/viewsets.py:1297
msgid "rewrite some fields of an existing stock record saving non-editables"
msgstr ""
"Skriv om noen av feltene i en eksisterende kategori for å lagre ikke-"
"redigerbare"
-#: engine/core/docs/drf/viewsets.py:1231
+#: engine/core/docs/drf/viewsets.py:1308
msgid "list all product tags (simple view)"
msgstr "Liste over alle produkttagger (enkel visning)"
-#: engine/core/docs/drf/viewsets.py:1238
+#: engine/core/docs/drf/viewsets.py:1318
msgid "retrieve a single product tag (detailed view)"
msgstr "Hent en enkelt produkttagg (detaljert visning)"
-#: engine/core/docs/drf/viewsets.py:1245
+#: engine/core/docs/drf/viewsets.py:1325
msgid "create a product tag"
msgstr "Opprett en produkttagg"
-#: engine/core/docs/drf/viewsets.py:1252
+#: engine/core/docs/drf/viewsets.py:1335
msgid "delete a product tag"
msgstr "Slett en produkttagg"
-#: engine/core/docs/drf/viewsets.py:1259
+#: engine/core/docs/drf/viewsets.py:1342
msgid "rewrite an existing product tag saving non-editables"
msgstr ""
"Skriv om en eksisterende produkttagg for å lagre ikke-redigerbare produkter"
-#: engine/core/docs/drf/viewsets.py:1266
+#: engine/core/docs/drf/viewsets.py:1350
msgid "rewrite some fields of an existing product tag saving non-editables"
msgstr ""
"Skriv om noen av feltene i en eksisterende kategori for å lagre ikke-"
"redigerbare"
-#: engine/core/elasticsearch/__init__.py:122
-#: engine/core/elasticsearch/__init__.py:570
+#: engine/core/elasticsearch/__init__.py:127
+#: engine/core/elasticsearch/__init__.py:627
msgid "no search term provided."
msgstr "Ingen søkeord oppgitt."
-#: engine/core/filters.py:69 engine/core/filters.py:426
-#: engine/core/filters.py:553
+#: engine/core/filters.py:78 engine/core/filters.py:484
+#: engine/core/filters.py:625
msgid "Search"
msgstr "Søk"
-#: engine/core/filters.py:70 engine/core/filters.py:583
-#: engine/core/filters.py:612
+#: engine/core/filters.py:79 engine/core/filters.py:662
+#: engine/core/filters.py:691
msgid "UUID"
msgstr "UUID"
-#: engine/core/filters.py:71 engine/core/filters.py:428
-#: engine/core/filters.py:555
+#: engine/core/filters.py:80 engine/core/filters.py:487
+#: engine/core/filters.py:627
msgid "Name"
msgstr "Navn"
-#: engine/core/filters.py:72 engine/core/filters.py:557
+#: engine/core/filters.py:82 engine/core/filters.py:630
msgid "Categories"
msgstr "Kategorier"
-#: engine/core/filters.py:74
+#: engine/core/filters.py:86
msgid "Categories Slugs"
msgstr "Kategorier Snegler"
-#: engine/core/filters.py:75 engine/core/filters.py:436
+#: engine/core/filters.py:88 engine/core/filters.py:495
msgid "Tags"
msgstr "Tagger"
-#: engine/core/filters.py:76
+#: engine/core/filters.py:90
msgid "Min Price"
msgstr "Min pris"
-#: engine/core/filters.py:77
+#: engine/core/filters.py:93
msgid "Max Price"
msgstr "Maks pris"
-#: engine/core/filters.py:78
+#: engine/core/filters.py:95
msgid "Is Active"
msgstr "Er aktiv"
-#: engine/core/filters.py:79
+#: engine/core/filters.py:96
msgid "Brand"
msgstr "Merkevare"
-#: engine/core/filters.py:80
+#: engine/core/filters.py:97
msgid "Attributes"
msgstr "Egenskaper"
-#: engine/core/filters.py:81
+#: engine/core/filters.py:99
msgid "Quantity"
msgstr "Antall"
-#: engine/core/filters.py:82 engine/core/filters.py:430
-#: engine/core/filters.py:556 engine/core/models.py:321
-#: engine/core/models.py:489 engine/core/models.py:644
+#: engine/core/filters.py:101 engine/core/filters.py:489
+#: engine/core/filters.py:628 engine/core/models.py:327
+#: engine/core/models.py:508 engine/core/models.py:665
msgid "Slug"
msgstr "Snegl"
-#: engine/core/filters.py:83
+#: engine/core/filters.py:102
msgid "Is Digital"
msgstr "Er Digital"
-#: engine/core/filters.py:84
+#: engine/core/filters.py:104
msgid "Include sub-categories"
msgstr "Inkluder underkategorier"
-#: engine/core/filters.py:87
+#: engine/core/filters.py:108
msgid "Include personal ordered"
msgstr "Inkluder personlig bestilte produkter"
-#: engine/core/filters.py:89 engine/core/models.py:648
+#: engine/core/filters.py:110 engine/core/models.py:669
msgid "SKU"
msgstr "SKU"
-#: engine/core/filters.py:184
+#: engine/core/filters.py:212
msgid "there must be a category_uuid to use include_subcategories flag"
msgstr ""
"Det må finnes en category_uuid for å bruke include_subcategories-flagget"
-#: engine/core/filters.py:353
+#: engine/core/filters.py:398
msgid "Search (ID, product name or part number)"
msgstr "Søk (ID, produktnavn eller delenummer)"
-#: engine/core/filters.py:356
+#: engine/core/filters.py:402
msgid "Bought after (inclusive)"
msgstr "Kjøpt etter (inklusive)"
-#: engine/core/filters.py:357
+#: engine/core/filters.py:405
msgid "Bought before (inclusive)"
msgstr "Kjøpt før (inkludert)"
-#: engine/core/filters.py:360 engine/core/filters.py:407
-#: engine/core/filters.py:614
+#: engine/core/filters.py:410 engine/core/filters.py:461
+#: engine/core/filters.py:696
msgid "User email"
msgstr "Brukerens e-post"
-#: engine/core/filters.py:361 engine/core/filters.py:408
-#: engine/core/filters.py:592 engine/core/filters.py:613
+#: engine/core/filters.py:413 engine/core/filters.py:464
+#: engine/core/filters.py:671 engine/core/filters.py:693
msgid "User UUID"
msgstr "Bruker UUID"
-#: engine/core/filters.py:362
+#: engine/core/filters.py:415
msgid "Status"
msgstr "Status"
-#: engine/core/filters.py:366
+#: engine/core/filters.py:419
msgid "Human Readable ID"
msgstr "Menneskelig lesbar ID"
-#: engine/core/filters.py:429
+#: engine/core/filters.py:488
msgid "Parent"
msgstr "Foreldre"
-#: engine/core/filters.py:433
+#: engine/core/filters.py:492
msgid "Whole category(has at least 1 product or not)"
msgstr "Hele kategorien (har minst 1 produkt eller ikke)"
-#: engine/core/filters.py:437
+#: engine/core/filters.py:496
msgid "Level"
msgstr "Nivå"
-#: engine/core/filters.py:587
+#: engine/core/filters.py:666
msgid "Product UUID"
msgstr "Produkt UUID"
-#: engine/core/graphene/mutations.py:40
+#: engine/core/graphene/mutations.py:41
msgid "key to look for in or set into the cache"
msgstr "Nøkkel å lete etter i eller legge inn i hurtigbufferen"
-#: engine/core/graphene/mutations.py:41
+#: engine/core/graphene/mutations.py:43
msgid "data to store in cache"
msgstr "Data som skal lagres i hurtigbufferen"
-#: engine/core/graphene/mutations.py:44
+#: engine/core/graphene/mutations.py:46
msgid "timeout in seconds to set the data for into the cache"
msgstr "Tidsavbrudd i sekunder for å legge inn data i hurtigbufferen"
-#: engine/core/graphene/mutations.py:47
+#: engine/core/graphene/mutations.py:49
msgid "cached data"
msgstr "Bufret data"
-#: engine/core/graphene/mutations.py:62
+#: engine/core/graphene/mutations.py:64
msgid "camelized JSON data from the requested URL"
msgstr "Camelized JSON-data fra den forespurte URL-en"
-#: engine/core/graphene/mutations.py:67 engine/core/views.py:257
+#: engine/core/graphene/mutations.py:69 engine/core/views.py:249
msgid "only URLs starting with http(s):// are allowed"
msgstr "Bare nettadresser som begynner med http(s):// er tillatt"
-#: engine/core/graphene/mutations.py:83
+#: engine/core/graphene/mutations.py:87
msgid "add a product to the order"
msgstr "Legg til et produkt i bestillingen"
-#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131
-#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287
+#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139
+#: engine/core/graphene/mutations.py:255 engine/core/graphene/mutations.py:307
#, python-brace-format
msgid "order {order_uuid} not found"
msgstr "Ordre {order_uuid} ikke funnet!"
-#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159
+#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167
msgid "remove a product from the order"
msgstr "Fjern et produkt fra bestillingen"
-#: engine/core/graphene/mutations.py:137
+#: engine/core/graphene/mutations.py:145
msgid "remove all products from the order"
msgstr "Fjern alle produktene fra bestillingen"
-#: engine/core/graphene/mutations.py:182
+#: engine/core/graphene/mutations.py:190
msgid "buy an order"
msgstr "Kjøp en ordre"
-#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265
+#: engine/core/graphene/mutations.py:221 engine/core/graphene/mutations.py:283
msgid "please provide either order_uuid or order_hr_id - mutually exclusive"
msgstr ""
"Vennligst oppgi enten order_uuid eller order_hr_id - gjensidig utelukkende!"
-#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501
-#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712
+#: engine/core/graphene/mutations.py:250 engine/core/graphene/mutations.py:525
+#: engine/core/graphene/mutations.py:574 engine/core/viewsets.py:753
msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr "Feil type kom fra order.buy()-metoden: {type(instance)!s}"
-#: engine/core/graphene/mutations.py:245
+#: engine/core/graphene/mutations.py:261
msgid "perform an action on a list of products in the order"
msgstr "Utfør en handling på en liste over produkter i bestillingen"
-#: engine/core/graphene/mutations.py:250
+#: engine/core/graphene/mutations.py:266
msgid "remove/add"
msgstr "Fjern/legg til"
-#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323
+#: engine/core/graphene/mutations.py:302 engine/core/graphene/mutations.py:343
msgid "action must be either add or remove"
msgstr "Handlingen må enten være \"legg til\" eller \"fjern\"!"
-#: engine/core/graphene/mutations.py:293
+#: engine/core/graphene/mutations.py:313
msgid "perform an action on a list of products in the wishlist"
msgstr "Utføre en handling på en liste over produkter i ønskelisten"
-#: engine/core/graphene/mutations.py:311
+#: engine/core/graphene/mutations.py:331
msgid "please provide wishlist_uuid value"
msgstr "Vennligst oppgi verdien `wishlist_uuid`."
-#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404
-#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460
-#: engine/core/graphene/mutations.py:504
+#: engine/core/graphene/mutations.py:348 engine/core/graphene/mutations.py:424
+#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480
+#: engine/core/graphene/mutations.py:530
#, python-brace-format
msgid "wishlist {wishlist_uuid} not found"
msgstr "Ønskeliste {wishlist_uuid} ikke funnet!"
-#: engine/core/graphene/mutations.py:382
+#: engine/core/graphene/mutations.py:402
msgid "add a product to the wishlist"
msgstr "Legg til et produkt i bestillingen"
-#: engine/core/graphene/mutations.py:410
+#: engine/core/graphene/mutations.py:430
msgid "remove a product from the wishlist"
msgstr "Fjern et produkt fra bestillingen"
-#: engine/core/graphene/mutations.py:438
+#: engine/core/graphene/mutations.py:458
msgid "remove all products from the wishlist"
msgstr "Fjern et produkt fra bestillingen"
-#: engine/core/graphene/mutations.py:466
+#: engine/core/graphene/mutations.py:486
msgid "buy all products from the wishlist"
msgstr "Fjern et produkt fra bestillingen"
-#: engine/core/graphene/mutations.py:510
+#: engine/core/graphene/mutations.py:536
msgid "buy a product"
msgstr "Kjøp en ordre"
-#: engine/core/graphene/mutations.py:516
+#: engine/core/graphene/mutations.py:543
msgid ""
-"please send the attributes as the string formatted like "
-"attr1=value1,attr2=value2"
+"please send the attributes as the string formatted like attr1=value1,"
+"attr2=value2"
msgstr ""
"Send attributtene som en streng formatert som attr1=verdi1,attr2=verdi2"
-#: engine/core/graphene/mutations.py:549
+#: engine/core/graphene/mutations.py:581
msgid "add or delete a feedback for orderproduct"
msgstr "Legg til eller slett en tilbakemelding for ordreproduktet"
-#: engine/core/graphene/mutations.py:573
+#: engine/core/graphene/mutations.py:607
msgid "action must be either `add` or `remove`"
msgstr "Handlingen må være enten `add` eller `remove`!"
-#: engine/core/graphene/mutations.py:576
+#: engine/core/graphene/mutations.py:610
#, python-brace-format
msgid "order product {order_product_uuid} not found"
msgstr "Bestill produkt {order_product_uuid} ikke funnet!"
-#: engine/core/graphene/mutations.py:582
+#: engine/core/graphene/mutations.py:617
msgid "original address string provided by the user"
msgstr "Opprinnelig adressestreng oppgitt av brukeren"
-#: engine/core/graphene/mutations.py:618 engine/core/models.py:955
-#: engine/core/models.py:968 engine/core/models.py:1383
-#: engine/core/models.py:1412 engine/core/models.py:1437
-#: engine/core/viewsets.py:715
+#: engine/core/graphene/mutations.py:654 engine/core/models.py:978
+#: engine/core/models.py:991 engine/core/models.py:1435
+#: engine/core/models.py:1466 engine/core/models.py:1497
+#: engine/core/viewsets.py:760
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr "{name} eksisterer ikke: {uuid}!"
-#: engine/core/graphene/mutations.py:632
+#: engine/core/graphene/mutations.py:668
msgid "limit must be between 1 and 10"
msgstr "Grensen må være mellom 1 og 10"
-#: engine/core/graphene/mutations.py:681
+#: engine/core/graphene/mutations.py:717
msgid "elasticsearch - works like a charm"
msgstr "ElasticSearch - fungerer som en drøm"
#: engine/core/graphene/object_types.py:82
-#: engine/core/graphene/object_types.py:370
-#: engine/core/graphene/object_types.py:417 engine/core/models.py:772
-#: engine/core/models.py:1250 engine/core/models.py:1897
+#: engine/core/graphene/object_types.py:417
+#: engine/core/graphene/object_types.py:468 engine/core/models.py:795
+#: engine/core/models.py:1289 engine/core/models.py:2021
msgid "attributes"
msgstr "Egenskaper"
@@ -1272,92 +1280,90 @@ msgid "groups of attributes"
msgstr "Grupper av attributter"
#: engine/core/graphene/object_types.py:116
-#: engine/core/graphene/object_types.py:193
-#: engine/core/graphene/object_types.py:223 engine/core/models.py:432
+#: engine/core/graphene/object_types.py:214
+#: engine/core/graphene/object_types.py:252 engine/core/models.py:451
msgid "categories"
msgstr "Kategorier"
-#: engine/core/graphene/object_types.py:124 engine/core/models.py:503
+#: engine/core/graphene/object_types.py:132 engine/core/models.py:522
msgid "brands"
msgstr "Merkevarer"
-#: engine/core/graphene/object_types.py:195
+#: engine/core/graphene/object_types.py:216
msgid "category image url"
msgstr "Kategorier"
-#: engine/core/graphene/object_types.py:196
-#: engine/core/graphene/object_types.py:317 engine/core/models.py:283
+#: engine/core/graphene/object_types.py:217
+#: engine/core/graphene/object_types.py:362 engine/core/models.py:289
msgid "markup percentage"
msgstr "Påslag i prosent"
-#: engine/core/graphene/object_types.py:199
+#: engine/core/graphene/object_types.py:221
msgid "which attributes and values can be used for filtering this category."
msgstr ""
-"Hvilke attributter og verdier som kan brukes til å filtrere denne "
-"kategorien."
+"Hvilke attributter og verdier som kan brukes til å filtrere denne kategorien."
-#: engine/core/graphene/object_types.py:203
-msgid ""
-"minimum and maximum prices for products in this category, if available."
+#: engine/core/graphene/object_types.py:227
+msgid "minimum and maximum prices for products in this category, if available."
msgstr ""
"Minimums- og maksimumspriser for produkter i denne kategorien, hvis "
"tilgjengelig."
-#: engine/core/graphene/object_types.py:205
+#: engine/core/graphene/object_types.py:231
msgid "tags for this category"
msgstr "Tagger for denne kategorien"
-#: engine/core/graphene/object_types.py:206
+#: engine/core/graphene/object_types.py:234
msgid "products in this category"
msgstr "Produkter i denne kategorien"
-#: engine/core/graphene/object_types.py:324 engine/core/models.py:188
+#: engine/core/graphene/object_types.py:369 engine/core/models.py:194
msgid "vendors"
msgstr "Leverandører"
-#: engine/core/graphene/object_types.py:328
+#: engine/core/graphene/object_types.py:373
msgid "Latitude (Y coordinate)"
msgstr "Breddegrad (Y-koordinat)"
-#: engine/core/graphene/object_types.py:329
+#: engine/core/graphene/object_types.py:374
msgid "Longitude (X coordinate)"
msgstr "Lengdegrad (X-koordinat)"
-#: engine/core/graphene/object_types.py:358
+#: engine/core/graphene/object_types.py:403
msgid "comment"
msgstr "Hvordan"
-#: engine/core/graphene/object_types.py:359
-#: engine/core/graphene/object_types.py:483
+#: engine/core/graphene/object_types.py:405
+#: engine/core/graphene/object_types.py:539
msgid "rating value from 1 to 10, inclusive, or 0 if not set."
msgstr "Vurderingsverdi fra 1 til og med 10, eller 0 hvis den ikke er angitt."
-#: engine/core/graphene/object_types.py:366
+#: engine/core/graphene/object_types.py:413
msgid "represents feedback from a user."
msgstr "Representerer tilbakemeldinger fra en bruker."
-#: engine/core/graphene/object_types.py:371
-#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244
+#: engine/core/graphene/object_types.py:418
+#: engine/core/graphene/object_types.py:469 engine/core/models.py:1283
msgid "notifications"
msgstr "Varsler"
-#: engine/core/graphene/object_types.py:372
+#: engine/core/graphene/object_types.py:420
msgid "download url for this order product if applicable"
msgstr "Last ned url for dette bestillingsproduktet, hvis aktuelt"
-#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736
+#: engine/core/graphene/object_types.py:422 engine/core/models.py:1848
msgid "feedback"
msgstr "Tilbakemeldinger"
-#: engine/core/graphene/object_types.py:407
+#: engine/core/graphene/object_types.py:456
msgid "a list of order products in this order"
msgstr "En liste over bestillingsprodukter i denne rekkefølgen"
-#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214
+#: engine/core/graphene/object_types.py:458 engine/core/models.py:1253
msgid "billing address"
msgstr "Faktureringsadresse"
-#: engine/core/graphene/object_types.py:412
+#: engine/core/graphene/object_types.py:462
msgid ""
"shipping address for this order, leave blank if same as billing address or "
"if not applicable"
@@ -1365,53 +1371,53 @@ msgstr ""
"Leveringsadresse for denne bestillingen, la den stå tom hvis den er den "
"samme som faktureringsadressen eller hvis den ikke er relevant"
-#: engine/core/graphene/object_types.py:414
+#: engine/core/graphene/object_types.py:465
msgid "total price of this order"
msgstr "Totalpris for denne bestillingen"
-#: engine/core/graphene/object_types.py:415
+#: engine/core/graphene/object_types.py:466
msgid "total quantity of products in order"
msgstr "Totalt antall produkter i bestillingen"
-#: engine/core/graphene/object_types.py:416
+#: engine/core/graphene/object_types.py:467
msgid "are all products in the order digital"
msgstr "Er alle produktene i bestillingen digitale"
-#: engine/core/graphene/object_types.py:419
+#: engine/core/graphene/object_types.py:471
msgid "transactions for this order"
msgstr "Transaksjoner for denne bestillingen"
-#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278
+#: engine/core/graphene/object_types.py:491 engine/core/models.py:1317
msgid "orders"
msgstr "Bestillinger"
-#: engine/core/graphene/object_types.py:459
+#: engine/core/graphene/object_types.py:512
msgid "image url"
msgstr "Bilde-URL"
-#: engine/core/graphene/object_types.py:466
+#: engine/core/graphene/object_types.py:519
msgid "product's images"
msgstr "Bilder av produktet"
-#: engine/core/graphene/object_types.py:473 engine/core/models.py:431
-#: engine/core/models.py:586
+#: engine/core/graphene/object_types.py:526 engine/core/models.py:450
+#: engine/core/models.py:607
msgid "category"
msgstr "Kategori"
-#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737
+#: engine/core/graphene/object_types.py:528 engine/core/models.py:1849
msgid "feedbacks"
msgstr "Tilbakemeldinger"
-#: engine/core/graphene/object_types.py:476 engine/core/models.py:502
-#: engine/core/models.py:595
+#: engine/core/graphene/object_types.py:529 engine/core/models.py:521
+#: engine/core/models.py:616
msgid "brand"
msgstr "Merkevare"
-#: engine/core/graphene/object_types.py:477 engine/core/models.py:106
+#: engine/core/graphene/object_types.py:531 engine/core/models.py:106
msgid "attribute groups"
msgstr "Attributtgrupper"
-#: engine/core/graphene/object_types.py:478
+#: engine/core/graphene/object_types.py:533
#: engine/core/templates/digital_order_created_email.html:111
#: engine/core/templates/digital_order_delivered_email.html:109
#: engine/core/templates/shipped_order_created_email.html:109
@@ -1419,7 +1425,7 @@ msgstr "Attributtgrupper"
msgid "price"
msgstr "Pris"
-#: engine/core/graphene/object_types.py:479
+#: engine/core/graphene/object_types.py:534
#: engine/core/templates/digital_order_created_email.html:110
#: engine/core/templates/digital_order_delivered_email.html:108
#: engine/core/templates/shipped_order_created_email.html:108
@@ -1427,39 +1433,39 @@ msgstr "Pris"
msgid "quantity"
msgstr "Antall"
-#: engine/core/graphene/object_types.py:480
+#: engine/core/graphene/object_types.py:535
msgid "number of feedbacks"
msgstr "Antall tilbakemeldinger"
-#: engine/core/graphene/object_types.py:481
+#: engine/core/graphene/object_types.py:536
msgid "only available for personal orders"
msgstr "Produkter kun tilgjengelig for personlige bestillinger"
-#: engine/core/graphene/object_types.py:484
+#: engine/core/graphene/object_types.py:541
msgid "discount price"
msgstr "Rabattert pris"
-#: engine/core/graphene/object_types.py:508 engine/core/models.py:658
+#: engine/core/graphene/object_types.py:565 engine/core/models.py:679
msgid "products"
msgstr "Produkter"
-#: engine/core/graphene/object_types.py:611
+#: engine/core/graphene/object_types.py:675
msgid "promocodes"
msgstr "Promokoder"
-#: engine/core/graphene/object_types.py:621
+#: engine/core/graphene/object_types.py:690
msgid "products on sale"
msgstr "Produkter på salg"
-#: engine/core/graphene/object_types.py:628 engine/core/models.py:904
+#: engine/core/graphene/object_types.py:698 engine/core/models.py:927
msgid "promotions"
msgstr "Kampanjer"
-#: engine/core/graphene/object_types.py:632 engine/core/models.py:187
+#: engine/core/graphene/object_types.py:702 engine/core/models.py:193
msgid "vendor"
msgstr "Leverandør"
-#: engine/core/graphene/object_types.py:633 engine/core/models.py:657
+#: engine/core/graphene/object_types.py:703 engine/core/models.py:678
#: engine/core/templates/digital_order_created_email.html:109
#: engine/core/templates/digital_order_delivered_email.html:107
#: engine/core/templates/shipped_order_created_email.html:107
@@ -1467,98 +1473,99 @@ msgstr "Leverandør"
msgid "product"
msgstr "Produkt"
-#: engine/core/graphene/object_types.py:644 engine/core/models.py:927
+#: engine/core/graphene/object_types.py:715 engine/core/models.py:950
msgid "wishlisted products"
msgstr "Produkter på ønskelisten"
-#: engine/core/graphene/object_types.py:650 engine/core/models.py:944
+#: engine/core/graphene/object_types.py:722 engine/core/models.py:967
msgid "wishlists"
msgstr "Ønskelister"
-#: engine/core/graphene/object_types.py:654
+#: engine/core/graphene/object_types.py:727
msgid "tagged products"
msgstr "Merkede produkter"
-#: engine/core/graphene/object_types.py:661 engine/core/models.py:224
-#: engine/core/models.py:601
+#: engine/core/graphene/object_types.py:735 engine/core/models.py:230
+#: engine/core/models.py:622
msgid "product tags"
msgstr "Produktmerker"
-#: engine/core/graphene/object_types.py:665
+#: engine/core/graphene/object_types.py:740
msgid "tagged categories"
msgstr "Merkede kategorier"
-#: engine/core/graphene/object_types.py:672
+#: engine/core/graphene/object_types.py:748
msgid "categories tags"
msgstr "Kategorier' tagger"
-#: engine/core/graphene/object_types.py:676
+#: engine/core/graphene/object_types.py:752
msgid "project name"
msgstr "Prosjektets navn"
-#: engine/core/graphene/object_types.py:677
+#: engine/core/graphene/object_types.py:753
msgid "company name"
msgstr "Selskapets navn"
-#: engine/core/graphene/object_types.py:678
+#: engine/core/graphene/object_types.py:754
msgid "company address"
msgstr "Selskapets adresse"
-#: engine/core/graphene/object_types.py:679
+#: engine/core/graphene/object_types.py:755
msgid "company phone number"
msgstr "Telefonnummer til selskapet"
-#: engine/core/graphene/object_types.py:680
+#: engine/core/graphene/object_types.py:758
msgid "email from, sometimes it must be used instead of host user value"
-msgstr "\"e-post fra\", noen ganger må den brukes i stedet for vertsbrukerverdien"
+msgstr ""
+"\"e-post fra\", noen ganger må den brukes i stedet for vertsbrukerverdien"
-#: engine/core/graphene/object_types.py:681
+#: engine/core/graphene/object_types.py:761
msgid "email host user"
msgstr "E-post vert bruker"
-#: engine/core/graphene/object_types.py:682
+#: engine/core/graphene/object_types.py:762
msgid "maximum amount for payment"
msgstr "Maksimalt beløp for betaling"
-#: engine/core/graphene/object_types.py:683
+#: engine/core/graphene/object_types.py:763
msgid "minimum amount for payment"
msgstr "Minimumsbeløp for betaling"
-#: engine/core/graphene/object_types.py:684
+#: engine/core/graphene/object_types.py:764
msgid "analytics data"
msgstr "Analysedata"
-#: engine/core/graphene/object_types.py:685
+#: engine/core/graphene/object_types.py:765
msgid "advertisement data"
msgstr "Annonsedata"
-#: engine/core/graphene/object_types.py:688
+#: engine/core/graphene/object_types.py:768
msgid "company configuration"
msgstr "Konfigurasjon"
-#: engine/core/graphene/object_types.py:692
+#: engine/core/graphene/object_types.py:772
msgid "language code"
msgstr "Språkkode"
-#: engine/core/graphene/object_types.py:693
+#: engine/core/graphene/object_types.py:773
msgid "language name"
msgstr "Navn på språk"
-#: engine/core/graphene/object_types.py:694
+#: engine/core/graphene/object_types.py:774
msgid "language flag, if exists :)"
msgstr "Språkflagg, hvis det finnes :)"
-#: engine/core/graphene/object_types.py:697
+#: engine/core/graphene/object_types.py:777
msgid "supported languages"
msgstr "Få en liste over språk som støttes"
-#: engine/core/graphene/object_types.py:728
-#: engine/core/graphene/object_types.py:729
-#: engine/core/graphene/object_types.py:730
+#: engine/core/graphene/object_types.py:809
+#: engine/core/graphene/object_types.py:812
+#: engine/core/graphene/object_types.py:815
msgid "products search results"
msgstr "Søkeresultater for produkter"
-#: engine/core/graphene/object_types.py:731
+#: engine/core/graphene/object_types.py:817
msgid "posts search results"
msgstr "Søkeresultater for produkter"
@@ -1569,11 +1576,11 @@ msgid ""
"parent group, forming a hierarchical structure. This can be useful for "
"categorizing and managing attributes more effectively in acomplex system."
msgstr ""
-"Representerer en gruppe attributter, som kan være hierarkiske. Denne klassen"
-" brukes til å administrere og organisere attributtgrupper. En "
-"attributtgruppe kan ha en overordnet gruppe som danner en hierarkisk "
-"struktur. Dette kan være nyttig for å kategorisere og administrere "
-"attributter på en mer effektiv måte i et komplekst system."
+"Representerer en gruppe attributter, som kan være hierarkiske. Denne klassen "
+"brukes til å administrere og organisere attributtgrupper. En attributtgruppe "
+"kan ha en overordnet gruppe som danner en hierarkisk struktur. Dette kan "
+"være nyttig for å kategorisere og administrere attributter på en mer "
+"effektiv måte i et komplekst system."
#: engine/core/models.py:91
msgid "parent of this group"
@@ -1587,7 +1594,7 @@ msgstr "Overordnet attributtgruppe"
msgid "attribute group's name"
msgstr "Attributtgruppens navn"
-#: engine/core/models.py:105 engine/core/models.py:734
+#: engine/core/models.py:105 engine/core/models.py:755
msgid "attribute group"
msgstr "Attributtgruppe"
@@ -1602,57 +1609,57 @@ msgid ""
"use in systems that interact with third-party vendors."
msgstr ""
"Representerer en leverandørenhet som kan lagre informasjon om eksterne "
-"leverandører og deres interaksjonskrav. Vendor-klassen brukes til å definere"
-" og administrere informasjon knyttet til en ekstern leverandør. Den lagrer "
+"leverandører og deres interaksjonskrav. Vendor-klassen brukes til å definere "
+"og administrere informasjon knyttet til en ekstern leverandør. Den lagrer "
"leverandørens navn, autentiseringsdetaljer som kreves for kommunikasjon, og "
"prosentmarkeringen som brukes på produkter som hentes fra leverandøren. "
"Denne modellen inneholder også ytterligere metadata og begrensninger, noe "
"som gjør den egnet for bruk i systemer som samhandler med "
"tredjepartsleverandører."
-#: engine/core/models.py:124
+#: engine/core/models.py:125
msgid "stores credentials and endpoints required for vendor communication"
msgstr ""
"Lagrer legitimasjon og endepunkter som kreves for leverandørens API-"
"kommunikasjon"
-#: engine/core/models.py:125
+#: engine/core/models.py:127
msgid "authentication info"
msgstr "Autentiseringsinformasjon"
-#: engine/core/models.py:130
+#: engine/core/models.py:132
msgid "define the markup for products retrieved from this vendor"
msgstr "Definer påslag for produkter som hentes fra denne leverandøren"
-#: engine/core/models.py:131
+#: engine/core/models.py:133
msgid "vendor markup percentage"
msgstr "Leverandørens påslagsprosent"
-#: engine/core/models.py:135
+#: engine/core/models.py:137
msgid "name of this vendor"
msgstr "Navn på denne leverandøren"
-#: engine/core/models.py:136
+#: engine/core/models.py:138
msgid "vendor name"
msgstr "Leverandørens navn"
-#: engine/core/models.py:147
+#: engine/core/models.py:153
msgid "response file"
msgstr "svarfil"
-#: engine/core/models.py:148
+#: engine/core/models.py:154
msgid "vendor's last processing response"
msgstr "leverandørens siste behandlingssvar"
-#: engine/core/models.py:154
+#: engine/core/models.py:160
msgid "vendor's integration file path"
msgstr "Leverandørens integrasjonsfilbane"
-#: engine/core/models.py:155
+#: engine/core/models.py:161
msgid "integration path"
msgstr "Integreringsvei"
-#: engine/core/models.py:197
+#: engine/core/models.py:203
msgid ""
"Represents a product tag used for classifying or identifying products. The "
"ProductTag class is designed to uniquely identify and classify products "
@@ -1661,33 +1668,33 @@ msgid ""
"metadata customization for administrative purposes."
msgstr ""
"Representerer en produkttagg som brukes til å klassifisere eller "
-"identifisere produkter. ProductTag-klassen er utformet for å identifisere og"
-" klassifisere produkter på en unik måte ved hjelp av en kombinasjon av en "
+"identifisere produkter. ProductTag-klassen er utformet for å identifisere og "
+"klassifisere produkter på en unik måte ved hjelp av en kombinasjon av en "
"intern tagg-identifikator og et brukervennlig visningsnavn. Den støtter "
"operasjoner som eksporteres gjennom mixins, og gir metadatatilpasning for "
"administrative formål."
-#: engine/core/models.py:209 engine/core/models.py:240
+#: engine/core/models.py:215 engine/core/models.py:246
msgid "internal tag identifier for the product tag"
msgstr "Intern tagg-identifikator for produkttaggen"
-#: engine/core/models.py:210 engine/core/models.py:241
+#: engine/core/models.py:216 engine/core/models.py:247
msgid "tag name"
msgstr "Tagg navn"
-#: engine/core/models.py:214 engine/core/models.py:245
+#: engine/core/models.py:220 engine/core/models.py:251
msgid "user-friendly name for the product tag"
msgstr "Brukervennlig navn for produkttaggen"
-#: engine/core/models.py:215 engine/core/models.py:246
+#: engine/core/models.py:221 engine/core/models.py:252
msgid "tag display name"
msgstr "Visningsnavn for taggen"
-#: engine/core/models.py:223
+#: engine/core/models.py:229
msgid "product tag"
msgstr "Produktmerke"
-#: engine/core/models.py:229
+#: engine/core/models.py:235
msgid ""
"Represents a category tag used for products. This class models a category "
"tag that can be used to associate and classify products. It includes "
@@ -1695,18 +1702,18 @@ msgid ""
msgstr ""
"Representerer en kategorikode som brukes for produkter. Denne klassen "
"modellerer en kategorikode som kan brukes til å knytte til og klassifisere "
-"produkter. Den inneholder attributter for en intern tagg-identifikator og et"
-" brukervennlig visningsnavn."
+"produkter. Den inneholder attributter for en intern tagg-identifikator og et "
+"brukervennlig visningsnavn."
-#: engine/core/models.py:254
+#: engine/core/models.py:260
msgid "category tag"
msgstr "kategorimerke"
-#: engine/core/models.py:255 engine/core/models.py:327
+#: engine/core/models.py:261 engine/core/models.py:333
msgid "category tags"
msgstr "kategorikoder"
-#: engine/core/models.py:260
+#: engine/core/models.py:266
msgid ""
"Represents a category entity to organize and group related items in a "
"hierarchical structure. Categories may have hierarchical relationships with "
@@ -1719,8 +1726,8 @@ msgid ""
"priority."
msgstr ""
"Representerer en kategorienhet for å organisere og gruppere relaterte "
-"elementer i en hierarkisk struktur. Kategorier kan ha hierarkiske relasjoner"
-" med andre kategorier, noe som støtter foreldre-barn-relasjoner. Klassen "
+"elementer i en hierarkisk struktur. Kategorier kan ha hierarkiske relasjoner "
+"med andre kategorier, noe som støtter foreldre-barn-relasjoner. Klassen "
"inneholder felt for metadata og visuell representasjon, som danner "
"grunnlaget for kategorirelaterte funksjoner. Denne klassen brukes vanligvis "
"til å definere og administrere produktkategorier eller andre lignende "
@@ -1728,57 +1735,56 @@ msgstr ""
"spesifisere navn, beskrivelse og hierarki for kategoriene, samt tildele "
"attributter som bilder, tagger eller prioritet."
-#: engine/core/models.py:274
+#: engine/core/models.py:280
msgid "upload an image representing this category"
msgstr "Last opp et bilde som representerer denne kategorien"
-#: engine/core/models.py:277
+#: engine/core/models.py:283
msgid "category image"
msgstr "Kategori bilde"
-#: engine/core/models.py:282
+#: engine/core/models.py:288
msgid "define a markup percentage for products in this category"
msgstr "Definer en påslagsprosent for produkter i denne kategorien"
-#: engine/core/models.py:291
+#: engine/core/models.py:297
msgid "parent of this category to form a hierarchical structure"
msgstr "Overordnet til denne kategorien for å danne en hierarkisk struktur"
-#: engine/core/models.py:292
+#: engine/core/models.py:298
msgid "parent category"
msgstr "Overordnet kategori"
-#: engine/core/models.py:297
+#: engine/core/models.py:303
msgid "category name"
msgstr "Navn på kategori"
-#: engine/core/models.py:298
+#: engine/core/models.py:304
msgid "provide a name for this category"
msgstr "Oppgi et navn for denne kategorien"
-#: engine/core/models.py:305
+#: engine/core/models.py:311
msgid "add a detailed description for this category"
msgstr "Legg til en detaljert beskrivelse for denne kategorien"
-#: engine/core/models.py:306
+#: engine/core/models.py:312
msgid "category description"
msgstr "Beskrivelse av kategori"
-#: engine/core/models.py:326
+#: engine/core/models.py:332
msgid "tags that help describe or group this category"
msgstr "tagger som bidrar til å beskrive eller gruppere denne kategorien"
-#: engine/core/models.py:333 engine/core/models.py:495
+#: engine/core/models.py:339 engine/core/models.py:514
msgid "priority"
msgstr "Prioritet"
-#: engine/core/models.py:438
+#: engine/core/models.py:457
msgid ""
"Represents a Brand object in the system. This class handles information and "
"attributes related to a brand, including its name, logos, description, "
"associated categories, a unique slug, and priority order. It allows for the "
-"organization and representation of brand-related data within the "
-"application."
+"organization and representation of brand-related data within the application."
msgstr ""
"Representerer et merkevareobjekt i systemet. Denne klassen håndterer "
"informasjon og attributter knyttet til et merke, inkludert navn, logoer, "
@@ -1786,128 +1792,128 @@ msgstr ""
"prioriteringsrekkefølge. Den gjør det mulig å organisere og representere "
"merkerelaterte data i applikasjonen."
-#: engine/core/models.py:448
+#: engine/core/models.py:467
msgid "name of this brand"
msgstr "Navnet på dette merket"
-#: engine/core/models.py:449
+#: engine/core/models.py:468
msgid "brand name"
msgstr "Merkenavn"
-#: engine/core/models.py:456
+#: engine/core/models.py:475
msgid "upload a logo representing this brand"
msgstr "Last opp en logo som representerer dette varemerket"
-#: engine/core/models.py:458
+#: engine/core/models.py:477
msgid "brand small image"
msgstr "Merkevare lite image"
-#: engine/core/models.py:464
+#: engine/core/models.py:483
msgid "upload a big logo representing this brand"
msgstr "Last opp en stor logo som representerer dette varemerket"
-#: engine/core/models.py:466
+#: engine/core/models.py:485
msgid "brand big image"
msgstr "Merkevare med stort image"
-#: engine/core/models.py:471
+#: engine/core/models.py:490
msgid "add a detailed description of the brand"
msgstr "Legg til en detaljert beskrivelse av merket"
-#: engine/core/models.py:472
+#: engine/core/models.py:491
msgid "brand description"
msgstr "Varemerkebeskrivelse"
-#: engine/core/models.py:477
+#: engine/core/models.py:496
msgid "optional categories that this brand is associated with"
msgstr "Valgfrie kategorier som dette merket er assosiert med"
-#: engine/core/models.py:478
+#: engine/core/models.py:497
msgid "associated categories"
msgstr "Kategorier"
-#: engine/core/models.py:508
+#: engine/core/models.py:527
msgid ""
-"Represents the stock of a product managed in the system. This class provides"
-" details about the relationship between vendors, products, and their stock "
+"Represents the stock of a product managed in the system. This class provides "
+"details about the relationship between vendors, products, and their stock "
"information, as well as inventory-related properties like price, purchase "
"price, quantity, SKU, and digital assets. It is part of the inventory "
"management system to allow tracking and evaluation of products available "
"from various vendors."
msgstr ""
-"Representerer lagerbeholdningen til et produkt som administreres i systemet."
-" Denne klassen gir informasjon om forholdet mellom leverandører, produkter "
-"og deres lagerinformasjon, samt lagerrelaterte egenskaper som pris, "
+"Representerer lagerbeholdningen til et produkt som administreres i systemet. "
+"Denne klassen gir informasjon om forholdet mellom leverandører, produkter og "
+"deres lagerinformasjon, samt lagerrelaterte egenskaper som pris, "
"innkjøpspris, antall, SKU og digitale eiendeler. Den er en del av "
"lagerstyringssystemet for å muliggjøre sporing og evaluering av produkter "
"som er tilgjengelige fra ulike leverandører."
-#: engine/core/models.py:520
+#: engine/core/models.py:539
msgid "the vendor supplying this product stock"
msgstr "Leverandøren som leverer dette produktet lagerfører"
-#: engine/core/models.py:521
+#: engine/core/models.py:540
msgid "associated vendor"
msgstr "Tilknyttet leverandør"
-#: engine/core/models.py:525
+#: engine/core/models.py:544
msgid "final price to the customer after markups"
msgstr "Sluttpris til kunden etter påslag"
-#: engine/core/models.py:526
+#: engine/core/models.py:545
msgid "selling price"
msgstr "Salgspris"
-#: engine/core/models.py:531
+#: engine/core/models.py:550
msgid "the product associated with this stock entry"
msgstr "Produktet som er knyttet til denne lagerposten"
-#: engine/core/models.py:532 engine/core/models.py:797
-#: engine/core/models.py:843 engine/core/models.py:1792
+#: engine/core/models.py:551 engine/core/models.py:820
+#: engine/core/models.py:866 engine/core/models.py:1904
msgid "associated product"
msgstr "Tilhørende produkt"
-#: engine/core/models.py:539
+#: engine/core/models.py:558
msgid "the price paid to the vendor for this product"
msgstr "Prisen som er betalt til leverandøren for dette produktet"
-#: engine/core/models.py:540
+#: engine/core/models.py:559
msgid "vendor purchase price"
msgstr "Leverandørens innkjøpspris"
-#: engine/core/models.py:544
+#: engine/core/models.py:563
msgid "available quantity of the product in stock"
msgstr "Tilgjengelig mengde av produktet på lager"
-#: engine/core/models.py:545
+#: engine/core/models.py:564
msgid "quantity in stock"
msgstr "Antall på lager"
-#: engine/core/models.py:549
+#: engine/core/models.py:568
msgid "vendor-assigned SKU for identifying the product"
msgstr "Leverandørens SKU for identifisering av produktet"
-#: engine/core/models.py:550
+#: engine/core/models.py:569
msgid "vendor sku"
msgstr "Leverandørens SKU"
-#: engine/core/models.py:556
+#: engine/core/models.py:575
msgid "digital file associated with this stock if applicable"
msgstr "Digital fil knyttet til denne aksjen, hvis aktuelt"
-#: engine/core/models.py:557
+#: engine/core/models.py:576
msgid "digital file"
msgstr "Digital fil"
-#: engine/core/models.py:560
+#: engine/core/models.py:580
msgid "system attributes"
msgstr "Systemattributter"
-#: engine/core/models.py:567
+#: engine/core/models.py:588
msgid "stock entries"
msgstr "Lageroppføringer"
-#: engine/core/models.py:572
+#: engine/core/models.py:593
msgid ""
"Represents a product with attributes such as category, brand, tags, digital "
"status, name, description, part number, and slug. Provides related utility "
@@ -1928,61 +1934,61 @@ msgstr ""
"ytelsen. Den brukes til å definere og manipulere produktdata og tilhørende "
"informasjon i en applikasjon."
-#: engine/core/models.py:585
+#: engine/core/models.py:606
msgid "category this product belongs to"
msgstr "Kategori dette produktet tilhører"
-#: engine/core/models.py:594
+#: engine/core/models.py:615
msgid "optionally associate this product with a brand"
msgstr "Du kan eventuelt knytte dette produktet til et varemerke"
-#: engine/core/models.py:600
+#: engine/core/models.py:621
msgid "tags that help describe or group this product"
msgstr "Tagger som bidrar til å beskrive eller gruppere dette produktet"
-#: engine/core/models.py:605
+#: engine/core/models.py:626
msgid "indicates whether this product is digitally delivered"
msgstr "Angir om dette produktet leveres digitalt"
-#: engine/core/models.py:606
+#: engine/core/models.py:627
msgid "is product digital"
msgstr "Er produktet digitalt"
-#: engine/core/models.py:612
+#: engine/core/models.py:633
msgid "provide a clear identifying name for the product"
msgstr "Gi produktet et tydelig navn som identifiserer det"
-#: engine/core/models.py:613
+#: engine/core/models.py:634
msgid "product name"
msgstr "Produktnavn"
-#: engine/core/models.py:619 engine/core/models.py:892
+#: engine/core/models.py:640 engine/core/models.py:915
msgid "add a detailed description of the product"
msgstr "Legg til en detaljert beskrivelse av produktet"
-#: engine/core/models.py:620
+#: engine/core/models.py:641
msgid "product description"
msgstr "Produktbeskrivelse"
-#: engine/core/models.py:627
+#: engine/core/models.py:648
msgid "part number for this product"
msgstr "Delenummer for dette produktet"
-#: engine/core/models.py:628
+#: engine/core/models.py:649
msgid "part number"
msgstr "Delenummer"
-#: engine/core/models.py:647
+#: engine/core/models.py:668
msgid "stock keeping unit for this product"
msgstr "Lagerholdsenhet for dette produktet"
-#: engine/core/models.py:720
+#: engine/core/models.py:741
msgid ""
"Represents an attribute in the system. This class is used to define and "
"manage attributes, which are customizable pieces of data that can be "
"associated with other entities. Attributes have associated categories, "
-"groups, value types, and names. The model supports multiple types of values,"
-" including string, integer, float, boolean, array, and object. This allows "
+"groups, value types, and names. The model supports multiple types of values, "
+"including string, integer, float, boolean, array, and object. This allows "
"for dynamic and flexible data structuring."
msgstr ""
"Representerer et attributt i systemet. Denne klassen brukes til å definere "
@@ -1992,311 +1998,310 @@ msgstr ""
"float, boolsk, matrise og objekt. Dette gir mulighet for dynamisk og "
"fleksibel datastrukturering."
-#: engine/core/models.py:733
+#: engine/core/models.py:754
msgid "group of this attribute"
msgstr "Gruppe av dette attributtet"
-#: engine/core/models.py:739
+#: engine/core/models.py:760
msgid "string"
msgstr "Streng"
-#: engine/core/models.py:740
+#: engine/core/models.py:761
msgid "integer"
msgstr "Heltall"
-#: engine/core/models.py:741
+#: engine/core/models.py:762
msgid "float"
msgstr "Flyter"
-#: engine/core/models.py:742
+#: engine/core/models.py:763
msgid "boolean"
msgstr "Boolsk"
-#: engine/core/models.py:743
+#: engine/core/models.py:764
msgid "array"
msgstr "Array"
-#: engine/core/models.py:744
+#: engine/core/models.py:765
msgid "object"
msgstr "Objekt"
-#: engine/core/models.py:746
+#: engine/core/models.py:767
msgid "type of the attribute's value"
msgstr "Type av attributtets verdi"
-#: engine/core/models.py:747
+#: engine/core/models.py:768
msgid "value type"
msgstr "Verditype"
-#: engine/core/models.py:752
+#: engine/core/models.py:773
msgid "name of this attribute"
msgstr "Navn på dette attributtet"
-#: engine/core/models.py:753
+#: engine/core/models.py:774
msgid "attribute's name"
msgstr "Attributtets navn"
-#: engine/core/models.py:758
+#: engine/core/models.py:779
msgid "is filterable"
msgstr "er filtrerbar"
-#: engine/core/models.py:759
+#: engine/core/models.py:781
msgid "designates whether this attribute can be used for filtering or not"
msgstr ""
-"Hvilke attributter og verdier som kan brukes til å filtrere denne "
-"kategorien."
+"Hvilke attributter og verdier som kan brukes til å filtrere denne kategorien."
-#: engine/core/models.py:771 engine/core/models.py:789
+#: engine/core/models.py:794 engine/core/models.py:812
#: engine/core/templates/digital_order_delivered_email.html:134
msgid "attribute"
msgstr "Attributt"
-#: engine/core/models.py:777
+#: engine/core/models.py:800
msgid ""
-"Represents a specific value for an attribute that is linked to a product. It"
-" links the 'attribute' to a unique 'value', allowing better organization and"
-" dynamic representation of product characteristics."
+"Represents a specific value for an attribute that is linked to a product. It "
+"links the 'attribute' to a unique 'value', allowing better organization and "
+"dynamic representation of product characteristics."
msgstr ""
"Representerer en spesifikk verdi for et attributt som er knyttet til et "
"produkt. Den knytter \"attributtet\" til en unik \"verdi\", noe som gir "
"bedre organisering og dynamisk representasjon av produktegenskaper."
-#: engine/core/models.py:788
+#: engine/core/models.py:811
msgid "attribute of this value"
msgstr "Attributt for denne verdien"
-#: engine/core/models.py:796
+#: engine/core/models.py:819
msgid "the specific product associated with this attribute's value"
msgstr "Det spesifikke produktet som er knyttet til dette attributtets verdi"
-#: engine/core/models.py:802
+#: engine/core/models.py:825
msgid "the specific value for this attribute"
msgstr "Den spesifikke verdien for dette attributtet"
-#: engine/core/models.py:815
+#: engine/core/models.py:838
msgid ""
"Represents a product image associated with a product in the system. This "
-"class is designed to manage images for products, including functionality for"
-" uploading image files, associating them with specific products, and "
+"class is designed to manage images for products, including functionality for "
+"uploading image files, associating them with specific products, and "
"determining their display order. It also includes an accessibility feature "
"with alternative text for the images."
msgstr ""
"Representerer et produktbilde som er knyttet til et produkt i systemet. "
-"Denne klassen er utviklet for å administrere bilder for produkter, inkludert"
-" funksjonalitet for å laste opp bildefiler, knytte dem til spesifikke "
+"Denne klassen er utviklet for å administrere bilder for produkter, inkludert "
+"funksjonalitet for å laste opp bildefiler, knytte dem til spesifikke "
"produkter og bestemme visningsrekkefølgen. Den inneholder også en "
"tilgjengelighetsfunksjon med alternativ tekst for bildene."
-#: engine/core/models.py:826
+#: engine/core/models.py:849
msgid "provide alternative text for the image for accessibility"
msgstr "Gi alternativ tekst til bildet for tilgjengelighet"
-#: engine/core/models.py:827
+#: engine/core/models.py:850
msgid "image alt text"
msgstr "Alt-tekst til bilder"
-#: engine/core/models.py:830
+#: engine/core/models.py:853
msgid "upload the image file for this product"
msgstr "Last opp bildefilen for dette produktet"
-#: engine/core/models.py:831 engine/core/models.py:862
+#: engine/core/models.py:854 engine/core/models.py:885
msgid "product image"
msgstr "Produktbilde"
-#: engine/core/models.py:836
+#: engine/core/models.py:859
msgid "determines the order in which images are displayed"
msgstr "Bestemmer rekkefølgen bildene skal vises i"
-#: engine/core/models.py:837
+#: engine/core/models.py:860
msgid "display priority"
msgstr "Prioritet på skjermen"
-#: engine/core/models.py:842
+#: engine/core/models.py:865
msgid "the product that this image represents"
msgstr "Produktet som dette bildet representerer"
-#: engine/core/models.py:863
+#: engine/core/models.py:886
msgid "product images"
msgstr "Produktbilder"
-#: engine/core/models.py:868
+#: engine/core/models.py:891
msgid ""
"Represents a promotional campaign for products with a discount. This class "
"is used to define and manage promotional campaigns that offer a percentage-"
"based discount for products. The class includes attributes for setting the "
"discount rate, providing details about the promotion, and linking it to the "
-"applicable products. It integrates with the product catalog to determine the"
-" affected items in the campaign."
+"applicable products. It integrates with the product catalog to determine the "
+"affected items in the campaign."
msgstr ""
-"Representerer en kampanje for produkter med rabatt. Denne klassen brukes til"
-" å definere og administrere kampanjekampanjer som tilbyr en prosentbasert "
+"Representerer en kampanje for produkter med rabatt. Denne klassen brukes til "
+"å definere og administrere kampanjekampanjer som tilbyr en prosentbasert "
"rabatt for produkter. Klassen inneholder attributter for å angi "
"rabattsatsen, gi detaljer om kampanjen og knytte den til de aktuelle "
"produktene. Den integreres med produktkatalogen for å finne de berørte "
"varene i kampanjen."
-#: engine/core/models.py:880
+#: engine/core/models.py:903
msgid "percentage discount for the selected products"
msgstr "Prosentvis rabatt for de valgte produktene"
-#: engine/core/models.py:881
+#: engine/core/models.py:904
msgid "discount percentage"
msgstr "Rabattprosent"
-#: engine/core/models.py:886
+#: engine/core/models.py:909
msgid "provide a unique name for this promotion"
msgstr "Oppgi et unikt navn for denne kampanjen"
-#: engine/core/models.py:887
+#: engine/core/models.py:910
msgid "promotion name"
msgstr "Navn på kampanjen"
-#: engine/core/models.py:893
+#: engine/core/models.py:916
msgid "promotion description"
msgstr "Beskrivelse av kampanjen"
-#: engine/core/models.py:898
+#: engine/core/models.py:921
msgid "select which products are included in this promotion"
msgstr "Velg hvilke produkter som er inkludert i denne kampanjen"
-#: engine/core/models.py:899
+#: engine/core/models.py:922
msgid "included products"
msgstr "Inkluderte produkter"
-#: engine/core/models.py:903
+#: engine/core/models.py:926
msgid "promotion"
msgstr "Markedsføring"
-#: engine/core/models.py:914
+#: engine/core/models.py:937
msgid ""
"Represents a user's wishlist for storing and managing desired products. The "
"class provides functionality to manage a collection of products, supporting "
"operations such as adding and removing products, as well as supporting "
"operations for adding and removing multiple products at once."
msgstr ""
-"Representerer en brukers ønskeliste for lagring og administrasjon av ønskede"
-" produkter. Klassen tilbyr funksjonalitet for å administrere en samling "
+"Representerer en brukers ønskeliste for lagring og administrasjon av ønskede "
+"produkter. Klassen tilbyr funksjonalitet for å administrere en samling "
"produkter, og støtter operasjoner som å legge til og fjerne produkter, samt "
"operasjoner for å legge til og fjerne flere produkter samtidig."
-#: engine/core/models.py:926
+#: engine/core/models.py:949
msgid "products that the user has marked as wanted"
msgstr "Produkter som brukeren har merket som ønsket"
-#: engine/core/models.py:934
+#: engine/core/models.py:957
msgid "user who owns this wishlist"
msgstr "Bruker som eier denne ønskelisten"
-#: engine/core/models.py:935
+#: engine/core/models.py:958
msgid "wishlist owner"
msgstr "Ønskelistens eier"
-#: engine/core/models.py:943
+#: engine/core/models.py:966
msgid "wishlist"
msgstr "Ønskeliste"
-#: engine/core/models.py:985
+#: engine/core/models.py:1008
msgid ""
"Represents a documentary record tied to a product. This class is used to "
"store information about documentaries related to specific products, "
"including file uploads and their metadata. It contains methods and "
"properties to handle the file type and storage path for the documentary "
-"files. It extends functionality from specific mixins and provides additional"
-" custom features."
+"files. It extends functionality from specific mixins and provides additional "
+"custom features."
msgstr ""
-"Representerer en dokumentarpost knyttet til et produkt. Denne klassen brukes"
-" til å lagre informasjon om dokumentarer knyttet til bestemte produkter, "
+"Representerer en dokumentarpost knyttet til et produkt. Denne klassen brukes "
+"til å lagre informasjon om dokumentarer knyttet til bestemte produkter, "
"inkludert filopplastinger og metadata for disse. Den inneholder metoder og "
"egenskaper for å håndtere filtype og lagringsbane for dokumentarfilene. Den "
"utvider funksjonaliteten fra spesifikke mixins og tilbyr flere tilpassede "
"funksjoner."
-#: engine/core/models.py:998
+#: engine/core/models.py:1023
msgid "documentary"
msgstr "Dokumentarfilm"
-#: engine/core/models.py:999
+#: engine/core/models.py:1024
msgid "documentaries"
msgstr "Dokumentarfilmer"
-#: engine/core/models.py:1009
+#: engine/core/models.py:1034
msgid "unresolved"
msgstr "Uavklart"
-#: engine/core/models.py:1014
+#: engine/core/models.py:1039
msgid ""
-"Represents an address entity that includes location details and associations"
-" with a user. Provides functionality for geographic and address data "
-"storage, as well as integration with geocoding services. This class is "
-"designed to store detailed address information including components like "
-"street, city, region, country, and geolocation (longitude and latitude). It "
-"supports integration with geocoding APIs, enabling the storage of raw API "
-"responses for further processing or inspection. The class also allows "
-"associating an address with a user, facilitating personalized data handling."
+"Represents an address entity that includes location details and associations "
+"with a user. Provides functionality for geographic and address data storage, "
+"as well as integration with geocoding services. This class is designed to "
+"store detailed address information including components like street, city, "
+"region, country, and geolocation (longitude and latitude). It supports "
+"integration with geocoding APIs, enabling the storage of raw API responses "
+"for further processing or inspection. The class also allows associating an "
+"address with a user, facilitating personalized data handling."
msgstr ""
"Representerer en adresseenhet som inneholder stedsdetaljer og assosiasjoner "
"til en bruker. Tilbyr funksjonalitet for lagring av geografiske data og "
"adressedata, samt integrering med geokodingstjenester. Denne klassen er "
-"utformet for å lagre detaljert adresseinformasjon, inkludert komponenter som"
-" gate, by, region, land og geolokalisering (lengde- og breddegrad). Den "
+"utformet for å lagre detaljert adresseinformasjon, inkludert komponenter som "
+"gate, by, region, land og geolokalisering (lengde- og breddegrad). Den "
"støtter integrasjon med API-er for geokoding, og gjør det mulig å lagre rå "
-"API-svar for videre behandling eller inspeksjon. Klassen gjør det også mulig"
-" å knytte en adresse til en bruker, noe som gjør det enklere å tilpasse "
+"API-svar for videre behandling eller inspeksjon. Klassen gjør det også mulig "
+"å knytte en adresse til en bruker, noe som gjør det enklere å tilpasse "
"datahåndteringen."
-#: engine/core/models.py:1029
+#: engine/core/models.py:1054
msgid "address line for the customer"
msgstr "Adresselinje for kunden"
-#: engine/core/models.py:1030
+#: engine/core/models.py:1055
msgid "address line"
msgstr "Adresselinje"
-#: engine/core/models.py:1032
+#: engine/core/models.py:1057
msgid "street"
msgstr "Gate"
-#: engine/core/models.py:1033
+#: engine/core/models.py:1058
msgid "district"
msgstr "Distrikt"
-#: engine/core/models.py:1034
+#: engine/core/models.py:1059
msgid "city"
msgstr "By"
-#: engine/core/models.py:1035
+#: engine/core/models.py:1060
msgid "region"
msgstr "Region"
-#: engine/core/models.py:1036
+#: engine/core/models.py:1061
msgid "postal code"
msgstr "Postnummer"
-#: engine/core/models.py:1037
+#: engine/core/models.py:1062
msgid "country"
msgstr "Land"
-#: engine/core/models.py:1044
+#: engine/core/models.py:1069
msgid "geolocation point: (longitude, latitude)"
msgstr "Geolokaliseringspunkt(lengdegrad, breddegrad)"
-#: engine/core/models.py:1047
+#: engine/core/models.py:1075
msgid "full JSON response from geocoder for this address"
msgstr "Fullstendig JSON-svar fra geokoderen for denne adressen"
-#: engine/core/models.py:1052
+#: engine/core/models.py:1081
msgid "stored JSON response from the geocoding service"
msgstr "Lagret JSON-svar fra geokodingstjenesten"
-#: engine/core/models.py:1060
+#: engine/core/models.py:1091
msgid "address"
msgstr "Adresse"
-#: engine/core/models.py:1061
+#: engine/core/models.py:1092
msgid "addresses"
msgstr "Adresser"
-#: engine/core/models.py:1073
+#: engine/core/models.py:1104
msgid ""
"Represents a promotional code that can be used for discounts, managing its "
"validity, type of discount, and application. The PromoCode class stores "
@@ -2307,79 +2312,78 @@ msgid ""
msgstr ""
"Representerer en kampanjekode som kan brukes til rabatter, og styrer dens "
"gyldighet, rabattype og anvendelse. PromoCode-klassen lagrer informasjon om "
-"en kampanjekode, inkludert dens unike identifikator, rabattegenskaper (beløp"
-" eller prosent), gyldighetsperiode, tilknyttet bruker (hvis noen) og status "
+"en kampanjekode, inkludert dens unike identifikator, rabattegenskaper (beløp "
+"eller prosent), gyldighetsperiode, tilknyttet bruker (hvis noen) og status "
"for bruken av den. Den inneholder funksjonalitet for å validere og bruke "
-"kampanjekoden på en bestilling, samtidig som den sikrer at begrensningene er"
-" oppfylt."
+"kampanjekoden på en bestilling, samtidig som den sikrer at begrensningene er "
+"oppfylt."
-#: engine/core/models.py:1087
+#: engine/core/models.py:1118
msgid "unique code used by a user to redeem a discount"
msgstr "Unik kode som brukes av en bruker for å løse inn en rabatt"
-#: engine/core/models.py:1088
+#: engine/core/models.py:1119
msgid "promo code identifier"
msgstr "Kampanjekode-identifikator"
-#: engine/core/models.py:1095
+#: engine/core/models.py:1126
msgid "fixed discount amount applied if percent is not used"
msgstr "Fast rabattbeløp som brukes hvis prosent ikke brukes"
-#: engine/core/models.py:1096
+#: engine/core/models.py:1127
msgid "fixed discount amount"
msgstr "Fast rabattbeløp"
-#: engine/core/models.py:1102
+#: engine/core/models.py:1133
msgid "percentage discount applied if fixed amount is not used"
msgstr "Prosentvis rabatt hvis fast beløp ikke brukes"
-#: engine/core/models.py:1103
+#: engine/core/models.py:1134
msgid "percentage discount"
msgstr "Prosentvis rabatt"
-#: engine/core/models.py:1108
+#: engine/core/models.py:1139
msgid "timestamp when the promocode expires"
msgstr "Tidsstempel for når kampanjekoden utløper"
-#: engine/core/models.py:1109
+#: engine/core/models.py:1140
msgid "end validity time"
msgstr "Slutt gyldighetstid"
-#: engine/core/models.py:1114
+#: engine/core/models.py:1145
msgid "timestamp from which this promocode is valid"
msgstr "Tidsstempel som denne kampanjekoden er gyldig fra"
-#: engine/core/models.py:1115
+#: engine/core/models.py:1146
msgid "start validity time"
msgstr "Start gyldighetstid"
-#: engine/core/models.py:1120
+#: engine/core/models.py:1151
msgid "timestamp when the promocode was used, blank if not used yet"
msgstr ""
-"Tidsstempel for når kampanjekoden ble brukt, tomt hvis den ikke er brukt "
-"ennå"
+"Tidsstempel for når kampanjekoden ble brukt, tomt hvis den ikke er brukt ennå"
-#: engine/core/models.py:1121
+#: engine/core/models.py:1152
msgid "usage timestamp"
msgstr "Tidsstempel for bruk"
-#: engine/core/models.py:1126
+#: engine/core/models.py:1157
msgid "user assigned to this promocode if applicable"
msgstr "Bruker som er tilordnet denne kampanjekoden, hvis aktuelt"
-#: engine/core/models.py:1127
+#: engine/core/models.py:1158
msgid "assigned user"
msgstr "Tilordnet bruker"
-#: engine/core/models.py:1134
+#: engine/core/models.py:1165
msgid "promo code"
msgstr "Kampanjekode"
-#: engine/core/models.py:1135
+#: engine/core/models.py:1166
msgid "promo codes"
msgstr "Kampanjekoder"
-#: engine/core/models.py:1150
+#: engine/core/models.py:1182
msgid ""
"only one type of discount should be defined (amount or percent), but not "
"both or neither."
@@ -2387,167 +2391,167 @@ msgstr ""
"Bare én type rabatt skal defineres (beløp eller prosent), men ikke begge "
"eller ingen av delene."
-#: engine/core/models.py:1171
+#: engine/core/models.py:1204
msgid "promocode already used"
msgstr "Promokoden har allerede blitt brukt"
-#: engine/core/models.py:1187
+#: engine/core/models.py:1226
#, python-brace-format
msgid "invalid discount type for promocode {self.uuid}"
msgstr "Ugyldig rabattype for kampanjekode {self.uuid}!"
-#: engine/core/models.py:1196
+#: engine/core/models.py:1235
msgid ""
"Represents an order placed by a user. This class models an order within the "
"application, including its various attributes such as billing and shipping "
-"information, status, associated user, notifications, and related operations."
-" Orders can have associated products, promotions can be applied, addresses "
+"information, status, associated user, notifications, and related operations. "
+"Orders can have associated products, promotions can be applied, addresses "
"set, and shipping or billing details updated. Equally, functionality "
"supports managing the products in the order lifecycle."
msgstr ""
"Representerer en bestilling som er lagt inn av en bruker. Denne klassen "
"modellerer en bestilling i applikasjonen, inkludert ulike attributter som "
-"fakturerings- og leveringsinformasjon, status, tilknyttet bruker, varsler og"
-" relaterte operasjoner. Bestillinger kan ha tilknyttede produkter, kampanjer"
-" kan brukes, adresser kan angis, og frakt- eller faktureringsopplysninger "
-"kan oppdateres. På samme måte støtter funksjonaliteten håndtering av "
-"produktene i bestillingens livssyklus."
+"fakturerings- og leveringsinformasjon, status, tilknyttet bruker, varsler og "
+"relaterte operasjoner. Bestillinger kan ha tilknyttede produkter, kampanjer "
+"kan brukes, adresser kan angis, og frakt- eller faktureringsopplysninger kan "
+"oppdateres. På samme måte støtter funksjonaliteten håndtering av produktene "
+"i bestillingens livssyklus."
-#: engine/core/models.py:1213
+#: engine/core/models.py:1252
msgid "the billing address used for this order"
msgstr "Faktureringsadressen som brukes for denne bestillingen"
-#: engine/core/models.py:1221
+#: engine/core/models.py:1260
msgid "optional promo code applied to this order"
msgstr "Valgfri kampanjekode brukt på denne bestillingen"
-#: engine/core/models.py:1222
+#: engine/core/models.py:1261
msgid "applied promo code"
msgstr "Anvendt kampanjekode"
-#: engine/core/models.py:1230
+#: engine/core/models.py:1269
msgid "the shipping address used for this order"
msgstr "Leveringsadressen som brukes for denne bestillingen"
-#: engine/core/models.py:1231
+#: engine/core/models.py:1270
msgid "shipping address"
msgstr "Leveringsadresse"
-#: engine/core/models.py:1237
+#: engine/core/models.py:1276
msgid "current status of the order in its lifecycle"
msgstr "Ordrens nåværende status i livssyklusen"
-#: engine/core/models.py:1238
+#: engine/core/models.py:1277
msgid "order status"
msgstr "Order status"
-#: engine/core/models.py:1243 engine/core/models.py:1769
+#: engine/core/models.py:1282 engine/core/models.py:1881
msgid "json structure of notifications to display to users"
msgstr ""
"JSON-struktur for varsler som skal vises til brukere, i admin-grensesnittet "
"brukes tabellvisningen"
-#: engine/core/models.py:1249
+#: engine/core/models.py:1288
msgid "json representation of order attributes for this order"
msgstr "JSON-representasjon av ordreattributter for denne ordren"
-#: engine/core/models.py:1255
+#: engine/core/models.py:1294
msgid "the user who placed the order"
msgstr "Brukeren som har lagt inn bestillingen"
-#: engine/core/models.py:1256
+#: engine/core/models.py:1295
msgid "user"
msgstr "Bruker"
-#: engine/core/models.py:1262
+#: engine/core/models.py:1301
msgid "the timestamp when the order was finalized"
msgstr "Tidsstempel for når bestillingen ble fullført"
-#: engine/core/models.py:1263
+#: engine/core/models.py:1302
msgid "buy time"
msgstr "Kjøp tid"
-#: engine/core/models.py:1270
+#: engine/core/models.py:1309
msgid "a human-readable identifier for the order"
msgstr "En menneskelig lesbar identifikator for bestillingen"
-#: engine/core/models.py:1271
+#: engine/core/models.py:1310
msgid "human readable id"
msgstr "ID som kan leses av mennesker"
-#: engine/core/models.py:1277
+#: engine/core/models.py:1316
msgid "order"
msgstr "Bestilling"
-#: engine/core/models.py:1319
+#: engine/core/models.py:1363
msgid "a user must have only one pending order at a time"
msgstr "En bruker kan bare ha én ventende ordre om gangen!"
-#: engine/core/models.py:1351
+#: engine/core/models.py:1396
msgid "you cannot add products to an order that is not a pending one"
msgstr ""
"Du kan ikke legge til produkter i en bestilling som ikke er en pågående "
"bestilling"
-#: engine/core/models.py:1356
+#: engine/core/models.py:1402
msgid "you cannot add inactive products to order"
msgstr "Du kan ikke legge til inaktive produkter i bestillingen"
-#: engine/core/models.py:1373
+#: engine/core/models.py:1424
msgid "you cannot add more products than available in stock"
msgstr ""
"Du kan ikke legge til flere produkter enn det som er tilgjengelig på lager"
-#: engine/core/models.py:1395 engine/core/models.py:1420
-#: engine/core/models.py:1428
+#: engine/core/models.py:1448 engine/core/models.py:1477
+#: engine/core/models.py:1487
msgid "you cannot remove products from an order that is not a pending one"
msgstr ""
"Du kan ikke fjerne produkter fra en bestilling som ikke er en pågående "
"bestilling"
-#: engine/core/models.py:1416
+#: engine/core/models.py:1472
#, python-brace-format
msgid "{name} does not exist with query <{query}>"
msgstr "{name} finnes ikke med spørring <{query}>!"
-#: engine/core/models.py:1448
+#: engine/core/models.py:1511
msgid "promocode does not exist"
msgstr "Promokoden finnes ikke"
-#: engine/core/models.py:1454
+#: engine/core/models.py:1526
msgid "you can only buy physical products with shipping address specified"
msgstr "Du kan bare kjøpe fysiske produkter med oppgitt leveringsadresse!"
-#: engine/core/models.py:1473
+#: engine/core/models.py:1547
msgid "address does not exist"
msgstr "Adressen eksisterer ikke"
-#: engine/core/models.py:1494 engine/core/models.py:1563
+#: engine/core/models.py:1569 engine/core/models.py:1648
msgid "you can not buy at this moment, please try again in a few minutes"
msgstr ""
"Du kan ikke kjøpe for øyeblikket, vennligst prøv igjen om noen minutter."
-#: engine/core/models.py:1497 engine/core/models.py:1559
+#: engine/core/models.py:1575 engine/core/models.py:1641
msgid "invalid force value"
msgstr "Ugyldig kraftverdi"
-#: engine/core/models.py:1503 engine/core/models.py:1566
+#: engine/core/models.py:1581 engine/core/models.py:1652
msgid "you cannot purchase an empty order!"
msgstr "Du kan ikke kjøpe en tom ordre!"
-#: engine/core/models.py:1522
+#: engine/core/models.py:1602
msgid "you cannot buy an order without a user"
msgstr "Du kan ikke kjøpe en ordre uten en bruker!"
-#: engine/core/models.py:1536
+#: engine/core/models.py:1616
msgid "a user without a balance cannot buy with balance"
msgstr "En bruker uten saldo kan ikke kjøpe med saldo!"
-#: engine/core/models.py:1541
+#: engine/core/models.py:1622
msgid "insufficient funds to complete the order"
msgstr "Utilstrekkelige midler til å fullføre bestillingen"
-#: engine/core/models.py:1575
+#: engine/core/models.py:1663
msgid ""
"you cannot buy without registration, please provide the following "
"information: customer name, customer email, customer phone number"
@@ -2555,14 +2559,14 @@ msgstr ""
"du kan ikke kjøpe uten registrering, vennligst oppgi følgende informasjon: "
"kundenavn, kundens e-postadresse, kundens telefonnummer"
-#: engine/core/models.py:1584
+#: engine/core/models.py:1674
#, python-brace-format
msgid ""
"invalid payment method: {payment_method} from {available_payment_methods}"
msgstr ""
"Ugyldig betalingsmetode: {payment_method} fra {available_payment_methods}!"
-#: engine/core/models.py:1699
+#: engine/core/models.py:1805
msgid ""
"Manages user feedback for products. This class is designed to capture and "
"store user feedback for specific products that they have purchased. It "
@@ -2570,41 +2574,40 @@ msgid ""
"product in the order, and a user-assigned rating. The class uses database "
"fields to effectively model and manage feedback data."
msgstr ""
-"Håndterer brukernes tilbakemeldinger på produkter. Denne klassen er utformet"
-" for å fange opp og lagre tilbakemeldinger fra brukerne om spesifikke "
+"Håndterer brukernes tilbakemeldinger på produkter. Denne klassen er utformet "
+"for å fange opp og lagre tilbakemeldinger fra brukerne om spesifikke "
"produkter de har kjøpt. Den inneholder attributter for å lagre "
"brukerkommentarer, en referanse til det relaterte produktet i bestillingen "
"og en brukertildelt vurdering. Klassen bruker databasefelt for å modellere "
"og administrere tilbakemeldingsdata på en effektiv måte."
-#: engine/core/models.py:1711
+#: engine/core/models.py:1817
msgid "user-provided comments about their experience with the product"
msgstr "Brukerkommentarer om deres erfaringer med produktet"
-#: engine/core/models.py:1712
+#: engine/core/models.py:1818
msgid "feedback comments"
msgstr "Tilbakemeldinger og kommentarer"
-#: engine/core/models.py:1719
-msgid ""
-"references the specific product in an order that this feedback is about"
+#: engine/core/models.py:1826
+msgid "references the specific product in an order that this feedback is about"
msgstr ""
-"Refererer til det spesifikke produktet i en ordre som denne tilbakemeldingen"
-" handler om"
+"Refererer til det spesifikke produktet i en ordre som denne tilbakemeldingen "
+"handler om"
-#: engine/core/models.py:1720
+#: engine/core/models.py:1828
msgid "related order product"
msgstr "Relatert bestillingsprodukt"
-#: engine/core/models.py:1725
+#: engine/core/models.py:1833
msgid "user-assigned rating for the product"
msgstr "Brukertildelt vurdering for produktet"
-#: engine/core/models.py:1726
+#: engine/core/models.py:1834
msgid "product rating"
msgstr "Produktvurdering"
-#: engine/core/models.py:1742
+#: engine/core/models.py:1854
msgid ""
"Represents products associated with orders and their attributes. The "
"OrderProduct model maintains information about a product that is part of an "
@@ -2627,134 +2630,134 @@ msgstr ""
"Modellen integreres med Order- og Product-modellene og lagrer en referanse "
"til disse."
-#: engine/core/models.py:1757
+#: engine/core/models.py:1869
msgid "the price paid by the customer for this product at purchase time"
msgstr "Prisen kunden betalte for dette produktet på kjøpstidspunktet"
-#: engine/core/models.py:1758
+#: engine/core/models.py:1870
msgid "purchase price at order time"
msgstr "Innkjøpspris på bestillingstidspunktet"
-#: engine/core/models.py:1763
+#: engine/core/models.py:1875
msgid "internal comments for admins about this ordered product"
msgstr "Interne kommentarer for administratorer om dette bestilte produktet"
-#: engine/core/models.py:1764
+#: engine/core/models.py:1876
msgid "internal comments"
msgstr "Interne kommentarer"
-#: engine/core/models.py:1770
+#: engine/core/models.py:1882
msgid "user notifications"
msgstr "Brukervarsler"
-#: engine/core/models.py:1775
+#: engine/core/models.py:1887
msgid "json representation of this item's attributes"
msgstr "JSON-representasjon av dette elementets attributter"
-#: engine/core/models.py:1776
+#: engine/core/models.py:1888
msgid "ordered product attributes"
msgstr "Bestilte produktegenskaper"
-#: engine/core/models.py:1781
+#: engine/core/models.py:1893
msgid "reference to the parent order that contains this product"
msgstr ""
"Referanse til den overordnede bestillingen som inneholder dette produktet"
-#: engine/core/models.py:1782
+#: engine/core/models.py:1894
msgid "parent order"
msgstr "Overordnet ordre"
-#: engine/core/models.py:1791
+#: engine/core/models.py:1903
msgid "the specific product associated with this order line"
msgstr "Det spesifikke produktet som er knyttet til denne ordrelinjen"
-#: engine/core/models.py:1798
+#: engine/core/models.py:1910
msgid "quantity of this specific product in the order"
msgstr "Antall av dette spesifikke produktet i bestillingen"
-#: engine/core/models.py:1799
+#: engine/core/models.py:1911
msgid "product quantity"
msgstr "Produktmengde"
-#: engine/core/models.py:1806
+#: engine/core/models.py:1918
msgid "current status of this product in the order"
msgstr "Nåværende status for dette produktet i bestillingen"
-#: engine/core/models.py:1807
+#: engine/core/models.py:1919
msgid "product line status"
msgstr "Status for produktlinjen"
-#: engine/core/models.py:1872
+#: engine/core/models.py:1986
msgid "order product must have an order"
msgstr "Orderproduct må ha en tilknyttet ordre!"
-#: engine/core/models.py:1874
+#: engine/core/models.py:1988
#, python-brace-format
msgid "wrong action specified for feedback: {action}"
msgstr "Feil handling angitt for tilbakemelding: {action}!"
-#: engine/core/models.py:1888
+#: engine/core/models.py:2005
msgid "you cannot feedback an order which is not received"
msgstr "du kan ikke gi tilbakemelding på en bestilling som ikke er mottatt"
-#: engine/core/models.py:1894
+#: engine/core/models.py:2014
msgid "name"
msgstr "Navn"
-#: engine/core/models.py:1895
+#: engine/core/models.py:2016
msgid "URL of the integration"
msgstr "URL-adressen til integrasjonen"
-#: engine/core/models.py:1896
+#: engine/core/models.py:2019
msgid "authentication credentials"
msgstr "Legitimasjon for autentisering"
-#: engine/core/models.py:1918
+#: engine/core/models.py:2042
msgid "you can only have one default CRM provider"
msgstr "Du kan bare ha én standard CRM-leverandør"
-#: engine/core/models.py:1928
+#: engine/core/models.py:2052
msgid "CRM"
msgstr "CRM"
-#: engine/core/models.py:1929
+#: engine/core/models.py:2053
msgid "CRMs"
msgstr "CRM"
-#: engine/core/models.py:1941
+#: engine/core/models.py:2069
msgid "order CRM link"
msgstr "Ordre CRM-kobling"
-#: engine/core/models.py:1942
+#: engine/core/models.py:2070
msgid "orders CRM links"
msgstr "CRM-koblinger for bestillinger"
-#: engine/core/models.py:1947
+#: engine/core/models.py:2075
msgid ""
"Represents the downloading functionality for digital assets associated with "
"orders. The DigitalAssetDownload class provides the ability to manage and "
"access downloads related to order products. It maintains information about "
-"the associated order product, the number of downloads, and whether the asset"
-" is publicly visible. It includes a method to generate a URL for downloading"
-" the asset when the associated order is in a completed status."
+"the associated order product, the number of downloads, and whether the asset "
+"is publicly visible. It includes a method to generate a URL for downloading "
+"the asset when the associated order is in a completed status."
msgstr ""
-"Representerer nedlastingsfunksjonaliteten for digitale ressurser knyttet til"
-" bestillinger. DigitalAssetDownload-klassen gir mulighet til å administrere "
+"Representerer nedlastingsfunksjonaliteten for digitale ressurser knyttet til "
+"bestillinger. DigitalAssetDownload-klassen gir mulighet til å administrere "
"og få tilgang til nedlastinger knyttet til bestillingsprodukter. Den "
"inneholder informasjon om det tilknyttede bestillingsproduktet, antall "
"nedlastinger og om ressursen er offentlig synlig. Den inneholder en metode "
"for å generere en URL for nedlasting av ressursen når den tilknyttede "
"bestillingen har status som fullført."
-#: engine/core/models.py:1961
+#: engine/core/models.py:2091
msgid "download"
msgstr "Last ned"
-#: engine/core/models.py:1962
+#: engine/core/models.py:2092
msgid "downloads"
msgstr "Nedlastinger"
-#: engine/core/serializers/utility.py:89
+#: engine/core/serializers/utility.py:91
msgid ""
"you must provide a comment, rating, and order product uuid to add feedback."
msgstr ""
@@ -2951,12 +2954,13 @@ msgstr "Hallo %(order.user.first_name)s,"
#, python-format
msgid ""
"thank you for your order #%(order.pk)s! we are pleased to inform you that\n"
-" we have taken your order into work. below are the details of your\n"
+" we have taken your order into work. below are "
+"the details of your\n"
" order:"
msgstr ""
-"Takk for din bestilling #%(order.pk)s! Vi er glade for å informere deg om at"
-" vi har tatt bestillingen din i arbeid. Nedenfor er detaljene i bestillingen"
-" din:"
+"Takk for din bestilling #%(order.pk)s! Vi er glade for å informere deg om at "
+"vi har tatt bestillingen din i arbeid. Nedenfor er detaljene i bestillingen "
+"din:"
#: engine/core/templates/digital_order_created_email.html:112
#: engine/core/templates/digital_order_delivered_email.html:110
@@ -3066,7 +3070,8 @@ msgstr ""
#: engine/core/templates/shipped_order_created_email.html:101
#: engine/core/templates/shipped_order_delivered_email.html:101
msgid ""
-"thank you for your order! we are pleased to confirm your purchase. below are\n"
+"thank you for your order! we are pleased to confirm your purchase. below "
+"are\n"
" the details of your order:"
msgstr ""
"Takk for bestillingen din! Vi er glade for å kunne bekrefte kjøpet ditt. "
@@ -3097,11 +3102,11 @@ msgstr ""
"Alle rettigheter\n"
" forbeholdt"
-#: engine/core/utils/caching.py:44
+#: engine/core/utils/caching.py:48
msgid "both data and timeout are required"
msgstr "Både data og tidsavbrudd er påkrevd"
-#: engine/core/utils/caching.py:46
+#: engine/core/utils/caching.py:51
msgid "invalid timeout value, it must be between 0 and 216000 seconds"
msgstr "Ugyldig tidsavbruddsverdi, den må være mellom 0 og 216000 sekunder"
@@ -3110,17 +3115,17 @@ msgstr "Ugyldig tidsavbruddsverdi, den må være mellom 0 og 216000 sekunder"
msgid "{settings.PROJECT_NAME} | contact us initiated"
msgstr "{settings.PROJECT_NAME} | kontakt oss initiert"
-#: engine/core/utils/emailing.py:73
+#: engine/core/utils/emailing.py:81
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order confirmation"
msgstr "{settings.PROJECT_NAME} | ordrebekreftelse"
-#: engine/core/utils/emailing.py:105
+#: engine/core/utils/emailing.py:115
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order delivered"
msgstr "{settings.PROJECT_NAME} | bestilling levert"
-#: engine/core/utils/emailing.py:188
+#: engine/core/utils/emailing.py:203
#, python-brace-format
msgid "{settings.PROJECT_NAME} | promocode granted"
msgstr "{settings.PROJECT_NAME} | promokode gitt"
@@ -3133,21 +3138,21 @@ msgstr "Du har ikke tillatelse til å utføre denne handlingen."
msgid "NOMINATIM_URL must be configured."
msgstr "Parameteren NOMINATIM_URL må være konfigurert!"
-#: engine/core/validators.py:19
+#: engine/core/validators.py:21
#, python-brace-format
msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels"
msgstr ""
"Bildedimensjonene bør ikke overstige b{max_width} x h{max_height} piksler!"
-#: engine/core/views.py:91
+#: engine/core/views.py:105
msgid ""
"Handles the request for the sitemap index and returns an XML response. It "
"ensures the response includes the appropriate content type header for XML."
msgstr ""
-"Håndterer forespørselen om områdekartindeksen og returnerer et XML-svar. Den"
-" sørger for at svaret inneholder riktig innholdstypeoverskrift for XML."
+"Håndterer forespørselen om områdekartindeksen og returnerer et XML-svar. Den "
+"sørger for at svaret inneholder riktig innholdstypeoverskrift for XML."
-#: engine/core/views.py:106
+#: engine/core/views.py:120
msgid ""
"Handles the detailed view response for a sitemap. This function processes "
"the request, fetches the appropriate sitemap detail response, and sets the "
@@ -3157,17 +3162,17 @@ msgstr ""
"behandler forespørselen, henter det aktuelle detaljsvaret for områdekartet "
"og angir overskriften Content-Type for XML."
-#: engine/core/views.py:141
+#: engine/core/views.py:156
msgid ""
"Returns a list of supported languages and their corresponding information."
msgstr ""
"Returnerer en liste over språk som støttes, med tilhørende informasjon."
-#: engine/core/views.py:173
+#: engine/core/views.py:183
msgid "Returns the parameters of the website as a JSON object."
msgstr "Returnerer nettstedets parametere som et JSON-objekt."
-#: engine/core/views.py:192
+#: engine/core/views.py:199
msgid ""
"Handles cache operations such as reading and setting cache data with a "
"specified key and timeout."
@@ -3175,70 +3180,79 @@ msgstr ""
"Håndterer cache-operasjoner som lesing og innstilling av cachedata med en "
"spesifisert nøkkel og tidsavbrudd."
-#: engine/core/views.py:219
+#: engine/core/views.py:221
msgid "Handles `contact us` form submissions."
msgstr "Håndterer innsendinger av `kontakt oss`-skjemaer."
-#: engine/core/views.py:240
+#: engine/core/views.py:237
msgid ""
"Handles requests for processing and validating URLs from incoming POST "
"requests."
msgstr ""
-"Håndterer forespørsler om behandling og validering av URL-er fra innkommende"
-" POST-forespørsler."
+"Håndterer forespørsler om behandling og validering av URL-er fra innkommende "
+"POST-forespørsler."
-#: engine/core/views.py:280
+#: engine/core/views.py:274
msgid "Handles global search queries."
msgstr "Håndterer globale søk."
-#: engine/core/views.py:295
+#: engine/core/views.py:290
msgid "Handles the logic of buying as a business without registration."
msgstr "Håndterer logikken med å kjøpe som en bedrift uten registrering."
-#: engine/core/views.py:332
+#: engine/core/views.py:338
msgid ""
"Handles the downloading of a digital asset associated with an order.\n"
-"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the digital asset file located in the "
+"storage directory of the project. If the file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
msgstr ""
-"Håndterer nedlastingen av en digital ressurs som er knyttet til en bestilling.\n"
-"Denne funksjonen forsøker å levere den digitale ressursfilen som ligger i lagringskatalogen til prosjektet. Hvis filen ikke blir funnet, vises en HTTP 404-feil for å indikere at ressursen ikke er tilgjengelig."
+"Håndterer nedlastingen av en digital ressurs som er knyttet til en "
+"bestilling.\n"
+"Denne funksjonen forsøker å levere den digitale ressursfilen som ligger i "
+"lagringskatalogen til prosjektet. Hvis filen ikke blir funnet, vises en HTTP "
+"404-feil for å indikere at ressursen ikke er tilgjengelig."
-#: engine/core/views.py:343
+#: engine/core/views.py:349
msgid "order_product_uuid is required"
msgstr "order_product_uuid er påkrevd"
-#: engine/core/views.py:350
+#: engine/core/views.py:356
msgid "order product does not exist"
msgstr "ordreproduktet eksisterer ikke"
-#: engine/core/views.py:353
+#: engine/core/views.py:359
msgid "you can only download the digital asset once"
msgstr "Du kan bare laste ned den digitale ressursen én gang"
-#: engine/core/views.py:356
+#: engine/core/views.py:363
msgid "the order must be paid before downloading the digital asset"
msgstr "bestillingen må betales før nedlasting av den digitale ressursen"
-#: engine/core/views.py:362
+#: engine/core/views.py:370
msgid "the order product does not have a product"
msgstr "Ordreproduktet har ikke et produkt"
-#: engine/core/views.py:399
+#: engine/core/views.py:414
msgid "favicon not found"
msgstr "favicon ble ikke funnet"
-#: engine/core/views.py:404
+#: engine/core/views.py:419
msgid ""
"Handles requests for the favicon of a website.\n"
-"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the favicon file located in the static "
+"directory of the project. If the favicon file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
msgstr ""
"Håndterer forespørsler om faviconet til et nettsted.\n"
-"Denne funksjonen forsøker å vise favicon-filen som ligger i den statiske katalogen i prosjektet. Hvis favicon-filen ikke blir funnet, vises en HTTP 404-feil for å indikere at ressursen ikke er tilgjengelig."
+"Denne funksjonen forsøker å vise favicon-filen som ligger i den statiske "
+"katalogen i prosjektet. Hvis favicon-filen ikke blir funnet, vises en HTTP "
+"404-feil for å indikere at ressursen ikke er tilgjengelig."
-#: engine/core/views.py:416
+#: engine/core/views.py:431
msgid ""
-"Redirects the request to the admin index page. The function handles incoming"
-" HTTP requests and redirects them to the Django admin interface index page. "
+"Redirects the request to the admin index page. The function handles incoming "
+"HTTP requests and redirects them to the Django admin interface index page. "
"It uses Django's `redirect` function for handling the HTTP redirection."
msgstr ""
"Omdirigerer forespørselen til admin-indekssiden. Funksjonen håndterer "
@@ -3246,20 +3260,20 @@ msgstr ""
"administrasjonsgrensesnittet. Den bruker Djangos `redirect`-funksjon for å "
"håndtere HTTP-omdirigeringen."
-#: engine/core/views.py:429
+#: engine/core/views.py:443
msgid "Returns current version of the eVibes. "
msgstr "Returnerer gjeldende versjon av eVibes."
-#: engine/core/views.py:623 engine/core/views.py:636
+#: engine/core/views.py:672 engine/core/views.py:687
#, python-format
msgid "Revenue & Orders (last %(days)d)"
msgstr "Inntekter og bestillinger (siste %(days)d)"
-#: engine/core/views.py:793
+#: engine/core/views.py:868
msgid "Returns custom variables for Dashboard. "
msgstr "Returnerer egendefinerte variabler for Dashboard."
-#: engine/core/viewsets.py:136
+#: engine/core/viewsets.py:139
msgid ""
"Defines a viewset for managing Evibes-related operations. The EvibesViewSet "
"class inherits from ModelViewSet and provides functionality for handling "
@@ -3273,13 +3287,12 @@ msgstr ""
"støtte for dynamiske serialiseringsklasser basert på den aktuelle "
"handlingen, tilpassbare tillatelser og gjengivelsesformater."
-#: engine/core/viewsets.py:156
+#: engine/core/viewsets.py:160
msgid ""
-"Represents a viewset for managing AttributeGroup objects. Handles operations"
-" related to AttributeGroup, including filtering, serialization, and "
-"retrieval of data. This class is part of the application's API layer and "
-"provides a standardized way to process requests and responses for "
-"AttributeGroup data."
+"Represents a viewset for managing AttributeGroup objects. Handles operations "
+"related to AttributeGroup, including filtering, serialization, and retrieval "
+"of data. This class is part of the application's API layer and provides a "
+"standardized way to process requests and responses for AttributeGroup data."
msgstr ""
"Representerer et visningssett for håndtering av AttributeGroup-objekter. "
"Håndterer operasjoner knyttet til AttributeGroup, inkludert filtrering, "
@@ -3287,7 +3300,7 @@ msgstr ""
"API-lag og gir en standardisert måte å behandle forespørsler og svar for "
"AttributeGroup-data på."
-#: engine/core/viewsets.py:175
+#: engine/core/viewsets.py:179
msgid ""
"Handles operations related to Attribute objects within the application. "
"Provides a set of API endpoints to interact with Attribute data. This class "
@@ -3296,20 +3309,20 @@ msgid ""
"specific fields or retrieving detailed versus simplified information "
"depending on the request."
msgstr ""
-"Håndterer operasjoner knyttet til Attribute-objekter i applikasjonen. Tilbyr"
-" et sett med API-endepunkter for interaksjon med attributtdata. Denne "
-"klassen håndterer spørring, filtrering og serialisering av Attribute-"
-"objekter, noe som gir dynamisk kontroll over dataene som returneres, for "
-"eksempel filtrering etter bestemte felt eller henting av detaljert versus "
-"forenklet informasjon avhengig av forespørselen."
+"Håndterer operasjoner knyttet til Attribute-objekter i applikasjonen. Tilbyr "
+"et sett med API-endepunkter for interaksjon med attributtdata. Denne klassen "
+"håndterer spørring, filtrering og serialisering av Attribute-objekter, noe "
+"som gir dynamisk kontroll over dataene som returneres, for eksempel "
+"filtrering etter bestemte felt eller henting av detaljert versus forenklet "
+"informasjon avhengig av forespørselen."
-#: engine/core/viewsets.py:194
+#: engine/core/viewsets.py:198
msgid ""
"A viewset for managing AttributeValue objects. This viewset provides "
"functionality for listing, retrieving, creating, updating, and deleting "
"AttributeValue objects. It integrates with Django REST Framework's viewset "
-"mechanisms and uses appropriate serializers for different actions. Filtering"
-" capabilities are provided through the DjangoFilterBackend."
+"mechanisms and uses appropriate serializers for different actions. Filtering "
+"capabilities are provided through the DjangoFilterBackend."
msgstr ""
"Et visningssett for administrasjon av AttributeValue-objekter. Dette "
"visningssettet inneholder funksjonalitet for å liste opp, hente, opprette, "
@@ -3317,7 +3330,7 @@ msgstr ""
"Framework's viewset-mekanismer og bruker passende serialisatorer for ulike "
"handlinger. Filtreringsmuligheter tilbys gjennom DjangoFilterBackend."
-#: engine/core/viewsets.py:213
+#: engine/core/viewsets.py:217
msgid ""
"Manages views for Category-related operations. The CategoryViewSet class is "
"responsible for handling operations related to the Category model in the "
@@ -3331,7 +3344,7 @@ msgstr ""
"kategoridata. Visningssettet håndhever også tillatelser for å sikre at bare "
"autoriserte brukere har tilgang til bestemte data."
-#: engine/core/viewsets.py:326
+#: engine/core/viewsets.py:346
msgid ""
"Represents a viewset for managing Brand instances. This class provides "
"functionality for querying, filtering, and serializing Brand objects. It "
@@ -3343,7 +3356,7 @@ msgstr ""
"Brand-objekter. Den bruker Djangos ViewSet-rammeverk for å forenkle "
"implementeringen av API-sluttpunkter for Brand-objekter."
-#: engine/core/viewsets.py:438
+#: engine/core/viewsets.py:458
msgid ""
"Manages operations related to the `Product` model in the system. This class "
"provides a viewset for managing products, including their filtering, "
@@ -3358,10 +3371,10 @@ msgstr ""
"filtrering, serialisering og operasjoner på spesifikke forekomster. Den "
"utvides fra `EvibesViewSet` for å bruke felles funksjonalitet og integreres "
"med Django REST-rammeverket for RESTful API-operasjoner. Inkluderer metoder "
-"for å hente produktdetaljer, tildele tillatelser og få tilgang til relaterte"
-" tilbakemeldinger om et produkt."
+"for å hente produktdetaljer, tildele tillatelser og få tilgang til relaterte "
+"tilbakemeldinger om et produkt."
-#: engine/core/viewsets.py:574
+#: engine/core/viewsets.py:605
msgid ""
"Represents a viewset for managing Vendor objects. This viewset allows "
"fetching, filtering, and serializing Vendor data. It defines the queryset, "
@@ -3371,18 +3384,18 @@ msgid ""
msgstr ""
"Representerer et visningssett for håndtering av Vendor-objekter. Dette "
"visningssettet gjør det mulig å hente, filtrere og serialisere Vendor-data. "
-"Den definerer spørresettet, filterkonfigurasjonene og serialiseringsklassene"
-" som brukes til å håndtere ulike handlinger. Formålet med denne klassen er å"
-" gi strømlinjeformet tilgang til Vendor-relaterte ressurser gjennom Django "
+"Den definerer spørresettet, filterkonfigurasjonene og serialiseringsklassene "
+"som brukes til å håndtere ulike handlinger. Formålet med denne klassen er å "
+"gi strømlinjeformet tilgang til Vendor-relaterte ressurser gjennom Django "
"REST-rammeverket."
-#: engine/core/viewsets.py:594
+#: engine/core/viewsets.py:625
msgid ""
"Representation of a view set handling Feedback objects. This class manages "
"operations related to Feedback objects, including listing, filtering, and "
"retrieving details. The purpose of this view set is to provide different "
-"serializers for different actions and implement permission-based handling of"
-" accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
+"serializers for different actions and implement permission-based handling of "
+"accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
"use of Django's filtering system for querying data."
msgstr ""
"Representasjon av et visningssett som håndterer Feedback-objekter. Denne "
@@ -3393,14 +3406,14 @@ msgstr ""
"tilbakemeldingsobjekter. Den utvider basisklassen `EvibesViewSet` og bruker "
"Djangos filtreringssystem for å spørre etter data."
-#: engine/core/viewsets.py:621
+#: engine/core/viewsets.py:652
msgid ""
"ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes "
"various endpoints for handling order operations such as adding or removing "
-"products, performing purchases for registered as well as unregistered users,"
-" and retrieving the current authenticated user's pending orders. The ViewSet"
-" uses multiple serializers based on the specific action being performed and "
+"products, performing purchases for registered as well as unregistered users, "
+"and retrieving the current authenticated user's pending orders. The ViewSet "
+"uses multiple serializers based on the specific action being performed and "
"enforces permissions accordingly while interacting with order data."
msgstr ""
"ViewSet for håndtering av bestillinger og relaterte operasjoner. Denne "
@@ -3409,50 +3422,50 @@ msgstr ""
"ordreoperasjoner, for eksempel å legge til eller fjerne produkter, utføre "
"kjøp for både registrerte og uregistrerte brukere og hente den aktuelle "
"autentiserte brukerens ventende bestillinger. ViewSet bruker flere "
-"serialisatorer basert på den spesifikke handlingen som utføres, og håndhever"
-" tillatelser i samsvar med dette under samhandling med ordredata."
+"serialisatorer basert på den spesifikke handlingen som utføres, og håndhever "
+"tillatelser i samsvar med dette under samhandling med ordredata."
-#: engine/core/viewsets.py:825
+#: engine/core/viewsets.py:914
msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It "
-"includes filtering, permission checks, and serializer switching based on the"
-" requested action. Additionally, it provides a detailed action for handling "
+"includes filtering, permission checks, and serializer switching based on the "
+"requested action. Additionally, it provides a detailed action for handling "
"feedback on OrderProduct instances"
msgstr ""
"Tilbyr et visningssett for håndtering av OrderProduct-enheter. Dette "
-"visningssettet muliggjør CRUD-operasjoner og egendefinerte handlinger som er"
-" spesifikke for OrderProduct-modellen. Det inkluderer filtrering, kontroll "
-"av tillatelser og bytte av serializer basert på den forespurte handlingen. I"
-" tillegg inneholder det en detaljert handling for håndtering av "
+"visningssettet muliggjør CRUD-operasjoner og egendefinerte handlinger som er "
+"spesifikke for OrderProduct-modellen. Det inkluderer filtrering, kontroll av "
+"tillatelser og bytte av serializer basert på den forespurte handlingen. I "
+"tillegg inneholder det en detaljert handling for håndtering av "
"tilbakemeldinger på OrderProduct-instanser"
-#: engine/core/viewsets.py:879
+#: engine/core/viewsets.py:974
msgid "Manages operations related to Product images in the application. "
msgstr "Administrerer operasjoner knyttet til produktbilder i applikasjonen."
-#: engine/core/viewsets.py:892
+#: engine/core/viewsets.py:988
msgid ""
"Manages the retrieval and handling of PromoCode instances through various "
"API actions."
msgstr ""
-"Administrerer henting og håndtering av PromoCode-instanser gjennom ulike "
-"API-handlinger."
+"Administrerer henting og håndtering av PromoCode-instanser gjennom ulike API-"
+"handlinger."
-#: engine/core/viewsets.py:914
+#: engine/core/viewsets.py:1019
msgid "Represents a view set for managing promotions. "
msgstr "Representerer et visningssett for håndtering av kampanjer."
-#: engine/core/viewsets.py:927
+#: engine/core/viewsets.py:1032
msgid "Handles operations related to Stock data in the system."
msgstr "Håndterer operasjoner knyttet til lagerdata i systemet."
-#: engine/core/viewsets.py:941
+#: engine/core/viewsets.py:1046
msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the "
-"retrieval, modification, and customization of products within the wish list."
-" This ViewSet facilitates functionality such as adding, removing, and bulk "
+"retrieval, modification, and customization of products within the wish list. "
+"This ViewSet facilitates functionality such as adding, removing, and bulk "
"actions for wishlist products. Permission checks are integrated to ensure "
"that users can only manage their own wishlists unless explicit permissions "
"are granted."
@@ -3462,10 +3475,10 @@ msgstr ""
"gjør det mulig å hente, endre og tilpasse produkter i ønskelisten. Dette "
"ViewSetet legger til rette for funksjonalitet som å legge til, fjerne og "
"utføre massehandlinger for ønskelisteprodukter. Tillatelseskontroller er "
-"integrert for å sikre at brukere bare kan administrere sine egne ønskelister"
-" med mindre eksplisitte tillatelser er gitt."
+"integrert for å sikre at brukere bare kan administrere sine egne ønskelister "
+"med mindre eksplisitte tillatelser er gitt."
-#: engine/core/viewsets.py:1056
+#: engine/core/viewsets.py:1183
msgid ""
"This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom "
@@ -3473,18 +3486,18 @@ msgid ""
"different HTTP methods, serializer overrides, and permission handling based "
"on the request context."
msgstr ""
-"Denne klassen tilbyr visningssettfunksjonalitet for håndtering av "
-"`Address`-objekter. AddressViewSet-klassen muliggjør CRUD-operasjoner, "
-"filtrering og egendefinerte handlinger knyttet til adresseenheter. Den "
-"inkluderer spesialisert atferd for ulike HTTP-metoder, overstyring av "
-"serializer og håndtering av tillatelser basert på forespørselskonteksten."
+"Denne klassen tilbyr visningssettfunksjonalitet for håndtering av `Address`-"
+"objekter. AddressViewSet-klassen muliggjør CRUD-operasjoner, filtrering og "
+"egendefinerte handlinger knyttet til adresseenheter. Den inkluderer "
+"spesialisert atferd for ulike HTTP-metoder, overstyring av serializer og "
+"håndtering av tillatelser basert på forespørselskonteksten."
-#: engine/core/viewsets.py:1123
+#: engine/core/viewsets.py:1254
#, python-brace-format
msgid "Geocoding error: {e}"
msgstr "Feil i geokoding: {e}"
-#: engine/core/viewsets.py:1131
+#: engine/core/viewsets.py:1262
msgid ""
"Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing "
diff --git a/engine/core/locale/pl_PL/LC_MESSAGES/django.po b/engine/core/locale/pl_PL/LC_MESSAGES/django.po
index 51b389cb..364e5a30 100644
--- a/engine/core/locale/pl_PL/LC_MESSAGES/django.po
+++ b/engine/core/locale/pl_PL/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 22:12+0300\n"
+"POT-Creation-Date: 2025-12-18 19:09+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -27,113 +27,112 @@ msgstr ""
msgid "is active"
msgstr "Jest aktywny"
-#: engine/core/abstract.py:21
+#: engine/core/abstract.py:22
msgid ""
-"if set to false, this object can't be seen by users without needed "
-"permission"
+"if set to false, this object can't be seen by users without needed permission"
msgstr ""
"Jeśli ustawione na false, obiekt ten nie może być widoczny dla użytkowników "
"bez wymaganych uprawnień."
-#: engine/core/abstract.py:23 engine/core/choices.py:18
+#: engine/core/abstract.py:26 engine/core/choices.py:18
msgid "created"
msgstr "Utworzony"
-#: engine/core/abstract.py:23
+#: engine/core/abstract.py:26
msgid "when the object first appeared on the database"
msgstr "Kiedy obiekt po raz pierwszy pojawił się w bazie danych"
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "modified"
msgstr "Zmodyfikowany"
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "when the object was last modified"
msgstr "Kiedy obiekt był ostatnio edytowany"
-#: engine/core/admin.py:85
+#: engine/core/admin.py:94
msgid "translations"
msgstr "Tłumaczenia"
-#: engine/core/admin.py:89
+#: engine/core/admin.py:102
msgid "general"
msgstr "Ogólne"
-#: engine/core/admin.py:91
+#: engine/core/admin.py:106
msgid "relations"
msgstr "Relacje"
-#: engine/core/admin.py:93
+#: engine/core/admin.py:111
msgid "additional info"
msgstr "dodatkowe informacje"
-#: engine/core/admin.py:111
+#: engine/core/admin.py:133
msgid "metadata"
msgstr "Metadane"
-#: engine/core/admin.py:118
+#: engine/core/admin.py:141
msgid "timestamps"
msgstr "Znaczniki czasu"
-#: engine/core/admin.py:133
+#: engine/core/admin.py:157
#, python-format
msgid "activate selected %(verbose_name_plural)s"
msgstr "Aktywuj wybrane %(verbose_name_plural)s"
-#: engine/core/admin.py:138
+#: engine/core/admin.py:165
msgid "selected items have been activated."
msgstr "Wybrane elementy zostały aktywowane!"
-#: engine/core/admin.py:144
+#: engine/core/admin.py:173
#, python-format
msgid "deactivate selected %(verbose_name_plural)s"
msgstr "Dezaktywacja wybranego %(verbose_name_plural)s"
-#: engine/core/admin.py:149
+#: engine/core/admin.py:183
msgid "selected items have been deactivated."
msgstr "Wybrane elementy zostały dezaktywowane!"
-#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586
-#: engine/core/graphene/object_types.py:593 engine/core/models.py:801
-#: engine/core/models.py:809
+#: engine/core/admin.py:195 engine/core/graphene/object_types.py:650
+#: engine/core/graphene/object_types.py:657 engine/core/models.py:824
+#: engine/core/models.py:832
msgid "attribute value"
msgstr "Wartość atrybutu"
-#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75
-#: engine/core/models.py:810
+#: engine/core/admin.py:196 engine/core/graphene/object_types.py:75
+#: engine/core/models.py:833
msgid "attribute values"
msgstr "Wartości atrybutów"
-#: engine/core/admin.py:172
+#: engine/core/admin.py:207
msgid "image"
msgstr "Obraz"
-#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474
+#: engine/core/admin.py:208 engine/core/graphene/object_types.py:527
msgid "images"
msgstr "Obrazy"
-#: engine/core/admin.py:184 engine/core/models.py:566
+#: engine/core/admin.py:219 engine/core/models.py:587
msgid "stock"
msgstr "Stan magazynowy"
-#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640
+#: engine/core/admin.py:220 engine/core/graphene/object_types.py:710
msgid "stocks"
msgstr "Akcje"
-#: engine/core/admin.py:196 engine/core/models.py:1818
+#: engine/core/admin.py:231 engine/core/models.py:1930
msgid "order product"
msgstr "Zamów produkt"
-#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389
-#: engine/core/models.py:1819
+#: engine/core/admin.py:232 engine/core/graphene/object_types.py:438
+#: engine/core/models.py:1931
msgid "order products"
msgstr "Zamawianie produktów"
-#: engine/core/admin.py:210 engine/core/admin.py:211
+#: engine/core/admin.py:250 engine/core/admin.py:251
msgid "children"
msgstr "Dzieci"
-#: engine/core/admin.py:977
+#: engine/core/admin.py:1059
msgid "Config"
msgstr "Konfiguracja"
@@ -157,8 +156,7 @@ msgstr "Dostarczone"
msgid "canceled"
msgstr "Anulowane"
-#: engine/core/choices.py:8 engine/core/choices.py:16
-#: engine/core/choices.py:24
+#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24
msgid "failed"
msgstr "Nie powiodło się"
@@ -186,11 +184,11 @@ msgstr "Momental"
msgid "successful"
msgstr "Udany"
-#: engine/core/docs/drf/views.py:31
+#: engine/core/docs/drf/views.py:30
msgid "OpenAPI schema in selected format with selected language"
msgstr "Schemat OpenAPI w wybranym formacie z wybranym językiem"
-#: engine/core/docs/drf/views.py:33
+#: engine/core/docs/drf/views.py:32
msgid ""
"OpenApi3 schema for this API. Format can be selected via content "
"negotiation. Language can be selected with Accept-Language and query "
@@ -200,47 +198,48 @@ msgstr ""
"negocjację treści. Język można wybrać za pomocą Accept-Language i parametru "
"zapytania."
-#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37
+#: engine/core/docs/drf/views.py:43 engine/core/graphene/mutations.py:37
msgid "cache I/O"
msgstr "Pamięć podręczna we/wy"
-#: engine/core/docs/drf/views.py:46
+#: engine/core/docs/drf/views.py:45
msgid ""
"apply only a key to read permitted data from cache.\n"
"apply key, data and timeout with authentication to write data to cache."
msgstr ""
"Zastosuj tylko klucz, aby odczytać dozwolone dane z pamięci podręcznej.\n"
-"Zastosuj klucz, dane i limit czasu z uwierzytelnianiem, aby zapisać dane w pamięci podręcznej."
+"Zastosuj klucz, dane i limit czasu z uwierzytelnianiem, aby zapisać dane w "
+"pamięci podręcznej."
-#: engine/core/docs/drf/views.py:62
+#: engine/core/docs/drf/views.py:63
msgid "get a list of supported languages"
msgstr "Pobierz listę obsługiwanych języków"
-#: engine/core/docs/drf/views.py:74
+#: engine/core/docs/drf/views.py:75
msgid "get application's exposable parameters"
msgstr "Uzyskaj dostępne parametry aplikacji"
-#: engine/core/docs/drf/views.py:84
+#: engine/core/docs/drf/views.py:89
msgid "send a message to the support team"
msgstr "Wyślij wiadomość do zespołu wsparcia"
-#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57
+#: engine/core/docs/drf/views.py:103 engine/core/graphene/mutations.py:59
msgid "request a CORSed URL"
msgstr "Żądanie adresu URL CORSed. Dozwolony jest tylko protokół https."
-#: engine/core/docs/drf/views.py:112
+#: engine/core/docs/drf/views.py:119
msgid "Search between products, categories and brands"
msgstr "Wyszukiwanie między produktami, kategoriami i markami"
-#: engine/core/docs/drf/views.py:130
+#: engine/core/docs/drf/views.py:141
msgid "global search endpoint to query across project's tables"
msgstr "Globalny punkt końcowy wyszukiwania do zapytań w tabelach projektu"
-#: engine/core/docs/drf/views.py:139
+#: engine/core/docs/drf/views.py:150
msgid "purchase an order as a business"
msgstr "Zakup zamówienia jako firma"
-#: engine/core/docs/drf/views.py:146
+#: engine/core/docs/drf/views.py:158
msgid ""
"purchase an order as a business, using the provided `products` with "
"`product_uuid` and `attributes`."
@@ -248,235 +247,232 @@ msgstr ""
"Kup zamówienie jako firma, używając dostarczonych `products` z "
"`product_uuid` i `attributes`."
-#: engine/core/docs/drf/views.py:164
+#: engine/core/docs/drf/views.py:177
msgid "download a digital asset from purchased digital order"
msgstr "pobranie zasobu cyfrowego z zakupionego zamówienia cyfrowego"
-#: engine/core/docs/drf/viewsets.py:61
+#: engine/core/docs/drf/viewsets.py:65
msgid "list all attribute groups (simple view)"
msgstr "Lista wszystkich grup atrybutów (widok prosty)"
-#: engine/core/docs/drf/viewsets.py:68
+#: engine/core/docs/drf/viewsets.py:75
msgid "retrieve a single attribute group (detailed view)"
msgstr "Pobieranie pojedynczej grupy atrybutów (widok szczegółowy)"
-#: engine/core/docs/drf/viewsets.py:75
+#: engine/core/docs/drf/viewsets.py:82
msgid "create an attribute group"
msgstr "Tworzenie grupy atrybutów"
-#: engine/core/docs/drf/viewsets.py:82
+#: engine/core/docs/drf/viewsets.py:92
msgid "delete an attribute group"
msgstr "Usuwanie grupy atrybutów"
-#: engine/core/docs/drf/viewsets.py:89
+#: engine/core/docs/drf/viewsets.py:99
msgid "rewrite an existing attribute group saving non-editables"
msgstr ""
"Przepisanie istniejącej grupy atrybutów z zachowaniem atrybutów "
"nieedytowalnych"
-#: engine/core/docs/drf/viewsets.py:96
-msgid ""
-"rewrite some fields of an existing attribute group saving non-editables"
+#: engine/core/docs/drf/viewsets.py:107
+msgid "rewrite some fields of an existing attribute group saving non-editables"
msgstr ""
"Przepisanie niektórych pól istniejącej grupy atrybutów z zachowaniem "
"atrybutów nieedytowalnych"
-#: engine/core/docs/drf/viewsets.py:106
+#: engine/core/docs/drf/viewsets.py:118
msgid "list all attributes (simple view)"
msgstr "Lista wszystkich atrybutów (widok prosty)"
-#: engine/core/docs/drf/viewsets.py:113
+#: engine/core/docs/drf/viewsets.py:128
msgid "retrieve a single attribute (detailed view)"
msgstr "Pobieranie pojedynczego atrybutu (widok szczegółowy)"
-#: engine/core/docs/drf/viewsets.py:120
+#: engine/core/docs/drf/viewsets.py:135
msgid "create an attribute"
msgstr "Utwórz atrybut"
-#: engine/core/docs/drf/viewsets.py:127
+#: engine/core/docs/drf/viewsets.py:142
msgid "delete an attribute"
msgstr "Usuwanie atrybutu"
-#: engine/core/docs/drf/viewsets.py:134
+#: engine/core/docs/drf/viewsets.py:149
msgid "rewrite an existing attribute saving non-editables"
msgstr ""
"Przepisanie istniejącego atrybutu z zachowaniem atrybutów nieedytowalnych"
-#: engine/core/docs/drf/viewsets.py:141
+#: engine/core/docs/drf/viewsets.py:156
msgid "rewrite some fields of an existing attribute saving non-editables"
msgstr ""
"Przepisanie niektórych pól istniejącego atrybutu z zachowaniem atrybutów "
"nieedytowalnych"
-#: engine/core/docs/drf/viewsets.py:151
+#: engine/core/docs/drf/viewsets.py:166
msgid "list all attribute values (simple view)"
msgstr "Lista wszystkich wartości atrybutów (widok prosty)"
-#: engine/core/docs/drf/viewsets.py:158
+#: engine/core/docs/drf/viewsets.py:176
msgid "retrieve a single attribute value (detailed view)"
msgstr "Pobieranie wartości pojedynczego atrybutu (widok szczegółowy)"
-#: engine/core/docs/drf/viewsets.py:165
+#: engine/core/docs/drf/viewsets.py:183
msgid "create an attribute value"
msgstr "Tworzenie wartości atrybutu"
-#: engine/core/docs/drf/viewsets.py:172
+#: engine/core/docs/drf/viewsets.py:193
msgid "delete an attribute value"
msgstr "Usuwanie wartości atrybutu"
-#: engine/core/docs/drf/viewsets.py:179
+#: engine/core/docs/drf/viewsets.py:200
msgid "rewrite an existing attribute value saving non-editables"
msgstr ""
"Przepisanie istniejącej wartości atrybutu z zachowaniem atrybutów "
"nieedytowalnych"
-#: engine/core/docs/drf/viewsets.py:186
-msgid ""
-"rewrite some fields of an existing attribute value saving non-editables"
+#: engine/core/docs/drf/viewsets.py:208
+msgid "rewrite some fields of an existing attribute value saving non-editables"
msgstr ""
"Przepisz niektóre pola istniejącej wartości atrybutu, zapisując wartości "
"nieedytowalne"
-#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197
+#: engine/core/docs/drf/viewsets.py:219 engine/core/docs/drf/viewsets.py:220
msgid "list all categories (simple view)"
msgstr "Lista wszystkich kategorii (widok prosty)"
-#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205
+#: engine/core/docs/drf/viewsets.py:230 engine/core/docs/drf/viewsets.py:231
msgid "retrieve a single category (detailed view)"
msgstr "Pobieranie pojedynczej kategorii (widok szczegółowy)"
-#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258
+#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:286
msgid "Category UUID or slug"
msgstr "Identyfikator UUID kategorii lub slug"
-#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221
+#: engine/core/docs/drf/viewsets.py:246 engine/core/docs/drf/viewsets.py:247
msgid "create a category"
msgstr "Utwórz kategorię"
-#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229
+#: engine/core/docs/drf/viewsets.py:254 engine/core/docs/drf/viewsets.py:255
msgid "delete a category"
msgstr "Usuwanie kategorii"
-#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237
+#: engine/core/docs/drf/viewsets.py:262 engine/core/docs/drf/viewsets.py:263
msgid "rewrite an existing category saving non-editables"
msgstr "Przepisz istniejącą kategorię, zapisując nieedytowalne elementy"
-#: engine/core/docs/drf/viewsets.py:244 engine/core/docs/drf/viewsets.py:245
+#: engine/core/docs/drf/viewsets.py:270 engine/core/docs/drf/viewsets.py:272
msgid "rewrite some fields of an existing category saving non-editables"
msgstr ""
"Przepisz niektóre pola istniejącej kategorii, zapisując elementy "
"nieedytowalne"
-#: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704
-#: engine/core/docs/drf/viewsets.py:988
+#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:1046
#: engine/core/graphene/object_types.py:117
-#: engine/core/graphene/object_types.py:207
-#: engine/core/graphene/object_types.py:482
+#: engine/core/graphene/object_types.py:236
+#: engine/core/graphene/object_types.py:537
msgid "SEO Meta snapshot"
msgstr "SEO Meta snapshot"
-#: engine/core/docs/drf/viewsets.py:253
+#: engine/core/docs/drf/viewsets.py:281
msgid "returns a snapshot of the category's SEO meta data"
msgstr "Zwraca migawkę metadanych SEO kategorii."
-#: engine/core/docs/drf/viewsets.py:274
+#: engine/core/docs/drf/viewsets.py:302
msgid "list all orders (simple view)"
msgstr "Lista wszystkich kategorii (widok prosty)"
-#: engine/core/docs/drf/viewsets.py:275
+#: engine/core/docs/drf/viewsets.py:303
msgid "for non-staff users, only their own orders are returned."
msgstr ""
"W przypadku użytkowników niebędących pracownikami zwracane są tylko ich "
"własne zamówienia."
-#: engine/core/docs/drf/viewsets.py:281
+#: engine/core/docs/drf/viewsets.py:309
msgid ""
-"Case-insensitive substring search across human_readable_id, "
-"order_products.product.name, and order_products.product.partnumber"
+"Case-insensitive substring search across human_readable_id, order_products."
+"product.name, and order_products.product.partnumber"
msgstr ""
-"Wyszukiwanie podciągów z uwzględnieniem wielkości liter w human_readable_id,"
-" order_products.product.name i order_products.product.partnumber."
+"Wyszukiwanie podciągów z uwzględnieniem wielkości liter w human_readable_id, "
+"order_products.product.name i order_products.product.partnumber."
-#: engine/core/docs/drf/viewsets.py:288
+#: engine/core/docs/drf/viewsets.py:316
msgid "Filter orders with buy_time >= this ISO 8601 datetime"
msgstr "Filtruj zamówienia z buy_time >= ta data ISO 8601"
-#: engine/core/docs/drf/viewsets.py:293
+#: engine/core/docs/drf/viewsets.py:321
msgid "Filter orders with buy_time <= this ISO 8601 datetime"
msgstr "Filtruj zamówienia z buy_time <= ten ISO 8601 datetime"
-#: engine/core/docs/drf/viewsets.py:298
+#: engine/core/docs/drf/viewsets.py:326
msgid "Filter by exact order UUID"
msgstr "Filtruj według dokładnego identyfikatora UUID zamówienia"
-#: engine/core/docs/drf/viewsets.py:303
+#: engine/core/docs/drf/viewsets.py:331
msgid "Filter by exact human-readable order ID"
msgstr ""
"Filtrowanie według dokładnego, czytelnego dla człowieka identyfikatora "
"zamówienia"
-#: engine/core/docs/drf/viewsets.py:308
+#: engine/core/docs/drf/viewsets.py:336
msgid "Filter by user's email (case-insensitive exact match)"
msgstr ""
"Filtrowanie według adresu e-mail użytkownika (dokładne dopasowanie z "
"uwzględnieniem wielkości liter)"
-#: engine/core/docs/drf/viewsets.py:313
+#: engine/core/docs/drf/viewsets.py:341
msgid "Filter by user's UUID"
msgstr "Filtrowanie według identyfikatora UUID użytkownika"
-#: engine/core/docs/drf/viewsets.py:318
+#: engine/core/docs/drf/viewsets.py:347
msgid "Filter by order status (case-insensitive substring match)"
msgstr ""
-"Filtrowanie według statusu zamówienia (dopasowanie podciągu z uwzględnieniem"
-" wielkości liter)"
+"Filtrowanie według statusu zamówienia (dopasowanie podciągu z uwzględnieniem "
+"wielkości liter)"
-#: engine/core/docs/drf/viewsets.py:324
+#: engine/core/docs/drf/viewsets.py:354
msgid ""
-"Order by one of: uuid, human_readable_id, user_email, user, status, created,"
-" modified, buy_time, random. Prefix with '-' for descending (e.g. "
-"'-buy_time')."
+"Order by one of: uuid, human_readable_id, user_email, user, status, created, "
+"modified, buy_time, random. Prefix with '-' for descending (e.g. '-"
+"buy_time')."
msgstr ""
"Kolejność według jednego z: uuid, human_readable_id, user_email, user, "
"status, created, modified, buy_time, random. Prefiks z \"-\" dla malejącego "
"(np. \"-buy_time\")."
-#: engine/core/docs/drf/viewsets.py:336
+#: engine/core/docs/drf/viewsets.py:366
msgid "retrieve a single order (detailed view)"
msgstr "Pobieranie pojedynczej kategorii (widok szczegółowy)"
-#: engine/core/docs/drf/viewsets.py:341
+#: engine/core/docs/drf/viewsets.py:371
msgid "Order UUID or human-readable id"
-msgstr ""
-"Identyfikator UUID zamówienia lub identyfikator czytelny dla człowieka"
+msgstr "Identyfikator UUID zamówienia lub identyfikator czytelny dla człowieka"
-#: engine/core/docs/drf/viewsets.py:351
+#: engine/core/docs/drf/viewsets.py:381
msgid "create an order"
msgstr "Utwórz atrybut"
-#: engine/core/docs/drf/viewsets.py:352
+#: engine/core/docs/drf/viewsets.py:382
msgid "doesn't work for non-staff users."
msgstr "Nie działa dla użytkowników spoza personelu."
-#: engine/core/docs/drf/viewsets.py:359
+#: engine/core/docs/drf/viewsets.py:389
msgid "delete an order"
msgstr "Usuwanie atrybutu"
-#: engine/core/docs/drf/viewsets.py:366
+#: engine/core/docs/drf/viewsets.py:396
msgid "rewrite an existing order saving non-editables"
msgstr "Przepisz istniejącą kategorię, zapisując nieedytowalne elementy"
-#: engine/core/docs/drf/viewsets.py:373
+#: engine/core/docs/drf/viewsets.py:403
msgid "rewrite some fields of an existing order saving non-editables"
msgstr ""
"Przepisz niektóre pola istniejącej kategorii, zapisując elementy "
"nieedytowalne"
-#: engine/core/docs/drf/viewsets.py:380
+#: engine/core/docs/drf/viewsets.py:410
msgid "purchase an order"
msgstr "Cena zakupu w momencie zamówienia"
-#: engine/core/docs/drf/viewsets.py:382
+#: engine/core/docs/drf/viewsets.py:412
msgid ""
"finalizes the order purchase. if `force_balance` is used, the purchase is "
"completed using the user's balance; if `force_payment` is used, a "
@@ -486,27 +482,27 @@ msgstr ""
"finalizowany przy użyciu salda użytkownika; Jeśli użyto `force_payment`, "
"transakcja jest inicjowana."
-#: engine/core/docs/drf/viewsets.py:397
+#: engine/core/docs/drf/viewsets.py:427
msgid "retrieve current pending order of a user"
msgstr "pobieranie bieżącego oczekującego zamówienia użytkownika"
-#: engine/core/docs/drf/viewsets.py:398
+#: engine/core/docs/drf/viewsets.py:428
msgid "retrieves a current pending order of an authenticated user"
msgstr "pobiera bieżące oczekujące zamówienie uwierzytelnionego użytkownika"
-#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334
+#: engine/core/docs/drf/viewsets.py:438 engine/core/graphene/mutations.py:354
msgid "purchase an order without account creation"
msgstr "zakup zamówienia bez tworzenia konta"
-#: engine/core/docs/drf/viewsets.py:409
+#: engine/core/docs/drf/viewsets.py:439
msgid "finalizes the order purchase for a non-registered user."
msgstr "finalizuje zakup zamówienia dla niezarejestrowanego użytkownika."
-#: engine/core/docs/drf/viewsets.py:420
+#: engine/core/docs/drf/viewsets.py:450
msgid "add product to order"
msgstr "Dodawanie produktu do zamówienia"
-#: engine/core/docs/drf/viewsets.py:421
+#: engine/core/docs/drf/viewsets.py:452
msgid ""
"adds a product to an order using the provided `product_uuid` and "
"`attributes`."
@@ -514,11 +510,11 @@ msgstr ""
"Dodaje produkt do zamówienia przy użyciu podanych `product_uuid` i "
"`attributes`."
-#: engine/core/docs/drf/viewsets.py:429
+#: engine/core/docs/drf/viewsets.py:461
msgid "add a list of products to order, quantities will not count"
msgstr "Dodaj listę produktów do zamówienia, ilości nie będą liczone."
-#: engine/core/docs/drf/viewsets.py:430
+#: engine/core/docs/drf/viewsets.py:463
msgid ""
"adds a list of products to an order using the provided `product_uuid` and "
"`attributes`."
@@ -526,11 +522,11 @@ msgstr ""
"Dodaje listę produktów do zamówienia przy użyciu podanych `product_uuid` i "
"`attributes`."
-#: engine/core/docs/drf/viewsets.py:438
+#: engine/core/docs/drf/viewsets.py:472
msgid "remove product from order"
msgstr "Usunięcie produktu z zamówienia"
-#: engine/core/docs/drf/viewsets.py:439
+#: engine/core/docs/drf/viewsets.py:474
msgid ""
"removes a product from an order using the provided `product_uuid` and "
"`attributes`."
@@ -538,11 +534,11 @@ msgstr ""
"Usuwa produkt z zamówienia przy użyciu podanego `product_uuid` i "
"`attributes`."
-#: engine/core/docs/drf/viewsets.py:447
+#: engine/core/docs/drf/viewsets.py:483
msgid "remove product from order, quantities will not count"
msgstr "Usuń produkt z zamówienia, ilości nie będą liczone"
-#: engine/core/docs/drf/viewsets.py:448
+#: engine/core/docs/drf/viewsets.py:485
msgid ""
"removes a list of products from an order using the provided `product_uuid` "
"and `attributes`"
@@ -550,722 +546,734 @@ msgstr ""
"Usuwa listę produktów z zamówienia przy użyciu podanych `product_uuid` i "
"`attributes`."
-#: engine/core/docs/drf/viewsets.py:459
+#: engine/core/docs/drf/viewsets.py:497
msgid "list all wishlists (simple view)"
msgstr "Lista wszystkich atrybutów (widok prosty)"
-#: engine/core/docs/drf/viewsets.py:460
+#: engine/core/docs/drf/viewsets.py:498
msgid "for non-staff users, only their own wishlists are returned."
msgstr ""
"W przypadku użytkowników niebędących pracownikami zwracane są tylko ich "
"własne listy życzeń."
-#: engine/core/docs/drf/viewsets.py:467
+#: engine/core/docs/drf/viewsets.py:508
msgid "retrieve a single wishlist (detailed view)"
msgstr "Pobieranie pojedynczego atrybutu (widok szczegółowy)"
-#: engine/core/docs/drf/viewsets.py:474
+#: engine/core/docs/drf/viewsets.py:515
msgid "create an wishlist"
msgstr "Utwórz atrybut"
-#: engine/core/docs/drf/viewsets.py:475
+#: engine/core/docs/drf/viewsets.py:516
msgid "Doesn't work for non-staff users."
msgstr "Nie działa dla użytkowników spoza personelu."
-#: engine/core/docs/drf/viewsets.py:482
+#: engine/core/docs/drf/viewsets.py:523
msgid "delete an wishlist"
msgstr "Usuwanie atrybutu"
-#: engine/core/docs/drf/viewsets.py:489
+#: engine/core/docs/drf/viewsets.py:530
msgid "rewrite an existing wishlist saving non-editables"
msgstr ""
"Przepisanie istniejącego atrybutu z zachowaniem atrybutów nieedytowalnych"
-#: engine/core/docs/drf/viewsets.py:496
+#: engine/core/docs/drf/viewsets.py:537
msgid "rewrite some fields of an existing wishlist saving non-editables"
msgstr ""
"Przepisanie niektórych pól istniejącego atrybutu z zachowaniem atrybutów "
"nieedytowalnych"
-#: engine/core/docs/drf/viewsets.py:503
+#: engine/core/docs/drf/viewsets.py:544
msgid "retrieve current pending wishlist of a user"
msgstr "pobieranie bieżącej oczekującej listy życzeń użytkownika"
-#: engine/core/docs/drf/viewsets.py:504
+#: engine/core/docs/drf/viewsets.py:545
msgid "retrieves a current pending wishlist of an authenticated user"
msgstr "pobiera bieżącą oczekującą listę życzeń uwierzytelnionego użytkownika"
-#: engine/core/docs/drf/viewsets.py:514
+#: engine/core/docs/drf/viewsets.py:555
msgid "add product to wishlist"
msgstr "Dodawanie produktu do zamówienia"
-#: engine/core/docs/drf/viewsets.py:515
+#: engine/core/docs/drf/viewsets.py:557
msgid "adds a product to an wishlist using the provided `product_uuid`"
msgstr "Dodaje produkt do listy życzeń używając podanego `product_uuid`"
-#: engine/core/docs/drf/viewsets.py:523
+#: engine/core/docs/drf/viewsets.py:566
msgid "remove product from wishlist"
msgstr "Usunięcie produktu z listy życzeń"
-#: engine/core/docs/drf/viewsets.py:524
+#: engine/core/docs/drf/viewsets.py:568
msgid "removes a product from an wishlist using the provided `product_uuid`"
msgstr ""
"Usuwa produkt z listy życzeń przy użyciu podanego identyfikatora "
"`product_uuid`."
-#: engine/core/docs/drf/viewsets.py:532
+#: engine/core/docs/drf/viewsets.py:577
msgid "add many products to wishlist"
msgstr "Dodaj wiele produktów do listy życzeń"
-#: engine/core/docs/drf/viewsets.py:533
+#: engine/core/docs/drf/viewsets.py:579
msgid "adds many products to an wishlist using the provided `product_uuids`"
msgstr ""
"Dodaje wiele produktów do listy życzeń przy użyciu podanych `product_uuids`"
-#: engine/core/docs/drf/viewsets.py:541
+#: engine/core/docs/drf/viewsets.py:588
msgid "remove many products from wishlist"
msgstr "Usunięcie produktu z zamówienia"
-#: engine/core/docs/drf/viewsets.py:542
+#: engine/core/docs/drf/viewsets.py:590
msgid ""
"removes many products from an wishlist using the provided `product_uuids`"
msgstr ""
"Usuwa wiele produktów z listy życzeń przy użyciu podanych `product_uuids`"
-#: engine/core/docs/drf/viewsets.py:549
+#: engine/core/docs/drf/viewsets.py:598
msgid ""
"Filter by one or more attribute name/value pairs. \n"
"• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n"
-"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n"
-"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n"
+"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, "
+"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, "
+"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n"
+"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), "
+"`true`/`false` for booleans, integers, floats; otherwise treated as "
+"string. \n"
"• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n"
"Examples: \n"
-"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n"
+"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\","
+"\"bluetooth\"]`, \n"
"`b64-description=icontains-aGVhdC1jb2xk`"
msgstr ""
"Filtrowanie według jednej lub więcej par atrybut/wartość. \n"
"- Składnia**: `attr_name=method-value[;attr2=method2-value2]...`\n"
-"- **Metody** (domyślnie `icontains` jeśli pominięte): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`\n"
-"- Wpisywanie wartości**: JSON jest próbowany jako pierwszy (więc można przekazywać listy/dykty), `true`/`false` dla booleans, integers, floats; w przeciwnym razie traktowane jako string. \n"
-"- Base64**: prefiks z `b64-` do bezpiecznego dla adresów URL kodowania base64 surowej wartości. \n"
+"- **Metody** (domyślnie `icontains` jeśli pominięte): `iexact`, `exact`, "
+"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, "
+"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`\n"
+"- Wpisywanie wartości**: JSON jest próbowany jako pierwszy (więc można "
+"przekazywać listy/dykty), `true`/`false` dla booleans, integers, floats; w "
+"przeciwnym razie traktowane jako string. \n"
+"- Base64**: prefiks z `b64-` do bezpiecznego dla adresów URL kodowania "
+"base64 surowej wartości. \n"
"Przykłady: \n"
"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\", \"bluetooth\"]`,\n"
"`b64-description=icontains-aGVhdC1jb2xk`"
-#: engine/core/docs/drf/viewsets.py:568 engine/core/docs/drf/viewsets.py:569
+#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
msgid "list all products (simple view)"
msgstr "Lista wszystkich produktów (widok prosty)"
-#: engine/core/docs/drf/viewsets.py:574
+#: engine/core/docs/drf/viewsets.py:623
msgid "(exact) Product UUID"
msgstr "(dokładny) UUID produktu"
-#: engine/core/docs/drf/viewsets.py:581
+#: engine/core/docs/drf/viewsets.py:630
msgid ""
-"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n"
+"Comma-separated list of fields to sort by. Prefix with `-` for "
+"descending. \n"
"**Allowed:** uuid, rating, name, slug, created, modified, price, random"
msgstr ""
-"Rozdzielana przecinkami lista pól do posortowania. Prefiks z `-` dla sortowania malejącego. \n"
+"Rozdzielana przecinkami lista pól do posortowania. Prefiks z `-` dla "
+"sortowania malejącego. \n"
"**Dozwolone:** uuid, rating, name, slug, created, modified, price, random"
-#: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599
+#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
msgid "retrieve a single product (detailed view)"
msgstr "Pobieranie pojedynczego produktu (widok szczegółowy)"
-#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634
-#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672
-#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710
+#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683
+#: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725
+#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763
msgid "Product UUID or slug"
msgstr "UUID produktu lub Slug"
-#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
+#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
#: engine/core/graphene/dashboard_mutations/product.py:80
#: engine/core/graphene/dashboard_mutations/product.py:118
#: engine/core/graphene/dashboard_mutations/product.py:166
msgid "create a product"
msgstr "Tworzenie produktu"
-#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629
+#: engine/core/docs/drf/viewsets.py:677 engine/core/docs/drf/viewsets.py:678
msgid "rewrite an existing product, preserving non-editable fields"
msgstr "Przepisz istniejący produkt, zachowując nieedytowalne pola"
-#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
+#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:700
msgid ""
"update some fields of an existing product, preserving non-editable fields"
msgstr ""
"Aktualizacja niektórych pól istniejącego produktu z zachowaniem pól "
"nieedytowalnych"
-#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
+#: engine/core/docs/drf/viewsets.py:719 engine/core/docs/drf/viewsets.py:720
msgid "delete a product"
msgstr "Usuń produkt"
-#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686
+#: engine/core/docs/drf/viewsets.py:738 engine/core/docs/drf/viewsets.py:739
msgid "lists all permitted feedbacks for a product"
msgstr "wyświetla wszystkie dozwolone informacje zwrotne dotyczące produktu"
-#: engine/core/docs/drf/viewsets.py:705
+#: engine/core/docs/drf/viewsets.py:758
msgid "returns a snapshot of the product's SEO meta data"
msgstr "Zwraca migawkę metadanych SEO produktu."
-#: engine/core/docs/drf/viewsets.py:726
+#: engine/core/docs/drf/viewsets.py:779
msgid "list all addresses"
msgstr "Lista wszystkich adresów"
-#: engine/core/docs/drf/viewsets.py:736
+#: engine/core/docs/drf/viewsets.py:789
msgid "retrieve a single address"
msgstr "Pobieranie pojedynczego adresu"
-#: engine/core/docs/drf/viewsets.py:746
+#: engine/core/docs/drf/viewsets.py:799
msgid "create a new address"
msgstr "Utwórz nowy adres"
-#: engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:810
msgid "delete an address"
msgstr "Usuwanie adresu"
-#: engine/core/docs/drf/viewsets.py:767
+#: engine/core/docs/drf/viewsets.py:820
msgid "update an entire address"
msgstr "Aktualizacja całego adresu"
-#: engine/core/docs/drf/viewsets.py:778
+#: engine/core/docs/drf/viewsets.py:831
msgid "partially update an address"
msgstr "Częściowa aktualizacja adresu"
-#: engine/core/docs/drf/viewsets.py:789
+#: engine/core/docs/drf/viewsets.py:842
msgid "autocomplete address suggestions"
msgstr "Wprowadzanie adresu w trybie autouzupełniania"
-#: engine/core/docs/drf/viewsets.py:794
+#: engine/core/docs/drf/viewsets.py:848
msgid "raw data query string, please append with data from geo-IP endpoint"
msgstr ""
"Ciąg zapytania danych nieprzetworzonych, należy dołączyć dane z punktu "
"końcowego geo-IP"
-#: engine/core/docs/drf/viewsets.py:800
+#: engine/core/docs/drf/viewsets.py:855
msgid "limit the results amount, 1 < limit < 10, default: 5"
msgstr "ogranicza ilość wyników, 1 < limit < 10, domyślnie: 5"
-#: engine/core/docs/drf/viewsets.py:816
+#: engine/core/docs/drf/viewsets.py:871
msgid "list all feedbacks (simple view)"
msgstr "lista wszystkich opinii (widok prosty)"
-#: engine/core/docs/drf/viewsets.py:823
+#: engine/core/docs/drf/viewsets.py:881
msgid "retrieve a single feedback (detailed view)"
msgstr "pobieranie pojedynczej informacji zwrotnej (widok szczegółowy)"
-#: engine/core/docs/drf/viewsets.py:830
+#: engine/core/docs/drf/viewsets.py:888
msgid "create a feedback"
msgstr "utworzyć informację zwrotną"
-#: engine/core/docs/drf/viewsets.py:837
+#: engine/core/docs/drf/viewsets.py:895
msgid "delete a feedback"
msgstr "usuwanie opinii"
-#: engine/core/docs/drf/viewsets.py:844
+#: engine/core/docs/drf/viewsets.py:902
msgid "rewrite an existing feedback saving non-editables"
msgstr ""
"przepisanie istniejącej informacji zwrotnej z zachowaniem elementów "
"nieedytowalnych"
-#: engine/core/docs/drf/viewsets.py:851
+#: engine/core/docs/drf/viewsets.py:909
msgid "rewrite some fields of an existing feedback saving non-editables"
msgstr ""
"Przepisz niektóre pola istniejącej kategorii, zapisując elementy "
"nieedytowalne"
-#: engine/core/docs/drf/viewsets.py:861
+#: engine/core/docs/drf/viewsets.py:919
msgid "list all order–product relations (simple view)"
msgstr "lista wszystkich relacji zamówienie-produkt (widok prosty)"
-#: engine/core/docs/drf/viewsets.py:871
+#: engine/core/docs/drf/viewsets.py:929
msgid "retrieve a single order–product relation (detailed view)"
msgstr "pobranie pojedynczej relacji zamówienie-produkt (widok szczegółowy)"
-#: engine/core/docs/drf/viewsets.py:881
+#: engine/core/docs/drf/viewsets.py:939
msgid "create a new order–product relation"
msgstr "utworzyć nową relację zamówienie-produkt"
-#: engine/core/docs/drf/viewsets.py:891
+#: engine/core/docs/drf/viewsets.py:949
msgid "replace an existing order–product relation"
msgstr "zastąpić istniejącą relację zamówienie-produkt"
-#: engine/core/docs/drf/viewsets.py:901
+#: engine/core/docs/drf/viewsets.py:959
msgid "partially update an existing order–product relation"
msgstr "częściowa aktualizacja istniejącej relacji zamówienie-produkt"
-#: engine/core/docs/drf/viewsets.py:911
+#: engine/core/docs/drf/viewsets.py:969
msgid "delete an order–product relation"
msgstr "usunąć relację zamówienie-produkt"
-#: engine/core/docs/drf/viewsets.py:921
+#: engine/core/docs/drf/viewsets.py:979
msgid "add or remove feedback on an order–product relation"
msgstr "dodawanie lub usuwanie opinii na temat relacji zamówienie-produkt"
-#: engine/core/docs/drf/viewsets.py:938
+#: engine/core/docs/drf/viewsets.py:996
msgid "list all brands (simple view)"
msgstr "Lista wszystkich marek (widok prosty)"
-#: engine/core/docs/drf/viewsets.py:945
+#: engine/core/docs/drf/viewsets.py:1003
msgid "retrieve a single brand (detailed view)"
msgstr "Pobieranie pojedynczej marki (widok szczegółowy)"
-#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993
+#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051
msgid "Brand UUID or slug"
msgstr "Brand UUID lub slug"
-#: engine/core/docs/drf/viewsets.py:960
+#: engine/core/docs/drf/viewsets.py:1018
msgid "create a brand"
msgstr "Stwórz markę"
-#: engine/core/docs/drf/viewsets.py:967
+#: engine/core/docs/drf/viewsets.py:1025
msgid "delete a brand"
msgstr "Usuń markę"
-#: engine/core/docs/drf/viewsets.py:974
+#: engine/core/docs/drf/viewsets.py:1032
msgid "rewrite an existing brand saving non-editables"
msgstr "Przepisz istniejącą markę, oszczędzając materiały nieedytowalne"
-#: engine/core/docs/drf/viewsets.py:981
+#: engine/core/docs/drf/viewsets.py:1039
msgid "rewrite some fields of an existing brand saving non-editables"
msgstr ""
"Przepisz niektóre pola istniejącej kategorii, zapisując elementy "
"nieedytowalne"
-#: engine/core/docs/drf/viewsets.py:1006
+#: engine/core/docs/drf/viewsets.py:1064
msgid "list all vendors (simple view)"
msgstr "Lista wszystkich sprzedawców (widok prosty)"
-#: engine/core/docs/drf/viewsets.py:1013
+#: engine/core/docs/drf/viewsets.py:1074
msgid "retrieve a single vendor (detailed view)"
msgstr "Pobieranie pojedynczego dostawcy (widok szczegółowy)"
-#: engine/core/docs/drf/viewsets.py:1020
+#: engine/core/docs/drf/viewsets.py:1081
msgid "create a vendor"
msgstr "Utwórz sprzedawcę"
-#: engine/core/docs/drf/viewsets.py:1027
+#: engine/core/docs/drf/viewsets.py:1088
msgid "delete a vendor"
msgstr "Usuń sprzedawcę"
-#: engine/core/docs/drf/viewsets.py:1034
+#: engine/core/docs/drf/viewsets.py:1095
msgid "rewrite an existing vendor saving non-editables"
msgstr "Przepisz istniejącego dostawcę, zapisując nieedytowalne elementy"
-#: engine/core/docs/drf/viewsets.py:1041
+#: engine/core/docs/drf/viewsets.py:1102
msgid "rewrite some fields of an existing vendor saving non-editables"
msgstr ""
"Przepisz niektóre pola istniejącej kategorii, zapisując elementy "
"nieedytowalne"
-#: engine/core/docs/drf/viewsets.py:1051
+#: engine/core/docs/drf/viewsets.py:1112
msgid "list all product images (simple view)"
msgstr "Lista wszystkich zdjęć produktów (widok prosty)"
-#: engine/core/docs/drf/viewsets.py:1058
+#: engine/core/docs/drf/viewsets.py:1122
msgid "retrieve a single product image (detailed view)"
msgstr "Pobieranie pojedynczego obrazu produktu (widok szczegółowy)"
-#: engine/core/docs/drf/viewsets.py:1065
+#: engine/core/docs/drf/viewsets.py:1129
msgid "create a product image"
msgstr "Utwórz obraz produktu"
-#: engine/core/docs/drf/viewsets.py:1072
+#: engine/core/docs/drf/viewsets.py:1139
msgid "delete a product image"
msgstr "Usuwanie obrazu produktu"
-#: engine/core/docs/drf/viewsets.py:1079
+#: engine/core/docs/drf/viewsets.py:1146
msgid "rewrite an existing product image saving non-editables"
msgstr "Przepisz istniejący obraz produktu, zapisując nieedytowalne elementy"
-#: engine/core/docs/drf/viewsets.py:1086
+#: engine/core/docs/drf/viewsets.py:1154
msgid "rewrite some fields of an existing product image saving non-editables"
msgstr ""
"Przepisz niektóre pola istniejącej kategorii, zapisując elementy "
"nieedytowalne"
-#: engine/core/docs/drf/viewsets.py:1096
+#: engine/core/docs/drf/viewsets.py:1165
msgid "list all promo codes (simple view)"
msgstr "Lista wszystkich kodów promocyjnych (widok prosty)"
-#: engine/core/docs/drf/viewsets.py:1103
+#: engine/core/docs/drf/viewsets.py:1175
msgid "retrieve a single promo code (detailed view)"
msgstr "Pobieranie pojedynczego kodu promocyjnego (widok szczegółowy)"
-#: engine/core/docs/drf/viewsets.py:1110
+#: engine/core/docs/drf/viewsets.py:1182
msgid "create a promo code"
msgstr "Utwórz kod promocyjny"
-#: engine/core/docs/drf/viewsets.py:1117
+#: engine/core/docs/drf/viewsets.py:1189
msgid "delete a promo code"
msgstr "Usuń kod promocyjny"
-#: engine/core/docs/drf/viewsets.py:1124
+#: engine/core/docs/drf/viewsets.py:1196
msgid "rewrite an existing promo code saving non-editables"
msgstr ""
"Przepisz istniejący kod promocyjny, oszczędzając nieedytowalne elementy"
-#: engine/core/docs/drf/viewsets.py:1131
+#: engine/core/docs/drf/viewsets.py:1203
msgid "rewrite some fields of an existing promo code saving non-editables"
msgstr ""
"Przepisz niektóre pola istniejącej kategorii, zapisując elementy "
"nieedytowalne"
-#: engine/core/docs/drf/viewsets.py:1141
+#: engine/core/docs/drf/viewsets.py:1213
msgid "list all promotions (simple view)"
msgstr "Lista wszystkich promocji (widok prosty)"
-#: engine/core/docs/drf/viewsets.py:1148
+#: engine/core/docs/drf/viewsets.py:1223
msgid "retrieve a single promotion (detailed view)"
msgstr "Pobieranie pojedynczej promocji (widok szczegółowy)"
-#: engine/core/docs/drf/viewsets.py:1155
+#: engine/core/docs/drf/viewsets.py:1230
msgid "create a promotion"
msgstr "Utwórz promocję"
-#: engine/core/docs/drf/viewsets.py:1162
+#: engine/core/docs/drf/viewsets.py:1237
msgid "delete a promotion"
msgstr "Usuń promocję"
-#: engine/core/docs/drf/viewsets.py:1169
+#: engine/core/docs/drf/viewsets.py:1244
msgid "rewrite an existing promotion saving non-editables"
msgstr "Przepisz istniejącą promocję, zapisując nieedytowalne elementy"
-#: engine/core/docs/drf/viewsets.py:1176
+#: engine/core/docs/drf/viewsets.py:1251
msgid "rewrite some fields of an existing promotion saving non-editables"
msgstr ""
"Przepisz niektóre pola istniejącej kategorii, zapisując elementy "
"nieedytowalne"
-#: engine/core/docs/drf/viewsets.py:1186
+#: engine/core/docs/drf/viewsets.py:1261
msgid "list all stocks (simple view)"
msgstr "Lista wszystkich akcji (widok prosty)"
-#: engine/core/docs/drf/viewsets.py:1193
+#: engine/core/docs/drf/viewsets.py:1268
msgid "retrieve a single stock (detailed view)"
msgstr "Pobieranie pojedynczego zasobu (widok szczegółowy)"
-#: engine/core/docs/drf/viewsets.py:1200
+#: engine/core/docs/drf/viewsets.py:1275
msgid "create a stock record"
msgstr "Tworzenie rekordu zapasów"
-#: engine/core/docs/drf/viewsets.py:1207
+#: engine/core/docs/drf/viewsets.py:1282
msgid "delete a stock record"
msgstr "Usuwanie rekordu zapasów"
-#: engine/core/docs/drf/viewsets.py:1214
+#: engine/core/docs/drf/viewsets.py:1289
msgid "rewrite an existing stock record saving non-editables"
msgstr ""
"Przepisanie istniejącego rekordu magazynowego z zachowaniem elementów "
"nieedytowalnych"
-#: engine/core/docs/drf/viewsets.py:1221
+#: engine/core/docs/drf/viewsets.py:1297
msgid "rewrite some fields of an existing stock record saving non-editables"
msgstr ""
"Przepisz niektóre pola istniejącej kategorii, zapisując elementy "
"nieedytowalne"
-#: engine/core/docs/drf/viewsets.py:1231
+#: engine/core/docs/drf/viewsets.py:1308
msgid "list all product tags (simple view)"
msgstr "Lista wszystkich tagów produktów (widok prosty)"
-#: engine/core/docs/drf/viewsets.py:1238
+#: engine/core/docs/drf/viewsets.py:1318
msgid "retrieve a single product tag (detailed view)"
msgstr "Pobieranie pojedynczego tagu produktu (widok szczegółowy)"
-#: engine/core/docs/drf/viewsets.py:1245
+#: engine/core/docs/drf/viewsets.py:1325
msgid "create a product tag"
msgstr "Utwórz tag produktu"
-#: engine/core/docs/drf/viewsets.py:1252
+#: engine/core/docs/drf/viewsets.py:1335
msgid "delete a product tag"
msgstr "Usuwanie tagu produktu"
-#: engine/core/docs/drf/viewsets.py:1259
+#: engine/core/docs/drf/viewsets.py:1342
msgid "rewrite an existing product tag saving non-editables"
msgstr "Przepisz istniejący tag produktu, zapisując nieedytowalne elementy"
-#: engine/core/docs/drf/viewsets.py:1266
+#: engine/core/docs/drf/viewsets.py:1350
msgid "rewrite some fields of an existing product tag saving non-editables"
msgstr ""
"Przepisz niektóre pola istniejącej kategorii, zapisując elementy "
"nieedytowalne"
-#: engine/core/elasticsearch/__init__.py:122
-#: engine/core/elasticsearch/__init__.py:570
+#: engine/core/elasticsearch/__init__.py:127
+#: engine/core/elasticsearch/__init__.py:627
msgid "no search term provided."
msgstr "Nie podano wyszukiwanego hasła."
-#: engine/core/filters.py:69 engine/core/filters.py:426
-#: engine/core/filters.py:553
+#: engine/core/filters.py:78 engine/core/filters.py:484
+#: engine/core/filters.py:625
msgid "Search"
msgstr "Wyszukiwanie"
-#: engine/core/filters.py:70 engine/core/filters.py:583
-#: engine/core/filters.py:612
+#: engine/core/filters.py:79 engine/core/filters.py:662
+#: engine/core/filters.py:691
msgid "UUID"
msgstr "UUID"
-#: engine/core/filters.py:71 engine/core/filters.py:428
-#: engine/core/filters.py:555
+#: engine/core/filters.py:80 engine/core/filters.py:487
+#: engine/core/filters.py:627
msgid "Name"
msgstr "Nazwa"
-#: engine/core/filters.py:72 engine/core/filters.py:557
+#: engine/core/filters.py:82 engine/core/filters.py:630
msgid "Categories"
msgstr "Kategorie"
-#: engine/core/filters.py:74
+#: engine/core/filters.py:86
msgid "Categories Slugs"
msgstr "Kategorie Ślimaki"
-#: engine/core/filters.py:75 engine/core/filters.py:436
+#: engine/core/filters.py:88 engine/core/filters.py:495
msgid "Tags"
msgstr "Tagi"
-#: engine/core/filters.py:76
+#: engine/core/filters.py:90
msgid "Min Price"
msgstr "Cena minimalna"
-#: engine/core/filters.py:77
+#: engine/core/filters.py:93
msgid "Max Price"
msgstr "Maksymalna cena"
-#: engine/core/filters.py:78
+#: engine/core/filters.py:95
msgid "Is Active"
msgstr "Jest aktywny"
-#: engine/core/filters.py:79
+#: engine/core/filters.py:96
msgid "Brand"
msgstr "Marka"
-#: engine/core/filters.py:80
+#: engine/core/filters.py:97
msgid "Attributes"
msgstr "Atrybuty"
-#: engine/core/filters.py:81
+#: engine/core/filters.py:99
msgid "Quantity"
msgstr "Ilość"
-#: engine/core/filters.py:82 engine/core/filters.py:430
-#: engine/core/filters.py:556 engine/core/models.py:321
-#: engine/core/models.py:489 engine/core/models.py:644
+#: engine/core/filters.py:101 engine/core/filters.py:489
+#: engine/core/filters.py:628 engine/core/models.py:327
+#: engine/core/models.py:508 engine/core/models.py:665
msgid "Slug"
msgstr "Ślimak"
-#: engine/core/filters.py:83
+#: engine/core/filters.py:102
msgid "Is Digital"
msgstr "Czy cyfrowy"
-#: engine/core/filters.py:84
+#: engine/core/filters.py:104
msgid "Include sub-categories"
msgstr "Uwzględnienie podkategorii"
-#: engine/core/filters.py:87
+#: engine/core/filters.py:108
msgid "Include personal ordered"
msgstr "Obejmuje produkty zamawiane osobiście"
-#: engine/core/filters.py:89 engine/core/models.py:648
+#: engine/core/filters.py:110 engine/core/models.py:669
msgid "SKU"
msgstr "SKU"
-#: engine/core/filters.py:184
+#: engine/core/filters.py:212
msgid "there must be a category_uuid to use include_subcategories flag"
msgstr "Aby użyć flagi include_subcategories, musi istnieć category_uuid"
-#: engine/core/filters.py:353
+#: engine/core/filters.py:398
msgid "Search (ID, product name or part number)"
msgstr "Wyszukiwanie (ID, nazwa produktu lub numer części)"
-#: engine/core/filters.py:356
+#: engine/core/filters.py:402
msgid "Bought after (inclusive)"
msgstr "Kupione po (włącznie)"
-#: engine/core/filters.py:357
+#: engine/core/filters.py:405
msgid "Bought before (inclusive)"
msgstr "Kupione wcześniej (włącznie)"
-#: engine/core/filters.py:360 engine/core/filters.py:407
-#: engine/core/filters.py:614
+#: engine/core/filters.py:410 engine/core/filters.py:461
+#: engine/core/filters.py:696
msgid "User email"
msgstr "E-mail użytkownika"
-#: engine/core/filters.py:361 engine/core/filters.py:408
-#: engine/core/filters.py:592 engine/core/filters.py:613
+#: engine/core/filters.py:413 engine/core/filters.py:464
+#: engine/core/filters.py:671 engine/core/filters.py:693
msgid "User UUID"
msgstr "UUID użytkownika"
-#: engine/core/filters.py:362
+#: engine/core/filters.py:415
msgid "Status"
msgstr "Status"
-#: engine/core/filters.py:366
+#: engine/core/filters.py:419
msgid "Human Readable ID"
msgstr "Identyfikator czytelny dla człowieka"
-#: engine/core/filters.py:429
+#: engine/core/filters.py:488
msgid "Parent"
msgstr "Rodzic"
-#: engine/core/filters.py:433
+#: engine/core/filters.py:492
msgid "Whole category(has at least 1 product or not)"
msgstr "Cała kategoria (ma co najmniej 1 produkt lub nie)"
-#: engine/core/filters.py:437
+#: engine/core/filters.py:496
msgid "Level"
msgstr "Poziom"
-#: engine/core/filters.py:587
+#: engine/core/filters.py:666
msgid "Product UUID"
msgstr "UUID produktu"
-#: engine/core/graphene/mutations.py:40
+#: engine/core/graphene/mutations.py:41
msgid "key to look for in or set into the cache"
msgstr "Klucz do wyszukania lub ustawienia w pamięci podręcznej"
-#: engine/core/graphene/mutations.py:41
+#: engine/core/graphene/mutations.py:43
msgid "data to store in cache"
msgstr "Dane do przechowywania w pamięci podręcznej"
-#: engine/core/graphene/mutations.py:44
+#: engine/core/graphene/mutations.py:46
msgid "timeout in seconds to set the data for into the cache"
msgstr "Limit czasu w sekundach na wprowadzenie danych do pamięci podręcznej"
-#: engine/core/graphene/mutations.py:47
+#: engine/core/graphene/mutations.py:49
msgid "cached data"
msgstr "Dane w pamięci podręcznej"
-#: engine/core/graphene/mutations.py:62
+#: engine/core/graphene/mutations.py:64
msgid "camelized JSON data from the requested URL"
msgstr "Kamelizowane dane JSON z żądanego adresu URL"
-#: engine/core/graphene/mutations.py:67 engine/core/views.py:257
+#: engine/core/graphene/mutations.py:69 engine/core/views.py:249
msgid "only URLs starting with http(s):// are allowed"
msgstr "Dozwolone są tylko adresy URL zaczynające się od http(s)://"
-#: engine/core/graphene/mutations.py:83
+#: engine/core/graphene/mutations.py:87
msgid "add a product to the order"
msgstr "Dodawanie produktu do zamówienia"
-#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131
-#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287
+#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139
+#: engine/core/graphene/mutations.py:255 engine/core/graphene/mutations.py:307
#, python-brace-format
msgid "order {order_uuid} not found"
msgstr "Nie znaleziono zamówienia {order_uuid}!"
-#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159
+#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167
msgid "remove a product from the order"
msgstr "Usunięcie produktu z zamówienia"
-#: engine/core/graphene/mutations.py:137
+#: engine/core/graphene/mutations.py:145
msgid "remove all products from the order"
msgstr "Usuń wszystkie produkty z zamówienia"
-#: engine/core/graphene/mutations.py:182
+#: engine/core/graphene/mutations.py:190
msgid "buy an order"
msgstr "Kup zamówienie"
-#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265
+#: engine/core/graphene/mutations.py:221 engine/core/graphene/mutations.py:283
msgid "please provide either order_uuid or order_hr_id - mutually exclusive"
msgstr "Podaj albo order_uuid albo order_hr_id - wzajemnie się wykluczają!"
-#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501
-#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712
+#: engine/core/graphene/mutations.py:250 engine/core/graphene/mutations.py:525
+#: engine/core/graphene/mutations.py:574 engine/core/viewsets.py:753
msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr "Nieprawidłowy typ pochodzi z metody order.buy(): {type(instance)!s}"
-#: engine/core/graphene/mutations.py:245
+#: engine/core/graphene/mutations.py:261
msgid "perform an action on a list of products in the order"
msgstr "Wykonanie akcji na liście produktów w zamówieniu"
-#: engine/core/graphene/mutations.py:250
+#: engine/core/graphene/mutations.py:266
msgid "remove/add"
msgstr "Usuń/Dodaj"
-#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323
+#: engine/core/graphene/mutations.py:302 engine/core/graphene/mutations.py:343
msgid "action must be either add or remove"
msgstr "Akcją musi być \"dodaj\" lub \"usuń\"!"
-#: engine/core/graphene/mutations.py:293
+#: engine/core/graphene/mutations.py:313
msgid "perform an action on a list of products in the wishlist"
msgstr "Wykonanie akcji na liście produktów na liście życzeń"
-#: engine/core/graphene/mutations.py:311
+#: engine/core/graphene/mutations.py:331
msgid "please provide wishlist_uuid value"
msgstr "Podaj wartość `wishlist_uuid`."
-#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404
-#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460
-#: engine/core/graphene/mutations.py:504
+#: engine/core/graphene/mutations.py:348 engine/core/graphene/mutations.py:424
+#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480
+#: engine/core/graphene/mutations.py:530
#, python-brace-format
msgid "wishlist {wishlist_uuid} not found"
msgstr "Lista życzeń {wishlist_uuid} nie została znaleziona!"
-#: engine/core/graphene/mutations.py:382
+#: engine/core/graphene/mutations.py:402
msgid "add a product to the wishlist"
msgstr "Dodawanie produktu do zamówienia"
-#: engine/core/graphene/mutations.py:410
+#: engine/core/graphene/mutations.py:430
msgid "remove a product from the wishlist"
msgstr "Usunięcie produktu z zamówienia"
-#: engine/core/graphene/mutations.py:438
+#: engine/core/graphene/mutations.py:458
msgid "remove all products from the wishlist"
msgstr "Usunięcie produktu z zamówienia"
-#: engine/core/graphene/mutations.py:466
+#: engine/core/graphene/mutations.py:486
msgid "buy all products from the wishlist"
msgstr "Usunięcie produktu z zamówienia"
-#: engine/core/graphene/mutations.py:510
+#: engine/core/graphene/mutations.py:536
msgid "buy a product"
msgstr "Kup zamówienie"
-#: engine/core/graphene/mutations.py:516
+#: engine/core/graphene/mutations.py:543
msgid ""
-"please send the attributes as the string formatted like "
-"attr1=value1,attr2=value2"
+"please send the attributes as the string formatted like attr1=value1,"
+"attr2=value2"
msgstr ""
"Prześlij atrybuty jako ciąg znaków sformatowany w następujący sposób: "
"attr1=value1,attr2=value2"
-#: engine/core/graphene/mutations.py:549
+#: engine/core/graphene/mutations.py:581
msgid "add or delete a feedback for orderproduct"
msgstr "Dodawanie lub usuwanie opinii dla produktu zamówienia"
-#: engine/core/graphene/mutations.py:573
+#: engine/core/graphene/mutations.py:607
msgid "action must be either `add` or `remove`"
msgstr "Akcją musi być `add` lub `remove`!"
-#: engine/core/graphene/mutations.py:576
+#: engine/core/graphene/mutations.py:610
#, python-brace-format
msgid "order product {order_product_uuid} not found"
msgstr "Orderproduct {order_product_uuid} nie został znaleziony!"
-#: engine/core/graphene/mutations.py:582
+#: engine/core/graphene/mutations.py:617
msgid "original address string provided by the user"
msgstr "Oryginalny ciąg adresu podany przez użytkownika"
-#: engine/core/graphene/mutations.py:618 engine/core/models.py:955
-#: engine/core/models.py:968 engine/core/models.py:1383
-#: engine/core/models.py:1412 engine/core/models.py:1437
-#: engine/core/viewsets.py:715
+#: engine/core/graphene/mutations.py:654 engine/core/models.py:978
+#: engine/core/models.py:991 engine/core/models.py:1435
+#: engine/core/models.py:1466 engine/core/models.py:1497
+#: engine/core/viewsets.py:760
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr "{name} nie istnieje: {uuid}!"
-#: engine/core/graphene/mutations.py:632
+#: engine/core/graphene/mutations.py:668
msgid "limit must be between 1 and 10"
msgstr "Limit musi wynosić od 1 do 10"
-#: engine/core/graphene/mutations.py:681
+#: engine/core/graphene/mutations.py:717
msgid "elasticsearch - works like a charm"
msgstr "ElasticSearch - działa jak urok"
#: engine/core/graphene/object_types.py:82
-#: engine/core/graphene/object_types.py:370
-#: engine/core/graphene/object_types.py:417 engine/core/models.py:772
-#: engine/core/models.py:1250 engine/core/models.py:1897
+#: engine/core/graphene/object_types.py:417
+#: engine/core/graphene/object_types.py:468 engine/core/models.py:795
+#: engine/core/models.py:1289 engine/core/models.py:2021
msgid "attributes"
msgstr "Atrybuty"
@@ -1278,90 +1286,89 @@ msgid "groups of attributes"
msgstr "Grupy atrybutów"
#: engine/core/graphene/object_types.py:116
-#: engine/core/graphene/object_types.py:193
-#: engine/core/graphene/object_types.py:223 engine/core/models.py:432
+#: engine/core/graphene/object_types.py:214
+#: engine/core/graphene/object_types.py:252 engine/core/models.py:451
msgid "categories"
msgstr "Kategorie"
-#: engine/core/graphene/object_types.py:124 engine/core/models.py:503
+#: engine/core/graphene/object_types.py:132 engine/core/models.py:522
msgid "brands"
msgstr "Marki"
-#: engine/core/graphene/object_types.py:195
+#: engine/core/graphene/object_types.py:216
msgid "category image url"
msgstr "Kategorie"
-#: engine/core/graphene/object_types.py:196
-#: engine/core/graphene/object_types.py:317 engine/core/models.py:283
+#: engine/core/graphene/object_types.py:217
+#: engine/core/graphene/object_types.py:362 engine/core/models.py:289
msgid "markup percentage"
msgstr "Procentowy narzut"
-#: engine/core/graphene/object_types.py:199
+#: engine/core/graphene/object_types.py:221
msgid "which attributes and values can be used for filtering this category."
msgstr ""
"Które atrybuty i wartości mogą być używane do filtrowania tej kategorii."
-#: engine/core/graphene/object_types.py:203
-msgid ""
-"minimum and maximum prices for products in this category, if available."
+#: engine/core/graphene/object_types.py:227
+msgid "minimum and maximum prices for products in this category, if available."
msgstr ""
"Minimalne i maksymalne ceny produktów w tej kategorii, jeśli są dostępne."
-#: engine/core/graphene/object_types.py:205
+#: engine/core/graphene/object_types.py:231
msgid "tags for this category"
msgstr "Tagi dla tej kategorii"
-#: engine/core/graphene/object_types.py:206
+#: engine/core/graphene/object_types.py:234
msgid "products in this category"
msgstr "Produkty w tej kategorii"
-#: engine/core/graphene/object_types.py:324 engine/core/models.py:188
+#: engine/core/graphene/object_types.py:369 engine/core/models.py:194
msgid "vendors"
msgstr "Sprzedawcy"
-#: engine/core/graphene/object_types.py:328
+#: engine/core/graphene/object_types.py:373
msgid "Latitude (Y coordinate)"
msgstr "Szerokość geograficzna (współrzędna Y)"
-#: engine/core/graphene/object_types.py:329
+#: engine/core/graphene/object_types.py:374
msgid "Longitude (X coordinate)"
msgstr "Długość geograficzna (współrzędna X)"
-#: engine/core/graphene/object_types.py:358
+#: engine/core/graphene/object_types.py:403
msgid "comment"
msgstr "Jak"
-#: engine/core/graphene/object_types.py:359
-#: engine/core/graphene/object_types.py:483
+#: engine/core/graphene/object_types.py:405
+#: engine/core/graphene/object_types.py:539
msgid "rating value from 1 to 10, inclusive, or 0 if not set."
msgstr "Wartość oceny od 1 do 10 włącznie lub 0, jeśli nie jest ustawiona."
-#: engine/core/graphene/object_types.py:366
+#: engine/core/graphene/object_types.py:413
msgid "represents feedback from a user."
msgstr "Reprezentuje informacje zwrotne od użytkownika."
-#: engine/core/graphene/object_types.py:371
-#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244
+#: engine/core/graphene/object_types.py:418
+#: engine/core/graphene/object_types.py:469 engine/core/models.py:1283
msgid "notifications"
msgstr "Powiadomienia"
-#: engine/core/graphene/object_types.py:372
+#: engine/core/graphene/object_types.py:420
msgid "download url for this order product if applicable"
msgstr "Adres URL pobierania dla tego produktu zamówienia, jeśli dotyczy"
-#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736
+#: engine/core/graphene/object_types.py:422 engine/core/models.py:1848
msgid "feedback"
msgstr "Informacje zwrotne"
-#: engine/core/graphene/object_types.py:407
+#: engine/core/graphene/object_types.py:456
msgid "a list of order products in this order"
msgstr "Lista zamówionych produktów w tym zamówieniu"
-#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214
+#: engine/core/graphene/object_types.py:458 engine/core/models.py:1253
msgid "billing address"
msgstr "Adres rozliczeniowy"
-#: engine/core/graphene/object_types.py:412
+#: engine/core/graphene/object_types.py:462
msgid ""
"shipping address for this order, leave blank if same as billing address or "
"if not applicable"
@@ -1369,53 +1376,53 @@ msgstr ""
"Adres wysyłki dla tego zamówienia, pozostaw pusty, jeśli jest taki sam jak "
"adres rozliczeniowy lub jeśli nie dotyczy"
-#: engine/core/graphene/object_types.py:414
+#: engine/core/graphene/object_types.py:465
msgid "total price of this order"
msgstr "Całkowita cena tego zamówienia"
-#: engine/core/graphene/object_types.py:415
+#: engine/core/graphene/object_types.py:466
msgid "total quantity of products in order"
msgstr "Całkowita ilość produktów w zamówieniu"
-#: engine/core/graphene/object_types.py:416
+#: engine/core/graphene/object_types.py:467
msgid "are all products in the order digital"
msgstr "Czy wszystkie produkty w zamówieniu są cyfrowe?"
-#: engine/core/graphene/object_types.py:419
+#: engine/core/graphene/object_types.py:471
msgid "transactions for this order"
msgstr "Transakcje dla tego zamówienia"
-#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278
+#: engine/core/graphene/object_types.py:491 engine/core/models.py:1317
msgid "orders"
msgstr "Zamówienia"
-#: engine/core/graphene/object_types.py:459
+#: engine/core/graphene/object_types.py:512
msgid "image url"
msgstr "Adres URL obrazu"
-#: engine/core/graphene/object_types.py:466
+#: engine/core/graphene/object_types.py:519
msgid "product's images"
msgstr "Zdjęcia produktu"
-#: engine/core/graphene/object_types.py:473 engine/core/models.py:431
-#: engine/core/models.py:586
+#: engine/core/graphene/object_types.py:526 engine/core/models.py:450
+#: engine/core/models.py:607
msgid "category"
msgstr "Kategoria"
-#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737
+#: engine/core/graphene/object_types.py:528 engine/core/models.py:1849
msgid "feedbacks"
msgstr "Informacje zwrotne"
-#: engine/core/graphene/object_types.py:476 engine/core/models.py:502
-#: engine/core/models.py:595
+#: engine/core/graphene/object_types.py:529 engine/core/models.py:521
+#: engine/core/models.py:616
msgid "brand"
msgstr "Marka"
-#: engine/core/graphene/object_types.py:477 engine/core/models.py:106
+#: engine/core/graphene/object_types.py:531 engine/core/models.py:106
msgid "attribute groups"
msgstr "Grupy atrybutów"
-#: engine/core/graphene/object_types.py:478
+#: engine/core/graphene/object_types.py:533
#: engine/core/templates/digital_order_created_email.html:111
#: engine/core/templates/digital_order_delivered_email.html:109
#: engine/core/templates/shipped_order_created_email.html:109
@@ -1423,7 +1430,7 @@ msgstr "Grupy atrybutów"
msgid "price"
msgstr "Cena"
-#: engine/core/graphene/object_types.py:479
+#: engine/core/graphene/object_types.py:534
#: engine/core/templates/digital_order_created_email.html:110
#: engine/core/templates/digital_order_delivered_email.html:108
#: engine/core/templates/shipped_order_created_email.html:108
@@ -1431,39 +1438,39 @@ msgstr "Cena"
msgid "quantity"
msgstr "Ilość"
-#: engine/core/graphene/object_types.py:480
+#: engine/core/graphene/object_types.py:535
msgid "number of feedbacks"
msgstr "Liczba informacji zwrotnych"
-#: engine/core/graphene/object_types.py:481
+#: engine/core/graphene/object_types.py:536
msgid "only available for personal orders"
msgstr "Produkty dostępne tylko dla zamówień osobistych"
-#: engine/core/graphene/object_types.py:484
+#: engine/core/graphene/object_types.py:541
msgid "discount price"
msgstr "Cena rabatowa"
-#: engine/core/graphene/object_types.py:508 engine/core/models.py:658
+#: engine/core/graphene/object_types.py:565 engine/core/models.py:679
msgid "products"
msgstr "Produkty"
-#: engine/core/graphene/object_types.py:611
+#: engine/core/graphene/object_types.py:675
msgid "promocodes"
msgstr "Promocodes"
-#: engine/core/graphene/object_types.py:621
+#: engine/core/graphene/object_types.py:690
msgid "products on sale"
msgstr "Produkty w sprzedaży"
-#: engine/core/graphene/object_types.py:628 engine/core/models.py:904
+#: engine/core/graphene/object_types.py:698 engine/core/models.py:927
msgid "promotions"
msgstr "Promocje"
-#: engine/core/graphene/object_types.py:632 engine/core/models.py:187
+#: engine/core/graphene/object_types.py:702 engine/core/models.py:193
msgid "vendor"
msgstr "Sprzedawca"
-#: engine/core/graphene/object_types.py:633 engine/core/models.py:657
+#: engine/core/graphene/object_types.py:703 engine/core/models.py:678
#: engine/core/templates/digital_order_created_email.html:109
#: engine/core/templates/digital_order_delivered_email.html:107
#: engine/core/templates/shipped_order_created_email.html:107
@@ -1471,98 +1478,99 @@ msgstr "Sprzedawca"
msgid "product"
msgstr "Produkt"
-#: engine/core/graphene/object_types.py:644 engine/core/models.py:927
+#: engine/core/graphene/object_types.py:715 engine/core/models.py:950
msgid "wishlisted products"
msgstr "Produkty z listy życzeń"
-#: engine/core/graphene/object_types.py:650 engine/core/models.py:944
+#: engine/core/graphene/object_types.py:722 engine/core/models.py:967
msgid "wishlists"
msgstr "Listy życzeń"
-#: engine/core/graphene/object_types.py:654
+#: engine/core/graphene/object_types.py:727
msgid "tagged products"
msgstr "Produkty Tagged"
-#: engine/core/graphene/object_types.py:661 engine/core/models.py:224
-#: engine/core/models.py:601
+#: engine/core/graphene/object_types.py:735 engine/core/models.py:230
+#: engine/core/models.py:622
msgid "product tags"
msgstr "Tagi produktu"
-#: engine/core/graphene/object_types.py:665
+#: engine/core/graphene/object_types.py:740
msgid "tagged categories"
msgstr "Kategorie oznaczone tagami"
-#: engine/core/graphene/object_types.py:672
+#: engine/core/graphene/object_types.py:748
msgid "categories tags"
msgstr "Tagi kategorii"
-#: engine/core/graphene/object_types.py:676
+#: engine/core/graphene/object_types.py:752
msgid "project name"
msgstr "Nazwa projektu"
-#: engine/core/graphene/object_types.py:677
+#: engine/core/graphene/object_types.py:753
msgid "company name"
msgstr "Nazwa firmy"
-#: engine/core/graphene/object_types.py:678
+#: engine/core/graphene/object_types.py:754
msgid "company address"
msgstr "Adres firmy"
-#: engine/core/graphene/object_types.py:679
+#: engine/core/graphene/object_types.py:755
msgid "company phone number"
msgstr "Numer telefonu firmy"
-#: engine/core/graphene/object_types.py:680
+#: engine/core/graphene/object_types.py:758
msgid "email from, sometimes it must be used instead of host user value"
-msgstr "\"email from\", czasami musi być użyty zamiast wartości użytkownika hosta"
+msgstr ""
+"\"email from\", czasami musi być użyty zamiast wartości użytkownika hosta"
-#: engine/core/graphene/object_types.py:681
+#: engine/core/graphene/object_types.py:761
msgid "email host user"
msgstr "Użytkownik hosta poczty e-mail"
-#: engine/core/graphene/object_types.py:682
+#: engine/core/graphene/object_types.py:762
msgid "maximum amount for payment"
msgstr "Maksymalna kwota płatności"
-#: engine/core/graphene/object_types.py:683
+#: engine/core/graphene/object_types.py:763
msgid "minimum amount for payment"
msgstr "Minimalna kwota płatności"
-#: engine/core/graphene/object_types.py:684
+#: engine/core/graphene/object_types.py:764
msgid "analytics data"
msgstr "Dane analityczne"
-#: engine/core/graphene/object_types.py:685
+#: engine/core/graphene/object_types.py:765
msgid "advertisement data"
msgstr "Dane reklamowe"
-#: engine/core/graphene/object_types.py:688
+#: engine/core/graphene/object_types.py:768
msgid "company configuration"
msgstr "Konfiguracja"
-#: engine/core/graphene/object_types.py:692
+#: engine/core/graphene/object_types.py:772
msgid "language code"
msgstr "Kod języka"
-#: engine/core/graphene/object_types.py:693
+#: engine/core/graphene/object_types.py:773
msgid "language name"
msgstr "Nazwa języka"
-#: engine/core/graphene/object_types.py:694
+#: engine/core/graphene/object_types.py:774
msgid "language flag, if exists :)"
msgstr "Flaga języka, jeśli istnieje :)"
-#: engine/core/graphene/object_types.py:697
+#: engine/core/graphene/object_types.py:777
msgid "supported languages"
msgstr "Pobierz listę obsługiwanych języków"
-#: engine/core/graphene/object_types.py:728
-#: engine/core/graphene/object_types.py:729
-#: engine/core/graphene/object_types.py:730
+#: engine/core/graphene/object_types.py:809
+#: engine/core/graphene/object_types.py:812
+#: engine/core/graphene/object_types.py:815
msgid "products search results"
msgstr "Wyniki wyszukiwania produktów"
-#: engine/core/graphene/object_types.py:731
+#: engine/core/graphene/object_types.py:817
msgid "posts search results"
msgstr "Wyniki wyszukiwania produktów"
@@ -1591,7 +1599,7 @@ msgstr "Grupa atrybutów nadrzędnych"
msgid "attribute group's name"
msgstr "Nazwa grupy atrybutów"
-#: engine/core/models.py:105 engine/core/models.py:734
+#: engine/core/models.py:105 engine/core/models.py:755
msgid "attribute group"
msgstr "Grupa atrybutów"
@@ -1608,55 +1616,55 @@ msgstr ""
"Reprezentuje jednostkę dostawcy zdolną do przechowywania informacji o "
"zewnętrznych dostawcach i ich wymaganiach dotyczących interakcji. Klasa "
"Vendor służy do definiowania i zarządzania informacjami związanymi z "
-"zewnętrznym dostawcą. Przechowuje nazwę dostawcy, szczegóły uwierzytelniania"
-" wymagane do komunikacji oraz procentowe znaczniki stosowane do produktów "
+"zewnętrznym dostawcą. Przechowuje nazwę dostawcy, szczegóły uwierzytelniania "
+"wymagane do komunikacji oraz procentowe znaczniki stosowane do produktów "
"pobieranych od dostawcy. Model ten zachowuje również dodatkowe metadane i "
"ograniczenia, dzięki czemu nadaje się do użytku w systemach, które "
"współpracują z zewnętrznymi dostawcami."
-#: engine/core/models.py:124
+#: engine/core/models.py:125
msgid "stores credentials and endpoints required for vendor communication"
msgstr ""
"Przechowuje dane uwierzytelniające i punkty końcowe wymagane do komunikacji "
"API dostawcy."
-#: engine/core/models.py:125
+#: engine/core/models.py:127
msgid "authentication info"
msgstr "Informacje o uwierzytelnianiu"
-#: engine/core/models.py:130
+#: engine/core/models.py:132
msgid "define the markup for products retrieved from this vendor"
msgstr "Definiowanie znaczników dla produktów pobranych od tego dostawcy"
-#: engine/core/models.py:131
+#: engine/core/models.py:133
msgid "vendor markup percentage"
msgstr "Procentowa marża sprzedawcy"
-#: engine/core/models.py:135
+#: engine/core/models.py:137
msgid "name of this vendor"
msgstr "Nazwa tego sprzedawcy"
-#: engine/core/models.py:136
+#: engine/core/models.py:138
msgid "vendor name"
msgstr "Nazwa sprzedawcy"
-#: engine/core/models.py:147
+#: engine/core/models.py:153
msgid "response file"
msgstr "plik odpowiedzi"
-#: engine/core/models.py:148
+#: engine/core/models.py:154
msgid "vendor's last processing response"
msgstr "odpowiedź sprzedawcy na ostatnie przetwarzanie"
-#: engine/core/models.py:154
+#: engine/core/models.py:160
msgid "vendor's integration file path"
msgstr "Ścieżka do pliku integracji dostawcy"
-#: engine/core/models.py:155
+#: engine/core/models.py:161
msgid "integration path"
msgstr "Ścieżka integracji"
-#: engine/core/models.py:197
+#: engine/core/models.py:203
msgid ""
"Represents a product tag used for classifying or identifying products. The "
"ProductTag class is designed to uniquely identify and classify products "
@@ -1671,27 +1679,27 @@ msgstr ""
"Obsługuje operacje eksportowane przez mixiny i zapewnia dostosowanie "
"metadanych do celów administracyjnych."
-#: engine/core/models.py:209 engine/core/models.py:240
+#: engine/core/models.py:215 engine/core/models.py:246
msgid "internal tag identifier for the product tag"
msgstr "Wewnętrzny identyfikator tagu produktu"
-#: engine/core/models.py:210 engine/core/models.py:241
+#: engine/core/models.py:216 engine/core/models.py:247
msgid "tag name"
msgstr "Nazwa tagu"
-#: engine/core/models.py:214 engine/core/models.py:245
+#: engine/core/models.py:220 engine/core/models.py:251
msgid "user-friendly name for the product tag"
msgstr "Przyjazna dla użytkownika nazwa etykiety produktu"
-#: engine/core/models.py:215 engine/core/models.py:246
+#: engine/core/models.py:221 engine/core/models.py:252
msgid "tag display name"
msgstr "Wyświetlana nazwa znacznika"
-#: engine/core/models.py:223
+#: engine/core/models.py:229
msgid "product tag"
msgstr "Etykieta produktu"
-#: engine/core/models.py:229
+#: engine/core/models.py:235
msgid ""
"Represents a category tag used for products. This class models a category "
"tag that can be used to associate and classify products. It includes "
@@ -1702,15 +1710,15 @@ msgstr ""
"Zawiera atrybuty dla wewnętrznego identyfikatora tagu i przyjaznej dla "
"użytkownika nazwy wyświetlanej."
-#: engine/core/models.py:254
+#: engine/core/models.py:260
msgid "category tag"
msgstr "tag kategorii"
-#: engine/core/models.py:255 engine/core/models.py:327
+#: engine/core/models.py:261 engine/core/models.py:333
msgid "category tags"
msgstr "tagi kategorii"
-#: engine/core/models.py:260
+#: engine/core/models.py:266
msgid ""
"Represents a category entity to organize and group related items in a "
"hierarchical structure. Categories may have hierarchical relationships with "
@@ -1732,107 +1740,106 @@ msgstr ""
"administratorom określanie nazwy, opisu i hierarchii kategorii, a także "
"przypisywanie atrybutów, takich jak obrazy, tagi lub priorytety."
-#: engine/core/models.py:274
+#: engine/core/models.py:280
msgid "upload an image representing this category"
msgstr "Prześlij obraz reprezentujący tę kategorię"
-#: engine/core/models.py:277
+#: engine/core/models.py:283
msgid "category image"
msgstr "Obraz kategorii"
-#: engine/core/models.py:282
+#: engine/core/models.py:288
msgid "define a markup percentage for products in this category"
msgstr "Zdefiniuj procentowy narzut dla produktów w tej kategorii."
-#: engine/core/models.py:291
+#: engine/core/models.py:297
msgid "parent of this category to form a hierarchical structure"
msgstr "Rodzic tej kategorii w celu utworzenia struktury hierarchicznej"
-#: engine/core/models.py:292
+#: engine/core/models.py:298
msgid "parent category"
msgstr "Kategoria nadrzędna"
-#: engine/core/models.py:297
+#: engine/core/models.py:303
msgid "category name"
msgstr "Nazwa kategorii"
-#: engine/core/models.py:298
+#: engine/core/models.py:304
msgid "provide a name for this category"
msgstr "Podaj nazwę dla tej kategorii"
-#: engine/core/models.py:305
+#: engine/core/models.py:311
msgid "add a detailed description for this category"
msgstr "Dodaj szczegółowy opis dla tej kategorii"
-#: engine/core/models.py:306
+#: engine/core/models.py:312
msgid "category description"
msgstr "Opis kategorii"
-#: engine/core/models.py:326
+#: engine/core/models.py:332
msgid "tags that help describe or group this category"
msgstr "tagi, które pomagają opisać lub pogrupować tę kategorię"
-#: engine/core/models.py:333 engine/core/models.py:495
+#: engine/core/models.py:339 engine/core/models.py:514
msgid "priority"
msgstr "Priorytet"
-#: engine/core/models.py:438
+#: engine/core/models.py:457
msgid ""
"Represents a Brand object in the system. This class handles information and "
"attributes related to a brand, including its name, logos, description, "
"associated categories, a unique slug, and priority order. It allows for the "
-"organization and representation of brand-related data within the "
-"application."
+"organization and representation of brand-related data within the application."
msgstr ""
"Reprezentuje obiekt marki w systemie. Ta klasa obsługuje informacje i "
-"atrybuty związane z marką, w tym jej nazwę, logo, opis, powiązane kategorie,"
-" unikalny slug i kolejność priorytetów. Pozwala na organizację i "
+"atrybuty związane z marką, w tym jej nazwę, logo, opis, powiązane kategorie, "
+"unikalny slug i kolejność priorytetów. Pozwala na organizację i "
"reprezentację danych związanych z marką w aplikacji."
-#: engine/core/models.py:448
+#: engine/core/models.py:467
msgid "name of this brand"
msgstr "Nazwa tej marki"
-#: engine/core/models.py:449
+#: engine/core/models.py:468
msgid "brand name"
msgstr "Nazwa marki"
-#: engine/core/models.py:456
+#: engine/core/models.py:475
msgid "upload a logo representing this brand"
msgstr "Prześlij logo reprezentujące tę markę"
-#: engine/core/models.py:458
+#: engine/core/models.py:477
msgid "brand small image"
msgstr "Mały wizerunek marki"
-#: engine/core/models.py:464
+#: engine/core/models.py:483
msgid "upload a big logo representing this brand"
msgstr "Prześlij duże logo reprezentujące tę markę"
-#: engine/core/models.py:466
+#: engine/core/models.py:485
msgid "brand big image"
msgstr "Duży wizerunek marki"
-#: engine/core/models.py:471
+#: engine/core/models.py:490
msgid "add a detailed description of the brand"
msgstr "Dodaj szczegółowy opis marki"
-#: engine/core/models.py:472
+#: engine/core/models.py:491
msgid "brand description"
msgstr "Opis marki"
-#: engine/core/models.py:477
+#: engine/core/models.py:496
msgid "optional categories that this brand is associated with"
msgstr "Opcjonalne kategorie, z którymi powiązana jest ta marka"
-#: engine/core/models.py:478
+#: engine/core/models.py:497
msgid "associated categories"
msgstr "Kategorie"
-#: engine/core/models.py:508
+#: engine/core/models.py:527
msgid ""
-"Represents the stock of a product managed in the system. This class provides"
-" details about the relationship between vendors, products, and their stock "
+"Represents the stock of a product managed in the system. This class provides "
+"details about the relationship between vendors, products, and their stock "
"information, as well as inventory-related properties like price, purchase "
"price, quantity, SKU, and digital assets. It is part of the inventory "
"management system to allow tracking and evaluation of products available "
@@ -1845,72 +1852,72 @@ msgstr ""
"częścią systemu zarządzania zapasami, umożliwiając śledzenie i ocenę "
"produktów dostępnych od różnych dostawców."
-#: engine/core/models.py:520
+#: engine/core/models.py:539
msgid "the vendor supplying this product stock"
msgstr "Sprzedawca dostarczający ten produkt"
-#: engine/core/models.py:521
+#: engine/core/models.py:540
msgid "associated vendor"
msgstr "Powiązany sprzedawca"
-#: engine/core/models.py:525
+#: engine/core/models.py:544
msgid "final price to the customer after markups"
msgstr "Ostateczna cena dla klienta po uwzględnieniu marży"
-#: engine/core/models.py:526
+#: engine/core/models.py:545
msgid "selling price"
msgstr "Cena sprzedaży"
-#: engine/core/models.py:531
+#: engine/core/models.py:550
msgid "the product associated with this stock entry"
msgstr "Produkt powiązany z tym wpisem magazynowym"
-#: engine/core/models.py:532 engine/core/models.py:797
-#: engine/core/models.py:843 engine/core/models.py:1792
+#: engine/core/models.py:551 engine/core/models.py:820
+#: engine/core/models.py:866 engine/core/models.py:1904
msgid "associated product"
msgstr "Produkt powiązany"
-#: engine/core/models.py:539
+#: engine/core/models.py:558
msgid "the price paid to the vendor for this product"
msgstr "Cena zapłacona sprzedawcy za ten produkt"
-#: engine/core/models.py:540
+#: engine/core/models.py:559
msgid "vendor purchase price"
msgstr "Cena zakupu przez sprzedawcę"
-#: engine/core/models.py:544
+#: engine/core/models.py:563
msgid "available quantity of the product in stock"
msgstr "Dostępna ilość produktu w magazynie"
-#: engine/core/models.py:545
+#: engine/core/models.py:564
msgid "quantity in stock"
msgstr "Ilość w magazynie"
-#: engine/core/models.py:549
+#: engine/core/models.py:568
msgid "vendor-assigned SKU for identifying the product"
msgstr "Jednostki SKU przypisane przez dostawcę w celu identyfikacji produktu"
-#: engine/core/models.py:550
+#: engine/core/models.py:569
msgid "vendor sku"
msgstr "SKU sprzedawcy"
-#: engine/core/models.py:556
+#: engine/core/models.py:575
msgid "digital file associated with this stock if applicable"
msgstr "Plik cyfrowy powiązany z tymi zapasami, jeśli dotyczy"
-#: engine/core/models.py:557
+#: engine/core/models.py:576
msgid "digital file"
msgstr "Plik cyfrowy"
-#: engine/core/models.py:560
+#: engine/core/models.py:580
msgid "system attributes"
msgstr "Atrybuty systemu"
-#: engine/core/models.py:567
+#: engine/core/models.py:588
msgid "stock entries"
msgstr "Zapisy magazynowe"
-#: engine/core/models.py:572
+#: engine/core/models.py:593
msgid ""
"Represents a product with attributes such as category, brand, tags, digital "
"status, name, description, part number, and slug. Provides related utility "
@@ -1931,61 +1938,61 @@ msgstr ""
"definiowania i manipulowania danymi produktu i powiązanymi z nimi "
"informacjami w aplikacji."
-#: engine/core/models.py:585
+#: engine/core/models.py:606
msgid "category this product belongs to"
msgstr "Kategoria, do której należy ten produkt"
-#: engine/core/models.py:594
+#: engine/core/models.py:615
msgid "optionally associate this product with a brand"
msgstr "Opcjonalnie można powiązać ten produkt z marką"
-#: engine/core/models.py:600
+#: engine/core/models.py:621
msgid "tags that help describe or group this product"
msgstr "Tagi, które pomagają opisać lub pogrupować ten produkt"
-#: engine/core/models.py:605
+#: engine/core/models.py:626
msgid "indicates whether this product is digitally delivered"
msgstr "Wskazuje, czy produkt jest dostarczany cyfrowo."
-#: engine/core/models.py:606
+#: engine/core/models.py:627
msgid "is product digital"
msgstr "Czy produkt jest cyfrowy?"
-#: engine/core/models.py:612
+#: engine/core/models.py:633
msgid "provide a clear identifying name for the product"
msgstr "Wyraźna nazwa identyfikująca produkt"
-#: engine/core/models.py:613
+#: engine/core/models.py:634
msgid "product name"
msgstr "Nazwa produktu"
-#: engine/core/models.py:619 engine/core/models.py:892
+#: engine/core/models.py:640 engine/core/models.py:915
msgid "add a detailed description of the product"
msgstr "Dodaj szczegółowy opis produktu"
-#: engine/core/models.py:620
+#: engine/core/models.py:641
msgid "product description"
msgstr "Opis produktu"
-#: engine/core/models.py:627
+#: engine/core/models.py:648
msgid "part number for this product"
msgstr "Numer części dla tego produktu"
-#: engine/core/models.py:628
+#: engine/core/models.py:649
msgid "part number"
msgstr "Numer części"
-#: engine/core/models.py:647
+#: engine/core/models.py:668
msgid "stock keeping unit for this product"
msgstr "Jednostka magazynowa dla tego produktu"
-#: engine/core/models.py:720
+#: engine/core/models.py:741
msgid ""
"Represents an attribute in the system. This class is used to define and "
"manage attributes, which are customizable pieces of data that can be "
"associated with other entities. Attributes have associated categories, "
-"groups, value types, and names. The model supports multiple types of values,"
-" including string, integer, float, boolean, array, and object. This allows "
+"groups, value types, and names. The model supports multiple types of values, "
+"including string, integer, float, boolean, array, and object. This allows "
"for dynamic and flexible data structuring."
msgstr ""
"Reprezentuje atrybut w systemie. Ta klasa jest używana do definiowania i "
@@ -1995,91 +2002,91 @@ msgstr ""
"string, integer, float, boolean, array i object. Pozwala to na dynamiczną i "
"elastyczną strukturę danych."
-#: engine/core/models.py:733
+#: engine/core/models.py:754
msgid "group of this attribute"
msgstr "Grupa tego atrybutu"
-#: engine/core/models.py:739
+#: engine/core/models.py:760
msgid "string"
msgstr "String"
-#: engine/core/models.py:740
+#: engine/core/models.py:761
msgid "integer"
msgstr "Integer"
-#: engine/core/models.py:741
+#: engine/core/models.py:762
msgid "float"
msgstr "Pływak"
-#: engine/core/models.py:742
+#: engine/core/models.py:763
msgid "boolean"
msgstr "Wartość logiczna"
-#: engine/core/models.py:743
+#: engine/core/models.py:764
msgid "array"
msgstr "Tablica"
-#: engine/core/models.py:744
+#: engine/core/models.py:765
msgid "object"
msgstr "Obiekt"
-#: engine/core/models.py:746
+#: engine/core/models.py:767
msgid "type of the attribute's value"
msgstr "Typ wartości atrybutu"
-#: engine/core/models.py:747
+#: engine/core/models.py:768
msgid "value type"
msgstr "Typ wartości"
-#: engine/core/models.py:752
+#: engine/core/models.py:773
msgid "name of this attribute"
msgstr "Nazwa tego atrybutu"
-#: engine/core/models.py:753
+#: engine/core/models.py:774
msgid "attribute's name"
msgstr "Nazwa atrybutu"
-#: engine/core/models.py:758
+#: engine/core/models.py:779
msgid "is filterable"
msgstr "można filtrować"
-#: engine/core/models.py:759
+#: engine/core/models.py:781
msgid "designates whether this attribute can be used for filtering or not"
msgstr ""
"Które atrybuty i wartości mogą być używane do filtrowania tej kategorii."
-#: engine/core/models.py:771 engine/core/models.py:789
+#: engine/core/models.py:794 engine/core/models.py:812
#: engine/core/templates/digital_order_delivered_email.html:134
msgid "attribute"
msgstr "Atrybut"
-#: engine/core/models.py:777
+#: engine/core/models.py:800
msgid ""
-"Represents a specific value for an attribute that is linked to a product. It"
-" links the 'attribute' to a unique 'value', allowing better organization and"
-" dynamic representation of product characteristics."
+"Represents a specific value for an attribute that is linked to a product. It "
+"links the 'attribute' to a unique 'value', allowing better organization and "
+"dynamic representation of product characteristics."
msgstr ""
"Reprezentuje określoną wartość atrybutu powiązanego z produktem. Łączy "
"\"atrybut\" z unikalną \"wartością\", umożliwiając lepszą organizację i "
"dynamiczną reprezentację cech produktu."
-#: engine/core/models.py:788
+#: engine/core/models.py:811
msgid "attribute of this value"
msgstr "Atrybut tej wartości"
-#: engine/core/models.py:796
+#: engine/core/models.py:819
msgid "the specific product associated with this attribute's value"
msgstr "Konkretny produkt powiązany z wartością tego atrybutu"
-#: engine/core/models.py:802
+#: engine/core/models.py:825
msgid "the specific value for this attribute"
msgstr "Konkretna wartość dla tego atrybutu"
-#: engine/core/models.py:815
+#: engine/core/models.py:838
msgid ""
"Represents a product image associated with a product in the system. This "
-"class is designed to manage images for products, including functionality for"
-" uploading image files, associating them with specific products, and "
+"class is designed to manage images for products, including functionality for "
+"uploading image files, associating them with specific products, and "
"determining their display order. It also includes an accessibility feature "
"with alternative text for the images."
msgstr ""
@@ -2089,88 +2096,87 @@ msgstr ""
"określania kolejności ich wyświetlania. Zawiera również funkcję dostępności "
"z tekstem alternatywnym dla obrazów."
-#: engine/core/models.py:826
+#: engine/core/models.py:849
msgid "provide alternative text for the image for accessibility"
-msgstr ""
-"Zapewnienie alternatywnego tekstu dla obrazu w celu ułatwienia dostępu"
+msgstr "Zapewnienie alternatywnego tekstu dla obrazu w celu ułatwienia dostępu"
-#: engine/core/models.py:827
+#: engine/core/models.py:850
msgid "image alt text"
msgstr "Tekst alternatywny obrazu"
-#: engine/core/models.py:830
+#: engine/core/models.py:853
msgid "upload the image file for this product"
msgstr "Prześlij plik obrazu dla tego produktu"
-#: engine/core/models.py:831 engine/core/models.py:862
+#: engine/core/models.py:854 engine/core/models.py:885
msgid "product image"
msgstr "Obraz produktu"
-#: engine/core/models.py:836
+#: engine/core/models.py:859
msgid "determines the order in which images are displayed"
msgstr "Określa kolejność wyświetlania obrazów"
-#: engine/core/models.py:837
+#: engine/core/models.py:860
msgid "display priority"
msgstr "Priorytet wyświetlania"
-#: engine/core/models.py:842
+#: engine/core/models.py:865
msgid "the product that this image represents"
msgstr "Produkt, który przedstawia ten obraz"
-#: engine/core/models.py:863
+#: engine/core/models.py:886
msgid "product images"
msgstr "Zdjęcia produktów"
-#: engine/core/models.py:868
+#: engine/core/models.py:891
msgid ""
"Represents a promotional campaign for products with a discount. This class "
"is used to define and manage promotional campaigns that offer a percentage-"
"based discount for products. The class includes attributes for setting the "
"discount rate, providing details about the promotion, and linking it to the "
-"applicable products. It integrates with the product catalog to determine the"
-" affected items in the campaign."
+"applicable products. It integrates with the product catalog to determine the "
+"affected items in the campaign."
msgstr ""
"Reprezentuje kampanię promocyjną dla produktów z rabatem. Ta klasa służy do "
-"definiowania i zarządzania kampaniami promocyjnymi, które oferują procentowy"
-" rabat na produkty. Klasa zawiera atrybuty do ustawiania stopy rabatu, "
+"definiowania i zarządzania kampaniami promocyjnymi, które oferują procentowy "
+"rabat na produkty. Klasa zawiera atrybuty do ustawiania stopy rabatu, "
"dostarczania szczegółów na temat promocji i łączenia jej z odpowiednimi "
"produktami. Integruje się z katalogiem produktów w celu określenia pozycji, "
"których dotyczy kampania."
-#: engine/core/models.py:880
+#: engine/core/models.py:903
msgid "percentage discount for the selected products"
msgstr "Rabat procentowy na wybrane produkty"
-#: engine/core/models.py:881
+#: engine/core/models.py:904
msgid "discount percentage"
msgstr "Procent rabatu"
-#: engine/core/models.py:886
+#: engine/core/models.py:909
msgid "provide a unique name for this promotion"
msgstr "Podaj unikalną nazwę tej promocji"
-#: engine/core/models.py:887
+#: engine/core/models.py:910
msgid "promotion name"
msgstr "Nazwa promocji"
-#: engine/core/models.py:893
+#: engine/core/models.py:916
msgid "promotion description"
msgstr "Opis promocji"
-#: engine/core/models.py:898
+#: engine/core/models.py:921
msgid "select which products are included in this promotion"
msgstr "Wybierz produkty objęte promocją"
-#: engine/core/models.py:899
+#: engine/core/models.py:922
msgid "included products"
msgstr "Dołączone produkty"
-#: engine/core/models.py:903
+#: engine/core/models.py:926
msgid "promotion"
msgstr "Promocja"
-#: engine/core/models.py:914
+#: engine/core/models.py:937
msgid ""
"Represents a user's wishlist for storing and managing desired products. The "
"class provides functionality to manage a collection of products, supporting "
@@ -2178,64 +2184,64 @@ msgid ""
"operations for adding and removing multiple products at once."
msgstr ""
"Reprezentuje listę życzeń użytkownika do przechowywania i zarządzania "
-"pożądanymi produktami. Klasa zapewnia funkcjonalność do zarządzania kolekcją"
-" produktów, wspierając operacje takie jak dodawanie i usuwanie produktów, a "
+"pożądanymi produktami. Klasa zapewnia funkcjonalność do zarządzania kolekcją "
+"produktów, wspierając operacje takie jak dodawanie i usuwanie produktów, a "
"także wspierając operacje dodawania i usuwania wielu produktów jednocześnie."
-#: engine/core/models.py:926
+#: engine/core/models.py:949
msgid "products that the user has marked as wanted"
msgstr "Produkty, które użytkownik oznaczył jako poszukiwane"
-#: engine/core/models.py:934
+#: engine/core/models.py:957
msgid "user who owns this wishlist"
msgstr "Użytkownik posiadający tę listę życzeń"
-#: engine/core/models.py:935
+#: engine/core/models.py:958
msgid "wishlist owner"
msgstr "Właściciel listy życzeń"
-#: engine/core/models.py:943
+#: engine/core/models.py:966
msgid "wishlist"
msgstr "Lista życzeń"
-#: engine/core/models.py:985
+#: engine/core/models.py:1008
msgid ""
"Represents a documentary record tied to a product. This class is used to "
"store information about documentaries related to specific products, "
"including file uploads and their metadata. It contains methods and "
"properties to handle the file type and storage path for the documentary "
-"files. It extends functionality from specific mixins and provides additional"
-" custom features."
+"files. It extends functionality from specific mixins and provides additional "
+"custom features."
msgstr ""
"Reprezentuje rekord dokumentu powiązany z produktem. Ta klasa służy do "
-"przechowywania informacji o dokumentach związanych z określonymi produktami,"
-" w tym przesyłanych plików i ich metadanych. Zawiera metody i właściwości do"
-" obsługi typu pliku i ścieżki przechowywania plików dokumentów. Rozszerza "
+"przechowywania informacji o dokumentach związanych z określonymi produktami, "
+"w tym przesyłanych plików i ich metadanych. Zawiera metody i właściwości do "
+"obsługi typu pliku i ścieżki przechowywania plików dokumentów. Rozszerza "
"funkcjonalność z określonych miksów i zapewnia dodatkowe niestandardowe "
"funkcje."
-#: engine/core/models.py:998
+#: engine/core/models.py:1023
msgid "documentary"
msgstr "Film dokumentalny"
-#: engine/core/models.py:999
+#: engine/core/models.py:1024
msgid "documentaries"
msgstr "Filmy dokumentalne"
-#: engine/core/models.py:1009
+#: engine/core/models.py:1034
msgid "unresolved"
msgstr "Nierozwiązany"
-#: engine/core/models.py:1014
+#: engine/core/models.py:1039
msgid ""
-"Represents an address entity that includes location details and associations"
-" with a user. Provides functionality for geographic and address data "
-"storage, as well as integration with geocoding services. This class is "
-"designed to store detailed address information including components like "
-"street, city, region, country, and geolocation (longitude and latitude). It "
-"supports integration with geocoding APIs, enabling the storage of raw API "
-"responses for further processing or inspection. The class also allows "
-"associating an address with a user, facilitating personalized data handling."
+"Represents an address entity that includes location details and associations "
+"with a user. Provides functionality for geographic and address data storage, "
+"as well as integration with geocoding services. This class is designed to "
+"store detailed address information including components like street, city, "
+"region, country, and geolocation (longitude and latitude). It supports "
+"integration with geocoding APIs, enabling the storage of raw API responses "
+"for further processing or inspection. The class also allows associating an "
+"address with a user, facilitating personalized data handling."
msgstr ""
"Reprezentuje jednostkę adresu, która zawiera szczegóły lokalizacji i "
"powiązania z użytkownikiem. Zapewnia funkcjonalność przechowywania danych "
@@ -2243,64 +2249,64 @@ msgstr ""
"Klasa ta została zaprojektowana do przechowywania szczegółowych informacji "
"adresowych, w tym elementów takich jak ulica, miasto, region, kraj i "
"geolokalizacja (długość i szerokość geograficzna). Obsługuje integrację z "
-"interfejsami API geokodowania, umożliwiając przechowywanie nieprzetworzonych"
-" odpowiedzi API do dalszego przetwarzania lub kontroli. Klasa umożliwia "
+"interfejsami API geokodowania, umożliwiając przechowywanie nieprzetworzonych "
+"odpowiedzi API do dalszego przetwarzania lub kontroli. Klasa umożliwia "
"również powiązanie adresu z użytkownikiem, ułatwiając spersonalizowaną "
"obsługę danych."
-#: engine/core/models.py:1029
+#: engine/core/models.py:1054
msgid "address line for the customer"
msgstr "Linia adresu dla klienta"
-#: engine/core/models.py:1030
+#: engine/core/models.py:1055
msgid "address line"
msgstr "Linia adresowa"
-#: engine/core/models.py:1032
+#: engine/core/models.py:1057
msgid "street"
msgstr "ul."
-#: engine/core/models.py:1033
+#: engine/core/models.py:1058
msgid "district"
msgstr "Okręg"
-#: engine/core/models.py:1034
+#: engine/core/models.py:1059
msgid "city"
msgstr "Miasto"
-#: engine/core/models.py:1035
+#: engine/core/models.py:1060
msgid "region"
msgstr "Region"
-#: engine/core/models.py:1036
+#: engine/core/models.py:1061
msgid "postal code"
msgstr "Kod pocztowy"
-#: engine/core/models.py:1037
+#: engine/core/models.py:1062
msgid "country"
msgstr "Kraj"
-#: engine/core/models.py:1044
+#: engine/core/models.py:1069
msgid "geolocation point: (longitude, latitude)"
msgstr "Geolocation Point(Longitude, Latitude)"
-#: engine/core/models.py:1047
+#: engine/core/models.py:1075
msgid "full JSON response from geocoder for this address"
msgstr "Pełna odpowiedź JSON z geokodera dla tego adresu"
-#: engine/core/models.py:1052
+#: engine/core/models.py:1081
msgid "stored JSON response from the geocoding service"
msgstr "Przechowywana odpowiedź JSON z usługi geokodowania"
-#: engine/core/models.py:1060
+#: engine/core/models.py:1091
msgid "address"
msgstr "Adres"
-#: engine/core/models.py:1061
+#: engine/core/models.py:1092
msgid "addresses"
msgstr "Adresy"
-#: engine/core/models.py:1073
+#: engine/core/models.py:1104
msgid ""
"Represents a promotional code that can be used for discounts, managing its "
"validity, type of discount, and application. The PromoCode class stores "
@@ -2317,73 +2323,73 @@ msgstr ""
"Obejmuje funkcję sprawdzania poprawności i stosowania kodu promocyjnego do "
"zamówienia, zapewniając jednocześnie spełnienie ograniczeń."
-#: engine/core/models.py:1087
+#: engine/core/models.py:1118
msgid "unique code used by a user to redeem a discount"
msgstr "Unikalny kod używany przez użytkownika do realizacji rabatu."
-#: engine/core/models.py:1088
+#: engine/core/models.py:1119
msgid "promo code identifier"
msgstr "Identyfikator kodu promocyjnego"
-#: engine/core/models.py:1095
+#: engine/core/models.py:1126
msgid "fixed discount amount applied if percent is not used"
msgstr "Stała kwota rabatu stosowana, jeśli procent nie jest używany"
-#: engine/core/models.py:1096
+#: engine/core/models.py:1127
msgid "fixed discount amount"
msgstr "Stała kwota rabatu"
-#: engine/core/models.py:1102
+#: engine/core/models.py:1133
msgid "percentage discount applied if fixed amount is not used"
msgstr "Rabat procentowy stosowany w przypadku niewykorzystania stałej kwoty"
-#: engine/core/models.py:1103
+#: engine/core/models.py:1134
msgid "percentage discount"
msgstr "Rabat procentowy"
-#: engine/core/models.py:1108
+#: engine/core/models.py:1139
msgid "timestamp when the promocode expires"
msgstr "Znacznik czasu wygaśnięcia kodu promocyjnego"
-#: engine/core/models.py:1109
+#: engine/core/models.py:1140
msgid "end validity time"
msgstr "Końcowy czas ważności"
-#: engine/core/models.py:1114
+#: engine/core/models.py:1145
msgid "timestamp from which this promocode is valid"
msgstr "Znacznik czasu, od którego ten kod promocyjny jest ważny"
-#: engine/core/models.py:1115
+#: engine/core/models.py:1146
msgid "start validity time"
msgstr "Czas rozpoczęcia ważności"
-#: engine/core/models.py:1120
+#: engine/core/models.py:1151
msgid "timestamp when the promocode was used, blank if not used yet"
msgstr ""
"Znacznik czasu użycia kodu promocyjnego, pusty, jeśli nie został jeszcze "
"użyty."
-#: engine/core/models.py:1121
+#: engine/core/models.py:1152
msgid "usage timestamp"
msgstr "Znacznik czasu użycia"
-#: engine/core/models.py:1126
+#: engine/core/models.py:1157
msgid "user assigned to this promocode if applicable"
msgstr "Użytkownik przypisany do tego kodu promocyjnego, jeśli dotyczy"
-#: engine/core/models.py:1127
+#: engine/core/models.py:1158
msgid "assigned user"
msgstr "Przypisany użytkownik"
-#: engine/core/models.py:1134
+#: engine/core/models.py:1165
msgid "promo code"
msgstr "Kod promocyjny"
-#: engine/core/models.py:1135
+#: engine/core/models.py:1166
msgid "promo codes"
msgstr "Kody promocyjne"
-#: engine/core/models.py:1150
+#: engine/core/models.py:1182
msgid ""
"only one type of discount should be defined (amount or percent), but not "
"both or neither."
@@ -2391,21 +2397,21 @@ msgstr ""
"Należy zdefiniować tylko jeden rodzaj rabatu (kwotowy lub procentowy), ale "
"nie oba lub żaden z nich."
-#: engine/core/models.py:1171
+#: engine/core/models.py:1204
msgid "promocode already used"
msgstr "Kod promocyjny został już wykorzystany"
-#: engine/core/models.py:1187
+#: engine/core/models.py:1226
#, python-brace-format
msgid "invalid discount type for promocode {self.uuid}"
msgstr "Nieprawidłowy typ rabatu dla kodu promocyjnego {self.uuid}!"
-#: engine/core/models.py:1196
+#: engine/core/models.py:1235
msgid ""
"Represents an order placed by a user. This class models an order within the "
"application, including its various attributes such as billing and shipping "
-"information, status, associated user, notifications, and related operations."
-" Orders can have associated products, promotions can be applied, addresses "
+"information, status, associated user, notifications, and related operations. "
+"Orders can have associated products, promotions can be applied, addresses "
"set, and shipping or billing details updated. Equally, functionality "
"supports managing the products in the order lifecycle."
msgstr ""
@@ -2417,143 +2423,142 @@ msgstr ""
"Funkcjonalność wspiera również zarządzanie produktami w cyklu życia "
"zamówienia."
-#: engine/core/models.py:1213
+#: engine/core/models.py:1252
msgid "the billing address used for this order"
msgstr "Adres rozliczeniowy użyty dla tego zamówienia"
-#: engine/core/models.py:1221
+#: engine/core/models.py:1260
msgid "optional promo code applied to this order"
msgstr "Opcjonalny kod promocyjny zastosowany do tego zamówienia"
-#: engine/core/models.py:1222
+#: engine/core/models.py:1261
msgid "applied promo code"
msgstr "Zastosowany kod promocyjny"
-#: engine/core/models.py:1230
+#: engine/core/models.py:1269
msgid "the shipping address used for this order"
msgstr "Adres wysyłki użyty dla tego zamówienia"
-#: engine/core/models.py:1231
+#: engine/core/models.py:1270
msgid "shipping address"
msgstr "Adres wysyłki"
-#: engine/core/models.py:1237
+#: engine/core/models.py:1276
msgid "current status of the order in its lifecycle"
msgstr "Aktualny status zamówienia w jego cyklu życia"
-#: engine/core/models.py:1238
+#: engine/core/models.py:1277
msgid "order status"
msgstr "Status zamówienia"
-#: engine/core/models.py:1243 engine/core/models.py:1769
+#: engine/core/models.py:1282 engine/core/models.py:1881
msgid "json structure of notifications to display to users"
msgstr ""
"Struktura JSON powiadomień do wyświetlenia użytkownikom, w interfejsie "
"administratora używany jest widok tabeli"
-#: engine/core/models.py:1249
+#: engine/core/models.py:1288
msgid "json representation of order attributes for this order"
msgstr "Reprezentacja JSON atrybutów zamówienia dla tego zamówienia"
-#: engine/core/models.py:1255
+#: engine/core/models.py:1294
msgid "the user who placed the order"
msgstr "Użytkownik, który złożył zamówienie"
-#: engine/core/models.py:1256
+#: engine/core/models.py:1295
msgid "user"
msgstr "Użytkownik"
-#: engine/core/models.py:1262
+#: engine/core/models.py:1301
msgid "the timestamp when the order was finalized"
msgstr "Znacznik czasu, kiedy zamówienie zostało sfinalizowane"
-#: engine/core/models.py:1263
+#: engine/core/models.py:1302
msgid "buy time"
msgstr "Kup czas"
-#: engine/core/models.py:1270
+#: engine/core/models.py:1309
msgid "a human-readable identifier for the order"
msgstr "Czytelny dla człowieka identyfikator zamówienia"
-#: engine/core/models.py:1271
+#: engine/core/models.py:1310
msgid "human readable id"
msgstr "Identyfikator czytelny dla człowieka"
-#: engine/core/models.py:1277
+#: engine/core/models.py:1316
msgid "order"
msgstr "Zamówienie"
-#: engine/core/models.py:1319
+#: engine/core/models.py:1363
msgid "a user must have only one pending order at a time"
-msgstr ""
-"Użytkownik może mieć tylko jedno oczekujące zlecenie w danym momencie!"
+msgstr "Użytkownik może mieć tylko jedno oczekujące zlecenie w danym momencie!"
-#: engine/core/models.py:1351
+#: engine/core/models.py:1396
msgid "you cannot add products to an order that is not a pending one"
msgstr ""
"Nie można dodać produktów do zamówienia, które nie jest zamówieniem "
"oczekującym."
-#: engine/core/models.py:1356
+#: engine/core/models.py:1402
msgid "you cannot add inactive products to order"
msgstr "Nie można dodać nieaktywnych produktów do zamówienia"
-#: engine/core/models.py:1373
+#: engine/core/models.py:1424
msgid "you cannot add more products than available in stock"
msgstr "Nie można dodać więcej produktów niż jest dostępnych w magazynie"
-#: engine/core/models.py:1395 engine/core/models.py:1420
-#: engine/core/models.py:1428
+#: engine/core/models.py:1448 engine/core/models.py:1477
+#: engine/core/models.py:1487
msgid "you cannot remove products from an order that is not a pending one"
msgstr ""
"Nie można usunąć produktów z zamówienia, które nie jest zamówieniem "
"oczekującym."
-#: engine/core/models.py:1416
+#: engine/core/models.py:1472
#, python-brace-format
msgid "{name} does not exist with query <{query}>"
msgstr "{name} nie istnieje z zapytaniem <{query}>!"
-#: engine/core/models.py:1448
+#: engine/core/models.py:1511
msgid "promocode does not exist"
msgstr "Kod promocyjny nie istnieje"
-#: engine/core/models.py:1454
+#: engine/core/models.py:1526
msgid "you can only buy physical products with shipping address specified"
msgstr "Możesz kupować tylko produkty fizyczne z podanym adresem wysyłki!"
-#: engine/core/models.py:1473
+#: engine/core/models.py:1547
msgid "address does not exist"
msgstr "Adres nie istnieje"
-#: engine/core/models.py:1494 engine/core/models.py:1563
+#: engine/core/models.py:1569 engine/core/models.py:1648
msgid "you can not buy at this moment, please try again in a few minutes"
msgstr ""
"W tej chwili nie możesz dokonać zakupu, spróbuj ponownie za kilka minut."
-#: engine/core/models.py:1497 engine/core/models.py:1559
+#: engine/core/models.py:1575 engine/core/models.py:1641
msgid "invalid force value"
msgstr "Nieprawidłowa wartość siły"
-#: engine/core/models.py:1503 engine/core/models.py:1566
+#: engine/core/models.py:1581 engine/core/models.py:1652
msgid "you cannot purchase an empty order!"
msgstr "Nie można kupić pustego zamówienia!"
-#: engine/core/models.py:1522
+#: engine/core/models.py:1602
msgid "you cannot buy an order without a user"
msgstr ""
"Nie można usunąć produktów z zamówienia, które nie jest zamówieniem "
"oczekującym."
-#: engine/core/models.py:1536
+#: engine/core/models.py:1616
msgid "a user without a balance cannot buy with balance"
msgstr "Użytkownik bez salda nie może kupować za saldo!"
-#: engine/core/models.py:1541
+#: engine/core/models.py:1622
msgid "insufficient funds to complete the order"
msgstr "Niewystarczające środki do zrealizowania zamówienia"
-#: engine/core/models.py:1575
+#: engine/core/models.py:1663
msgid ""
"you cannot buy without registration, please provide the following "
"information: customer name, customer email, customer phone number"
@@ -2562,7 +2567,7 @@ msgstr ""
"informacje: imię i nazwisko klienta, adres e-mail klienta, numer telefonu "
"klienta."
-#: engine/core/models.py:1584
+#: engine/core/models.py:1674
#, python-brace-format
msgid ""
"invalid payment method: {payment_method} from {available_payment_methods}"
@@ -2570,7 +2575,7 @@ msgstr ""
"Nieprawidłowa metoda płatności: {payment_method} z "
"{available_payment_methods}!"
-#: engine/core/models.py:1699
+#: engine/core/models.py:1805
msgid ""
"Manages user feedback for products. This class is designed to capture and "
"store user feedback for specific products that they have purchased. It "
@@ -2583,37 +2588,36 @@ msgstr ""
"temat konkretnych produktów, które zostały przez nich zakupione. Zawiera "
"atrybuty do przechowywania komentarzy użytkowników, odniesienie do "
"powiązanego produktu w zamówieniu oraz ocenę przypisaną przez użytkownika. "
-"Klasa wykorzystuje pola bazy danych do efektywnego modelowania i zarządzania"
-" danymi opinii."
+"Klasa wykorzystuje pola bazy danych do efektywnego modelowania i zarządzania "
+"danymi opinii."
-#: engine/core/models.py:1711
+#: engine/core/models.py:1817
msgid "user-provided comments about their experience with the product"
msgstr "Komentarze użytkowników na temat ich doświadczeń z produktem"
-#: engine/core/models.py:1712
+#: engine/core/models.py:1818
msgid "feedback comments"
msgstr "Komentarze zwrotne"
-#: engine/core/models.py:1719
-msgid ""
-"references the specific product in an order that this feedback is about"
+#: engine/core/models.py:1826
+msgid "references the specific product in an order that this feedback is about"
msgstr ""
"Odnosi się do konkretnego produktu w zamówieniu, którego dotyczy ta "
"informacja zwrotna."
-#: engine/core/models.py:1720
+#: engine/core/models.py:1828
msgid "related order product"
msgstr "Powiązany produkt zamówienia"
-#: engine/core/models.py:1725
+#: engine/core/models.py:1833
msgid "user-assigned rating for the product"
msgstr "Ocena produktu przypisana przez użytkownika"
-#: engine/core/models.py:1726
+#: engine/core/models.py:1834
msgid "product rating"
msgstr "Ocena produktu"
-#: engine/core/models.py:1742
+#: engine/core/models.py:1854
msgid ""
"Represents products associated with orders and their attributes. The "
"OrderProduct model maintains information about a product that is part of an "
@@ -2627,127 +2631,126 @@ msgid ""
msgstr ""
"Reprezentuje produkty powiązane z zamówieniami i ich atrybutami. Model "
"OrderProduct przechowuje informacje o produkcie, który jest częścią "
-"zamówienia, w tym szczegóły, takie jak cena zakupu, ilość, atrybuty produktu"
-" i status. Zarządza powiadomieniami dla użytkownika i administratorów oraz "
-"obsługuje operacje, takie jak zwracanie salda produktu lub dodawanie opinii."
-" Model ten zapewnia również metody i właściwości, które obsługują logikę "
+"zamówienia, w tym szczegóły, takie jak cena zakupu, ilość, atrybuty produktu "
+"i status. Zarządza powiadomieniami dla użytkownika i administratorów oraz "
+"obsługuje operacje, takie jak zwracanie salda produktu lub dodawanie opinii. "
+"Model ten zapewnia również metody i właściwości, które obsługują logikę "
"biznesową, taką jak obliczanie całkowitej ceny lub generowanie adresu URL "
-"pobierania dla produktów cyfrowych. Model ten integruje się z modelami Order"
-" i Product i przechowuje odniesienia do nich."
+"pobierania dla produktów cyfrowych. Model ten integruje się z modelami Order "
+"i Product i przechowuje odniesienia do nich."
-#: engine/core/models.py:1757
+#: engine/core/models.py:1869
msgid "the price paid by the customer for this product at purchase time"
msgstr "Cena zapłacona przez klienta za ten produkt w momencie zakupu."
-#: engine/core/models.py:1758
+#: engine/core/models.py:1870
msgid "purchase price at order time"
msgstr "Cena zakupu w momencie zamówienia"
-#: engine/core/models.py:1763
+#: engine/core/models.py:1875
msgid "internal comments for admins about this ordered product"
msgstr ""
-"Wewnętrzne komentarze dla administratorów dotyczące tego zamówionego "
-"produktu"
+"Wewnętrzne komentarze dla administratorów dotyczące tego zamówionego produktu"
-#: engine/core/models.py:1764
+#: engine/core/models.py:1876
msgid "internal comments"
msgstr "Uwagi wewnętrzne"
-#: engine/core/models.py:1770
+#: engine/core/models.py:1882
msgid "user notifications"
msgstr "Powiadomienia użytkownika"
-#: engine/core/models.py:1775
+#: engine/core/models.py:1887
msgid "json representation of this item's attributes"
msgstr "Reprezentacja JSON atrybutów tego elementu"
-#: engine/core/models.py:1776
+#: engine/core/models.py:1888
msgid "ordered product attributes"
msgstr "Zamówione atrybuty produktu"
-#: engine/core/models.py:1781
+#: engine/core/models.py:1893
msgid "reference to the parent order that contains this product"
msgstr "Odniesienie do zamówienia nadrzędnego zawierającego ten produkt"
-#: engine/core/models.py:1782
+#: engine/core/models.py:1894
msgid "parent order"
msgstr "Zamówienie nadrzędne"
-#: engine/core/models.py:1791
+#: engine/core/models.py:1903
msgid "the specific product associated with this order line"
msgstr "Konkretny produkt powiązany z tą linią zamówienia"
-#: engine/core/models.py:1798
+#: engine/core/models.py:1910
msgid "quantity of this specific product in the order"
msgstr "Ilość tego konkretnego produktu w zamówieniu"
-#: engine/core/models.py:1799
+#: engine/core/models.py:1911
msgid "product quantity"
msgstr "Ilość produktu"
-#: engine/core/models.py:1806
+#: engine/core/models.py:1918
msgid "current status of this product in the order"
msgstr "Aktualny status tego produktu w zamówieniu"
-#: engine/core/models.py:1807
+#: engine/core/models.py:1919
msgid "product line status"
msgstr "Status linii produktów"
-#: engine/core/models.py:1872
+#: engine/core/models.py:1986
msgid "order product must have an order"
msgstr "Orderproduct musi mieć powiązane zamówienie!"
-#: engine/core/models.py:1874
+#: engine/core/models.py:1988
#, python-brace-format
msgid "wrong action specified for feedback: {action}"
msgstr "Nieprawidłowa akcja określona dla informacji zwrotnej: {action}!"
-#: engine/core/models.py:1888
+#: engine/core/models.py:2005
msgid "you cannot feedback an order which is not received"
msgstr ""
"Nie można usunąć produktów z zamówienia, które nie jest zamówieniem "
"oczekującym."
-#: engine/core/models.py:1894
+#: engine/core/models.py:2014
msgid "name"
msgstr "Nazwa"
-#: engine/core/models.py:1895
+#: engine/core/models.py:2016
msgid "URL of the integration"
msgstr "Adres URL integracji"
-#: engine/core/models.py:1896
+#: engine/core/models.py:2019
msgid "authentication credentials"
msgstr "Dane uwierzytelniające"
-#: engine/core/models.py:1918
+#: engine/core/models.py:2042
msgid "you can only have one default CRM provider"
msgstr "Można mieć tylko jednego domyślnego dostawcę CRM"
-#: engine/core/models.py:1928
+#: engine/core/models.py:2052
msgid "CRM"
msgstr "CRM"
-#: engine/core/models.py:1929
+#: engine/core/models.py:2053
msgid "CRMs"
msgstr "CRM"
-#: engine/core/models.py:1941
+#: engine/core/models.py:2069
msgid "order CRM link"
msgstr "Łącze CRM zamówienia"
-#: engine/core/models.py:1942
+#: engine/core/models.py:2070
msgid "orders CRM links"
msgstr "Łącza CRM zamówień"
-#: engine/core/models.py:1947
+#: engine/core/models.py:2075
msgid ""
"Represents the downloading functionality for digital assets associated with "
"orders. The DigitalAssetDownload class provides the ability to manage and "
"access downloads related to order products. It maintains information about "
-"the associated order product, the number of downloads, and whether the asset"
-" is publicly visible. It includes a method to generate a URL for downloading"
-" the asset when the associated order is in a completed status."
+"the associated order product, the number of downloads, and whether the asset "
+"is publicly visible. It includes a method to generate a URL for downloading "
+"the asset when the associated order is in a completed status."
msgstr ""
"Reprezentuje funkcjonalność pobierania zasobów cyfrowych powiązanych z "
"zamówieniami. Klasa DigitalAssetDownload zapewnia możliwość zarządzania i "
@@ -2757,15 +2760,15 @@ msgstr ""
"generowania adresu URL do pobrania zasobu, gdy powiązane zamówienie ma "
"status ukończonego."
-#: engine/core/models.py:1961
+#: engine/core/models.py:2091
msgid "download"
msgstr "Pobierz"
-#: engine/core/models.py:1962
+#: engine/core/models.py:2092
msgid "downloads"
msgstr "Pliki do pobrania"
-#: engine/core/serializers/utility.py:89
+#: engine/core/serializers/utility.py:91
msgid ""
"you must provide a comment, rating, and order product uuid to add feedback."
msgstr ""
@@ -2962,7 +2965,8 @@ msgstr "Witaj %(order.user.first_name)s,"
#, python-format
msgid ""
"thank you for your order #%(order.pk)s! we are pleased to inform you that\n"
-" we have taken your order into work. below are the details of your\n"
+" we have taken your order into work. below are "
+"the details of your\n"
" order:"
msgstr ""
"Dziękujemy za zamówienie #%(order.pk)s! Z przyjemnością informujemy, że "
@@ -3021,8 +3025,8 @@ msgid ""
"we have successfully processed your order №%(order_uuid)s! below are the\n"
" details of your order:"
msgstr ""
-"Pomyślnie przetworzyliśmy Twoje zamówienie №%(order_uuid)s! Poniżej znajdują"
-" się szczegóły zamówienia:"
+"Pomyślnie przetworzyliśmy Twoje zamówienie №%(order_uuid)s! Poniżej znajdują "
+"się szczegóły zamówienia:"
#: engine/core/templates/digital_order_delivered_email.html:128
msgid ""
@@ -3077,7 +3081,8 @@ msgstr ""
#: engine/core/templates/shipped_order_created_email.html:101
#: engine/core/templates/shipped_order_delivered_email.html:101
msgid ""
-"thank you for your order! we are pleased to confirm your purchase. below are\n"
+"thank you for your order! we are pleased to confirm your purchase. below "
+"are\n"
" the details of your order:"
msgstr ""
"Dziękujemy za zamówienie! Z przyjemnością potwierdzamy zakup. Poniżej "
@@ -3108,11 +3113,11 @@ msgstr ""
"wszelkie prawa\n"
" zastrzeżone"
-#: engine/core/utils/caching.py:44
+#: engine/core/utils/caching.py:48
msgid "both data and timeout are required"
msgstr "Wymagane są zarówno dane, jak i limit czasu"
-#: engine/core/utils/caching.py:46
+#: engine/core/utils/caching.py:51
msgid "invalid timeout value, it must be between 0 and 216000 seconds"
msgstr ""
"Nieprawidłowa wartość limitu czasu, musi zawierać się w przedziale od 0 do "
@@ -3123,17 +3128,17 @@ msgstr ""
msgid "{settings.PROJECT_NAME} | contact us initiated"
msgstr "{settings.PROJECT_NAME} | zainicjowany kontakt"
-#: engine/core/utils/emailing.py:73
+#: engine/core/utils/emailing.py:81
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order confirmation"
msgstr "{settings.PROJECT_NAME} | potwierdzenie zamówienia"
-#: engine/core/utils/emailing.py:105
+#: engine/core/utils/emailing.py:115
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order delivered"
msgstr "{settings.PROJECT_NAME} | zamówienie dostarczone"
-#: engine/core/utils/emailing.py:188
+#: engine/core/utils/emailing.py:203
#, python-brace-format
msgid "{settings.PROJECT_NAME} | promocode granted"
msgstr "{settings.PROJECT_NAME} | przyznany kod promocyjny"
@@ -3146,13 +3151,13 @@ msgstr "Nie masz uprawnień do wykonania tej akcji."
msgid "NOMINATIM_URL must be configured."
msgstr "Parametr NOMINATIM_URL musi być skonfigurowany!"
-#: engine/core/validators.py:19
+#: engine/core/validators.py:21
#, python-brace-format
msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels"
msgstr ""
"Wymiary obrazu nie powinny przekraczać w{max_width} x h{max_height} pikseli."
-#: engine/core/views.py:91
+#: engine/core/views.py:105
msgid ""
"Handles the request for the sitemap index and returns an XML response. It "
"ensures the response includes the appropriate content type header for XML."
@@ -3160,26 +3165,26 @@ msgstr ""
"Obsługuje żądanie indeksu mapy witryny i zwraca odpowiedź XML. Zapewnia, że "
"odpowiedź zawiera odpowiedni nagłówek typu zawartości dla XML."
-#: engine/core/views.py:106
+#: engine/core/views.py:120
msgid ""
"Handles the detailed view response for a sitemap. This function processes "
"the request, fetches the appropriate sitemap detail response, and sets the "
"Content-Type header for XML."
msgstr ""
"Obsługuje szczegółową odpowiedź widoku dla mapy witryny. Ta funkcja "
-"przetwarza żądanie, pobiera odpowiednią szczegółową odpowiedź mapy witryny i"
-" ustawia nagłówek Content-Type dla XML."
+"przetwarza żądanie, pobiera odpowiednią szczegółową odpowiedź mapy witryny i "
+"ustawia nagłówek Content-Type dla XML."
-#: engine/core/views.py:141
+#: engine/core/views.py:156
msgid ""
"Returns a list of supported languages and their corresponding information."
msgstr "Zwraca listę obsługiwanych języków i odpowiadające im informacje."
-#: engine/core/views.py:173
+#: engine/core/views.py:183
msgid "Returns the parameters of the website as a JSON object."
msgstr "Zwraca parametry strony internetowej jako obiekt JSON."
-#: engine/core/views.py:192
+#: engine/core/views.py:199
msgid ""
"Handles cache operations such as reading and setting cache data with a "
"specified key and timeout."
@@ -3187,11 +3192,11 @@ msgstr ""
"Obsługuje operacje pamięci podręcznej, takie jak odczytywanie i ustawianie "
"danych pamięci podręcznej z określonym kluczem i limitem czasu."
-#: engine/core/views.py:219
+#: engine/core/views.py:221
msgid "Handles `contact us` form submissions."
msgstr "Obsługuje zgłoszenia formularzy `kontaktuj się z nami`."
-#: engine/core/views.py:240
+#: engine/core/views.py:237
msgid ""
"Handles requests for processing and validating URLs from incoming POST "
"requests."
@@ -3199,58 +3204,66 @@ msgstr ""
"Obsługuje żądania przetwarzania i sprawdzania poprawności adresów URL z "
"przychodzących żądań POST."
-#: engine/core/views.py:280
+#: engine/core/views.py:274
msgid "Handles global search queries."
msgstr "Obsługuje globalne zapytania wyszukiwania."
-#: engine/core/views.py:295
+#: engine/core/views.py:290
msgid "Handles the logic of buying as a business without registration."
msgstr "Obsługuje logikę zakupu jako firma bez rejestracji."
-#: engine/core/views.py:332
+#: engine/core/views.py:338
msgid ""
"Handles the downloading of a digital asset associated with an order.\n"
-"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the digital asset file located in the "
+"storage directory of the project. If the file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
msgstr ""
"Obsługuje pobieranie zasobu cyfrowego powiązanego z zamówieniem.\n"
-"Ta funkcja próbuje obsłużyć plik zasobu cyfrowego znajdujący się w katalogu przechowywania projektu. Jeśli plik nie zostanie znaleziony, zgłaszany jest błąd HTTP 404 wskazujący, że zasób jest niedostępny."
+"Ta funkcja próbuje obsłużyć plik zasobu cyfrowego znajdujący się w katalogu "
+"przechowywania projektu. Jeśli plik nie zostanie znaleziony, zgłaszany jest "
+"błąd HTTP 404 wskazujący, że zasób jest niedostępny."
-#: engine/core/views.py:343
+#: engine/core/views.py:349
msgid "order_product_uuid is required"
msgstr "Order_product_uuid jest wymagany"
-#: engine/core/views.py:350
+#: engine/core/views.py:356
msgid "order product does not exist"
msgstr "zamówiony produkt nie istnieje"
-#: engine/core/views.py:353
+#: engine/core/views.py:359
msgid "you can only download the digital asset once"
msgstr "Zasób cyfrowy można pobrać tylko raz"
-#: engine/core/views.py:356
+#: engine/core/views.py:363
msgid "the order must be paid before downloading the digital asset"
msgstr "zamówienie musi zostać opłacone przed pobraniem zasobu cyfrowego"
-#: engine/core/views.py:362
+#: engine/core/views.py:370
msgid "the order product does not have a product"
msgstr "Produkt zamówienia nie ma produktu"
-#: engine/core/views.py:399
+#: engine/core/views.py:414
msgid "favicon not found"
msgstr "nie znaleziono favicon"
-#: engine/core/views.py:404
+#: engine/core/views.py:419
msgid ""
"Handles requests for the favicon of a website.\n"
-"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the favicon file located in the static "
+"directory of the project. If the favicon file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
msgstr ""
"Obsługuje żądania favicon strony internetowej.\n"
-"Ta funkcja próbuje obsłużyć plik favicon znajdujący się w katalogu statycznym projektu. Jeśli plik favicon nie zostanie znaleziony, zgłaszany jest błąd HTTP 404 wskazujący, że zasób jest niedostępny."
+"Ta funkcja próbuje obsłużyć plik favicon znajdujący się w katalogu "
+"statycznym projektu. Jeśli plik favicon nie zostanie znaleziony, zgłaszany "
+"jest błąd HTTP 404 wskazujący, że zasób jest niedostępny."
-#: engine/core/views.py:416
+#: engine/core/views.py:431
msgid ""
-"Redirects the request to the admin index page. The function handles incoming"
-" HTTP requests and redirects them to the Django admin interface index page. "
+"Redirects the request to the admin index page. The function handles incoming "
+"HTTP requests and redirects them to the Django admin interface index page. "
"It uses Django's `redirect` function for handling the HTTP redirection."
msgstr ""
"Przekierowuje żądanie na stronę indeksu administratora. Funkcja obsługuje "
@@ -3258,20 +3271,20 @@ msgstr ""
"administratora Django. Używa funkcji `redirect` Django do obsługi "
"przekierowania HTTP."
-#: engine/core/views.py:429
+#: engine/core/views.py:443
msgid "Returns current version of the eVibes. "
msgstr "Zwraca aktualną wersję aplikacji eVibes."
-#: engine/core/views.py:623 engine/core/views.py:636
+#: engine/core/views.py:672 engine/core/views.py:687
#, python-format
msgid "Revenue & Orders (last %(days)d)"
msgstr "Przychody i zamówienia (ostatnie %(days)d)"
-#: engine/core/views.py:793
+#: engine/core/views.py:868
msgid "Returns custom variables for Dashboard. "
msgstr "Zwraca zmienne niestandardowe dla Dashboard."
-#: engine/core/viewsets.py:136
+#: engine/core/viewsets.py:139
msgid ""
"Defines a viewset for managing Evibes-related operations. The EvibesViewSet "
"class inherits from ModelViewSet and provides functionality for handling "
@@ -3285,21 +3298,20 @@ msgstr ""
"dynamicznych klas serializatora w oparciu o bieżącą akcję, konfigurowalne "
"uprawnienia i formaty renderowania."
-#: engine/core/viewsets.py:156
+#: engine/core/viewsets.py:160
msgid ""
-"Represents a viewset for managing AttributeGroup objects. Handles operations"
-" related to AttributeGroup, including filtering, serialization, and "
-"retrieval of data. This class is part of the application's API layer and "
-"provides a standardized way to process requests and responses for "
-"AttributeGroup data."
+"Represents a viewset for managing AttributeGroup objects. Handles operations "
+"related to AttributeGroup, including filtering, serialization, and retrieval "
+"of data. This class is part of the application's API layer and provides a "
+"standardized way to process requests and responses for AttributeGroup data."
msgstr ""
"Reprezentuje zestaw widoków do zarządzania obiektami AttributeGroup. "
"Obsługuje operacje związane z AttributeGroup, w tym filtrowanie, "
"serializację i pobieranie danych. Klasa ta jest częścią warstwy API "
-"aplikacji i zapewnia ustandaryzowany sposób przetwarzania żądań i odpowiedzi"
-" dla danych AttributeGroup."
+"aplikacji i zapewnia ustandaryzowany sposób przetwarzania żądań i odpowiedzi "
+"dla danych AttributeGroup."
-#: engine/core/viewsets.py:175
+#: engine/core/viewsets.py:179
msgid ""
"Handles operations related to Attribute objects within the application. "
"Provides a set of API endpoints to interact with Attribute data. This class "
@@ -3315,21 +3327,21 @@ msgstr ""
"filtrowanie według określonych pól lub pobieranie szczegółowych lub "
"uproszczonych informacji w zależności od żądania."
-#: engine/core/viewsets.py:194
+#: engine/core/viewsets.py:198
msgid ""
"A viewset for managing AttributeValue objects. This viewset provides "
"functionality for listing, retrieving, creating, updating, and deleting "
"AttributeValue objects. It integrates with Django REST Framework's viewset "
-"mechanisms and uses appropriate serializers for different actions. Filtering"
-" capabilities are provided through the DjangoFilterBackend."
+"mechanisms and uses appropriate serializers for different actions. Filtering "
+"capabilities are provided through the DjangoFilterBackend."
msgstr ""
-"Zestaw widoków do zarządzania obiektami AttributeValue. Ten viewset zapewnia"
-" funkcjonalność do listowania, pobierania, tworzenia, aktualizowania i "
+"Zestaw widoków do zarządzania obiektami AttributeValue. Ten viewset zapewnia "
+"funkcjonalność do listowania, pobierania, tworzenia, aktualizowania i "
"usuwania obiektów AttributeValue. Integruje się z mechanizmami viewset "
-"Django REST Framework i używa odpowiednich serializatorów dla różnych akcji."
-" Możliwości filtrowania są dostarczane przez DjangoFilterBackend."
+"Django REST Framework i używa odpowiednich serializatorów dla różnych akcji. "
+"Możliwości filtrowania są dostarczane przez DjangoFilterBackend."
-#: engine/core/viewsets.py:213
+#: engine/core/viewsets.py:217
msgid ""
"Manages views for Category-related operations. The CategoryViewSet class is "
"responsible for handling operations related to the Category model in the "
@@ -3338,12 +3350,12 @@ msgid ""
"can access specific data."
msgstr ""
"Zarządza widokami dla operacji związanych z kategoriami. Klasa "
-"CategoryViewSet jest odpowiedzialna za obsługę operacji związanych z modelem"
-" kategorii w systemie. Obsługuje pobieranie, filtrowanie i serializowanie "
+"CategoryViewSet jest odpowiedzialna za obsługę operacji związanych z modelem "
+"kategorii w systemie. Obsługuje pobieranie, filtrowanie i serializowanie "
"danych kategorii. Zestaw widoków wymusza również uprawnienia, aby zapewnić, "
"że tylko autoryzowani użytkownicy mają dostęp do określonych danych."
-#: engine/core/viewsets.py:326
+#: engine/core/viewsets.py:346
msgid ""
"Represents a viewset for managing Brand instances. This class provides "
"functionality for querying, filtering, and serializing Brand objects. It "
@@ -3355,7 +3367,7 @@ msgstr ""
"Brand. Używa frameworka ViewSet Django, aby uprościć implementację punktów "
"końcowych API dla obiektów Brand."
-#: engine/core/viewsets.py:438
+#: engine/core/viewsets.py:458
msgid ""
"Manages operations related to the `Product` model in the system. This class "
"provides a viewset for managing products, including their filtering, "
@@ -3369,11 +3381,11 @@ msgstr ""
"zapewnia zestaw widoków do zarządzania produktami, w tym ich filtrowania, "
"serializacji i operacji na konkretnych instancjach. Rozszerza się z "
"`EvibesViewSet`, aby używać wspólnej funkcjonalności i integruje się z "
-"frameworkiem Django REST dla operacji RESTful API. Zawiera metody pobierania"
-" szczegółów produktu, stosowania uprawnień i uzyskiwania dostępu do "
+"frameworkiem Django REST dla operacji RESTful API. Zawiera metody pobierania "
+"szczegółów produktu, stosowania uprawnień i uzyskiwania dostępu do "
"powiązanych informacji zwrotnych o produkcie."
-#: engine/core/viewsets.py:574
+#: engine/core/viewsets.py:605
msgid ""
"Represents a viewset for managing Vendor objects. This viewset allows "
"fetching, filtering, and serializing Vendor data. It defines the queryset, "
@@ -3383,17 +3395,17 @@ msgid ""
msgstr ""
"Reprezentuje zestaw widoków do zarządzania obiektami Vendor. Ten zestaw "
"widoków umożliwia pobieranie, filtrowanie i serializowanie danych dostawcy. "
-"Definiuje zestaw zapytań, konfiguracje filtrów i klasy serializatora używane"
-" do obsługi różnych działań. Celem tej klasy jest zapewnienie usprawnionego "
+"Definiuje zestaw zapytań, konfiguracje filtrów i klasy serializatora używane "
+"do obsługi różnych działań. Celem tej klasy jest zapewnienie usprawnionego "
"dostępu do zasobów związanych z Vendorem poprzez framework Django REST."
-#: engine/core/viewsets.py:594
+#: engine/core/viewsets.py:625
msgid ""
"Representation of a view set handling Feedback objects. This class manages "
"operations related to Feedback objects, including listing, filtering, and "
"retrieving details. The purpose of this view set is to provide different "
-"serializers for different actions and implement permission-based handling of"
-" accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
+"serializers for different actions and implement permission-based handling of "
+"accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
"use of Django's filtering system for querying data."
msgstr ""
"Reprezentacja zestawu widoków obsługujących obiekty opinii. Ta klasa "
@@ -3404,14 +3416,14 @@ msgstr ""
"bazowy `EvibesViewSet` i wykorzystuje system filtrowania Django do "
"odpytywania danych."
-#: engine/core/viewsets.py:621
+#: engine/core/viewsets.py:652
msgid ""
"ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes "
"various endpoints for handling order operations such as adding or removing "
-"products, performing purchases for registered as well as unregistered users,"
-" and retrieving the current authenticated user's pending orders. The ViewSet"
-" uses multiple serializers based on the specific action being performed and "
+"products, performing purchases for registered as well as unregistered users, "
+"and retrieving the current authenticated user's pending orders. The ViewSet "
+"uses multiple serializers based on the specific action being performed and "
"enforces permissions accordingly while interacting with order data."
msgstr ""
"ViewSet do zarządzania zamówieniami i powiązanymi operacjami. Klasa ta "
@@ -3423,12 +3435,12 @@ msgstr ""
"wykorzystuje wiele serializatorów w oparciu o konkretną wykonywaną akcję i "
"odpowiednio egzekwuje uprawnienia podczas interakcji z danymi zamówienia."
-#: engine/core/viewsets.py:825
+#: engine/core/viewsets.py:914
msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It "
-"includes filtering, permission checks, and serializer switching based on the"
-" requested action. Additionally, it provides a detailed action for handling "
+"includes filtering, permission checks, and serializer switching based on the "
+"requested action. Additionally, it provides a detailed action for handling "
"feedback on OrderProduct instances"
msgstr ""
"Udostępnia zestaw widoków do zarządzania jednostkami OrderProduct. Ten "
@@ -3438,31 +3450,31 @@ msgstr ""
"szczegółową akcję do obsługi informacji zwrotnych na temat instancji "
"OrderProduct"
-#: engine/core/viewsets.py:879
+#: engine/core/viewsets.py:974
msgid "Manages operations related to Product images in the application. "
msgstr "Zarządza operacjami związanymi z obrazami produktów w aplikacji."
-#: engine/core/viewsets.py:892
+#: engine/core/viewsets.py:988
msgid ""
"Manages the retrieval and handling of PromoCode instances through various "
"API actions."
msgstr ""
"Zarządza pobieraniem i obsługą instancji PromoCode poprzez różne akcje API."
-#: engine/core/viewsets.py:914
+#: engine/core/viewsets.py:1019
msgid "Represents a view set for managing promotions. "
msgstr "Reprezentuje zestaw widoków do zarządzania promocjami."
-#: engine/core/viewsets.py:927
+#: engine/core/viewsets.py:1032
msgid "Handles operations related to Stock data in the system."
msgstr "Obsługuje operacje związane z danymi Stock w systemie."
-#: engine/core/viewsets.py:941
+#: engine/core/viewsets.py:1046
msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the "
-"retrieval, modification, and customization of products within the wish list."
-" This ViewSet facilitates functionality such as adding, removing, and bulk "
+"retrieval, modification, and customization of products within the wish list. "
+"This ViewSet facilitates functionality such as adding, removing, and bulk "
"actions for wishlist products. Permission checks are integrated to ensure "
"that users can only manage their own wishlists unless explicit permissions "
"are granted."
@@ -3475,7 +3487,7 @@ msgstr ""
"że użytkownicy mogą zarządzać tylko własnymi listami życzeń, chyba że "
"zostaną przyznane wyraźne uprawnienia."
-#: engine/core/viewsets.py:1056
+#: engine/core/viewsets.py:1183
msgid ""
"This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom "
@@ -3486,15 +3498,15 @@ msgstr ""
"Ta klasa zapewnia funkcjonalność zestawu widoków do zarządzania obiektami "
"`Address`. Klasa AddressViewSet umożliwia operacje CRUD, filtrowanie i "
"niestandardowe akcje związane z jednostkami adresowymi. Obejmuje ona "
-"wyspecjalizowane zachowania dla różnych metod HTTP, zastępowanie serializera"
-" i obsługę uprawnień w oparciu o kontekst żądania."
+"wyspecjalizowane zachowania dla różnych metod HTTP, zastępowanie serializera "
+"i obsługę uprawnień w oparciu o kontekst żądania."
-#: engine/core/viewsets.py:1123
+#: engine/core/viewsets.py:1254
#, python-brace-format
msgid "Geocoding error: {e}"
msgstr "Błąd geokodowania: {e}"
-#: engine/core/viewsets.py:1131
+#: engine/core/viewsets.py:1262
msgid ""
"Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing "
diff --git a/engine/core/locale/pt_BR/LC_MESSAGES/django.po b/engine/core/locale/pt_BR/LC_MESSAGES/django.po
index 08b26655..e4dd6c63 100644
--- a/engine/core/locale/pt_BR/LC_MESSAGES/django.po
+++ b/engine/core/locale/pt_BR/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 22:12+0300\n"
+"POT-Creation-Date: 2025-12-18 19:09+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -27,113 +27,112 @@ msgstr ""
msgid "is active"
msgstr "Está ativo"
-#: engine/core/abstract.py:21
+#: engine/core/abstract.py:22
msgid ""
-"if set to false, this object can't be seen by users without needed "
-"permission"
+"if set to false, this object can't be seen by users without needed permission"
msgstr ""
"Se definido como false, esse objeto não poderá ser visto por usuários sem a "
"permissão necessária"
-#: engine/core/abstract.py:23 engine/core/choices.py:18
+#: engine/core/abstract.py:26 engine/core/choices.py:18
msgid "created"
msgstr "Criado"
-#: engine/core/abstract.py:23
+#: engine/core/abstract.py:26
msgid "when the object first appeared on the database"
msgstr "Quando o objeto apareceu pela primeira vez no banco de dados"
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "modified"
msgstr "Modificado"
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "when the object was last modified"
msgstr "Quando o objeto foi editado pela última vez"
-#: engine/core/admin.py:85
+#: engine/core/admin.py:94
msgid "translations"
msgstr "Traduções"
-#: engine/core/admin.py:89
+#: engine/core/admin.py:102
msgid "general"
msgstr "Geral"
-#: engine/core/admin.py:91
+#: engine/core/admin.py:106
msgid "relations"
msgstr "Relações"
-#: engine/core/admin.py:93
+#: engine/core/admin.py:111
msgid "additional info"
msgstr "informações adicionais"
-#: engine/core/admin.py:111
+#: engine/core/admin.py:133
msgid "metadata"
msgstr "Metadados"
-#: engine/core/admin.py:118
+#: engine/core/admin.py:141
msgid "timestamps"
msgstr "Carimbos de data/hora"
-#: engine/core/admin.py:133
+#: engine/core/admin.py:157
#, python-format
msgid "activate selected %(verbose_name_plural)s"
msgstr "Ativar o %(verbose_name_plural)s selecionado"
-#: engine/core/admin.py:138
+#: engine/core/admin.py:165
msgid "selected items have been activated."
msgstr "Os itens selecionados foram ativados!"
-#: engine/core/admin.py:144
+#: engine/core/admin.py:173
#, python-format
msgid "deactivate selected %(verbose_name_plural)s"
msgstr "Desativar o %(verbose_name_plural)s selecionado"
-#: engine/core/admin.py:149
+#: engine/core/admin.py:183
msgid "selected items have been deactivated."
msgstr "Os itens selecionados foram desativados!"
-#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586
-#: engine/core/graphene/object_types.py:593 engine/core/models.py:801
-#: engine/core/models.py:809
+#: engine/core/admin.py:195 engine/core/graphene/object_types.py:650
+#: engine/core/graphene/object_types.py:657 engine/core/models.py:824
+#: engine/core/models.py:832
msgid "attribute value"
msgstr "Valor do atributo"
-#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75
-#: engine/core/models.py:810
+#: engine/core/admin.py:196 engine/core/graphene/object_types.py:75
+#: engine/core/models.py:833
msgid "attribute values"
msgstr "Valores de atributos"
-#: engine/core/admin.py:172
+#: engine/core/admin.py:207
msgid "image"
msgstr "Imagem"
-#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474
+#: engine/core/admin.py:208 engine/core/graphene/object_types.py:527
msgid "images"
msgstr "Imagens"
-#: engine/core/admin.py:184 engine/core/models.py:566
+#: engine/core/admin.py:219 engine/core/models.py:587
msgid "stock"
msgstr "Estoque"
-#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640
+#: engine/core/admin.py:220 engine/core/graphene/object_types.py:710
msgid "stocks"
msgstr "Ações"
-#: engine/core/admin.py:196 engine/core/models.py:1818
+#: engine/core/admin.py:231 engine/core/models.py:1930
msgid "order product"
msgstr "Pedido de produto"
-#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389
-#: engine/core/models.py:1819
+#: engine/core/admin.py:232 engine/core/graphene/object_types.py:438
+#: engine/core/models.py:1931
msgid "order products"
msgstr "Solicitar produtos"
-#: engine/core/admin.py:210 engine/core/admin.py:211
+#: engine/core/admin.py:250 engine/core/admin.py:251
msgid "children"
msgstr "Crianças"
-#: engine/core/admin.py:977
+#: engine/core/admin.py:1059
msgid "Config"
msgstr "Configuração"
@@ -157,8 +156,7 @@ msgstr "Entregue"
msgid "canceled"
msgstr "Cancelado"
-#: engine/core/choices.py:8 engine/core/choices.py:16
-#: engine/core/choices.py:24
+#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24
msgid "failed"
msgstr "Falha"
@@ -186,11 +184,11 @@ msgstr "Momental"
msgid "successful"
msgstr "Bem-sucedido"
-#: engine/core/docs/drf/views.py:31
+#: engine/core/docs/drf/views.py:30
msgid "OpenAPI schema in selected format with selected language"
msgstr "Esquema OpenAPI no formato selecionado com o idioma selecionado"
-#: engine/core/docs/drf/views.py:33
+#: engine/core/docs/drf/views.py:32
msgid ""
"OpenApi3 schema for this API. Format can be selected via content "
"negotiation. Language can be selected with Accept-Language and query "
@@ -200,48 +198,49 @@ msgstr ""
"negociação de conteúdo. O idioma pode ser selecionado com Accept-Language e "
"com o parâmetro de consulta."
-#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37
+#: engine/core/docs/drf/views.py:43 engine/core/graphene/mutations.py:37
msgid "cache I/O"
msgstr "E/S do cache"
-#: engine/core/docs/drf/views.py:46
+#: engine/core/docs/drf/views.py:45
msgid ""
"apply only a key to read permitted data from cache.\n"
"apply key, data and timeout with authentication to write data to cache."
msgstr ""
"Aplicar somente uma chave para ler dados permitidos do cache.\n"
-"Aplicar chave, dados e tempo limite com autenticação para gravar dados no cache."
+"Aplicar chave, dados e tempo limite com autenticação para gravar dados no "
+"cache."
-#: engine/core/docs/drf/views.py:62
+#: engine/core/docs/drf/views.py:63
msgid "get a list of supported languages"
msgstr "Obter uma lista de idiomas suportados"
-#: engine/core/docs/drf/views.py:74
+#: engine/core/docs/drf/views.py:75
msgid "get application's exposable parameters"
msgstr "Obter os parâmetros expostos do aplicativo"
-#: engine/core/docs/drf/views.py:84
+#: engine/core/docs/drf/views.py:89
msgid "send a message to the support team"
msgstr "Envie uma mensagem para a equipe de suporte"
-#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57
+#: engine/core/docs/drf/views.py:103 engine/core/graphene/mutations.py:59
msgid "request a CORSed URL"
msgstr "Solicite um URL com CORS. Somente https é permitido."
-#: engine/core/docs/drf/views.py:112
+#: engine/core/docs/drf/views.py:119
msgid "Search between products, categories and brands"
msgstr "Pesquisa entre produtos, categorias e marcas"
-#: engine/core/docs/drf/views.py:130
+#: engine/core/docs/drf/views.py:141
msgid "global search endpoint to query across project's tables"
msgstr ""
"Ponto de extremidade de pesquisa global para consultar as tabelas do projeto"
-#: engine/core/docs/drf/views.py:139
+#: engine/core/docs/drf/views.py:150
msgid "purchase an order as a business"
msgstr "Comprar um pedido como uma empresa"
-#: engine/core/docs/drf/views.py:146
+#: engine/core/docs/drf/views.py:158
msgid ""
"purchase an order as a business, using the provided `products` with "
"`product_uuid` and `attributes`."
@@ -249,224 +248,222 @@ msgstr ""
"Compre um pedido como uma empresa, usando os `products` fornecidos com "
"`product_uuid` e `attributes`."
-#: engine/core/docs/drf/views.py:164
+#: engine/core/docs/drf/views.py:177
msgid "download a digital asset from purchased digital order"
msgstr "baixar um ativo digital de um pedido digital adquirido"
-#: engine/core/docs/drf/viewsets.py:61
+#: engine/core/docs/drf/viewsets.py:65
msgid "list all attribute groups (simple view)"
msgstr "Listar todos os grupos de atributos (visualização simples)"
-#: engine/core/docs/drf/viewsets.py:68
+#: engine/core/docs/drf/viewsets.py:75
msgid "retrieve a single attribute group (detailed view)"
msgstr "Recuperar um único grupo de atributos (visualização detalhada)"
-#: engine/core/docs/drf/viewsets.py:75
+#: engine/core/docs/drf/viewsets.py:82
msgid "create an attribute group"
msgstr "Criar um grupo de atributos"
-#: engine/core/docs/drf/viewsets.py:82
+#: engine/core/docs/drf/viewsets.py:92
msgid "delete an attribute group"
msgstr "Excluir um grupo de atributos"
-#: engine/core/docs/drf/viewsets.py:89
+#: engine/core/docs/drf/viewsets.py:99
msgid "rewrite an existing attribute group saving non-editables"
msgstr "Reescrever um grupo de atributos existente salvando os não editáveis"
-#: engine/core/docs/drf/viewsets.py:96
-msgid ""
-"rewrite some fields of an existing attribute group saving non-editables"
+#: engine/core/docs/drf/viewsets.py:107
+msgid "rewrite some fields of an existing attribute group saving non-editables"
msgstr ""
"Reescreva alguns campos de um grupo de atributos existente salvando os não "
"editáveis"
-#: engine/core/docs/drf/viewsets.py:106
+#: engine/core/docs/drf/viewsets.py:118
msgid "list all attributes (simple view)"
msgstr "Listar todos os atributos (visualização simples)"
-#: engine/core/docs/drf/viewsets.py:113
+#: engine/core/docs/drf/viewsets.py:128
msgid "retrieve a single attribute (detailed view)"
msgstr "Recuperar um único atributo (visualização detalhada)"
-#: engine/core/docs/drf/viewsets.py:120
+#: engine/core/docs/drf/viewsets.py:135
msgid "create an attribute"
msgstr "Criar um atributo"
-#: engine/core/docs/drf/viewsets.py:127
+#: engine/core/docs/drf/viewsets.py:142
msgid "delete an attribute"
msgstr "Excluir um atributo"
-#: engine/core/docs/drf/viewsets.py:134
+#: engine/core/docs/drf/viewsets.py:149
msgid "rewrite an existing attribute saving non-editables"
msgstr "Reescreva um atributo existente salvando os não editáveis"
-#: engine/core/docs/drf/viewsets.py:141
+#: engine/core/docs/drf/viewsets.py:156
msgid "rewrite some fields of an existing attribute saving non-editables"
msgstr ""
"Reescreva alguns campos de um atributo existente salvando os não editáveis"
-#: engine/core/docs/drf/viewsets.py:151
+#: engine/core/docs/drf/viewsets.py:166
msgid "list all attribute values (simple view)"
msgstr "Listar todos os valores de atributos (visualização simples)"
-#: engine/core/docs/drf/viewsets.py:158
+#: engine/core/docs/drf/viewsets.py:176
msgid "retrieve a single attribute value (detailed view)"
msgstr "Recuperar um único valor de atributo (visualização detalhada)"
-#: engine/core/docs/drf/viewsets.py:165
+#: engine/core/docs/drf/viewsets.py:183
msgid "create an attribute value"
msgstr "Criar um valor de atributo"
-#: engine/core/docs/drf/viewsets.py:172
+#: engine/core/docs/drf/viewsets.py:193
msgid "delete an attribute value"
msgstr "Excluir um valor de atributo"
-#: engine/core/docs/drf/viewsets.py:179
+#: engine/core/docs/drf/viewsets.py:200
msgid "rewrite an existing attribute value saving non-editables"
msgstr "Reescreva um valor de atributo existente salvando os não editáveis"
-#: engine/core/docs/drf/viewsets.py:186
-msgid ""
-"rewrite some fields of an existing attribute value saving non-editables"
+#: engine/core/docs/drf/viewsets.py:208
+msgid "rewrite some fields of an existing attribute value saving non-editables"
msgstr ""
"Reescreva alguns campos de um valor de atributo existente salvando os não "
"editáveis"
-#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197
+#: engine/core/docs/drf/viewsets.py:219 engine/core/docs/drf/viewsets.py:220
msgid "list all categories (simple view)"
msgstr "Listar todas as categorias (visualização simples)"
-#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205
+#: engine/core/docs/drf/viewsets.py:230 engine/core/docs/drf/viewsets.py:231
msgid "retrieve a single category (detailed view)"
msgstr "Recuperar uma única categoria (visualização detalhada)"
-#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258
+#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:286
msgid "Category UUID or slug"
msgstr "UUID ou slug da categoria"
-#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221
+#: engine/core/docs/drf/viewsets.py:246 engine/core/docs/drf/viewsets.py:247
msgid "create a category"
msgstr "Criar uma categoria"
-#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229
+#: engine/core/docs/drf/viewsets.py:254 engine/core/docs/drf/viewsets.py:255
msgid "delete a category"
msgstr "Excluir uma categoria"
-#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237
+#: engine/core/docs/drf/viewsets.py:262 engine/core/docs/drf/viewsets.py:263
msgid "rewrite an existing category saving non-editables"
msgstr "Reescrever uma categoria existente salvando itens não editáveis"
-#: engine/core/docs/drf/viewsets.py:244 engine/core/docs/drf/viewsets.py:245
+#: engine/core/docs/drf/viewsets.py:270 engine/core/docs/drf/viewsets.py:272
msgid "rewrite some fields of an existing category saving non-editables"
msgstr ""
"Reescreva alguns campos de uma categoria existente salvando os não editáveis"
-#: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704
-#: engine/core/docs/drf/viewsets.py:988
+#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:1046
#: engine/core/graphene/object_types.py:117
-#: engine/core/graphene/object_types.py:207
-#: engine/core/graphene/object_types.py:482
+#: engine/core/graphene/object_types.py:236
+#: engine/core/graphene/object_types.py:537
msgid "SEO Meta snapshot"
msgstr "Meta snapshot de SEO"
-#: engine/core/docs/drf/viewsets.py:253
+#: engine/core/docs/drf/viewsets.py:281
msgid "returns a snapshot of the category's SEO meta data"
msgstr "Retorna um instantâneo dos metadados de SEO da categoria"
-#: engine/core/docs/drf/viewsets.py:274
+#: engine/core/docs/drf/viewsets.py:302
msgid "list all orders (simple view)"
msgstr "Listar todas as categorias (visualização simples)"
-#: engine/core/docs/drf/viewsets.py:275
+#: engine/core/docs/drf/viewsets.py:303
msgid "for non-staff users, only their own orders are returned."
msgstr ""
"Para usuários não funcionários, apenas seus próprios pedidos são devolvidos."
-#: engine/core/docs/drf/viewsets.py:281
+#: engine/core/docs/drf/viewsets.py:309
msgid ""
-"Case-insensitive substring search across human_readable_id, "
-"order_products.product.name, and order_products.product.partnumber"
+"Case-insensitive substring search across human_readable_id, order_products."
+"product.name, and order_products.product.partnumber"
msgstr ""
"Pesquisa de substring sem distinção entre maiúsculas e minúsculas em "
-"human_readable_id, order_products.product.name e "
-"order_products.product.partnumber"
+"human_readable_id, order_products.product.name e order_products.product."
+"partnumber"
-#: engine/core/docs/drf/viewsets.py:288
+#: engine/core/docs/drf/viewsets.py:316
msgid "Filter orders with buy_time >= this ISO 8601 datetime"
msgstr "Filtrar pedidos com buy_time >= este datetime ISO 8601"
-#: engine/core/docs/drf/viewsets.py:293
+#: engine/core/docs/drf/viewsets.py:321
msgid "Filter orders with buy_time <= this ISO 8601 datetime"
msgstr "Filtrar pedidos com buy_time <= este datetime ISO 8601"
-#: engine/core/docs/drf/viewsets.py:298
+#: engine/core/docs/drf/viewsets.py:326
msgid "Filter by exact order UUID"
msgstr "Filtrar por UUID de ordem exata"
-#: engine/core/docs/drf/viewsets.py:303
+#: engine/core/docs/drf/viewsets.py:331
msgid "Filter by exact human-readable order ID"
msgstr "Filtrar por ID exata do pedido legível por humanos"
-#: engine/core/docs/drf/viewsets.py:308
+#: engine/core/docs/drf/viewsets.py:336
msgid "Filter by user's email (case-insensitive exact match)"
msgstr ""
"Filtrar por e-mail do usuário (correspondência exata sem distinção entre "
"maiúsculas e minúsculas)"
-#: engine/core/docs/drf/viewsets.py:313
+#: engine/core/docs/drf/viewsets.py:341
msgid "Filter by user's UUID"
msgstr "Filtrar por UUID do usuário"
-#: engine/core/docs/drf/viewsets.py:318
+#: engine/core/docs/drf/viewsets.py:347
msgid "Filter by order status (case-insensitive substring match)"
msgstr ""
"Filtrar por status do pedido (correspondência de substring sem distinção "
"entre maiúsculas e minúsculas)"
-#: engine/core/docs/drf/viewsets.py:324
+#: engine/core/docs/drf/viewsets.py:354
msgid ""
-"Order by one of: uuid, human_readable_id, user_email, user, status, created,"
-" modified, buy_time, random. Prefix with '-' for descending (e.g. "
-"'-buy_time')."
+"Order by one of: uuid, human_readable_id, user_email, user, status, created, "
+"modified, buy_time, random. Prefix with '-' for descending (e.g. '-"
+"buy_time')."
msgstr ""
"Ordene por uma das seguintes opções: uuid, human_readable_id, user_email, "
"user, status, created, modified, buy_time, random. Prefixe com '-' para "
"ordem decrescente (por exemplo, '-buy_time')."
-#: engine/core/docs/drf/viewsets.py:336
+#: engine/core/docs/drf/viewsets.py:366
msgid "retrieve a single order (detailed view)"
msgstr "Recuperar uma única categoria (visualização detalhada)"
-#: engine/core/docs/drf/viewsets.py:341
+#: engine/core/docs/drf/viewsets.py:371
msgid "Order UUID or human-readable id"
msgstr "UUID do pedido ou ID legível por humanos"
-#: engine/core/docs/drf/viewsets.py:351
+#: engine/core/docs/drf/viewsets.py:381
msgid "create an order"
msgstr "Criar um atributo"
-#: engine/core/docs/drf/viewsets.py:352
+#: engine/core/docs/drf/viewsets.py:382
msgid "doesn't work for non-staff users."
msgstr "Não funciona para usuários que não são da equipe."
-#: engine/core/docs/drf/viewsets.py:359
+#: engine/core/docs/drf/viewsets.py:389
msgid "delete an order"
msgstr "Excluir um atributo"
-#: engine/core/docs/drf/viewsets.py:366
+#: engine/core/docs/drf/viewsets.py:396
msgid "rewrite an existing order saving non-editables"
msgstr "Reescrever uma categoria existente salvando itens não editáveis"
-#: engine/core/docs/drf/viewsets.py:373
+#: engine/core/docs/drf/viewsets.py:403
msgid "rewrite some fields of an existing order saving non-editables"
msgstr ""
"Reescreva alguns campos de uma categoria existente salvando os não editáveis"
-#: engine/core/docs/drf/viewsets.py:380
+#: engine/core/docs/drf/viewsets.py:410
msgid "purchase an order"
msgstr "Preço de compra no momento do pedido"
-#: engine/core/docs/drf/viewsets.py:382
+#: engine/core/docs/drf/viewsets.py:412
msgid ""
"finalizes the order purchase. if `force_balance` is used, the purchase is "
"completed using the user's balance; if `force_payment` is used, a "
@@ -476,27 +473,27 @@ msgstr ""
"concluída usando o saldo do usuário; se `force_payment` for usado, uma "
"transação será iniciada."
-#: engine/core/docs/drf/viewsets.py:397
+#: engine/core/docs/drf/viewsets.py:427
msgid "retrieve current pending order of a user"
msgstr "recuperar o pedido pendente atual de um usuário"
-#: engine/core/docs/drf/viewsets.py:398
+#: engine/core/docs/drf/viewsets.py:428
msgid "retrieves a current pending order of an authenticated user"
msgstr "recupera um pedido pendente atual de um usuário autenticado"
-#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334
+#: engine/core/docs/drf/viewsets.py:438 engine/core/graphene/mutations.py:354
msgid "purchase an order without account creation"
msgstr "comprar um pedido sem criar uma conta"
-#: engine/core/docs/drf/viewsets.py:409
+#: engine/core/docs/drf/viewsets.py:439
msgid "finalizes the order purchase for a non-registered user."
msgstr "finaliza a compra do pedido para um usuário não registrado."
-#: engine/core/docs/drf/viewsets.py:420
+#: engine/core/docs/drf/viewsets.py:450
msgid "add product to order"
msgstr "Adicionar um produto ao pedido"
-#: engine/core/docs/drf/viewsets.py:421
+#: engine/core/docs/drf/viewsets.py:452
msgid ""
"adds a product to an order using the provided `product_uuid` and "
"`attributes`."
@@ -504,13 +501,13 @@ msgstr ""
"Adiciona um produto a um pedido usando o `product_uuid` e os `attributes` "
"fornecidos."
-#: engine/core/docs/drf/viewsets.py:429
+#: engine/core/docs/drf/viewsets.py:461
msgid "add a list of products to order, quantities will not count"
msgstr ""
"Adicionar uma lista de produtos ao pedido, as quantidades não serão "
"contabilizadas"
-#: engine/core/docs/drf/viewsets.py:430
+#: engine/core/docs/drf/viewsets.py:463
msgid ""
"adds a list of products to an order using the provided `product_uuid` and "
"`attributes`."
@@ -518,11 +515,11 @@ msgstr ""
"Adiciona uma lista de produtos a um pedido usando o `product_uuid` e os "
"`attributes` fornecidos."
-#: engine/core/docs/drf/viewsets.py:438
+#: engine/core/docs/drf/viewsets.py:472
msgid "remove product from order"
msgstr "Remover um produto do pedido"
-#: engine/core/docs/drf/viewsets.py:439
+#: engine/core/docs/drf/viewsets.py:474
msgid ""
"removes a product from an order using the provided `product_uuid` and "
"`attributes`."
@@ -530,11 +527,11 @@ msgstr ""
"Remove um produto de um pedido usando o `product_uuid` e os `attributes` "
"fornecidos."
-#: engine/core/docs/drf/viewsets.py:447
+#: engine/core/docs/drf/viewsets.py:483
msgid "remove product from order, quantities will not count"
msgstr "Remover um produto do pedido, as quantidades não serão contabilizadas"
-#: engine/core/docs/drf/viewsets.py:448
+#: engine/core/docs/drf/viewsets.py:485
msgid ""
"removes a list of products from an order using the provided `product_uuid` "
"and `attributes`"
@@ -542,713 +539,724 @@ msgstr ""
"Remove uma lista de produtos de um pedido usando o `product_uuid` e os "
"`attributes` fornecidos."
-#: engine/core/docs/drf/viewsets.py:459
+#: engine/core/docs/drf/viewsets.py:497
msgid "list all wishlists (simple view)"
msgstr "Listar todos os atributos (visualização simples)"
-#: engine/core/docs/drf/viewsets.py:460
+#: engine/core/docs/drf/viewsets.py:498
msgid "for non-staff users, only their own wishlists are returned."
msgstr ""
"Para usuários que não pertencem à equipe, apenas suas próprias listas de "
"desejos são retornadas."
-#: engine/core/docs/drf/viewsets.py:467
+#: engine/core/docs/drf/viewsets.py:508
msgid "retrieve a single wishlist (detailed view)"
msgstr "Recuperar um único atributo (visualização detalhada)"
-#: engine/core/docs/drf/viewsets.py:474
+#: engine/core/docs/drf/viewsets.py:515
msgid "create an wishlist"
msgstr "Criar um atributo"
-#: engine/core/docs/drf/viewsets.py:475
+#: engine/core/docs/drf/viewsets.py:516
msgid "Doesn't work for non-staff users."
msgstr "Não funciona para usuários que não são da equipe."
-#: engine/core/docs/drf/viewsets.py:482
+#: engine/core/docs/drf/viewsets.py:523
msgid "delete an wishlist"
msgstr "Excluir um atributo"
-#: engine/core/docs/drf/viewsets.py:489
+#: engine/core/docs/drf/viewsets.py:530
msgid "rewrite an existing wishlist saving non-editables"
msgstr "Reescreva um atributo existente salvando os não editáveis"
-#: engine/core/docs/drf/viewsets.py:496
+#: engine/core/docs/drf/viewsets.py:537
msgid "rewrite some fields of an existing wishlist saving non-editables"
msgstr ""
"Reescreva alguns campos de um atributo existente salvando os não editáveis"
-#: engine/core/docs/drf/viewsets.py:503
+#: engine/core/docs/drf/viewsets.py:544
msgid "retrieve current pending wishlist of a user"
msgstr "recuperar a lista de desejos pendente atual de um usuário"
-#: engine/core/docs/drf/viewsets.py:504
+#: engine/core/docs/drf/viewsets.py:545
msgid "retrieves a current pending wishlist of an authenticated user"
-msgstr ""
-"recupera uma lista de desejos pendente atual de um usuário autenticado"
+msgstr "recupera uma lista de desejos pendente atual de um usuário autenticado"
-#: engine/core/docs/drf/viewsets.py:514
+#: engine/core/docs/drf/viewsets.py:555
msgid "add product to wishlist"
msgstr "Adicionar um produto ao pedido"
-#: engine/core/docs/drf/viewsets.py:515
+#: engine/core/docs/drf/viewsets.py:557
msgid "adds a product to an wishlist using the provided `product_uuid`"
msgstr ""
"Adiciona um produto a uma lista de desejos usando o `product_uuid` fornecido"
-#: engine/core/docs/drf/viewsets.py:523
+#: engine/core/docs/drf/viewsets.py:566
msgid "remove product from wishlist"
msgstr "Remover um produto da lista de desejos"
-#: engine/core/docs/drf/viewsets.py:524
+#: engine/core/docs/drf/viewsets.py:568
msgid "removes a product from an wishlist using the provided `product_uuid`"
msgstr ""
"Remove um produto de uma lista de desejos usando o `product_uuid` fornecido"
-#: engine/core/docs/drf/viewsets.py:532
+#: engine/core/docs/drf/viewsets.py:577
msgid "add many products to wishlist"
msgstr "Adicionar muitos produtos à lista de desejos"
-#: engine/core/docs/drf/viewsets.py:533
+#: engine/core/docs/drf/viewsets.py:579
msgid "adds many products to an wishlist using the provided `product_uuids`"
msgstr ""
"Adiciona vários produtos a uma lista de desejos usando os `product_uuids` "
"fornecidos"
-#: engine/core/docs/drf/viewsets.py:541
+#: engine/core/docs/drf/viewsets.py:588
msgid "remove many products from wishlist"
msgstr "Remover um produto do pedido"
-#: engine/core/docs/drf/viewsets.py:542
+#: engine/core/docs/drf/viewsets.py:590
msgid ""
"removes many products from an wishlist using the provided `product_uuids`"
msgstr ""
"Remove vários produtos de uma lista de desejos usando os `product_uuids` "
"fornecidos"
-#: engine/core/docs/drf/viewsets.py:549
+#: engine/core/docs/drf/viewsets.py:598
msgid ""
"Filter by one or more attribute name/value pairs. \n"
"• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n"
-"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n"
-"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n"
+"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, "
+"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, "
+"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n"
+"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), "
+"`true`/`false` for booleans, integers, floats; otherwise treated as "
+"string. \n"
"• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n"
"Examples: \n"
-"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n"
+"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\","
+"\"bluetooth\"]`, \n"
"`b64-description=icontains-aGVhdC1jb2xk`"
msgstr ""
"Filtrar por um ou mais pares de nome/valor de atributo. \n"
"- **Sintaxe**: `attr_name=method-value[;attr2=method2-value2]...`\n"
-"- Métodos** (o padrão é `icontains` se omitido): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`\n"
-"- Digitação de valores**: JSON é tentado primeiro (para que você possa passar listas/dicas), `true`/`false` para booleanos, inteiros, flutuantes; caso contrário, é tratado como string. \n"
-"- Base64**: prefixo com `b64-` para codificar o valor bruto com base64 de forma segura para a URL. \n"
+"- Métodos** (o padrão é `icontains` se omitido): `iexact`, `exact`, "
+"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, "
+"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`\n"
+"- Digitação de valores**: JSON é tentado primeiro (para que você possa "
+"passar listas/dicas), `true`/`false` para booleanos, inteiros, flutuantes; "
+"caso contrário, é tratado como string. \n"
+"- Base64**: prefixo com `b64-` para codificar o valor bruto com base64 de "
+"forma segura para a URL. \n"
"Exemplos: \n"
"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\", \"bluetooth\"]`,\n"
"`b64-description=icontains-aGVhdC1jb2xk`"
-#: engine/core/docs/drf/viewsets.py:568 engine/core/docs/drf/viewsets.py:569
+#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
msgid "list all products (simple view)"
msgstr "Listar todos os produtos (visualização simples)"
-#: engine/core/docs/drf/viewsets.py:574
+#: engine/core/docs/drf/viewsets.py:623
msgid "(exact) Product UUID"
msgstr "UUID (exato) do produto"
-#: engine/core/docs/drf/viewsets.py:581
+#: engine/core/docs/drf/viewsets.py:630
msgid ""
-"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n"
+"Comma-separated list of fields to sort by. Prefix with `-` for "
+"descending. \n"
"**Allowed:** uuid, rating, name, slug, created, modified, price, random"
msgstr ""
-"Lista de campos separada por vírgulas para classificação. Prefixe com `-` para classificação decrescente. \n"
-"**Permitido:** uuid, classificação, nome, slug, criado, modificado, preço, aleatório"
+"Lista de campos separada por vírgulas para classificação. Prefixe com `-` "
+"para classificação decrescente. \n"
+"**Permitido:** uuid, classificação, nome, slug, criado, modificado, preço, "
+"aleatório"
-#: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599
+#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
msgid "retrieve a single product (detailed view)"
msgstr "Recuperar um único produto (visualização detalhada)"
-#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634
-#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672
-#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710
+#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683
+#: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725
+#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763
msgid "Product UUID or slug"
msgstr "UUID ou Slug do produto"
-#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
+#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
#: engine/core/graphene/dashboard_mutations/product.py:80
#: engine/core/graphene/dashboard_mutations/product.py:118
#: engine/core/graphene/dashboard_mutations/product.py:166
msgid "create a product"
msgstr "Criar um produto"
-#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629
+#: engine/core/docs/drf/viewsets.py:677 engine/core/docs/drf/viewsets.py:678
msgid "rewrite an existing product, preserving non-editable fields"
msgstr "Reescrever um produto existente, preservando os campos não editáveis"
-#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
+#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:700
msgid ""
"update some fields of an existing product, preserving non-editable fields"
msgstr ""
"Atualizar alguns campos de um produto existente, preservando os campos não "
"editáveis"
-#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
+#: engine/core/docs/drf/viewsets.py:719 engine/core/docs/drf/viewsets.py:720
msgid "delete a product"
msgstr "Excluir um produto"
-#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686
+#: engine/core/docs/drf/viewsets.py:738 engine/core/docs/drf/viewsets.py:739
msgid "lists all permitted feedbacks for a product"
msgstr "lista todos os feedbacks permitidos para um produto"
-#: engine/core/docs/drf/viewsets.py:705
+#: engine/core/docs/drf/viewsets.py:758
msgid "returns a snapshot of the product's SEO meta data"
msgstr "Retorna um instantâneo dos metadados de SEO do produto"
-#: engine/core/docs/drf/viewsets.py:726
+#: engine/core/docs/drf/viewsets.py:779
msgid "list all addresses"
msgstr "Listar todos os endereços"
-#: engine/core/docs/drf/viewsets.py:736
+#: engine/core/docs/drf/viewsets.py:789
msgid "retrieve a single address"
msgstr "Recuperar um único endereço"
-#: engine/core/docs/drf/viewsets.py:746
+#: engine/core/docs/drf/viewsets.py:799
msgid "create a new address"
msgstr "Criar um novo endereço"
-#: engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:810
msgid "delete an address"
msgstr "Excluir um endereço"
-#: engine/core/docs/drf/viewsets.py:767
+#: engine/core/docs/drf/viewsets.py:820
msgid "update an entire address"
msgstr "Atualizar um endereço inteiro"
-#: engine/core/docs/drf/viewsets.py:778
+#: engine/core/docs/drf/viewsets.py:831
msgid "partially update an address"
msgstr "Atualizar parcialmente um endereço"
-#: engine/core/docs/drf/viewsets.py:789
+#: engine/core/docs/drf/viewsets.py:842
msgid "autocomplete address suggestions"
msgstr "Entrada de endereço com preenchimento automático"
-#: engine/core/docs/drf/viewsets.py:794
+#: engine/core/docs/drf/viewsets.py:848
msgid "raw data query string, please append with data from geo-IP endpoint"
msgstr ""
"Cadeia de consulta de dados brutos, anexe os dados do ponto de extremidade "
"de IP geográfico"
-#: engine/core/docs/drf/viewsets.py:800
+#: engine/core/docs/drf/viewsets.py:855
msgid "limit the results amount, 1 < limit < 10, default: 5"
msgstr "limita a quantidade de resultados, 1 < limite < 10, padrão: 5"
-#: engine/core/docs/drf/viewsets.py:816
+#: engine/core/docs/drf/viewsets.py:871
msgid "list all feedbacks (simple view)"
msgstr "listar todos os feedbacks (visualização simples)"
-#: engine/core/docs/drf/viewsets.py:823
+#: engine/core/docs/drf/viewsets.py:881
msgid "retrieve a single feedback (detailed view)"
msgstr "recuperar um único feedback (visualização detalhada)"
-#: engine/core/docs/drf/viewsets.py:830
+#: engine/core/docs/drf/viewsets.py:888
msgid "create a feedback"
msgstr "criar um feedback"
-#: engine/core/docs/drf/viewsets.py:837
+#: engine/core/docs/drf/viewsets.py:895
msgid "delete a feedback"
msgstr "excluir um feedback"
-#: engine/core/docs/drf/viewsets.py:844
+#: engine/core/docs/drf/viewsets.py:902
msgid "rewrite an existing feedback saving non-editables"
msgstr "reescrever um feedback existente salvando itens não editáveis"
-#: engine/core/docs/drf/viewsets.py:851
+#: engine/core/docs/drf/viewsets.py:909
msgid "rewrite some fields of an existing feedback saving non-editables"
msgstr ""
"Reescreva alguns campos de uma categoria existente salvando os não editáveis"
-#: engine/core/docs/drf/viewsets.py:861
+#: engine/core/docs/drf/viewsets.py:919
msgid "list all order–product relations (simple view)"
msgstr "listar todas as relações pedido-produto (visualização simples)"
-#: engine/core/docs/drf/viewsets.py:871
+#: engine/core/docs/drf/viewsets.py:929
msgid "retrieve a single order–product relation (detailed view)"
msgstr "recuperar uma única relação pedido-produto (visão detalhada)"
-#: engine/core/docs/drf/viewsets.py:881
+#: engine/core/docs/drf/viewsets.py:939
msgid "create a new order–product relation"
msgstr "criar uma nova relação pedido-produto"
-#: engine/core/docs/drf/viewsets.py:891
+#: engine/core/docs/drf/viewsets.py:949
msgid "replace an existing order–product relation"
msgstr "substituir uma relação pedido-produto existente"
-#: engine/core/docs/drf/viewsets.py:901
+#: engine/core/docs/drf/viewsets.py:959
msgid "partially update an existing order–product relation"
msgstr "atualizar parcialmente uma relação pedido-produto existente"
-#: engine/core/docs/drf/viewsets.py:911
+#: engine/core/docs/drf/viewsets.py:969
msgid "delete an order–product relation"
msgstr "excluir uma relação pedido-produto"
-#: engine/core/docs/drf/viewsets.py:921
+#: engine/core/docs/drf/viewsets.py:979
msgid "add or remove feedback on an order–product relation"
msgstr "adicionar ou remover feedback em uma relação pedido-produto"
-#: engine/core/docs/drf/viewsets.py:938
+#: engine/core/docs/drf/viewsets.py:996
msgid "list all brands (simple view)"
msgstr "Listar todas as marcas (visualização simples)"
-#: engine/core/docs/drf/viewsets.py:945
+#: engine/core/docs/drf/viewsets.py:1003
msgid "retrieve a single brand (detailed view)"
msgstr "Recuperar uma única marca (visualização detalhada)"
-#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993
+#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051
msgid "Brand UUID or slug"
msgstr "UUID ou slug da marca"
-#: engine/core/docs/drf/viewsets.py:960
+#: engine/core/docs/drf/viewsets.py:1018
msgid "create a brand"
msgstr "Criar uma marca"
-#: engine/core/docs/drf/viewsets.py:967
+#: engine/core/docs/drf/viewsets.py:1025
msgid "delete a brand"
msgstr "Delete a brand"
-#: engine/core/docs/drf/viewsets.py:974
+#: engine/core/docs/drf/viewsets.py:1032
msgid "rewrite an existing brand saving non-editables"
msgstr "Reescrever uma marca existente economizando produtos não editáveis"
-#: engine/core/docs/drf/viewsets.py:981
+#: engine/core/docs/drf/viewsets.py:1039
msgid "rewrite some fields of an existing brand saving non-editables"
msgstr ""
"Reescreva alguns campos de uma categoria existente salvando os não editáveis"
-#: engine/core/docs/drf/viewsets.py:1006
+#: engine/core/docs/drf/viewsets.py:1064
msgid "list all vendors (simple view)"
msgstr "Listar todos os fornecedores (visualização simples)"
-#: engine/core/docs/drf/viewsets.py:1013
+#: engine/core/docs/drf/viewsets.py:1074
msgid "retrieve a single vendor (detailed view)"
msgstr "Recuperar um único fornecedor (visão detalhada)"
-#: engine/core/docs/drf/viewsets.py:1020
+#: engine/core/docs/drf/viewsets.py:1081
msgid "create a vendor"
msgstr "Criar um fornecedor"
-#: engine/core/docs/drf/viewsets.py:1027
+#: engine/core/docs/drf/viewsets.py:1088
msgid "delete a vendor"
msgstr "Excluir um fornecedor"
-#: engine/core/docs/drf/viewsets.py:1034
+#: engine/core/docs/drf/viewsets.py:1095
msgid "rewrite an existing vendor saving non-editables"
msgstr "Reescrever um fornecedor existente salvando itens não editáveis"
-#: engine/core/docs/drf/viewsets.py:1041
+#: engine/core/docs/drf/viewsets.py:1102
msgid "rewrite some fields of an existing vendor saving non-editables"
msgstr ""
"Reescreva alguns campos de uma categoria existente salvando os não editáveis"
-#: engine/core/docs/drf/viewsets.py:1051
+#: engine/core/docs/drf/viewsets.py:1112
msgid "list all product images (simple view)"
msgstr "Listar todas as imagens do produto (visualização simples)"
-#: engine/core/docs/drf/viewsets.py:1058
+#: engine/core/docs/drf/viewsets.py:1122
msgid "retrieve a single product image (detailed view)"
msgstr "Recuperar uma única imagem de produto (visualização detalhada)"
-#: engine/core/docs/drf/viewsets.py:1065
+#: engine/core/docs/drf/viewsets.py:1129
msgid "create a product image"
msgstr "Criar uma imagem do produto"
-#: engine/core/docs/drf/viewsets.py:1072
+#: engine/core/docs/drf/viewsets.py:1139
msgid "delete a product image"
msgstr "Excluir uma imagem de produto"
-#: engine/core/docs/drf/viewsets.py:1079
+#: engine/core/docs/drf/viewsets.py:1146
msgid "rewrite an existing product image saving non-editables"
msgstr ""
"Reescrever uma imagem de produto existente salvando itens não editáveis"
-#: engine/core/docs/drf/viewsets.py:1086
+#: engine/core/docs/drf/viewsets.py:1154
msgid "rewrite some fields of an existing product image saving non-editables"
msgstr ""
"Reescreva alguns campos de uma categoria existente salvando os não editáveis"
-#: engine/core/docs/drf/viewsets.py:1096
+#: engine/core/docs/drf/viewsets.py:1165
msgid "list all promo codes (simple view)"
msgstr "Listar todos os códigos promocionais (visualização simples)"
-#: engine/core/docs/drf/viewsets.py:1103
+#: engine/core/docs/drf/viewsets.py:1175
msgid "retrieve a single promo code (detailed view)"
msgstr "Recuperar um único código promocional (visualização detalhada)"
-#: engine/core/docs/drf/viewsets.py:1110
+#: engine/core/docs/drf/viewsets.py:1182
msgid "create a promo code"
msgstr "Criar um código promocional"
-#: engine/core/docs/drf/viewsets.py:1117
+#: engine/core/docs/drf/viewsets.py:1189
msgid "delete a promo code"
msgstr "Delete a promo code"
-#: engine/core/docs/drf/viewsets.py:1124
+#: engine/core/docs/drf/viewsets.py:1196
msgid "rewrite an existing promo code saving non-editables"
-msgstr ""
-"Reescreva um código promocional existente salvando itens não editáveis"
+msgstr "Reescreva um código promocional existente salvando itens não editáveis"
-#: engine/core/docs/drf/viewsets.py:1131
+#: engine/core/docs/drf/viewsets.py:1203
msgid "rewrite some fields of an existing promo code saving non-editables"
msgstr ""
"Reescreva alguns campos de uma categoria existente salvando os não editáveis"
-#: engine/core/docs/drf/viewsets.py:1141
+#: engine/core/docs/drf/viewsets.py:1213
msgid "list all promotions (simple view)"
msgstr "Listar todas as promoções (visualização simples)"
-#: engine/core/docs/drf/viewsets.py:1148
+#: engine/core/docs/drf/viewsets.py:1223
msgid "retrieve a single promotion (detailed view)"
msgstr "Recuperar uma única promoção (visualização detalhada)"
-#: engine/core/docs/drf/viewsets.py:1155
+#: engine/core/docs/drf/viewsets.py:1230
msgid "create a promotion"
msgstr "Criar uma promoção"
-#: engine/core/docs/drf/viewsets.py:1162
+#: engine/core/docs/drf/viewsets.py:1237
msgid "delete a promotion"
msgstr "Excluir uma promoção"
-#: engine/core/docs/drf/viewsets.py:1169
+#: engine/core/docs/drf/viewsets.py:1244
msgid "rewrite an existing promotion saving non-editables"
msgstr "Reescrever uma promoção existente salvando itens não editáveis"
-#: engine/core/docs/drf/viewsets.py:1176
+#: engine/core/docs/drf/viewsets.py:1251
msgid "rewrite some fields of an existing promotion saving non-editables"
msgstr ""
"Reescreva alguns campos de uma categoria existente salvando os não editáveis"
-#: engine/core/docs/drf/viewsets.py:1186
+#: engine/core/docs/drf/viewsets.py:1261
msgid "list all stocks (simple view)"
msgstr "Listar todas as ações (visualização simples)"
-#: engine/core/docs/drf/viewsets.py:1193
+#: engine/core/docs/drf/viewsets.py:1268
msgid "retrieve a single stock (detailed view)"
msgstr "Recuperar um único estoque (visualização detalhada)"
-#: engine/core/docs/drf/viewsets.py:1200
+#: engine/core/docs/drf/viewsets.py:1275
msgid "create a stock record"
msgstr "Criar um registro de estoque"
-#: engine/core/docs/drf/viewsets.py:1207
+#: engine/core/docs/drf/viewsets.py:1282
msgid "delete a stock record"
msgstr "Excluir um registro de estoque"
-#: engine/core/docs/drf/viewsets.py:1214
+#: engine/core/docs/drf/viewsets.py:1289
msgid "rewrite an existing stock record saving non-editables"
msgstr ""
"Reescrever um registro de estoque existente, salvando itens não editáveis"
-#: engine/core/docs/drf/viewsets.py:1221
+#: engine/core/docs/drf/viewsets.py:1297
msgid "rewrite some fields of an existing stock record saving non-editables"
msgstr ""
"Reescreva alguns campos de uma categoria existente salvando os não editáveis"
-#: engine/core/docs/drf/viewsets.py:1231
+#: engine/core/docs/drf/viewsets.py:1308
msgid "list all product tags (simple view)"
msgstr "Listar todas as tags de produtos (visualização simples)"
-#: engine/core/docs/drf/viewsets.py:1238
+#: engine/core/docs/drf/viewsets.py:1318
msgid "retrieve a single product tag (detailed view)"
msgstr "Recuperar uma única tag de produto (visualização detalhada)"
-#: engine/core/docs/drf/viewsets.py:1245
+#: engine/core/docs/drf/viewsets.py:1325
msgid "create a product tag"
msgstr "Criar uma tag de produto"
-#: engine/core/docs/drf/viewsets.py:1252
+#: engine/core/docs/drf/viewsets.py:1335
msgid "delete a product tag"
msgstr "Excluir uma tag de produto"
-#: engine/core/docs/drf/viewsets.py:1259
+#: engine/core/docs/drf/viewsets.py:1342
msgid "rewrite an existing product tag saving non-editables"
msgstr "Reescrever uma tag de produto existente salvando itens não editáveis"
-#: engine/core/docs/drf/viewsets.py:1266
+#: engine/core/docs/drf/viewsets.py:1350
msgid "rewrite some fields of an existing product tag saving non-editables"
msgstr ""
"Reescreva alguns campos de uma categoria existente salvando os não editáveis"
-#: engine/core/elasticsearch/__init__.py:122
-#: engine/core/elasticsearch/__init__.py:570
+#: engine/core/elasticsearch/__init__.py:127
+#: engine/core/elasticsearch/__init__.py:627
msgid "no search term provided."
msgstr "Nenhum termo de pesquisa foi fornecido."
-#: engine/core/filters.py:69 engine/core/filters.py:426
-#: engine/core/filters.py:553
+#: engine/core/filters.py:78 engine/core/filters.py:484
+#: engine/core/filters.py:625
msgid "Search"
msgstr "Pesquisa"
-#: engine/core/filters.py:70 engine/core/filters.py:583
-#: engine/core/filters.py:612
+#: engine/core/filters.py:79 engine/core/filters.py:662
+#: engine/core/filters.py:691
msgid "UUID"
msgstr "UUID"
-#: engine/core/filters.py:71 engine/core/filters.py:428
-#: engine/core/filters.py:555
+#: engine/core/filters.py:80 engine/core/filters.py:487
+#: engine/core/filters.py:627
msgid "Name"
msgstr "Nome"
-#: engine/core/filters.py:72 engine/core/filters.py:557
+#: engine/core/filters.py:82 engine/core/filters.py:630
msgid "Categories"
msgstr "Categorias"
-#: engine/core/filters.py:74
+#: engine/core/filters.py:86
msgid "Categories Slugs"
msgstr "Categorias Lesmas"
-#: engine/core/filters.py:75 engine/core/filters.py:436
+#: engine/core/filters.py:88 engine/core/filters.py:495
msgid "Tags"
msgstr "Tags"
-#: engine/core/filters.py:76
+#: engine/core/filters.py:90
msgid "Min Price"
msgstr "Preço mínimo"
-#: engine/core/filters.py:77
+#: engine/core/filters.py:93
msgid "Max Price"
msgstr "Preço máximo"
-#: engine/core/filters.py:78
+#: engine/core/filters.py:95
msgid "Is Active"
msgstr "Está ativo"
-#: engine/core/filters.py:79
+#: engine/core/filters.py:96
msgid "Brand"
msgstr "Brand"
-#: engine/core/filters.py:80
+#: engine/core/filters.py:97
msgid "Attributes"
msgstr "Atributos"
-#: engine/core/filters.py:81
+#: engine/core/filters.py:99
msgid "Quantity"
msgstr "Quantidade"
-#: engine/core/filters.py:82 engine/core/filters.py:430
-#: engine/core/filters.py:556 engine/core/models.py:321
-#: engine/core/models.py:489 engine/core/models.py:644
+#: engine/core/filters.py:101 engine/core/filters.py:489
+#: engine/core/filters.py:628 engine/core/models.py:327
+#: engine/core/models.py:508 engine/core/models.py:665
msgid "Slug"
msgstr "Lesma"
-#: engine/core/filters.py:83
+#: engine/core/filters.py:102
msgid "Is Digital"
msgstr "É digital"
-#: engine/core/filters.py:84
+#: engine/core/filters.py:104
msgid "Include sub-categories"
msgstr "Incluir subcategorias"
-#: engine/core/filters.py:87
+#: engine/core/filters.py:108
msgid "Include personal ordered"
msgstr "Incluir produtos pessoais encomendados"
-#: engine/core/filters.py:89 engine/core/models.py:648
+#: engine/core/filters.py:110 engine/core/models.py:669
msgid "SKU"
msgstr "SKU"
-#: engine/core/filters.py:184
+#: engine/core/filters.py:212
msgid "there must be a category_uuid to use include_subcategories flag"
msgstr ""
"Deve haver um category_uuid para usar o sinalizador include_subcategories"
-#: engine/core/filters.py:353
+#: engine/core/filters.py:398
msgid "Search (ID, product name or part number)"
msgstr "Pesquisa (ID, nome do produto ou número de peça)"
-#: engine/core/filters.py:356
+#: engine/core/filters.py:402
msgid "Bought after (inclusive)"
msgstr "Comprado depois (inclusive)"
-#: engine/core/filters.py:357
+#: engine/core/filters.py:405
msgid "Bought before (inclusive)"
msgstr "Comprado antes (inclusive)"
-#: engine/core/filters.py:360 engine/core/filters.py:407
-#: engine/core/filters.py:614
+#: engine/core/filters.py:410 engine/core/filters.py:461
+#: engine/core/filters.py:696
msgid "User email"
msgstr "E-mail do usuário"
-#: engine/core/filters.py:361 engine/core/filters.py:408
-#: engine/core/filters.py:592 engine/core/filters.py:613
+#: engine/core/filters.py:413 engine/core/filters.py:464
+#: engine/core/filters.py:671 engine/core/filters.py:693
msgid "User UUID"
msgstr "UUID do usuário"
-#: engine/core/filters.py:362
+#: engine/core/filters.py:415
msgid "Status"
msgstr "Status"
-#: engine/core/filters.py:366
+#: engine/core/filters.py:419
msgid "Human Readable ID"
msgstr "ID legível por humanos"
-#: engine/core/filters.py:429
+#: engine/core/filters.py:488
msgid "Parent"
msgstr "Parent"
-#: engine/core/filters.py:433
+#: engine/core/filters.py:492
msgid "Whole category(has at least 1 product or not)"
msgstr "Toda a categoria (com pelo menos 1 produto ou não)"
-#: engine/core/filters.py:437
+#: engine/core/filters.py:496
msgid "Level"
msgstr "Nível"
-#: engine/core/filters.py:587
+#: engine/core/filters.py:666
msgid "Product UUID"
msgstr "UUID do produto"
-#: engine/core/graphene/mutations.py:40
+#: engine/core/graphene/mutations.py:41
msgid "key to look for in or set into the cache"
msgstr "Chave para procurar ou colocar no cache"
-#: engine/core/graphene/mutations.py:41
+#: engine/core/graphene/mutations.py:43
msgid "data to store in cache"
msgstr "Dados a serem armazenados no cache"
-#: engine/core/graphene/mutations.py:44
+#: engine/core/graphene/mutations.py:46
msgid "timeout in seconds to set the data for into the cache"
msgstr "Tempo limite em segundos para definir os dados para o cache"
-#: engine/core/graphene/mutations.py:47
+#: engine/core/graphene/mutations.py:49
msgid "cached data"
msgstr "Dados em cache"
-#: engine/core/graphene/mutations.py:62
+#: engine/core/graphene/mutations.py:64
msgid "camelized JSON data from the requested URL"
msgstr "Dados JSON camelizados da URL solicitada"
-#: engine/core/graphene/mutations.py:67 engine/core/views.py:257
+#: engine/core/graphene/mutations.py:69 engine/core/views.py:249
msgid "only URLs starting with http(s):// are allowed"
msgstr "Somente URLs que começam com http(s):// são permitidos"
-#: engine/core/graphene/mutations.py:83
+#: engine/core/graphene/mutations.py:87
msgid "add a product to the order"
msgstr "Adicionar um produto ao pedido"
-#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131
-#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287
+#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139
+#: engine/core/graphene/mutations.py:255 engine/core/graphene/mutations.py:307
#, python-brace-format
msgid "order {order_uuid} not found"
msgstr "Pedido {order_uuid} não encontrado!"
-#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159
+#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167
msgid "remove a product from the order"
msgstr "Remover um produto do pedido"
-#: engine/core/graphene/mutations.py:137
+#: engine/core/graphene/mutations.py:145
msgid "remove all products from the order"
msgstr "Remover todos os produtos do pedido"
-#: engine/core/graphene/mutations.py:182
+#: engine/core/graphene/mutations.py:190
msgid "buy an order"
msgstr "Comprar um pedido"
-#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265
+#: engine/core/graphene/mutations.py:221 engine/core/graphene/mutations.py:283
msgid "please provide either order_uuid or order_hr_id - mutually exclusive"
msgstr "Forneça order_uuid ou order_hr_id - mutuamente exclusivos!"
-#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501
-#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712
+#: engine/core/graphene/mutations.py:250 engine/core/graphene/mutations.py:525
+#: engine/core/graphene/mutations.py:574 engine/core/viewsets.py:753
msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr "O tipo errado veio do método order.buy(): {type(instance)!s}"
-#: engine/core/graphene/mutations.py:245
+#: engine/core/graphene/mutations.py:261
msgid "perform an action on a list of products in the order"
msgstr "Executar uma ação em uma lista de produtos no pedido"
-#: engine/core/graphene/mutations.py:250
+#: engine/core/graphene/mutations.py:266
msgid "remove/add"
msgstr "Remover/Adicionar"
-#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323
+#: engine/core/graphene/mutations.py:302 engine/core/graphene/mutations.py:343
msgid "action must be either add or remove"
msgstr "A ação deve ser \"adicionar\" ou \"remover\"!"
-#: engine/core/graphene/mutations.py:293
+#: engine/core/graphene/mutations.py:313
msgid "perform an action on a list of products in the wishlist"
msgstr "Executar uma ação em uma lista de produtos na lista de desejos"
-#: engine/core/graphene/mutations.py:311
+#: engine/core/graphene/mutations.py:331
msgid "please provide wishlist_uuid value"
msgstr "Forneça o valor `wishlist_uuid`."
-#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404
-#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460
-#: engine/core/graphene/mutations.py:504
+#: engine/core/graphene/mutations.py:348 engine/core/graphene/mutations.py:424
+#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480
+#: engine/core/graphene/mutations.py:530
#, python-brace-format
msgid "wishlist {wishlist_uuid} not found"
msgstr "Lista de desejos {wishlist_uuid} não encontrada!"
-#: engine/core/graphene/mutations.py:382
+#: engine/core/graphene/mutations.py:402
msgid "add a product to the wishlist"
msgstr "Adicionar um produto ao pedido"
-#: engine/core/graphene/mutations.py:410
+#: engine/core/graphene/mutations.py:430
msgid "remove a product from the wishlist"
msgstr "Remover um produto do pedido"
-#: engine/core/graphene/mutations.py:438
+#: engine/core/graphene/mutations.py:458
msgid "remove all products from the wishlist"
msgstr "Remover um produto do pedido"
-#: engine/core/graphene/mutations.py:466
+#: engine/core/graphene/mutations.py:486
msgid "buy all products from the wishlist"
msgstr "Remover um produto do pedido"
-#: engine/core/graphene/mutations.py:510
+#: engine/core/graphene/mutations.py:536
msgid "buy a product"
msgstr "Comprar um pedido"
-#: engine/core/graphene/mutations.py:516
+#: engine/core/graphene/mutations.py:543
msgid ""
-"please send the attributes as the string formatted like "
-"attr1=value1,attr2=value2"
+"please send the attributes as the string formatted like attr1=value1,"
+"attr2=value2"
msgstr ""
"Envie os atributos como uma string formatada como attr1=value1,attr2=value2"
-#: engine/core/graphene/mutations.py:549
+#: engine/core/graphene/mutations.py:581
msgid "add or delete a feedback for orderproduct"
msgstr "Adicionar ou excluir um feedback para o produto do pedido"
-#: engine/core/graphene/mutations.py:573
+#: engine/core/graphene/mutations.py:607
msgid "action must be either `add` or `remove`"
msgstr "A ação deve ser `add` ou `remove`!"
-#: engine/core/graphene/mutations.py:576
+#: engine/core/graphene/mutations.py:610
#, python-brace-format
msgid "order product {order_product_uuid} not found"
msgstr "Orderproduct {order_product_uuid} não encontrado!"
-#: engine/core/graphene/mutations.py:582
+#: engine/core/graphene/mutations.py:617
msgid "original address string provided by the user"
msgstr "Cadeia de endereços original fornecida pelo usuário"
-#: engine/core/graphene/mutations.py:618 engine/core/models.py:955
-#: engine/core/models.py:968 engine/core/models.py:1383
-#: engine/core/models.py:1412 engine/core/models.py:1437
-#: engine/core/viewsets.py:715
+#: engine/core/graphene/mutations.py:654 engine/core/models.py:978
+#: engine/core/models.py:991 engine/core/models.py:1435
+#: engine/core/models.py:1466 engine/core/models.py:1497
+#: engine/core/viewsets.py:760
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr "{name} não existe: {uuid}!"
-#: engine/core/graphene/mutations.py:632
+#: engine/core/graphene/mutations.py:668
msgid "limit must be between 1 and 10"
msgstr "O limite deve estar entre 1 e 10"
-#: engine/core/graphene/mutations.py:681
+#: engine/core/graphene/mutations.py:717
msgid "elasticsearch - works like a charm"
msgstr "ElasticSearch - funciona muito bem"
#: engine/core/graphene/object_types.py:82
-#: engine/core/graphene/object_types.py:370
-#: engine/core/graphene/object_types.py:417 engine/core/models.py:772
-#: engine/core/models.py:1250 engine/core/models.py:1897
+#: engine/core/graphene/object_types.py:417
+#: engine/core/graphene/object_types.py:468 engine/core/models.py:795
+#: engine/core/models.py:1289 engine/core/models.py:2021
msgid "attributes"
msgstr "Atributos"
@@ -1261,90 +1269,89 @@ msgid "groups of attributes"
msgstr "Grupos de atributos"
#: engine/core/graphene/object_types.py:116
-#: engine/core/graphene/object_types.py:193
-#: engine/core/graphene/object_types.py:223 engine/core/models.py:432
+#: engine/core/graphene/object_types.py:214
+#: engine/core/graphene/object_types.py:252 engine/core/models.py:451
msgid "categories"
msgstr "Categorias"
-#: engine/core/graphene/object_types.py:124 engine/core/models.py:503
+#: engine/core/graphene/object_types.py:132 engine/core/models.py:522
msgid "brands"
msgstr "Marcas"
-#: engine/core/graphene/object_types.py:195
+#: engine/core/graphene/object_types.py:216
msgid "category image url"
msgstr "Categorias"
-#: engine/core/graphene/object_types.py:196
-#: engine/core/graphene/object_types.py:317 engine/core/models.py:283
+#: engine/core/graphene/object_types.py:217
+#: engine/core/graphene/object_types.py:362 engine/core/models.py:289
msgid "markup percentage"
msgstr "Porcentagem de marcação"
-#: engine/core/graphene/object_types.py:199
+#: engine/core/graphene/object_types.py:221
msgid "which attributes and values can be used for filtering this category."
msgstr ""
"Quais atributos e valores podem ser usados para filtrar essa categoria."
-#: engine/core/graphene/object_types.py:203
-msgid ""
-"minimum and maximum prices for products in this category, if available."
+#: engine/core/graphene/object_types.py:227
+msgid "minimum and maximum prices for products in this category, if available."
msgstr "Preços mínimo e máximo dos produtos dessa categoria, se disponíveis."
-#: engine/core/graphene/object_types.py:205
+#: engine/core/graphene/object_types.py:231
msgid "tags for this category"
msgstr "Tags para esta categoria"
-#: engine/core/graphene/object_types.py:206
+#: engine/core/graphene/object_types.py:234
msgid "products in this category"
msgstr "Produtos desta categoria"
-#: engine/core/graphene/object_types.py:324 engine/core/models.py:188
+#: engine/core/graphene/object_types.py:369 engine/core/models.py:194
msgid "vendors"
msgstr "Vendors"
-#: engine/core/graphene/object_types.py:328
+#: engine/core/graphene/object_types.py:373
msgid "Latitude (Y coordinate)"
msgstr "Latitude (coordenada Y)"
-#: engine/core/graphene/object_types.py:329
+#: engine/core/graphene/object_types.py:374
msgid "Longitude (X coordinate)"
msgstr "Longitude (coordenada X)"
-#: engine/core/graphene/object_types.py:358
+#: engine/core/graphene/object_types.py:403
msgid "comment"
msgstr "Como fazer"
-#: engine/core/graphene/object_types.py:359
-#: engine/core/graphene/object_types.py:483
+#: engine/core/graphene/object_types.py:405
+#: engine/core/graphene/object_types.py:539
msgid "rating value from 1 to 10, inclusive, or 0 if not set."
msgstr ""
"Valor de classificação de 1 a 10, inclusive, ou 0 se não estiver definido."
-#: engine/core/graphene/object_types.py:366
+#: engine/core/graphene/object_types.py:413
msgid "represents feedback from a user."
msgstr "Representa o feedback de um usuário."
-#: engine/core/graphene/object_types.py:371
-#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244
+#: engine/core/graphene/object_types.py:418
+#: engine/core/graphene/object_types.py:469 engine/core/models.py:1283
msgid "notifications"
msgstr "Notificações"
-#: engine/core/graphene/object_types.py:372
+#: engine/core/graphene/object_types.py:420
msgid "download url for this order product if applicable"
msgstr "URL de download para este produto do pedido, se aplicável"
-#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736
+#: engine/core/graphene/object_types.py:422 engine/core/models.py:1848
msgid "feedback"
msgstr "Feedback"
-#: engine/core/graphene/object_types.py:407
+#: engine/core/graphene/object_types.py:456
msgid "a list of order products in this order"
msgstr "Uma lista dos produtos solicitados nesse pedido"
-#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214
+#: engine/core/graphene/object_types.py:458 engine/core/models.py:1253
msgid "billing address"
msgstr "Endereço de cobrança"
-#: engine/core/graphene/object_types.py:412
+#: engine/core/graphene/object_types.py:462
msgid ""
"shipping address for this order, leave blank if same as billing address or "
"if not applicable"
@@ -1352,53 +1359,53 @@ msgstr ""
"Endereço de entrega para este pedido, deixe em branco se for o mesmo que o "
"endereço de cobrança ou se não for aplicável"
-#: engine/core/graphene/object_types.py:414
+#: engine/core/graphene/object_types.py:465
msgid "total price of this order"
msgstr "Preço total deste pedido"
-#: engine/core/graphene/object_types.py:415
+#: engine/core/graphene/object_types.py:466
msgid "total quantity of products in order"
msgstr "Quantidade total de produtos no pedido"
-#: engine/core/graphene/object_types.py:416
+#: engine/core/graphene/object_types.py:467
msgid "are all products in the order digital"
msgstr "Todos os produtos estão no pedido digital?"
-#: engine/core/graphene/object_types.py:419
+#: engine/core/graphene/object_types.py:471
msgid "transactions for this order"
msgstr "Transações para esta ordem"
-#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278
+#: engine/core/graphene/object_types.py:491 engine/core/models.py:1317
msgid "orders"
msgstr "Pedidos"
-#: engine/core/graphene/object_types.py:459
+#: engine/core/graphene/object_types.py:512
msgid "image url"
msgstr "URL da imagem"
-#: engine/core/graphene/object_types.py:466
+#: engine/core/graphene/object_types.py:519
msgid "product's images"
msgstr "Imagens do produto"
-#: engine/core/graphene/object_types.py:473 engine/core/models.py:431
-#: engine/core/models.py:586
+#: engine/core/graphene/object_types.py:526 engine/core/models.py:450
+#: engine/core/models.py:607
msgid "category"
msgstr "Categoria"
-#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737
+#: engine/core/graphene/object_types.py:528 engine/core/models.py:1849
msgid "feedbacks"
msgstr "Feedbacks"
-#: engine/core/graphene/object_types.py:476 engine/core/models.py:502
-#: engine/core/models.py:595
+#: engine/core/graphene/object_types.py:529 engine/core/models.py:521
+#: engine/core/models.py:616
msgid "brand"
msgstr "Brand"
-#: engine/core/graphene/object_types.py:477 engine/core/models.py:106
+#: engine/core/graphene/object_types.py:531 engine/core/models.py:106
msgid "attribute groups"
msgstr "Grupos de atributos"
-#: engine/core/graphene/object_types.py:478
+#: engine/core/graphene/object_types.py:533
#: engine/core/templates/digital_order_created_email.html:111
#: engine/core/templates/digital_order_delivered_email.html:109
#: engine/core/templates/shipped_order_created_email.html:109
@@ -1406,7 +1413,7 @@ msgstr "Grupos de atributos"
msgid "price"
msgstr "Preço"
-#: engine/core/graphene/object_types.py:479
+#: engine/core/graphene/object_types.py:534
#: engine/core/templates/digital_order_created_email.html:110
#: engine/core/templates/digital_order_delivered_email.html:108
#: engine/core/templates/shipped_order_created_email.html:108
@@ -1414,39 +1421,39 @@ msgstr "Preço"
msgid "quantity"
msgstr "Quantidade"
-#: engine/core/graphene/object_types.py:480
+#: engine/core/graphene/object_types.py:535
msgid "number of feedbacks"
msgstr "Número de feedbacks"
-#: engine/core/graphene/object_types.py:481
+#: engine/core/graphene/object_types.py:536
msgid "only available for personal orders"
msgstr "Produtos disponíveis apenas para pedidos pessoais"
-#: engine/core/graphene/object_types.py:484
+#: engine/core/graphene/object_types.py:541
msgid "discount price"
msgstr "Preço com desconto"
-#: engine/core/graphene/object_types.py:508 engine/core/models.py:658
+#: engine/core/graphene/object_types.py:565 engine/core/models.py:679
msgid "products"
msgstr "Produtos"
-#: engine/core/graphene/object_types.py:611
+#: engine/core/graphene/object_types.py:675
msgid "promocodes"
msgstr "Códigos promocionais"
-#: engine/core/graphene/object_types.py:621
+#: engine/core/graphene/object_types.py:690
msgid "products on sale"
msgstr "Produtos à venda"
-#: engine/core/graphene/object_types.py:628 engine/core/models.py:904
+#: engine/core/graphene/object_types.py:698 engine/core/models.py:927
msgid "promotions"
msgstr "Promoções"
-#: engine/core/graphene/object_types.py:632 engine/core/models.py:187
+#: engine/core/graphene/object_types.py:702 engine/core/models.py:193
msgid "vendor"
msgstr "Vendor"
-#: engine/core/graphene/object_types.py:633 engine/core/models.py:657
+#: engine/core/graphene/object_types.py:703 engine/core/models.py:678
#: engine/core/templates/digital_order_created_email.html:109
#: engine/core/templates/digital_order_delivered_email.html:107
#: engine/core/templates/shipped_order_created_email.html:107
@@ -1454,99 +1461,99 @@ msgstr "Vendor"
msgid "product"
msgstr "Produto"
-#: engine/core/graphene/object_types.py:644 engine/core/models.py:927
+#: engine/core/graphene/object_types.py:715 engine/core/models.py:950
msgid "wishlisted products"
msgstr "Produtos da lista de desejos"
-#: engine/core/graphene/object_types.py:650 engine/core/models.py:944
+#: engine/core/graphene/object_types.py:722 engine/core/models.py:967
msgid "wishlists"
msgstr "Listas de desejos"
-#: engine/core/graphene/object_types.py:654
+#: engine/core/graphene/object_types.py:727
msgid "tagged products"
msgstr "Produtos marcados"
-#: engine/core/graphene/object_types.py:661 engine/core/models.py:224
-#: engine/core/models.py:601
+#: engine/core/graphene/object_types.py:735 engine/core/models.py:230
+#: engine/core/models.py:622
msgid "product tags"
msgstr "Etiquetas do produto"
-#: engine/core/graphene/object_types.py:665
+#: engine/core/graphene/object_types.py:740
msgid "tagged categories"
msgstr "Categorias de tags"
-#: engine/core/graphene/object_types.py:672
+#: engine/core/graphene/object_types.py:748
msgid "categories tags"
msgstr "Tags das categorias"
-#: engine/core/graphene/object_types.py:676
+#: engine/core/graphene/object_types.py:752
msgid "project name"
msgstr "Nome do projeto"
-#: engine/core/graphene/object_types.py:677
+#: engine/core/graphene/object_types.py:753
msgid "company name"
msgstr "Nome da empresa"
-#: engine/core/graphene/object_types.py:678
+#: engine/core/graphene/object_types.py:754
msgid "company address"
msgstr "Endereço da empresa"
-#: engine/core/graphene/object_types.py:679
+#: engine/core/graphene/object_types.py:755
msgid "company phone number"
msgstr "Número de telefone da empresa"
-#: engine/core/graphene/object_types.py:680
+#: engine/core/graphene/object_types.py:758
msgid "email from, sometimes it must be used instead of host user value"
msgstr ""
"'email from', às vezes ele deve ser usado em vez do valor do usuário do host"
-#: engine/core/graphene/object_types.py:681
+#: engine/core/graphene/object_types.py:761
msgid "email host user"
msgstr "Usuário do host de e-mail"
-#: engine/core/graphene/object_types.py:682
+#: engine/core/graphene/object_types.py:762
msgid "maximum amount for payment"
msgstr "Valor máximo para pagamento"
-#: engine/core/graphene/object_types.py:683
+#: engine/core/graphene/object_types.py:763
msgid "minimum amount for payment"
msgstr "Valor mínimo para pagamento"
-#: engine/core/graphene/object_types.py:684
+#: engine/core/graphene/object_types.py:764
msgid "analytics data"
msgstr "Dados analíticos"
-#: engine/core/graphene/object_types.py:685
+#: engine/core/graphene/object_types.py:765
msgid "advertisement data"
msgstr "Dados do anúncio"
-#: engine/core/graphene/object_types.py:688
+#: engine/core/graphene/object_types.py:768
msgid "company configuration"
msgstr "Configuração"
-#: engine/core/graphene/object_types.py:692
+#: engine/core/graphene/object_types.py:772
msgid "language code"
msgstr "Código do idioma"
-#: engine/core/graphene/object_types.py:693
+#: engine/core/graphene/object_types.py:773
msgid "language name"
msgstr "Nome do idioma"
-#: engine/core/graphene/object_types.py:694
+#: engine/core/graphene/object_types.py:774
msgid "language flag, if exists :)"
msgstr "Sinalizador de idioma, se houver :)"
-#: engine/core/graphene/object_types.py:697
+#: engine/core/graphene/object_types.py:777
msgid "supported languages"
msgstr "Obter uma lista de idiomas suportados"
-#: engine/core/graphene/object_types.py:728
-#: engine/core/graphene/object_types.py:729
-#: engine/core/graphene/object_types.py:730
+#: engine/core/graphene/object_types.py:809
+#: engine/core/graphene/object_types.py:812
+#: engine/core/graphene/object_types.py:815
msgid "products search results"
msgstr "Resultados da pesquisa de produtos"
-#: engine/core/graphene/object_types.py:731
+#: engine/core/graphene/object_types.py:817
msgid "posts search results"
msgstr "Resultados da pesquisa de produtos"
@@ -1575,7 +1582,7 @@ msgstr "Grupo de atributos pai"
msgid "attribute group's name"
msgstr "Nome do grupo de atributos"
-#: engine/core/models.py:105 engine/core/models.py:734
+#: engine/core/models.py:105 engine/core/models.py:755
msgid "attribute group"
msgstr "Grupo de atributos"
@@ -1593,54 +1600,54 @@ msgstr ""
"fornecedores externos e seus requisitos de interação. A classe Vendor é "
"usada para definir e gerenciar informações relacionadas a um fornecedor "
"externo. Ela armazena o nome do fornecedor, os detalhes de autenticação "
-"necessários para a comunicação e a marcação percentual aplicada aos produtos"
-" recuperados do fornecedor. Esse modelo também mantém metadados e restrições"
-" adicionais, tornando-o adequado para uso em sistemas que interagem com "
+"necessários para a comunicação e a marcação percentual aplicada aos produtos "
+"recuperados do fornecedor. Esse modelo também mantém metadados e restrições "
+"adicionais, tornando-o adequado para uso em sistemas que interagem com "
"fornecedores terceirizados."
-#: engine/core/models.py:124
+#: engine/core/models.py:125
msgid "stores credentials and endpoints required for vendor communication"
msgstr ""
"Armazena as credenciais e os pontos de extremidade necessários para a "
"comunicação da API do fornecedor"
-#: engine/core/models.py:125
+#: engine/core/models.py:127
msgid "authentication info"
msgstr "Informações de autenticação"
-#: engine/core/models.py:130
+#: engine/core/models.py:132
msgid "define the markup for products retrieved from this vendor"
msgstr "Definir a marcação para produtos recuperados desse fornecedor"
-#: engine/core/models.py:131
+#: engine/core/models.py:133
msgid "vendor markup percentage"
msgstr "Porcentagem da margem de lucro do fornecedor"
-#: engine/core/models.py:135
+#: engine/core/models.py:137
msgid "name of this vendor"
msgstr "Nome do fornecedor"
-#: engine/core/models.py:136
+#: engine/core/models.py:138
msgid "vendor name"
msgstr "Nome do fornecedor"
-#: engine/core/models.py:147
+#: engine/core/models.py:153
msgid "response file"
msgstr "arquivo de resposta"
-#: engine/core/models.py:148
+#: engine/core/models.py:154
msgid "vendor's last processing response"
msgstr "última resposta de processamento do fornecedor"
-#: engine/core/models.py:154
+#: engine/core/models.py:160
msgid "vendor's integration file path"
msgstr "Caminho do arquivo de integração do fornecedor"
-#: engine/core/models.py:155
+#: engine/core/models.py:161
msgid "integration path"
msgstr "Caminho de integração"
-#: engine/core/models.py:197
+#: engine/core/models.py:203
msgid ""
"Represents a product tag used for classifying or identifying products. The "
"ProductTag class is designed to uniquely identify and classify products "
@@ -1655,27 +1662,27 @@ msgstr ""
"operações exportadas por meio de mixins e fornece personalização de "
"metadados para fins administrativos."
-#: engine/core/models.py:209 engine/core/models.py:240
+#: engine/core/models.py:215 engine/core/models.py:246
msgid "internal tag identifier for the product tag"
msgstr "Identificador de tag interno para a tag do produto"
-#: engine/core/models.py:210 engine/core/models.py:241
+#: engine/core/models.py:216 engine/core/models.py:247
msgid "tag name"
msgstr "Nome da etiqueta"
-#: engine/core/models.py:214 engine/core/models.py:245
+#: engine/core/models.py:220 engine/core/models.py:251
msgid "user-friendly name for the product tag"
msgstr "Nome de fácil utilização para a etiqueta do produto"
-#: engine/core/models.py:215 engine/core/models.py:246
+#: engine/core/models.py:221 engine/core/models.py:252
msgid "tag display name"
msgstr "Nome de exibição da tag"
-#: engine/core/models.py:223
+#: engine/core/models.py:229
msgid "product tag"
msgstr "Etiqueta do produto"
-#: engine/core/models.py:229
+#: engine/core/models.py:235
msgid ""
"Represents a category tag used for products. This class models a category "
"tag that can be used to associate and classify products. It includes "
@@ -1686,15 +1693,15 @@ msgstr ""
"Ela inclui atributos para um identificador de tag interno e um nome de "
"exibição de fácil utilização."
-#: engine/core/models.py:254
+#: engine/core/models.py:260
msgid "category tag"
msgstr "tag de categoria"
-#: engine/core/models.py:255 engine/core/models.py:327
+#: engine/core/models.py:261 engine/core/models.py:333
msgid "category tags"
msgstr "tags de categoria"
-#: engine/core/models.py:260
+#: engine/core/models.py:266
msgid ""
"Represents a category entity to organize and group related items in a "
"hierarchical structure. Categories may have hierarchical relationships with "
@@ -1717,108 +1724,107 @@ msgstr ""
"descrição e a hierarquia das categorias, bem como atribuam atributos como "
"imagens, tags ou prioridade."
-#: engine/core/models.py:274
+#: engine/core/models.py:280
msgid "upload an image representing this category"
msgstr "Faça upload de uma imagem que represente essa categoria"
-#: engine/core/models.py:277
+#: engine/core/models.py:283
msgid "category image"
msgstr "Imagem da categoria"
-#: engine/core/models.py:282
+#: engine/core/models.py:288
msgid "define a markup percentage for products in this category"
msgstr "Definir uma porcentagem de majoração para os produtos dessa categoria"
-#: engine/core/models.py:291
+#: engine/core/models.py:297
msgid "parent of this category to form a hierarchical structure"
msgstr "Pai dessa categoria para formar uma estrutura hierárquica"
-#: engine/core/models.py:292
+#: engine/core/models.py:298
msgid "parent category"
msgstr "Categoria dos pais"
-#: engine/core/models.py:297
+#: engine/core/models.py:303
msgid "category name"
msgstr "Nome da categoria"
-#: engine/core/models.py:298
+#: engine/core/models.py:304
msgid "provide a name for this category"
msgstr "Forneça um nome para essa categoria"
-#: engine/core/models.py:305
+#: engine/core/models.py:311
msgid "add a detailed description for this category"
msgstr "Adicione uma descrição detalhada para essa categoria"
-#: engine/core/models.py:306
+#: engine/core/models.py:312
msgid "category description"
msgstr "Descrição da categoria"
-#: engine/core/models.py:326
+#: engine/core/models.py:332
msgid "tags that help describe or group this category"
msgstr "tags que ajudam a descrever ou agrupar essa categoria"
-#: engine/core/models.py:333 engine/core/models.py:495
+#: engine/core/models.py:339 engine/core/models.py:514
msgid "priority"
msgstr "Prioridade"
-#: engine/core/models.py:438
+#: engine/core/models.py:457
msgid ""
"Represents a Brand object in the system. This class handles information and "
"attributes related to a brand, including its name, logos, description, "
"associated categories, a unique slug, and priority order. It allows for the "
-"organization and representation of brand-related data within the "
-"application."
+"organization and representation of brand-related data within the application."
msgstr ""
-"Representa um objeto de marca no sistema. Essa classe lida com informações e"
-" atributos relacionados a uma marca, incluindo seu nome, logotipos, "
+"Representa um objeto de marca no sistema. Essa classe lida com informações e "
+"atributos relacionados a uma marca, incluindo seu nome, logotipos, "
"descrição, categorias associadas, um slug exclusivo e ordem de prioridade. "
-"Ela permite a organização e a representação de dados relacionados à marca no"
-" aplicativo."
+"Ela permite a organização e a representação de dados relacionados à marca no "
+"aplicativo."
-#: engine/core/models.py:448
+#: engine/core/models.py:467
msgid "name of this brand"
msgstr "Nome da marca"
-#: engine/core/models.py:449
+#: engine/core/models.py:468
msgid "brand name"
msgstr "Nome da marca"
-#: engine/core/models.py:456
+#: engine/core/models.py:475
msgid "upload a logo representing this brand"
msgstr "Faça upload de um logotipo que represente essa marca"
-#: engine/core/models.py:458
+#: engine/core/models.py:477
msgid "brand small image"
msgstr "Imagem pequena da marca"
-#: engine/core/models.py:464
+#: engine/core/models.py:483
msgid "upload a big logo representing this brand"
msgstr "Faça upload de um logotipo grande que represente essa marca"
-#: engine/core/models.py:466
+#: engine/core/models.py:485
msgid "brand big image"
msgstr "Imagem de marca grande"
-#: engine/core/models.py:471
+#: engine/core/models.py:490
msgid "add a detailed description of the brand"
msgstr "Adicione uma descrição detalhada da marca"
-#: engine/core/models.py:472
+#: engine/core/models.py:491
msgid "brand description"
msgstr "Descrição da marca"
-#: engine/core/models.py:477
+#: engine/core/models.py:496
msgid "optional categories that this brand is associated with"
msgstr "Categorias opcionais às quais essa marca está associada"
-#: engine/core/models.py:478
+#: engine/core/models.py:497
msgid "associated categories"
msgstr "Categorias"
-#: engine/core/models.py:508
+#: engine/core/models.py:527
msgid ""
-"Represents the stock of a product managed in the system. This class provides"
-" details about the relationship between vendors, products, and their stock "
+"Represents the stock of a product managed in the system. This class provides "
+"details about the relationship between vendors, products, and their stock "
"information, as well as inventory-related properties like price, purchase "
"price, quantity, SKU, and digital assets. It is part of the inventory "
"management system to allow tracking and evaluation of products available "
@@ -1831,72 +1837,72 @@ msgstr ""
"sistema de gerenciamento de estoque para permitir o rastreamento e a "
"avaliação dos produtos disponíveis de vários fornecedores."
-#: engine/core/models.py:520
+#: engine/core/models.py:539
msgid "the vendor supplying this product stock"
msgstr "O fornecedor que fornece esse estoque de produtos"
-#: engine/core/models.py:521
+#: engine/core/models.py:540
msgid "associated vendor"
msgstr "Fornecedor associado"
-#: engine/core/models.py:525
+#: engine/core/models.py:544
msgid "final price to the customer after markups"
msgstr "Preço final para o cliente após as marcações"
-#: engine/core/models.py:526
+#: engine/core/models.py:545
msgid "selling price"
msgstr "Preço de venda"
-#: engine/core/models.py:531
+#: engine/core/models.py:550
msgid "the product associated with this stock entry"
msgstr "O produto associado a essa entrada em estoque"
-#: engine/core/models.py:532 engine/core/models.py:797
-#: engine/core/models.py:843 engine/core/models.py:1792
+#: engine/core/models.py:551 engine/core/models.py:820
+#: engine/core/models.py:866 engine/core/models.py:1904
msgid "associated product"
msgstr "Produto associado"
-#: engine/core/models.py:539
+#: engine/core/models.py:558
msgid "the price paid to the vendor for this product"
msgstr "O preço pago ao fornecedor por esse produto"
-#: engine/core/models.py:540
+#: engine/core/models.py:559
msgid "vendor purchase price"
msgstr "Preço de compra do fornecedor"
-#: engine/core/models.py:544
+#: engine/core/models.py:563
msgid "available quantity of the product in stock"
msgstr "Quantidade disponível do produto em estoque"
-#: engine/core/models.py:545
+#: engine/core/models.py:564
msgid "quantity in stock"
msgstr "Quantidade em estoque"
-#: engine/core/models.py:549
+#: engine/core/models.py:568
msgid "vendor-assigned SKU for identifying the product"
msgstr "SKU atribuído pelo fornecedor para identificar o produto"
-#: engine/core/models.py:550
+#: engine/core/models.py:569
msgid "vendor sku"
msgstr "SKU do fornecedor"
-#: engine/core/models.py:556
+#: engine/core/models.py:575
msgid "digital file associated with this stock if applicable"
msgstr "Arquivo digital associado a esse estoque, se aplicável"
-#: engine/core/models.py:557
+#: engine/core/models.py:576
msgid "digital file"
msgstr "Arquivo digital"
-#: engine/core/models.py:560
+#: engine/core/models.py:580
msgid "system attributes"
msgstr "Atributos do sistema"
-#: engine/core/models.py:567
+#: engine/core/models.py:588
msgid "stock entries"
msgstr "Entradas de estoque"
-#: engine/core/models.py:572
+#: engine/core/models.py:593
msgid ""
"Represents a product with attributes such as category, brand, tags, digital "
"status, name, description, part number, and slug. Provides related utility "
@@ -1912,210 +1918,209 @@ msgstr ""
"utilitárias relacionadas para recuperar classificações, contagens de "
"feedback, preço, quantidade e total de pedidos. Projetado para uso em um "
"sistema que lida com comércio eletrônico ou gerenciamento de estoque. Essa "
-"classe interage com modelos relacionados (como Category, Brand e ProductTag)"
-" e gerencia o armazenamento em cache das propriedades acessadas com "
+"classe interage com modelos relacionados (como Category, Brand e ProductTag) "
+"e gerencia o armazenamento em cache das propriedades acessadas com "
"frequência para melhorar o desempenho. É usada para definir e manipular "
"dados de produtos e suas informações associadas em um aplicativo."
-#: engine/core/models.py:585
+#: engine/core/models.py:606
msgid "category this product belongs to"
msgstr "Categoria à qual este produto pertence"
-#: engine/core/models.py:594
+#: engine/core/models.py:615
msgid "optionally associate this product with a brand"
msgstr "Opcionalmente, associe esse produto a uma marca"
-#: engine/core/models.py:600
+#: engine/core/models.py:621
msgid "tags that help describe or group this product"
msgstr "Tags que ajudam a descrever ou agrupar este produto"
-#: engine/core/models.py:605
+#: engine/core/models.py:626
msgid "indicates whether this product is digitally delivered"
msgstr "Indica se esse produto é entregue digitalmente"
-#: engine/core/models.py:606
+#: engine/core/models.py:627
msgid "is product digital"
msgstr "O produto é digital"
-#: engine/core/models.py:612
+#: engine/core/models.py:633
msgid "provide a clear identifying name for the product"
msgstr "Fornecer um nome de identificação claro para o produto"
-#: engine/core/models.py:613
+#: engine/core/models.py:634
msgid "product name"
msgstr "Nome do produto"
-#: engine/core/models.py:619 engine/core/models.py:892
+#: engine/core/models.py:640 engine/core/models.py:915
msgid "add a detailed description of the product"
msgstr "Adicione uma descrição detalhada do produto"
-#: engine/core/models.py:620
+#: engine/core/models.py:641
msgid "product description"
msgstr "Descrição do produto"
-#: engine/core/models.py:627
+#: engine/core/models.py:648
msgid "part number for this product"
msgstr "Número de peça para este produto"
-#: engine/core/models.py:628
+#: engine/core/models.py:649
msgid "part number"
msgstr "Número da peça"
-#: engine/core/models.py:647
+#: engine/core/models.py:668
msgid "stock keeping unit for this product"
msgstr "Unidade de Manutenção de Estoque para este produto"
-#: engine/core/models.py:720
+#: engine/core/models.py:741
msgid ""
"Represents an attribute in the system. This class is used to define and "
"manage attributes, which are customizable pieces of data that can be "
"associated with other entities. Attributes have associated categories, "
-"groups, value types, and names. The model supports multiple types of values,"
-" including string, integer, float, boolean, array, and object. This allows "
+"groups, value types, and names. The model supports multiple types of values, "
+"including string, integer, float, boolean, array, and object. This allows "
"for dynamic and flexible data structuring."
msgstr ""
"Representa um atributo no sistema. Essa classe é usada para definir e "
"gerenciar atributos, que são partes personalizáveis de dados que podem ser "
-"associadas a outras entidades. Os atributos têm categorias, grupos, tipos de"
-" valores e nomes associados. O modelo é compatível com vários tipos de "
+"associadas a outras entidades. Os atributos têm categorias, grupos, tipos de "
+"valores e nomes associados. O modelo é compatível com vários tipos de "
"valores, incluindo string, inteiro, float, booleano, matriz e objeto. Isso "
"permite a estruturação dinâmica e flexível dos dados."
-#: engine/core/models.py:733
+#: engine/core/models.py:754
msgid "group of this attribute"
msgstr "Grupo desse atributo"
-#: engine/core/models.py:739
+#: engine/core/models.py:760
msgid "string"
msgstr "Cordas"
-#: engine/core/models.py:740
+#: engine/core/models.py:761
msgid "integer"
msgstr "Inteiro"
-#: engine/core/models.py:741
+#: engine/core/models.py:762
msgid "float"
msgstr "Flutuação"
-#: engine/core/models.py:742
+#: engine/core/models.py:763
msgid "boolean"
msgstr "Booleano"
-#: engine/core/models.py:743
+#: engine/core/models.py:764
msgid "array"
msgstr "Matriz"
-#: engine/core/models.py:744
+#: engine/core/models.py:765
msgid "object"
msgstr "Objeto"
-#: engine/core/models.py:746
+#: engine/core/models.py:767
msgid "type of the attribute's value"
msgstr "Tipo do valor do atributo"
-#: engine/core/models.py:747
+#: engine/core/models.py:768
msgid "value type"
msgstr "Tipo de valor"
-#: engine/core/models.py:752
+#: engine/core/models.py:773
msgid "name of this attribute"
msgstr "Nome desse atributo"
-#: engine/core/models.py:753
+#: engine/core/models.py:774
msgid "attribute's name"
msgstr "Nome do atributo"
-#: engine/core/models.py:758
+#: engine/core/models.py:779
msgid "is filterable"
msgstr "é filtrável"
-#: engine/core/models.py:759
+#: engine/core/models.py:781
msgid "designates whether this attribute can be used for filtering or not"
msgstr ""
"Quais atributos e valores podem ser usados para filtrar essa categoria."
-#: engine/core/models.py:771 engine/core/models.py:789
+#: engine/core/models.py:794 engine/core/models.py:812
#: engine/core/templates/digital_order_delivered_email.html:134
msgid "attribute"
msgstr "Atributo"
-#: engine/core/models.py:777
+#: engine/core/models.py:800
msgid ""
-"Represents a specific value for an attribute that is linked to a product. It"
-" links the 'attribute' to a unique 'value', allowing better organization and"
-" dynamic representation of product characteristics."
+"Represents a specific value for an attribute that is linked to a product. It "
+"links the 'attribute' to a unique 'value', allowing better organization and "
+"dynamic representation of product characteristics."
msgstr ""
"Representa um valor específico para um atributo que está vinculado a um "
-"produto. Ele vincula o \"atributo\" a um \"valor\" exclusivo, permitindo uma"
-" melhor organização e representação dinâmica das características do produto."
+"produto. Ele vincula o \"atributo\" a um \"valor\" exclusivo, permitindo uma "
+"melhor organização e representação dinâmica das características do produto."
-#: engine/core/models.py:788
+#: engine/core/models.py:811
msgid "attribute of this value"
msgstr "Atributo desse valor"
-#: engine/core/models.py:796
+#: engine/core/models.py:819
msgid "the specific product associated with this attribute's value"
msgstr "O produto específico associado ao valor desse atributo"
-#: engine/core/models.py:802
+#: engine/core/models.py:825
msgid "the specific value for this attribute"
msgstr "O valor específico para esse atributo"
-#: engine/core/models.py:815
+#: engine/core/models.py:838
msgid ""
"Represents a product image associated with a product in the system. This "
-"class is designed to manage images for products, including functionality for"
-" uploading image files, associating them with specific products, and "
+"class is designed to manage images for products, including functionality for "
+"uploading image files, associating them with specific products, and "
"determining their display order. It also includes an accessibility feature "
"with alternative text for the images."
msgstr ""
"Representa uma imagem de produto associada a um produto no sistema. Essa "
"classe foi projetada para gerenciar imagens de produtos, incluindo a "
"funcionalidade de carregar arquivos de imagem, associá-los a produtos "
-"específicos e determinar sua ordem de exibição. Ela também inclui um recurso"
-" de acessibilidade com texto alternativo para as imagens."
+"específicos e determinar sua ordem de exibição. Ela também inclui um recurso "
+"de acessibilidade com texto alternativo para as imagens."
-#: engine/core/models.py:826
+#: engine/core/models.py:849
msgid "provide alternative text for the image for accessibility"
-msgstr ""
-"Forneça um texto alternativo para a imagem para fins de acessibilidade"
+msgstr "Forneça um texto alternativo para a imagem para fins de acessibilidade"
-#: engine/core/models.py:827
+#: engine/core/models.py:850
msgid "image alt text"
msgstr "Texto alternativo da imagem"
-#: engine/core/models.py:830
+#: engine/core/models.py:853
msgid "upload the image file for this product"
msgstr "Faça o upload do arquivo de imagem para este produto"
-#: engine/core/models.py:831 engine/core/models.py:862
+#: engine/core/models.py:854 engine/core/models.py:885
msgid "product image"
msgstr "Imagem do produto"
-#: engine/core/models.py:836
+#: engine/core/models.py:859
msgid "determines the order in which images are displayed"
msgstr "Determina a ordem em que as imagens são exibidas"
-#: engine/core/models.py:837
+#: engine/core/models.py:860
msgid "display priority"
msgstr "Prioridade de exibição"
-#: engine/core/models.py:842
+#: engine/core/models.py:865
msgid "the product that this image represents"
msgstr "O produto que esta imagem representa"
-#: engine/core/models.py:863
+#: engine/core/models.py:886
msgid "product images"
msgstr "Imagens do produto"
-#: engine/core/models.py:868
+#: engine/core/models.py:891
msgid ""
"Represents a promotional campaign for products with a discount. This class "
"is used to define and manage promotional campaigns that offer a percentage-"
"based discount for products. The class includes attributes for setting the "
"discount rate, providing details about the promotion, and linking it to the "
-"applicable products. It integrates with the product catalog to determine the"
-" affected items in the campaign."
+"applicable products. It integrates with the product catalog to determine the "
+"affected items in the campaign."
msgstr ""
"Representa uma campanha promocional para produtos com desconto. Essa classe "
"é usada para definir e gerenciar campanhas promocionais que oferecem um "
@@ -2124,39 +2129,39 @@ msgstr ""
"vinculá-la aos produtos aplicáveis. Ela se integra ao catálogo de produtos "
"para determinar os itens afetados na campanha."
-#: engine/core/models.py:880
+#: engine/core/models.py:903
msgid "percentage discount for the selected products"
msgstr "Desconto percentual para os produtos selecionados"
-#: engine/core/models.py:881
+#: engine/core/models.py:904
msgid "discount percentage"
msgstr "Porcentagem de desconto"
-#: engine/core/models.py:886
+#: engine/core/models.py:909
msgid "provide a unique name for this promotion"
msgstr "Forneça um nome exclusivo para essa promoção"
-#: engine/core/models.py:887
+#: engine/core/models.py:910
msgid "promotion name"
msgstr "Nome da promoção"
-#: engine/core/models.py:893
+#: engine/core/models.py:916
msgid "promotion description"
msgstr "Descrição da promoção"
-#: engine/core/models.py:898
+#: engine/core/models.py:921
msgid "select which products are included in this promotion"
msgstr "Selecione quais produtos estão incluídos nessa promoção"
-#: engine/core/models.py:899
+#: engine/core/models.py:922
msgid "included products"
msgstr "Produtos incluídos"
-#: engine/core/models.py:903
+#: engine/core/models.py:926
msgid "promotion"
msgstr "Promoção"
-#: engine/core/models.py:914
+#: engine/core/models.py:937
msgid ""
"Represents a user's wishlist for storing and managing desired products. The "
"class provides functionality to manage a collection of products, supporting "
@@ -2165,129 +2170,129 @@ msgid ""
msgstr ""
"Representa a lista de desejos de um usuário para armazenar e gerenciar os "
"produtos desejados. A classe oferece funcionalidade para gerenciar uma "
-"coleção de produtos, suportando operações como adicionar e remover produtos,"
-" bem como operações de suporte para adicionar e remover vários produtos de "
+"coleção de produtos, suportando operações como adicionar e remover produtos, "
+"bem como operações de suporte para adicionar e remover vários produtos de "
"uma só vez."
-#: engine/core/models.py:926
+#: engine/core/models.py:949
msgid "products that the user has marked as wanted"
msgstr "Produtos que o usuário marcou como desejados"
-#: engine/core/models.py:934
+#: engine/core/models.py:957
msgid "user who owns this wishlist"
msgstr "Usuário que possui esta lista de desejos"
-#: engine/core/models.py:935
+#: engine/core/models.py:958
msgid "wishlist owner"
msgstr "Proprietário da lista de desejos"
-#: engine/core/models.py:943
+#: engine/core/models.py:966
msgid "wishlist"
msgstr "Lista de desejos"
-#: engine/core/models.py:985
+#: engine/core/models.py:1008
msgid ""
"Represents a documentary record tied to a product. This class is used to "
"store information about documentaries related to specific products, "
"including file uploads and their metadata. It contains methods and "
"properties to handle the file type and storage path for the documentary "
-"files. It extends functionality from specific mixins and provides additional"
-" custom features."
+"files. It extends functionality from specific mixins and provides additional "
+"custom features."
msgstr ""
-"Representa um registro de documentário vinculado a um produto. Essa classe é"
-" usada para armazenar informações sobre documentários relacionados a "
-"produtos específicos, incluindo uploads de arquivos e seus metadados. Ela "
-"contém métodos e propriedades para lidar com o tipo de arquivo e o caminho "
-"de armazenamento dos arquivos do documentário. Ela estende a funcionalidade "
-"de mixins específicos e fornece recursos personalizados adicionais."
+"Representa um registro de documentário vinculado a um produto. Essa classe é "
+"usada para armazenar informações sobre documentários relacionados a produtos "
+"específicos, incluindo uploads de arquivos e seus metadados. Ela contém "
+"métodos e propriedades para lidar com o tipo de arquivo e o caminho de "
+"armazenamento dos arquivos do documentário. Ela estende a funcionalidade de "
+"mixins específicos e fornece recursos personalizados adicionais."
-#: engine/core/models.py:998
+#: engine/core/models.py:1023
msgid "documentary"
msgstr "Documentário"
-#: engine/core/models.py:999
+#: engine/core/models.py:1024
msgid "documentaries"
msgstr "Documentários"
-#: engine/core/models.py:1009
+#: engine/core/models.py:1034
msgid "unresolved"
msgstr "Não resolvido"
-#: engine/core/models.py:1014
+#: engine/core/models.py:1039
msgid ""
-"Represents an address entity that includes location details and associations"
-" with a user. Provides functionality for geographic and address data "
-"storage, as well as integration with geocoding services. This class is "
-"designed to store detailed address information including components like "
-"street, city, region, country, and geolocation (longitude and latitude). It "
-"supports integration with geocoding APIs, enabling the storage of raw API "
-"responses for further processing or inspection. The class also allows "
-"associating an address with a user, facilitating personalized data handling."
+"Represents an address entity that includes location details and associations "
+"with a user. Provides functionality for geographic and address data storage, "
+"as well as integration with geocoding services. This class is designed to "
+"store detailed address information including components like street, city, "
+"region, country, and geolocation (longitude and latitude). It supports "
+"integration with geocoding APIs, enabling the storage of raw API responses "
+"for further processing or inspection. The class also allows associating an "
+"address with a user, facilitating personalized data handling."
msgstr ""
"Representa uma entidade de endereço que inclui detalhes de localização e "
"associações com um usuário. Fornece funcionalidade para armazenamento de "
"dados geográficos e de endereço, bem como integração com serviços de "
"geocodificação. Essa classe foi projetada para armazenar informações "
-"detalhadas de endereço, incluindo componentes como rua, cidade, região, país"
-" e geolocalização (longitude e latitude). Ela oferece suporte à integração "
+"detalhadas de endereço, incluindo componentes como rua, cidade, região, país "
+"e geolocalização (longitude e latitude). Ela oferece suporte à integração "
"com APIs de geocodificação, permitindo o armazenamento de respostas brutas "
"de API para processamento ou inspeção posterior. A classe também permite "
"associar um endereço a um usuário, facilitando o tratamento personalizado "
"dos dados."
-#: engine/core/models.py:1029
+#: engine/core/models.py:1054
msgid "address line for the customer"
msgstr "Linha de endereço do cliente"
-#: engine/core/models.py:1030
+#: engine/core/models.py:1055
msgid "address line"
msgstr "Linha de endereço"
-#: engine/core/models.py:1032
+#: engine/core/models.py:1057
msgid "street"
msgstr "Rua"
-#: engine/core/models.py:1033
+#: engine/core/models.py:1058
msgid "district"
msgstr "Distrito"
-#: engine/core/models.py:1034
+#: engine/core/models.py:1059
msgid "city"
msgstr "Cidade"
-#: engine/core/models.py:1035
+#: engine/core/models.py:1060
msgid "region"
msgstr "Região"
-#: engine/core/models.py:1036
+#: engine/core/models.py:1061
msgid "postal code"
msgstr "Código postal"
-#: engine/core/models.py:1037
+#: engine/core/models.py:1062
msgid "country"
msgstr "País"
-#: engine/core/models.py:1044
+#: engine/core/models.py:1069
msgid "geolocation point: (longitude, latitude)"
msgstr "Ponto de geolocalização (Longitude, Latitude)"
-#: engine/core/models.py:1047
+#: engine/core/models.py:1075
msgid "full JSON response from geocoder for this address"
msgstr "Resposta JSON completa do geocodificador para este endereço"
-#: engine/core/models.py:1052
+#: engine/core/models.py:1081
msgid "stored JSON response from the geocoding service"
msgstr "Resposta JSON armazenada do serviço de geocodificação"
-#: engine/core/models.py:1060
+#: engine/core/models.py:1091
msgid "address"
msgstr "Endereço"
-#: engine/core/models.py:1061
+#: engine/core/models.py:1092
msgid "addresses"
msgstr "Endereços"
-#: engine/core/models.py:1073
+#: engine/core/models.py:1104
msgid ""
"Represents a promotional code that can be used for discounts, managing its "
"validity, type of discount, and application. The PromoCode class stores "
@@ -2304,96 +2309,96 @@ msgstr ""
"funcionalidade para validar e aplicar o código promocional a um pedido, "
"garantindo que as restrições sejam atendidas."
-#: engine/core/models.py:1087
+#: engine/core/models.py:1118
msgid "unique code used by a user to redeem a discount"
msgstr "Código exclusivo usado por um usuário para resgatar um desconto"
-#: engine/core/models.py:1088
+#: engine/core/models.py:1119
msgid "promo code identifier"
msgstr "Identificador de código promocional"
-#: engine/core/models.py:1095
+#: engine/core/models.py:1126
msgid "fixed discount amount applied if percent is not used"
msgstr "Valor de desconto fixo aplicado se a porcentagem não for usada"
-#: engine/core/models.py:1096
+#: engine/core/models.py:1127
msgid "fixed discount amount"
msgstr "Valor do desconto fixo"
-#: engine/core/models.py:1102
+#: engine/core/models.py:1133
msgid "percentage discount applied if fixed amount is not used"
msgstr "Desconto percentual aplicado se o valor fixo não for usado"
-#: engine/core/models.py:1103
+#: engine/core/models.py:1134
msgid "percentage discount"
msgstr "Desconto percentual"
-#: engine/core/models.py:1108
+#: engine/core/models.py:1139
msgid "timestamp when the promocode expires"
msgstr "Registro de data e hora em que o código promocional expira"
-#: engine/core/models.py:1109
+#: engine/core/models.py:1140
msgid "end validity time"
msgstr "Tempo de validade final"
-#: engine/core/models.py:1114
+#: engine/core/models.py:1145
msgid "timestamp from which this promocode is valid"
msgstr ""
"Registro de data e hora a partir do qual esse código promocional é válido"
-#: engine/core/models.py:1115
+#: engine/core/models.py:1146
msgid "start validity time"
msgstr "Hora de início da validade"
-#: engine/core/models.py:1120
+#: engine/core/models.py:1151
msgid "timestamp when the promocode was used, blank if not used yet"
msgstr ""
"Registro de data e hora em que o código promocional foi usado, em branco se "
"ainda não tiver sido usado"
-#: engine/core/models.py:1121
+#: engine/core/models.py:1152
msgid "usage timestamp"
msgstr "Registro de data e hora de uso"
-#: engine/core/models.py:1126
+#: engine/core/models.py:1157
msgid "user assigned to this promocode if applicable"
msgstr "Usuário atribuído a esse código promocional, se aplicável"
-#: engine/core/models.py:1127
+#: engine/core/models.py:1158
msgid "assigned user"
msgstr "Usuário atribuído"
-#: engine/core/models.py:1134
+#: engine/core/models.py:1165
msgid "promo code"
msgstr "Código promocional"
-#: engine/core/models.py:1135
+#: engine/core/models.py:1166
msgid "promo codes"
msgstr "Códigos promocionais"
-#: engine/core/models.py:1150
+#: engine/core/models.py:1182
msgid ""
"only one type of discount should be defined (amount or percent), but not "
"both or neither."
msgstr ""
-"Apenas um tipo de desconto deve ser definido (valor ou porcentagem), mas não"
-" ambos ou nenhum."
+"Apenas um tipo de desconto deve ser definido (valor ou porcentagem), mas não "
+"ambos ou nenhum."
-#: engine/core/models.py:1171
+#: engine/core/models.py:1204
msgid "promocode already used"
msgstr "O código promocional já foi usado"
-#: engine/core/models.py:1187
+#: engine/core/models.py:1226
#, python-brace-format
msgid "invalid discount type for promocode {self.uuid}"
msgstr "Tipo de desconto inválido para o código promocional {self.uuid}!"
-#: engine/core/models.py:1196
+#: engine/core/models.py:1235
msgid ""
"Represents an order placed by a user. This class models an order within the "
"application, including its various attributes such as billing and shipping "
-"information, status, associated user, notifications, and related operations."
-" Orders can have associated products, promotions can be applied, addresses "
+"information, status, associated user, notifications, and related operations. "
+"Orders can have associated products, promotions can be applied, addresses "
"set, and shipping or billing details updated. Equally, functionality "
"supports managing the products in the order lifecycle."
msgstr ""
@@ -2405,139 +2410,138 @@ msgstr ""
"atualizados. Da mesma forma, a funcionalidade suporta o gerenciamento dos "
"produtos no ciclo de vida do pedido."
-#: engine/core/models.py:1213
+#: engine/core/models.py:1252
msgid "the billing address used for this order"
msgstr "O endereço de cobrança usado para esse pedido"
-#: engine/core/models.py:1221
+#: engine/core/models.py:1260
msgid "optional promo code applied to this order"
msgstr "Código promocional opcional aplicado a este pedido"
-#: engine/core/models.py:1222
+#: engine/core/models.py:1261
msgid "applied promo code"
msgstr "Código promocional aplicado"
-#: engine/core/models.py:1230
+#: engine/core/models.py:1269
msgid "the shipping address used for this order"
msgstr "O endereço de entrega usado para esse pedido"
-#: engine/core/models.py:1231
+#: engine/core/models.py:1270
msgid "shipping address"
msgstr "Endereço de entrega"
-#: engine/core/models.py:1237
+#: engine/core/models.py:1276
msgid "current status of the order in its lifecycle"
msgstr "Status atual do pedido em seu ciclo de vida"
-#: engine/core/models.py:1238
+#: engine/core/models.py:1277
msgid "order status"
msgstr "Status do pedido"
-#: engine/core/models.py:1243 engine/core/models.py:1769
+#: engine/core/models.py:1282 engine/core/models.py:1881
msgid "json structure of notifications to display to users"
msgstr ""
"Estrutura JSON de notificações a serem exibidas aos usuários; na interface "
"do usuário do administrador, é usada a visualização de tabela"
-#: engine/core/models.py:1249
+#: engine/core/models.py:1288
msgid "json representation of order attributes for this order"
msgstr "Representação JSON dos atributos do pedido para esse pedido"
-#: engine/core/models.py:1255
+#: engine/core/models.py:1294
msgid "the user who placed the order"
msgstr "O usuário que fez o pedido"
-#: engine/core/models.py:1256
+#: engine/core/models.py:1295
msgid "user"
msgstr "Usuário"
-#: engine/core/models.py:1262
+#: engine/core/models.py:1301
msgid "the timestamp when the order was finalized"
msgstr "O registro de data e hora em que o pedido foi finalizado"
-#: engine/core/models.py:1263
+#: engine/core/models.py:1302
msgid "buy time"
msgstr "Tempo de compra"
-#: engine/core/models.py:1270
+#: engine/core/models.py:1309
msgid "a human-readable identifier for the order"
msgstr "Um identificador legível por humanos para o pedido"
-#: engine/core/models.py:1271
+#: engine/core/models.py:1310
msgid "human readable id"
msgstr "ID legível por humanos"
-#: engine/core/models.py:1277
+#: engine/core/models.py:1316
msgid "order"
msgstr "Pedido"
-#: engine/core/models.py:1319
+#: engine/core/models.py:1363
msgid "a user must have only one pending order at a time"
msgstr "Um usuário deve ter apenas uma ordem pendente por vez!"
-#: engine/core/models.py:1351
+#: engine/core/models.py:1396
msgid "you cannot add products to an order that is not a pending one"
msgstr "Não é possível adicionar produtos a um pedido que não esteja pendente"
-#: engine/core/models.py:1356
+#: engine/core/models.py:1402
msgid "you cannot add inactive products to order"
msgstr "Não é possível adicionar produtos inativos ao pedido"
-#: engine/core/models.py:1373
+#: engine/core/models.py:1424
msgid "you cannot add more products than available in stock"
msgstr ""
"Não é possível adicionar mais produtos do que os disponíveis em estoque"
-#: engine/core/models.py:1395 engine/core/models.py:1420
-#: engine/core/models.py:1428
+#: engine/core/models.py:1448 engine/core/models.py:1477
+#: engine/core/models.py:1487
msgid "you cannot remove products from an order that is not a pending one"
msgstr "Não é possível remover produtos de um pedido que não esteja pendente"
-#: engine/core/models.py:1416
+#: engine/core/models.py:1472
#, python-brace-format
msgid "{name} does not exist with query <{query}>"
msgstr "{name} não existe com a consulta <{query}>!"
-#: engine/core/models.py:1448
+#: engine/core/models.py:1511
msgid "promocode does not exist"
msgstr "O código promocional não existe"
-#: engine/core/models.py:1454
+#: engine/core/models.py:1526
msgid "you can only buy physical products with shipping address specified"
msgstr ""
-"Você só pode comprar produtos físicos com o endereço de entrega "
-"especificado!"
+"Você só pode comprar produtos físicos com o endereço de entrega especificado!"
-#: engine/core/models.py:1473
+#: engine/core/models.py:1547
msgid "address does not exist"
msgstr "O endereço não existe"
-#: engine/core/models.py:1494 engine/core/models.py:1563
+#: engine/core/models.py:1569 engine/core/models.py:1648
msgid "you can not buy at this moment, please try again in a few minutes"
msgstr ""
"Não é possível comprar neste momento, tente novamente em alguns minutos."
-#: engine/core/models.py:1497 engine/core/models.py:1559
+#: engine/core/models.py:1575 engine/core/models.py:1641
msgid "invalid force value"
msgstr "Valor de força inválido"
-#: engine/core/models.py:1503 engine/core/models.py:1566
+#: engine/core/models.py:1581 engine/core/models.py:1652
msgid "you cannot purchase an empty order!"
msgstr "Você não pode comprar um pedido vazio!"
-#: engine/core/models.py:1522
+#: engine/core/models.py:1602
msgid "you cannot buy an order without a user"
msgstr "Não é possível comprar um pedido sem um usuário!"
-#: engine/core/models.py:1536
+#: engine/core/models.py:1616
msgid "a user without a balance cannot buy with balance"
msgstr "Um usuário sem saldo não pode comprar com saldo!"
-#: engine/core/models.py:1541
+#: engine/core/models.py:1622
msgid "insufficient funds to complete the order"
msgstr "Fundos insuficientes para concluir o pedido"
-#: engine/core/models.py:1575
+#: engine/core/models.py:1663
msgid ""
"you cannot buy without registration, please provide the following "
"information: customer name, customer email, customer phone number"
@@ -2545,7 +2549,7 @@ msgstr ""
"Não é possível comprar sem registro, forneça as seguintes informações: nome "
"do cliente, e-mail do cliente, número de telefone do cliente"
-#: engine/core/models.py:1584
+#: engine/core/models.py:1674
#, python-brace-format
msgid ""
"invalid payment method: {payment_method} from {available_payment_methods}"
@@ -2553,7 +2557,7 @@ msgstr ""
"Método de pagamento inválido: {payment_method} de "
"{available_payment_methods}!"
-#: engine/core/models.py:1699
+#: engine/core/models.py:1805
msgid ""
"Manages user feedback for products. This class is designed to capture and "
"store user feedback for specific products that they have purchased. It "
@@ -2562,41 +2566,40 @@ msgid ""
"fields to effectively model and manage feedback data."
msgstr ""
"Gerencia o feedback dos usuários sobre os produtos. Essa classe foi criada "
-"para capturar e armazenar o feedback dos usuários sobre produtos específicos"
-" que eles compraram. Ela contém atributos para armazenar comentários de "
+"para capturar e armazenar o feedback dos usuários sobre produtos específicos "
+"que eles compraram. Ela contém atributos para armazenar comentários de "
"usuários, uma referência ao produto relacionado no pedido e uma "
"classificação atribuída pelo usuário. A classe usa campos de banco de dados "
"para modelar e gerenciar com eficiência os dados de feedback."
-#: engine/core/models.py:1711
+#: engine/core/models.py:1817
msgid "user-provided comments about their experience with the product"
msgstr ""
"Comentários fornecidos pelo usuário sobre sua experiência com o produto"
-#: engine/core/models.py:1712
+#: engine/core/models.py:1818
msgid "feedback comments"
msgstr "Comentários de feedback"
-#: engine/core/models.py:1719
-msgid ""
-"references the specific product in an order that this feedback is about"
+#: engine/core/models.py:1826
+msgid "references the specific product in an order that this feedback is about"
msgstr ""
-"Faz referência ao produto específico em um pedido sobre o qual se trata esse"
-" feedback"
+"Faz referência ao produto específico em um pedido sobre o qual se trata esse "
+"feedback"
-#: engine/core/models.py:1720
+#: engine/core/models.py:1828
msgid "related order product"
msgstr "Produto de pedido relacionado"
-#: engine/core/models.py:1725
+#: engine/core/models.py:1833
msgid "user-assigned rating for the product"
msgstr "Classificação atribuída pelo usuário ao produto"
-#: engine/core/models.py:1726
+#: engine/core/models.py:1834
msgid "product rating"
msgstr "Avaliação do produto"
-#: engine/core/models.py:1742
+#: engine/core/models.py:1854
msgid ""
"Represents products associated with orders and their attributes. The "
"OrderProduct model maintains information about a product that is part of an "
@@ -2609,142 +2612,142 @@ msgid ""
"Product models and stores a reference to them."
msgstr ""
"Representa produtos associados a pedidos e seus atributos. O modelo "
-"OrderProduct mantém informações sobre um produto que faz parte de um pedido,"
-" incluindo detalhes como preço de compra, quantidade, atributos do produto e"
-" status. Ele gerencia as notificações para o usuário e os administradores e "
+"OrderProduct mantém informações sobre um produto que faz parte de um pedido, "
+"incluindo detalhes como preço de compra, quantidade, atributos do produto e "
+"status. Ele gerencia as notificações para o usuário e os administradores e "
"trata de operações como devolver o saldo do produto ou adicionar feedback. "
"Esse modelo também fornece métodos e propriedades que dão suporte à lógica "
"comercial, como o cálculo do preço total ou a geração de um URL de download "
"para produtos digitais. O modelo se integra aos modelos Order e Product e "
"armazena uma referência a eles."
-#: engine/core/models.py:1757
+#: engine/core/models.py:1869
msgid "the price paid by the customer for this product at purchase time"
msgstr "O preço pago pelo cliente por esse produto no momento da compra"
-#: engine/core/models.py:1758
+#: engine/core/models.py:1870
msgid "purchase price at order time"
msgstr "Preço de compra no momento do pedido"
-#: engine/core/models.py:1763
+#: engine/core/models.py:1875
msgid "internal comments for admins about this ordered product"
msgstr ""
"Comentários internos para administradores sobre este produto encomendado"
-#: engine/core/models.py:1764
+#: engine/core/models.py:1876
msgid "internal comments"
msgstr "Comentários internos"
-#: engine/core/models.py:1770
+#: engine/core/models.py:1882
msgid "user notifications"
msgstr "Notificações do usuário"
-#: engine/core/models.py:1775
+#: engine/core/models.py:1887
msgid "json representation of this item's attributes"
msgstr "Representação JSON dos atributos desse item"
-#: engine/core/models.py:1776
+#: engine/core/models.py:1888
msgid "ordered product attributes"
msgstr "Atributos ordenados do produto"
-#: engine/core/models.py:1781
+#: engine/core/models.py:1893
msgid "reference to the parent order that contains this product"
msgstr "Referência ao pedido pai que contém esse produto"
-#: engine/core/models.py:1782
+#: engine/core/models.py:1894
msgid "parent order"
msgstr "Ordem dos pais"
-#: engine/core/models.py:1791
+#: engine/core/models.py:1903
msgid "the specific product associated with this order line"
msgstr "O produto específico associado a essa linha de pedido"
-#: engine/core/models.py:1798
+#: engine/core/models.py:1910
msgid "quantity of this specific product in the order"
msgstr "Quantidade desse produto específico no pedido"
-#: engine/core/models.py:1799
+#: engine/core/models.py:1911
msgid "product quantity"
msgstr "Quantidade do produto"
-#: engine/core/models.py:1806
+#: engine/core/models.py:1918
msgid "current status of this product in the order"
msgstr "Status atual desse produto no pedido"
-#: engine/core/models.py:1807
+#: engine/core/models.py:1919
msgid "product line status"
msgstr "Status da linha de produtos"
-#: engine/core/models.py:1872
+#: engine/core/models.py:1986
msgid "order product must have an order"
msgstr "O Orderproduct deve ter um pedido associado!"
-#: engine/core/models.py:1874
+#: engine/core/models.py:1988
#, python-brace-format
msgid "wrong action specified for feedback: {action}"
msgstr "Ação incorreta especificada para o feedback: {action}!"
-#: engine/core/models.py:1888
+#: engine/core/models.py:2005
msgid "you cannot feedback an order which is not received"
msgstr "você não pode dar feedback a um pedido que não foi recebido"
-#: engine/core/models.py:1894
+#: engine/core/models.py:2014
msgid "name"
msgstr "Nome"
-#: engine/core/models.py:1895
+#: engine/core/models.py:2016
msgid "URL of the integration"
msgstr "URL da integração"
-#: engine/core/models.py:1896
+#: engine/core/models.py:2019
msgid "authentication credentials"
msgstr "Credenciais de autenticação"
-#: engine/core/models.py:1918
+#: engine/core/models.py:2042
msgid "you can only have one default CRM provider"
msgstr "Você só pode ter um provedor de CRM padrão"
-#: engine/core/models.py:1928
+#: engine/core/models.py:2052
msgid "CRM"
msgstr "CRM"
-#: engine/core/models.py:1929
+#: engine/core/models.py:2053
msgid "CRMs"
msgstr "CRMs"
-#: engine/core/models.py:1941
+#: engine/core/models.py:2069
msgid "order CRM link"
msgstr "Link do CRM do pedido"
-#: engine/core/models.py:1942
+#: engine/core/models.py:2070
msgid "orders CRM links"
msgstr "Links de CRM dos pedidos"
-#: engine/core/models.py:1947
+#: engine/core/models.py:2075
msgid ""
"Represents the downloading functionality for digital assets associated with "
"orders. The DigitalAssetDownload class provides the ability to manage and "
"access downloads related to order products. It maintains information about "
-"the associated order product, the number of downloads, and whether the asset"
-" is publicly visible. It includes a method to generate a URL for downloading"
-" the asset when the associated order is in a completed status."
+"the associated order product, the number of downloads, and whether the asset "
+"is publicly visible. It includes a method to generate a URL for downloading "
+"the asset when the associated order is in a completed status."
msgstr ""
"Representa a funcionalidade de download de ativos digitais associados a "
"pedidos. A classe DigitalAssetDownload oferece a capacidade de gerenciar e "
-"acessar downloads relacionados a produtos de pedidos. Ela mantém informações"
-" sobre o produto do pedido associado, o número de downloads e se o ativo "
-"está visível publicamente. Ela inclui um método para gerar um URL para "
-"download do ativo quando o pedido associado estiver em um status concluído."
+"acessar downloads relacionados a produtos de pedidos. Ela mantém informações "
+"sobre o produto do pedido associado, o número de downloads e se o ativo está "
+"visível publicamente. Ela inclui um método para gerar um URL para download "
+"do ativo quando o pedido associado estiver em um status concluído."
-#: engine/core/models.py:1961
+#: engine/core/models.py:2091
msgid "download"
msgstr "Baixar"
-#: engine/core/models.py:1962
+#: engine/core/models.py:2092
msgid "downloads"
msgstr "Downloads"
-#: engine/core/serializers/utility.py:89
+#: engine/core/serializers/utility.py:91
msgid ""
"you must provide a comment, rating, and order product uuid to add feedback."
msgstr ""
@@ -2941,7 +2944,8 @@ msgstr "Olá %(order.user.first_name)s,"
#, python-format
msgid ""
"thank you for your order #%(order.pk)s! we are pleased to inform you that\n"
-" we have taken your order into work. below are the details of your\n"
+" we have taken your order into work. below are "
+"the details of your\n"
" order:"
msgstr ""
"Obrigado por seu pedido #%(order.pk)s! Temos o prazer de informá-lo de que "
@@ -3055,7 +3059,8 @@ msgstr ""
#: engine/core/templates/shipped_order_created_email.html:101
#: engine/core/templates/shipped_order_delivered_email.html:101
msgid ""
-"thank you for your order! we are pleased to confirm your purchase. below are\n"
+"thank you for your order! we are pleased to confirm your purchase. below "
+"are\n"
" the details of your order:"
msgstr ""
"Obrigado por seu pedido! Temos o prazer de confirmar sua compra. Abaixo "
@@ -3086,11 +3091,11 @@ msgstr ""
"todos os direitos\n"
" reservados"
-#: engine/core/utils/caching.py:44
+#: engine/core/utils/caching.py:48
msgid "both data and timeout are required"
msgstr "São necessários dados e tempo limite"
-#: engine/core/utils/caching.py:46
+#: engine/core/utils/caching.py:51
msgid "invalid timeout value, it must be between 0 and 216000 seconds"
msgstr "Valor de tempo limite inválido, deve estar entre 0 e 216000 segundos"
@@ -3099,17 +3104,17 @@ msgstr "Valor de tempo limite inválido, deve estar entre 0 e 216000 segundos"
msgid "{settings.PROJECT_NAME} | contact us initiated"
msgstr "{settings.PROJECT_NAME} | entre em contato conosco iniciado"
-#: engine/core/utils/emailing.py:73
+#: engine/core/utils/emailing.py:81
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order confirmation"
msgstr "{settings.PROJECT_NAME} | confirmação do pedido"
-#: engine/core/utils/emailing.py:105
+#: engine/core/utils/emailing.py:115
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order delivered"
msgstr "{settings.PROJECT_NAME} | pedido entregue"
-#: engine/core/utils/emailing.py:188
+#: engine/core/utils/emailing.py:203
#, python-brace-format
msgid "{settings.PROJECT_NAME} | promocode granted"
msgstr "{settings.PROJECT_NAME} | promocode granted"
@@ -3122,22 +3127,22 @@ msgstr "Você não tem permissão para executar essa ação."
msgid "NOMINATIM_URL must be configured."
msgstr "O parâmetro NOMINATIM_URL deve ser configurado!"
-#: engine/core/validators.py:19
+#: engine/core/validators.py:21
#, python-brace-format
msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels"
msgstr ""
"As dimensões da imagem não devem exceder w{max_width} x h{max_height} pixels"
-#: engine/core/views.py:91
+#: engine/core/views.py:105
msgid ""
"Handles the request for the sitemap index and returns an XML response. It "
"ensures the response includes the appropriate content type header for XML."
msgstr ""
"Trata a solicitação do índice do mapa do site e retorna uma resposta XML. "
-"Ele garante que a resposta inclua o cabeçalho de tipo de conteúdo apropriado"
-" para XML."
+"Ele garante que a resposta inclua o cabeçalho de tipo de conteúdo apropriado "
+"para XML."
-#: engine/core/views.py:106
+#: engine/core/views.py:120
msgid ""
"Handles the detailed view response for a sitemap. This function processes "
"the request, fetches the appropriate sitemap detail response, and sets the "
@@ -3147,29 +3152,29 @@ msgstr ""
"processa a solicitação, obtém a resposta detalhada apropriada do mapa do "
"site e define o cabeçalho Content-Type para XML."
-#: engine/core/views.py:141
+#: engine/core/views.py:156
msgid ""
"Returns a list of supported languages and their corresponding information."
msgstr ""
"Retorna uma lista de idiomas suportados e suas informações correspondentes."
-#: engine/core/views.py:173
+#: engine/core/views.py:183
msgid "Returns the parameters of the website as a JSON object."
msgstr "Retorna os parâmetros do site como um objeto JSON."
-#: engine/core/views.py:192
+#: engine/core/views.py:199
msgid ""
"Handles cache operations such as reading and setting cache data with a "
"specified key and timeout."
msgstr ""
-"Manipula operações de cache, como ler e definir dados de cache com uma chave"
-" e um tempo limite especificados."
+"Manipula operações de cache, como ler e definir dados de cache com uma chave "
+"e um tempo limite especificados."
-#: engine/core/views.py:219
+#: engine/core/views.py:221
msgid "Handles `contact us` form submissions."
msgstr "Trata os envios de formulários \"entre em contato conosco\"."
-#: engine/core/views.py:240
+#: engine/core/views.py:237
msgid ""
"Handles requests for processing and validating URLs from incoming POST "
"requests."
@@ -3177,79 +3182,87 @@ msgstr ""
"Trata as solicitações de processamento e validação de URLs de solicitações "
"POST recebidas."
-#: engine/core/views.py:280
+#: engine/core/views.py:274
msgid "Handles global search queries."
msgstr "Trata as consultas de pesquisa global."
-#: engine/core/views.py:295
+#: engine/core/views.py:290
msgid "Handles the logic of buying as a business without registration."
msgstr "Lida com a lógica de comprar como uma empresa sem registro."
-#: engine/core/views.py:332
+#: engine/core/views.py:338
msgid ""
"Handles the downloading of a digital asset associated with an order.\n"
-"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the digital asset file located in the "
+"storage directory of the project. If the file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
msgstr ""
"Trata do download de um ativo digital associado a um pedido.\n"
-"Essa função tenta servir o arquivo de ativo digital localizado no diretório de armazenamento do projeto. Se o arquivo não for encontrado, será gerado um erro HTTP 404 para indicar que o recurso não está disponível."
+"Essa função tenta servir o arquivo de ativo digital localizado no diretório "
+"de armazenamento do projeto. Se o arquivo não for encontrado, será gerado um "
+"erro HTTP 404 para indicar que o recurso não está disponível."
-#: engine/core/views.py:343
+#: engine/core/views.py:349
msgid "order_product_uuid is required"
msgstr "order_product_uuid é obrigatório"
-#: engine/core/views.py:350
+#: engine/core/views.py:356
msgid "order product does not exist"
msgstr "o produto do pedido não existe"
-#: engine/core/views.py:353
+#: engine/core/views.py:359
msgid "you can only download the digital asset once"
msgstr "Você só pode fazer o download do ativo digital uma vez"
-#: engine/core/views.py:356
+#: engine/core/views.py:363
msgid "the order must be paid before downloading the digital asset"
msgstr "o pedido deve ser pago antes de fazer o download do ativo digital"
-#: engine/core/views.py:362
+#: engine/core/views.py:370
msgid "the order product does not have a product"
msgstr "O produto do pedido não tem um produto"
-#: engine/core/views.py:399
+#: engine/core/views.py:414
msgid "favicon not found"
msgstr "favicon não encontrado"
-#: engine/core/views.py:404
+#: engine/core/views.py:419
msgid ""
"Handles requests for the favicon of a website.\n"
-"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the favicon file located in the static "
+"directory of the project. If the favicon file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
msgstr ""
"Trata as solicitações do favicon de um site.\n"
-"Essa função tenta servir o arquivo favicon localizado no diretório estático do projeto. Se o arquivo favicon não for encontrado, será gerado um erro HTTP 404 para indicar que o recurso não está disponível."
+"Essa função tenta servir o arquivo favicon localizado no diretório estático "
+"do projeto. Se o arquivo favicon não for encontrado, será gerado um erro "
+"HTTP 404 para indicar que o recurso não está disponível."
-#: engine/core/views.py:416
+#: engine/core/views.py:431
msgid ""
-"Redirects the request to the admin index page. The function handles incoming"
-" HTTP requests and redirects them to the Django admin interface index page. "
+"Redirects the request to the admin index page. The function handles incoming "
+"HTTP requests and redirects them to the Django admin interface index page. "
"It uses Django's `redirect` function for handling the HTTP redirection."
msgstr ""
-"Redireciona a solicitação para a página de índice do administrador. A função"
-" lida com as solicitações HTTP recebidas e as redireciona para a página de "
+"Redireciona a solicitação para a página de índice do administrador. A função "
+"lida com as solicitações HTTP recebidas e as redireciona para a página de "
"índice da interface de administração do Django. Ela usa a função `redirect` "
"do Django para lidar com o redirecionamento HTTP."
-#: engine/core/views.py:429
+#: engine/core/views.py:443
msgid "Returns current version of the eVibes. "
msgstr "Retorna a versão atual do eVibes."
-#: engine/core/views.py:623 engine/core/views.py:636
+#: engine/core/views.py:672 engine/core/views.py:687
#, python-format
msgid "Revenue & Orders (last %(days)d)"
msgstr "Receita e pedidos (último %(days)d)"
-#: engine/core/views.py:793
+#: engine/core/views.py:868
msgid "Returns custom variables for Dashboard. "
msgstr "Retorna variáveis personalizadas para o Dashboard."
-#: engine/core/viewsets.py:136
+#: engine/core/viewsets.py:139
msgid ""
"Defines a viewset for managing Evibes-related operations. The EvibesViewSet "
"class inherits from ModelViewSet and provides functionality for handling "
@@ -3257,19 +3270,18 @@ msgid ""
"serializer classes based on the current action, customizable permissions, "
"and rendering formats."
msgstr ""
-"Define um conjunto de visualizações para gerenciar operações relacionadas ao"
-" Evibes. A classe EvibesViewSet é herdeira do ModelViewSet e oferece "
+"Define um conjunto de visualizações para gerenciar operações relacionadas ao "
+"Evibes. A classe EvibesViewSet é herdeira do ModelViewSet e oferece "
"funcionalidade para lidar com ações e operações em entidades Evibes. Ela "
"inclui suporte para classes de serializadores dinâmicos com base na ação "
"atual, permissões personalizáveis e formatos de renderização."
-#: engine/core/viewsets.py:156
+#: engine/core/viewsets.py:160
msgid ""
-"Represents a viewset for managing AttributeGroup objects. Handles operations"
-" related to AttributeGroup, including filtering, serialization, and "
-"retrieval of data. This class is part of the application's API layer and "
-"provides a standardized way to process requests and responses for "
-"AttributeGroup data."
+"Represents a viewset for managing AttributeGroup objects. Handles operations "
+"related to AttributeGroup, including filtering, serialization, and retrieval "
+"of data. This class is part of the application's API layer and provides a "
+"standardized way to process requests and responses for AttributeGroup data."
msgstr ""
"Representa um conjunto de visualizações para gerenciar objetos "
"AttributeGroup. Trata das operações relacionadas ao AttributeGroup, "
@@ -3277,7 +3289,7 @@ msgstr ""
"parte da camada de API do aplicativo e fornece uma maneira padronizada de "
"processar solicitações e respostas para dados do AttributeGroup."
-#: engine/core/viewsets.py:175
+#: engine/core/viewsets.py:179
msgid ""
"Handles operations related to Attribute objects within the application. "
"Provides a set of API endpoints to interact with Attribute data. This class "
@@ -3286,20 +3298,20 @@ msgid ""
"specific fields or retrieving detailed versus simplified information "
"depending on the request."
msgstr ""
-"Trata de operações relacionadas a objetos de atributo no aplicativo. Fornece"
-" um conjunto de pontos de extremidade de API para interagir com dados de "
+"Trata de operações relacionadas a objetos de atributo no aplicativo. Fornece "
+"um conjunto de pontos de extremidade de API para interagir com dados de "
"atributos. Essa classe gerencia a consulta, a filtragem e a serialização de "
-"objetos Attribute, permitindo o controle dinâmico dos dados retornados, como"
-" a filtragem por campos específicos ou a recuperação de informações "
+"objetos Attribute, permitindo o controle dinâmico dos dados retornados, como "
+"a filtragem por campos específicos ou a recuperação de informações "
"detalhadas ou simplificadas, dependendo da solicitação."
-#: engine/core/viewsets.py:194
+#: engine/core/viewsets.py:198
msgid ""
"A viewset for managing AttributeValue objects. This viewset provides "
"functionality for listing, retrieving, creating, updating, and deleting "
"AttributeValue objects. It integrates with Django REST Framework's viewset "
-"mechanisms and uses appropriate serializers for different actions. Filtering"
-" capabilities are provided through the DjangoFilterBackend."
+"mechanisms and uses appropriate serializers for different actions. Filtering "
+"capabilities are provided through the DjangoFilterBackend."
msgstr ""
"Um conjunto de exibições para gerenciar objetos AttributeValue. Esse "
"conjunto de visualizações fornece funcionalidade para listar, recuperar, "
@@ -3308,7 +3320,7 @@ msgstr ""
"serializadores apropriados para diferentes ações. Os recursos de filtragem "
"são fornecidos por meio do DjangoFilterBackend."
-#: engine/core/viewsets.py:213
+#: engine/core/viewsets.py:217
msgid ""
"Manages views for Category-related operations. The CategoryViewSet class is "
"responsible for handling operations related to the Category model in the "
@@ -3319,23 +3331,23 @@ msgstr ""
"Gerencia as visualizações das operações relacionadas à categoria. A classe "
"CategoryViewSet é responsável pelo tratamento das operações relacionadas ao "
"modelo de categoria no sistema. Ela suporta a recuperação, a filtragem e a "
-"serialização de dados de categoria. O conjunto de visualizações também impõe"
-" permissões para garantir que somente usuários autorizados possam acessar "
+"serialização de dados de categoria. O conjunto de visualizações também impõe "
+"permissões para garantir que somente usuários autorizados possam acessar "
"dados específicos."
-#: engine/core/viewsets.py:326
+#: engine/core/viewsets.py:346
msgid ""
"Represents a viewset for managing Brand instances. This class provides "
"functionality for querying, filtering, and serializing Brand objects. It "
"uses Django's ViewSet framework to simplify the implementation of API "
"endpoints for Brand objects."
msgstr ""
-"Representa um conjunto de visualizações para gerenciar instâncias de marcas."
-" Essa classe fornece funcionalidade para consulta, filtragem e serialização "
+"Representa um conjunto de visualizações para gerenciar instâncias de marcas. "
+"Essa classe fornece funcionalidade para consulta, filtragem e serialização "
"de objetos de marca. Ela usa a estrutura ViewSet do Django para simplificar "
"a implementação de pontos de extremidade da API para objetos de marca."
-#: engine/core/viewsets.py:438
+#: engine/core/viewsets.py:458
msgid ""
"Manages operations related to the `Product` model in the system. This class "
"provides a viewset for managing products, including their filtering, "
@@ -3347,13 +3359,13 @@ msgid ""
msgstr ""
"Gerencia as operações relacionadas ao modelo `Product` no sistema. Essa "
"classe fornece um conjunto de visualizações para gerenciar produtos, "
-"incluindo filtragem, serialização e operações em instâncias específicas. Ela"
-" se estende do `EvibesViewSet` para usar a funcionalidade comum e se integra"
-" à estrutura Django REST para operações de API RESTful. Inclui métodos para "
+"incluindo filtragem, serialização e operações em instâncias específicas. Ela "
+"se estende do `EvibesViewSet` para usar a funcionalidade comum e se integra "
+"à estrutura Django REST para operações de API RESTful. Inclui métodos para "
"recuperar detalhes do produto, aplicar permissões e acessar o feedback "
"relacionado de um produto."
-#: engine/core/viewsets.py:574
+#: engine/core/viewsets.py:605
msgid ""
"Represents a viewset for managing Vendor objects. This viewset allows "
"fetching, filtering, and serializing Vendor data. It defines the queryset, "
@@ -3365,65 +3377,65 @@ msgstr ""
"fornecedor. Esse conjunto de visualizações permite a busca, a filtragem e a "
"serialização de dados do fornecedor. Ele define o conjunto de consultas, as "
"configurações de filtro e as classes de serializador usadas para lidar com "
-"diferentes ações. O objetivo dessa classe é fornecer acesso simplificado aos"
-" recursos relacionados ao Vendor por meio da estrutura Django REST."
+"diferentes ações. O objetivo dessa classe é fornecer acesso simplificado aos "
+"recursos relacionados ao Vendor por meio da estrutura Django REST."
-#: engine/core/viewsets.py:594
+#: engine/core/viewsets.py:625
msgid ""
"Representation of a view set handling Feedback objects. This class manages "
"operations related to Feedback objects, including listing, filtering, and "
"retrieving details. The purpose of this view set is to provide different "
-"serializers for different actions and implement permission-based handling of"
-" accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
+"serializers for different actions and implement permission-based handling of "
+"accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
"use of Django's filtering system for querying data."
msgstr ""
"Representação de um conjunto de visualizações que manipula objetos de "
-"feedback. Essa classe gerencia operações relacionadas a objetos de feedback,"
-" incluindo listagem, filtragem e recuperação de detalhes. O objetivo desse "
+"feedback. Essa classe gerencia operações relacionadas a objetos de feedback, "
+"incluindo listagem, filtragem e recuperação de detalhes. O objetivo desse "
"conjunto de visualizações é fornecer serializadores diferentes para ações "
"diferentes e implementar o manuseio baseado em permissão de objetos de "
-"feedback acessíveis. Ela estende a base `EvibesViewSet` e faz uso do sistema"
-" de filtragem do Django para consultar dados."
+"feedback acessíveis. Ela estende a base `EvibesViewSet` e faz uso do sistema "
+"de filtragem do Django para consultar dados."
-#: engine/core/viewsets.py:621
+#: engine/core/viewsets.py:652
msgid ""
"ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes "
"various endpoints for handling order operations such as adding or removing "
-"products, performing purchases for registered as well as unregistered users,"
-" and retrieving the current authenticated user's pending orders. The ViewSet"
-" uses multiple serializers based on the specific action being performed and "
+"products, performing purchases for registered as well as unregistered users, "
+"and retrieving the current authenticated user's pending orders. The ViewSet "
+"uses multiple serializers based on the specific action being performed and "
"enforces permissions accordingly while interacting with order data."
msgstr ""
-"ViewSet para gerenciar pedidos e operações relacionadas. Essa classe oferece"
-" funcionalidade para recuperar, modificar e gerenciar objetos de pedido. Ela"
-" inclui vários pontos de extremidade para lidar com operações de pedidos, "
+"ViewSet para gerenciar pedidos e operações relacionadas. Essa classe oferece "
+"funcionalidade para recuperar, modificar e gerenciar objetos de pedido. Ela "
+"inclui vários pontos de extremidade para lidar com operações de pedidos, "
"como adicionar ou remover produtos, realizar compras para usuários "
"registrados e não registrados e recuperar os pedidos pendentes do usuário "
"autenticado atual. O ViewSet usa vários serializadores com base na ação "
"específica que está sendo executada e impõe as permissões de acordo com a "
"interação com os dados do pedido."
-#: engine/core/viewsets.py:825
+#: engine/core/viewsets.py:914
msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It "
-"includes filtering, permission checks, and serializer switching based on the"
-" requested action. Additionally, it provides a detailed action for handling "
+"includes filtering, permission checks, and serializer switching based on the "
+"requested action. Additionally, it provides a detailed action for handling "
"feedback on OrderProduct instances"
msgstr ""
"Fornece um conjunto de visualizações para gerenciar entidades OrderProduct. "
-"Esse conjunto de visualizações permite operações CRUD e ações personalizadas"
-" específicas do modelo OrderProduct. Ele inclui filtragem, verificações de "
+"Esse conjunto de visualizações permite operações CRUD e ações personalizadas "
+"específicas do modelo OrderProduct. Ele inclui filtragem, verificações de "
"permissão e troca de serializador com base na ação solicitada. Além disso, "
"fornece uma ação detalhada para lidar com feedback sobre instâncias de "
"OrderProduct"
-#: engine/core/viewsets.py:879
+#: engine/core/viewsets.py:974
msgid "Manages operations related to Product images in the application. "
msgstr "Gerencia operações relacionadas a imagens de produtos no aplicativo."
-#: engine/core/viewsets.py:892
+#: engine/core/viewsets.py:988
msgid ""
"Manages the retrieval and handling of PromoCode instances through various "
"API actions."
@@ -3431,20 +3443,20 @@ msgstr ""
"Gerencia a recuperação e o manuseio de instâncias de PromoCode por meio de "
"várias ações de API."
-#: engine/core/viewsets.py:914
+#: engine/core/viewsets.py:1019
msgid "Represents a view set for managing promotions. "
msgstr "Representa um conjunto de visualizações para gerenciar promoções."
-#: engine/core/viewsets.py:927
+#: engine/core/viewsets.py:1032
msgid "Handles operations related to Stock data in the system."
msgstr "Trata de operações relacionadas a dados de estoque no sistema."
-#: engine/core/viewsets.py:941
+#: engine/core/viewsets.py:1046
msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the "
-"retrieval, modification, and customization of products within the wish list."
-" This ViewSet facilitates functionality such as adding, removing, and bulk "
+"retrieval, modification, and customization of products within the wish list. "
+"This ViewSet facilitates functionality such as adding, removing, and bulk "
"actions for wishlist products. Permission checks are integrated to ensure "
"that users can only manage their own wishlists unless explicit permissions "
"are granted."
@@ -3458,7 +3470,7 @@ msgstr ""
"possam gerenciar suas próprias listas de desejos, a menos que sejam "
"concedidas permissões explícitas."
-#: engine/core/viewsets.py:1056
+#: engine/core/viewsets.py:1183
msgid ""
"This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom "
@@ -3467,18 +3479,18 @@ msgid ""
"on the request context."
msgstr ""
"Essa classe fornece a funcionalidade de conjunto de visualizações para "
-"gerenciar objetos `Address`. A classe AddressViewSet permite operações CRUD,"
-" filtragem e ações personalizadas relacionadas a entidades de endereço. Ela "
+"gerenciar objetos `Address`. A classe AddressViewSet permite operações CRUD, "
+"filtragem e ações personalizadas relacionadas a entidades de endereço. Ela "
"inclui comportamentos especializados para diferentes métodos HTTP, "
"substituições de serializadores e tratamento de permissões com base no "
"contexto da solicitação."
-#: engine/core/viewsets.py:1123
+#: engine/core/viewsets.py:1254
#, python-brace-format
msgid "Geocoding error: {e}"
msgstr "Erro de geocodificação: {e}"
-#: engine/core/viewsets.py:1131
+#: engine/core/viewsets.py:1262
msgid ""
"Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing "
diff --git a/engine/core/locale/ro_RO/LC_MESSAGES/django.po b/engine/core/locale/ro_RO/LC_MESSAGES/django.po
index 00a19414..817f2382 100644
--- a/engine/core/locale/ro_RO/LC_MESSAGES/django.po
+++ b/engine/core/locale/ro_RO/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 22:12+0300\n"
+"POT-Creation-Date: 2025-12-18 19:09+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -27,113 +27,112 @@ msgstr ""
msgid "is active"
msgstr "Este activ"
-#: engine/core/abstract.py:21
+#: engine/core/abstract.py:22
msgid ""
-"if set to false, this object can't be seen by users without needed "
-"permission"
+"if set to false, this object can't be seen by users without needed permission"
msgstr ""
-"Dacă este setat la false, acest obiect nu poate fi văzut de utilizatori fără"
-" permisiunea necesară"
+"Dacă este setat la false, acest obiect nu poate fi văzut de utilizatori fără "
+"permisiunea necesară"
-#: engine/core/abstract.py:23 engine/core/choices.py:18
+#: engine/core/abstract.py:26 engine/core/choices.py:18
msgid "created"
msgstr "Creat"
-#: engine/core/abstract.py:23
+#: engine/core/abstract.py:26
msgid "when the object first appeared on the database"
msgstr "Când a apărut pentru prima dată obiectul în baza de date"
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "modified"
msgstr "Modificat"
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "when the object was last modified"
msgstr "Când a fost editat obiectul ultima dată"
-#: engine/core/admin.py:85
+#: engine/core/admin.py:94
msgid "translations"
msgstr "Traduceri"
-#: engine/core/admin.py:89
+#: engine/core/admin.py:102
msgid "general"
msgstr "Generalități"
-#: engine/core/admin.py:91
+#: engine/core/admin.py:106
msgid "relations"
msgstr "Relații"
-#: engine/core/admin.py:93
+#: engine/core/admin.py:111
msgid "additional info"
msgstr "informații suplimentare"
-#: engine/core/admin.py:111
+#: engine/core/admin.py:133
msgid "metadata"
msgstr "Metadate"
-#: engine/core/admin.py:118
+#: engine/core/admin.py:141
msgid "timestamps"
msgstr "Timestamps"
-#: engine/core/admin.py:133
+#: engine/core/admin.py:157
#, python-format
msgid "activate selected %(verbose_name_plural)s"
msgstr "Activați %(verbose_name_plural)s selectat"
-#: engine/core/admin.py:138
+#: engine/core/admin.py:165
msgid "selected items have been activated."
msgstr "Articolele selectate au fost activate!"
-#: engine/core/admin.py:144
+#: engine/core/admin.py:173
#, python-format
msgid "deactivate selected %(verbose_name_plural)s"
msgstr "Dezactivați %(verbose_name_plural)s selectat"
-#: engine/core/admin.py:149
+#: engine/core/admin.py:183
msgid "selected items have been deactivated."
msgstr "Articolele selectate au fost dezactivate!"
-#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586
-#: engine/core/graphene/object_types.py:593 engine/core/models.py:801
-#: engine/core/models.py:809
+#: engine/core/admin.py:195 engine/core/graphene/object_types.py:650
+#: engine/core/graphene/object_types.py:657 engine/core/models.py:824
+#: engine/core/models.py:832
msgid "attribute value"
msgstr "Atribut Valoare"
-#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75
-#: engine/core/models.py:810
+#: engine/core/admin.py:196 engine/core/graphene/object_types.py:75
+#: engine/core/models.py:833
msgid "attribute values"
msgstr "Valori ale atributului"
-#: engine/core/admin.py:172
+#: engine/core/admin.py:207
msgid "image"
msgstr "Imagine"
-#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474
+#: engine/core/admin.py:208 engine/core/graphene/object_types.py:527
msgid "images"
msgstr "Imagini"
-#: engine/core/admin.py:184 engine/core/models.py:566
+#: engine/core/admin.py:219 engine/core/models.py:587
msgid "stock"
msgstr "Stoc"
-#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640
+#: engine/core/admin.py:220 engine/core/graphene/object_types.py:710
msgid "stocks"
msgstr "Stocuri"
-#: engine/core/admin.py:196 engine/core/models.py:1818
+#: engine/core/admin.py:231 engine/core/models.py:1930
msgid "order product"
msgstr "Comanda Produs"
-#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389
-#: engine/core/models.py:1819
+#: engine/core/admin.py:232 engine/core/graphene/object_types.py:438
+#: engine/core/models.py:1931
msgid "order products"
msgstr "Comandați produse"
-#: engine/core/admin.py:210 engine/core/admin.py:211
+#: engine/core/admin.py:250 engine/core/admin.py:251
msgid "children"
msgstr "Copii"
-#: engine/core/admin.py:977
+#: engine/core/admin.py:1059
msgid "Config"
msgstr "Configurare"
@@ -157,8 +156,7 @@ msgstr "Livrat"
msgid "canceled"
msgstr "Anulată"
-#: engine/core/choices.py:8 engine/core/choices.py:16
-#: engine/core/choices.py:24
+#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24
msgid "failed"
msgstr "Eșuat"
@@ -186,294 +184,292 @@ msgstr "Momental"
msgid "successful"
msgstr "De succes"
-#: engine/core/docs/drf/views.py:31
+#: engine/core/docs/drf/views.py:30
msgid "OpenAPI schema in selected format with selected language"
msgstr "Schema OpenAPI în formatul selectat cu limba selectată"
-#: engine/core/docs/drf/views.py:33
+#: engine/core/docs/drf/views.py:32
msgid ""
"OpenApi3 schema for this API. Format can be selected via content "
"negotiation. Language can be selected with Accept-Language and query "
"parameter both."
msgstr ""
-"Schema OpenApi3 pentru acest API. Formatul poate fi selectat prin negocierea"
-" conținutului. Limba poate fi selectată atât cu Accept-Language, cât și cu "
+"Schema OpenApi3 pentru acest API. Formatul poate fi selectat prin negocierea "
+"conținutului. Limba poate fi selectată atât cu Accept-Language, cât și cu "
"parametrul de interogare."
-#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37
+#: engine/core/docs/drf/views.py:43 engine/core/graphene/mutations.py:37
msgid "cache I/O"
msgstr "Cache I/O"
-#: engine/core/docs/drf/views.py:46
+#: engine/core/docs/drf/views.py:45
msgid ""
"apply only a key to read permitted data from cache.\n"
"apply key, data and timeout with authentication to write data to cache."
msgstr ""
"Aplicați doar o cheie pentru a citi datele permise din cache.\n"
-"Aplicați o cheie, date și timeout cu autentificare pentru a scrie date în cache."
+"Aplicați o cheie, date și timeout cu autentificare pentru a scrie date în "
+"cache."
-#: engine/core/docs/drf/views.py:62
+#: engine/core/docs/drf/views.py:63
msgid "get a list of supported languages"
msgstr "Obțineți o listă a limbilor acceptate"
-#: engine/core/docs/drf/views.py:74
+#: engine/core/docs/drf/views.py:75
msgid "get application's exposable parameters"
msgstr "Obțineți parametrii expunibili ai aplicației"
-#: engine/core/docs/drf/views.py:84
+#: engine/core/docs/drf/views.py:89
msgid "send a message to the support team"
msgstr "Trimiteți un mesaj echipei de asistență"
-#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57
+#: engine/core/docs/drf/views.py:103 engine/core/graphene/mutations.py:59
msgid "request a CORSed URL"
msgstr "Solicitați un URL CORSed. Numai https este permis."
-#: engine/core/docs/drf/views.py:112
+#: engine/core/docs/drf/views.py:119
msgid "Search between products, categories and brands"
msgstr "Căutare între produse, categorii și mărci"
-#: engine/core/docs/drf/views.py:130
+#: engine/core/docs/drf/views.py:141
msgid "global search endpoint to query across project's tables"
msgstr ""
-"Punct final de căutare globală pentru a efectua interogări în toate tabelele"
-" proiectului"
+"Punct final de căutare globală pentru a efectua interogări în toate tabelele "
+"proiectului"
-#: engine/core/docs/drf/views.py:139
+#: engine/core/docs/drf/views.py:150
msgid "purchase an order as a business"
msgstr "Achiziționați o comandă ca întreprindere"
-#: engine/core/docs/drf/views.py:146
+#: engine/core/docs/drf/views.py:158
msgid ""
"purchase an order as a business, using the provided `products` with "
"`product_uuid` and `attributes`."
msgstr ""
-"Achiziționați o comandă ca o afacere, utilizând `products` cu `product_uuid`"
-" și `attributes` furnizate."
+"Achiziționați o comandă ca o afacere, utilizând `products` cu `product_uuid` "
+"și `attributes` furnizate."
-#: engine/core/docs/drf/views.py:164
+#: engine/core/docs/drf/views.py:177
msgid "download a digital asset from purchased digital order"
msgstr "descărcarea unui bun digital din comanda digitală achiziționată"
-#: engine/core/docs/drf/viewsets.py:61
+#: engine/core/docs/drf/viewsets.py:65
msgid "list all attribute groups (simple view)"
msgstr "Lista tuturor grupurilor de atribute (vizualizare simplă)"
-#: engine/core/docs/drf/viewsets.py:68
+#: engine/core/docs/drf/viewsets.py:75
msgid "retrieve a single attribute group (detailed view)"
msgstr "Recuperarea unui singur grup de atribute (vedere detaliată)"
-#: engine/core/docs/drf/viewsets.py:75
+#: engine/core/docs/drf/viewsets.py:82
msgid "create an attribute group"
msgstr "Crearea unui grup de atribute"
-#: engine/core/docs/drf/viewsets.py:82
+#: engine/core/docs/drf/viewsets.py:92
msgid "delete an attribute group"
msgstr "Ștergerea unui grup de atribute"
-#: engine/core/docs/drf/viewsets.py:89
+#: engine/core/docs/drf/viewsets.py:99
msgid "rewrite an existing attribute group saving non-editables"
msgstr ""
-"Rescrierea unui grup de atribute existent cu salvarea elementelor "
-"needitabile"
+"Rescrierea unui grup de atribute existent cu salvarea elementelor needitabile"
-#: engine/core/docs/drf/viewsets.py:96
-msgid ""
-"rewrite some fields of an existing attribute group saving non-editables"
+#: engine/core/docs/drf/viewsets.py:107
+msgid "rewrite some fields of an existing attribute group saving non-editables"
msgstr ""
"Rescrierea unor câmpuri ale unui grup de atribute existent, cu salvarea "
"elementelor needitabile"
-#: engine/core/docs/drf/viewsets.py:106
+#: engine/core/docs/drf/viewsets.py:118
msgid "list all attributes (simple view)"
msgstr "Lista tuturor atributelor (vizualizare simplă)"
-#: engine/core/docs/drf/viewsets.py:113
+#: engine/core/docs/drf/viewsets.py:128
msgid "retrieve a single attribute (detailed view)"
msgstr "Recuperarea unui singur atribut (vedere detaliată)"
-#: engine/core/docs/drf/viewsets.py:120
+#: engine/core/docs/drf/viewsets.py:135
msgid "create an attribute"
msgstr "Crearea unui atribut"
-#: engine/core/docs/drf/viewsets.py:127
+#: engine/core/docs/drf/viewsets.py:142
msgid "delete an attribute"
msgstr "Ștergerea unui atribut"
-#: engine/core/docs/drf/viewsets.py:134
+#: engine/core/docs/drf/viewsets.py:149
msgid "rewrite an existing attribute saving non-editables"
msgstr "Rescrierea unui atribut existent cu salvarea elementelor needitabile"
-#: engine/core/docs/drf/viewsets.py:141
+#: engine/core/docs/drf/viewsets.py:156
msgid "rewrite some fields of an existing attribute saving non-editables"
msgstr ""
"Rescrieți unele câmpuri ale unui atribut existent salvând elementele "
"needitabile"
-#: engine/core/docs/drf/viewsets.py:151
+#: engine/core/docs/drf/viewsets.py:166
msgid "list all attribute values (simple view)"
msgstr "Lista tuturor valorilor atributelor (vizualizare simplă)"
-#: engine/core/docs/drf/viewsets.py:158
+#: engine/core/docs/drf/viewsets.py:176
msgid "retrieve a single attribute value (detailed view)"
msgstr "Recuperarea valorii unui singur atribut (vedere detaliată)"
-#: engine/core/docs/drf/viewsets.py:165
+#: engine/core/docs/drf/viewsets.py:183
msgid "create an attribute value"
msgstr "Crearea unei valori de atribut"
-#: engine/core/docs/drf/viewsets.py:172
+#: engine/core/docs/drf/viewsets.py:193
msgid "delete an attribute value"
msgstr "Ștergerea unei valori de atribut"
-#: engine/core/docs/drf/viewsets.py:179
+#: engine/core/docs/drf/viewsets.py:200
msgid "rewrite an existing attribute value saving non-editables"
msgstr ""
"Rescrierea unei valori de atribut existente care salvează non-editabile"
-#: engine/core/docs/drf/viewsets.py:186
-msgid ""
-"rewrite some fields of an existing attribute value saving non-editables"
+#: engine/core/docs/drf/viewsets.py:208
+msgid "rewrite some fields of an existing attribute value saving non-editables"
msgstr ""
"Rescrierea unor câmpuri ale unei valori de atribut existente salvând "
"elementele needitabile"
-#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197
+#: engine/core/docs/drf/viewsets.py:219 engine/core/docs/drf/viewsets.py:220
msgid "list all categories (simple view)"
msgstr "Lista tuturor categoriilor (vizualizare simplă)"
-#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205
+#: engine/core/docs/drf/viewsets.py:230 engine/core/docs/drf/viewsets.py:231
msgid "retrieve a single category (detailed view)"
msgstr "Recuperarea unei singure categorii (vedere detaliată)"
-#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258
+#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:286
msgid "Category UUID or slug"
msgstr "Categorie UUID sau slug"
-#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221
+#: engine/core/docs/drf/viewsets.py:246 engine/core/docs/drf/viewsets.py:247
msgid "create a category"
msgstr "Creați o categorie"
-#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229
+#: engine/core/docs/drf/viewsets.py:254 engine/core/docs/drf/viewsets.py:255
msgid "delete a category"
msgstr "Ștergeți o categorie"
-#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237
+#: engine/core/docs/drf/viewsets.py:262 engine/core/docs/drf/viewsets.py:263
msgid "rewrite an existing category saving non-editables"
msgstr "Rescrieți o categorie existentă salvând non-editabile"
-#: engine/core/docs/drf/viewsets.py:244 engine/core/docs/drf/viewsets.py:245
+#: engine/core/docs/drf/viewsets.py:270 engine/core/docs/drf/viewsets.py:272
msgid "rewrite some fields of an existing category saving non-editables"
msgstr ""
"Rescrieți unele câmpuri ale unei categorii existente, salvând elementele "
"needitabile"
-#: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704
-#: engine/core/docs/drf/viewsets.py:988
+#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:1046
#: engine/core/graphene/object_types.py:117
-#: engine/core/graphene/object_types.py:207
-#: engine/core/graphene/object_types.py:482
+#: engine/core/graphene/object_types.py:236
+#: engine/core/graphene/object_types.py:537
msgid "SEO Meta snapshot"
msgstr "SEO Meta snapshot"
-#: engine/core/docs/drf/viewsets.py:253
+#: engine/core/docs/drf/viewsets.py:281
msgid "returns a snapshot of the category's SEO meta data"
msgstr "Returnează un instantaneu al metadatelor SEO ale categoriei"
-#: engine/core/docs/drf/viewsets.py:274
+#: engine/core/docs/drf/viewsets.py:302
msgid "list all orders (simple view)"
msgstr "Lista tuturor categoriilor (vizualizare simplă)"
-#: engine/core/docs/drf/viewsets.py:275
+#: engine/core/docs/drf/viewsets.py:303
msgid "for non-staff users, only their own orders are returned."
msgstr ""
"Pentru utilizatorii care nu fac parte din personal, sunt returnate doar "
"comenzile proprii."
-#: engine/core/docs/drf/viewsets.py:281
+#: engine/core/docs/drf/viewsets.py:309
msgid ""
-"Case-insensitive substring search across human_readable_id, "
-"order_products.product.name, and order_products.product.partnumber"
+"Case-insensitive substring search across human_readable_id, order_products."
+"product.name, and order_products.product.partnumber"
msgstr ""
"Căutare de substring insensibilă la majuscule în human_readable_id, "
"order_products.product.name și order_products.product.partnumber"
-#: engine/core/docs/drf/viewsets.py:288
+#: engine/core/docs/drf/viewsets.py:316
msgid "Filter orders with buy_time >= this ISO 8601 datetime"
msgstr "Filtrați comenzile cu buy_time >= această dată ISO 8601"
-#: engine/core/docs/drf/viewsets.py:293
+#: engine/core/docs/drf/viewsets.py:321
msgid "Filter orders with buy_time <= this ISO 8601 datetime"
msgstr "Filtrează comenzile cu buy_time <= această dată ISO 8601"
-#: engine/core/docs/drf/viewsets.py:298
+#: engine/core/docs/drf/viewsets.py:326
msgid "Filter by exact order UUID"
msgstr "Filtrare după UUID exact al comenzii"
-#: engine/core/docs/drf/viewsets.py:303
+#: engine/core/docs/drf/viewsets.py:331
msgid "Filter by exact human-readable order ID"
msgstr "Filtrați după ID-ul exact al comenzii care poate fi citit de către om"
-#: engine/core/docs/drf/viewsets.py:308
+#: engine/core/docs/drf/viewsets.py:336
msgid "Filter by user's email (case-insensitive exact match)"
msgstr ""
"Filtrare în funcție de adresa de e-mail a utilizatorului (potrivire exactă "
"insensibilă la majuscule)"
-#: engine/core/docs/drf/viewsets.py:313
+#: engine/core/docs/drf/viewsets.py:341
msgid "Filter by user's UUID"
msgstr "Filtrare după UUID-ul utilizatorului"
-#: engine/core/docs/drf/viewsets.py:318
+#: engine/core/docs/drf/viewsets.py:347
msgid "Filter by order status (case-insensitive substring match)"
msgstr ""
"Filtrare în funcție de starea comenzii (potrivire a substringurilor fără "
"deosebire de majuscule)"
-#: engine/core/docs/drf/viewsets.py:324
+#: engine/core/docs/drf/viewsets.py:354
msgid ""
-"Order by one of: uuid, human_readable_id, user_email, user, status, created,"
-" modified, buy_time, random. Prefix with '-' for descending (e.g. "
-"'-buy_time')."
+"Order by one of: uuid, human_readable_id, user_email, user, status, created, "
+"modified, buy_time, random. Prefix with '-' for descending (e.g. '-"
+"buy_time')."
msgstr ""
"Ordonați după unul dintre: uuid, human_readable_id, user_email, user, "
"status, created, modified, buy_time, random. Prefixați cu \"-\" pentru "
"ordine descrescătoare (de exemplu, \"-buy_time\")."
-#: engine/core/docs/drf/viewsets.py:336
+#: engine/core/docs/drf/viewsets.py:366
msgid "retrieve a single order (detailed view)"
msgstr "Recuperarea unei singure categorii (vedere detaliată)"
-#: engine/core/docs/drf/viewsets.py:341
+#: engine/core/docs/drf/viewsets.py:371
msgid "Order UUID or human-readable id"
msgstr "UUID al comenzii sau identificator lizibil de către om"
-#: engine/core/docs/drf/viewsets.py:351
+#: engine/core/docs/drf/viewsets.py:381
msgid "create an order"
msgstr "Crearea unui atribut"
-#: engine/core/docs/drf/viewsets.py:352
+#: engine/core/docs/drf/viewsets.py:382
msgid "doesn't work for non-staff users."
msgstr "Nu funcționează pentru utilizatorii care nu fac parte din personal."
-#: engine/core/docs/drf/viewsets.py:359
+#: engine/core/docs/drf/viewsets.py:389
msgid "delete an order"
msgstr "Ștergerea unui atribut"
-#: engine/core/docs/drf/viewsets.py:366
+#: engine/core/docs/drf/viewsets.py:396
msgid "rewrite an existing order saving non-editables"
msgstr "Rescrieți o categorie existentă salvând non-editabile"
-#: engine/core/docs/drf/viewsets.py:373
+#: engine/core/docs/drf/viewsets.py:403
msgid "rewrite some fields of an existing order saving non-editables"
msgstr ""
"Rescrieți unele câmpuri ale unei categorii existente, salvând elementele "
"needitabile"
-#: engine/core/docs/drf/viewsets.py:380
+#: engine/core/docs/drf/viewsets.py:410
msgid "purchase an order"
msgstr "Prețul de achiziție la momentul comenzii"
-#: engine/core/docs/drf/viewsets.py:382
+#: engine/core/docs/drf/viewsets.py:412
msgid ""
"finalizes the order purchase. if `force_balance` is used, the purchase is "
"completed using the user's balance; if `force_payment` is used, a "
@@ -483,28 +479,28 @@ msgstr ""
"achiziția este finalizată utilizând soldul utilizatorului; Dacă se "
"utilizează `force_payment`, este inițiată o tranzacție."
-#: engine/core/docs/drf/viewsets.py:397
+#: engine/core/docs/drf/viewsets.py:427
msgid "retrieve current pending order of a user"
msgstr "preluarea comenzii curente în așteptare a unui utilizator"
-#: engine/core/docs/drf/viewsets.py:398
+#: engine/core/docs/drf/viewsets.py:428
msgid "retrieves a current pending order of an authenticated user"
msgstr ""
"recuperează o comandă curentă în așteptare a unui utilizator autentificat"
-#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334
+#: engine/core/docs/drf/viewsets.py:438 engine/core/graphene/mutations.py:354
msgid "purchase an order without account creation"
msgstr "achiziționarea unei comenzi fără crearea unui cont"
-#: engine/core/docs/drf/viewsets.py:409
+#: engine/core/docs/drf/viewsets.py:439
msgid "finalizes the order purchase for a non-registered user."
msgstr "finalizează achiziția comenzii pentru un utilizator neînregistrat."
-#: engine/core/docs/drf/viewsets.py:420
+#: engine/core/docs/drf/viewsets.py:450
msgid "add product to order"
msgstr "Adăugați un produs la comandă"
-#: engine/core/docs/drf/viewsets.py:421
+#: engine/core/docs/drf/viewsets.py:452
msgid ""
"adds a product to an order using the provided `product_uuid` and "
"`attributes`."
@@ -512,11 +508,11 @@ msgstr ""
"Adaugă un produs la o comandă folosind `product_uuid` și `attributes` "
"furnizate."
-#: engine/core/docs/drf/viewsets.py:429
+#: engine/core/docs/drf/viewsets.py:461
msgid "add a list of products to order, quantities will not count"
msgstr "Adăugați o listă de produse la comandă, cantitățile nu vor conta"
-#: engine/core/docs/drf/viewsets.py:430
+#: engine/core/docs/drf/viewsets.py:463
msgid ""
"adds a list of products to an order using the provided `product_uuid` and "
"`attributes`."
@@ -524,11 +520,11 @@ msgstr ""
"Adaugă o listă de produse la o comandă folosind `product_uuid` și "
"`attributes` furnizate."
-#: engine/core/docs/drf/viewsets.py:438
+#: engine/core/docs/drf/viewsets.py:472
msgid "remove product from order"
msgstr "Eliminați un produs din comandă"
-#: engine/core/docs/drf/viewsets.py:439
+#: engine/core/docs/drf/viewsets.py:474
msgid ""
"removes a product from an order using the provided `product_uuid` and "
"`attributes`."
@@ -536,12 +532,12 @@ msgstr ""
"Elimină un produs dintr-o comandă folosind `product_uuid` și `attributes` "
"furnizate."
-#: engine/core/docs/drf/viewsets.py:447
+#: engine/core/docs/drf/viewsets.py:483
msgid "remove product from order, quantities will not count"
msgstr ""
"Eliminați un produs din comandă, cantitățile nu vor fi luate în considerare"
-#: engine/core/docs/drf/viewsets.py:448
+#: engine/core/docs/drf/viewsets.py:485
msgid ""
"removes a list of products from an order using the provided `product_uuid` "
"and `attributes`"
@@ -549,731 +545,741 @@ msgstr ""
"Îndepărtează o listă de produse dintr-o comandă folosind `product_uuid` și "
"`attributes` furnizate."
-#: engine/core/docs/drf/viewsets.py:459
+#: engine/core/docs/drf/viewsets.py:497
msgid "list all wishlists (simple view)"
msgstr "Lista tuturor atributelor (vizualizare simplă)"
-#: engine/core/docs/drf/viewsets.py:460
+#: engine/core/docs/drf/viewsets.py:498
msgid "for non-staff users, only their own wishlists are returned."
msgstr ""
"Pentru utilizatorii care nu fac parte din personal, sunt returnate doar "
"propriile liste de dorințe."
-#: engine/core/docs/drf/viewsets.py:467
+#: engine/core/docs/drf/viewsets.py:508
msgid "retrieve a single wishlist (detailed view)"
msgstr "Recuperarea unui singur atribut (vedere detaliată)"
-#: engine/core/docs/drf/viewsets.py:474
+#: engine/core/docs/drf/viewsets.py:515
msgid "create an wishlist"
msgstr "Crearea unui atribut"
-#: engine/core/docs/drf/viewsets.py:475
+#: engine/core/docs/drf/viewsets.py:516
msgid "Doesn't work for non-staff users."
msgstr "Nu funcționează pentru utilizatorii care nu fac parte din personal."
-#: engine/core/docs/drf/viewsets.py:482
+#: engine/core/docs/drf/viewsets.py:523
msgid "delete an wishlist"
msgstr "Ștergerea unui atribut"
-#: engine/core/docs/drf/viewsets.py:489
+#: engine/core/docs/drf/viewsets.py:530
msgid "rewrite an existing wishlist saving non-editables"
msgstr "Rescrierea unui atribut existent cu salvarea elementelor needitabile"
-#: engine/core/docs/drf/viewsets.py:496
+#: engine/core/docs/drf/viewsets.py:537
msgid "rewrite some fields of an existing wishlist saving non-editables"
msgstr ""
"Rescrieți unele câmpuri ale unui atribut existent salvând elementele "
"needitabile"
-#: engine/core/docs/drf/viewsets.py:503
+#: engine/core/docs/drf/viewsets.py:544
msgid "retrieve current pending wishlist of a user"
msgstr "recuperează lista de dorințe în așteptare a unui utilizator"
-#: engine/core/docs/drf/viewsets.py:504
+#: engine/core/docs/drf/viewsets.py:545
msgid "retrieves a current pending wishlist of an authenticated user"
msgstr ""
"recuperează o listă de dorințe în așteptare curentă a unui utilizator "
"autentificat"
-#: engine/core/docs/drf/viewsets.py:514
+#: engine/core/docs/drf/viewsets.py:555
msgid "add product to wishlist"
msgstr "Adăugați un produs la comandă"
-#: engine/core/docs/drf/viewsets.py:515
+#: engine/core/docs/drf/viewsets.py:557
msgid "adds a product to an wishlist using the provided `product_uuid`"
msgstr ""
"Adaugă un produs la o listă de dorințe folosind `product_uuid` furnizat"
-#: engine/core/docs/drf/viewsets.py:523
+#: engine/core/docs/drf/viewsets.py:566
msgid "remove product from wishlist"
msgstr "Eliminați un produs din lista de dorințe"
-#: engine/core/docs/drf/viewsets.py:524
+#: engine/core/docs/drf/viewsets.py:568
msgid "removes a product from an wishlist using the provided `product_uuid`"
msgstr ""
"Înlătură un produs dintr-o listă de dorințe folosind `product_uuid` furnizat"
-#: engine/core/docs/drf/viewsets.py:532
+#: engine/core/docs/drf/viewsets.py:577
msgid "add many products to wishlist"
msgstr "Adăugați mai multe produse la lista de dorințe"
-#: engine/core/docs/drf/viewsets.py:533
+#: engine/core/docs/drf/viewsets.py:579
msgid "adds many products to an wishlist using the provided `product_uuids`"
msgstr ""
"Adaugă mai multe produse la o listă de dorințe folosind `product_uuids` "
"furnizat"
-#: engine/core/docs/drf/viewsets.py:541
+#: engine/core/docs/drf/viewsets.py:588
msgid "remove many products from wishlist"
msgstr "Eliminați un produs din comandă"
-#: engine/core/docs/drf/viewsets.py:542
+#: engine/core/docs/drf/viewsets.py:590
msgid ""
"removes many products from an wishlist using the provided `product_uuids`"
msgstr ""
"Îndepărtează mai multe produse dintr-o listă de dorințe folosind "
"`product_uuids` furnizat"
-#: engine/core/docs/drf/viewsets.py:549
+#: engine/core/docs/drf/viewsets.py:598
msgid ""
"Filter by one or more attribute name/value pairs. \n"
"• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n"
-"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n"
-"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n"
+"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, "
+"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, "
+"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n"
+"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), "
+"`true`/`false` for booleans, integers, floats; otherwise treated as "
+"string. \n"
"• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n"
"Examples: \n"
-"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n"
+"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\","
+"\"bluetooth\"]`, \n"
"`b64-description=icontains-aGVhdC1jb2xk`"
msgstr ""
"Filtrați după una sau mai multe perechi nume de atribut/valoare. \n"
"- **Sintaxa**: `attr_name=method-value[;attr2=method2-value2]...`\n"
-"- **Metode** (valoarea implicită este `icontains` dacă este omisă): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`\n"
-"- **Value typing**: JSON este încercat în primul rând (astfel încât să puteți trece liste/dicte), `true`/`false` pentru booleeni, întregi, float; în caz contrar tratat ca string. \n"
-"- **Base64**: prefix cu `b64-` pentru a codifica valoarea brută în baza64 în condiții de siguranță URL. \n"
+"- **Metode** (valoarea implicită este `icontains` dacă este omisă): "
+"`iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, "
+"`istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, "
+"`gt`, `gte`, `in`\n"
+"- **Value typing**: JSON este încercat în primul rând (astfel încât să "
+"puteți trece liste/dicte), `true`/`false` pentru booleeni, întregi, float; "
+"în caz contrar tratat ca string. \n"
+"- **Base64**: prefix cu `b64-` pentru a codifica valoarea brută în baza64 în "
+"condiții de siguranță URL. \n"
"Exemple: \n"
"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`,\n"
"`b64-description=icontains-aGVhdC1jb2xk`"
-#: engine/core/docs/drf/viewsets.py:568 engine/core/docs/drf/viewsets.py:569
+#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
msgid "list all products (simple view)"
msgstr "Listează toate produsele (vizualizare simplă)"
-#: engine/core/docs/drf/viewsets.py:574
+#: engine/core/docs/drf/viewsets.py:623
msgid "(exact) Product UUID"
msgstr "(exact) UUID al produsului"
-#: engine/core/docs/drf/viewsets.py:581
+#: engine/core/docs/drf/viewsets.py:630
msgid ""
-"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n"
+"Comma-separated list of fields to sort by. Prefix with `-` for "
+"descending. \n"
"**Allowed:** uuid, rating, name, slug, created, modified, price, random"
msgstr ""
-"Lista de câmpuri separate prin virgulă după care se face sortarea. Prefixați cu `-` pentru descrescător. \n"
+"Lista de câmpuri separate prin virgulă după care se face sortarea. Prefixați "
+"cu `-` pentru descrescător. \n"
"**Autorizate:** uuid, rating, nume, slug, creat, modificat, preț, aleatoriu"
-#: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599
+#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
msgid "retrieve a single product (detailed view)"
msgstr "Recuperarea unui singur produs (vedere detaliată)"
-#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634
-#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672
-#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710
+#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683
+#: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725
+#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763
msgid "Product UUID or slug"
msgstr "UUID sau Slug al produsului"
-#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
+#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
#: engine/core/graphene/dashboard_mutations/product.py:80
#: engine/core/graphene/dashboard_mutations/product.py:118
#: engine/core/graphene/dashboard_mutations/product.py:166
msgid "create a product"
msgstr "Creați un produs"
-#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629
+#: engine/core/docs/drf/viewsets.py:677 engine/core/docs/drf/viewsets.py:678
msgid "rewrite an existing product, preserving non-editable fields"
msgstr ""
"Rescrierea unui produs existent, păstrând câmpurile care nu pot fi editate"
-#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
+#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:700
msgid ""
"update some fields of an existing product, preserving non-editable fields"
msgstr ""
"Actualizarea unor câmpuri ale unui produs existent, păstrând câmpurile "
"needitabile"
-#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
+#: engine/core/docs/drf/viewsets.py:719 engine/core/docs/drf/viewsets.py:720
msgid "delete a product"
msgstr "Ștergeți un produs"
-#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686
+#: engine/core/docs/drf/viewsets.py:738 engine/core/docs/drf/viewsets.py:739
msgid "lists all permitted feedbacks for a product"
msgstr "listează toate feedback-urile permise pentru un produs"
-#: engine/core/docs/drf/viewsets.py:705
+#: engine/core/docs/drf/viewsets.py:758
msgid "returns a snapshot of the product's SEO meta data"
msgstr "Returnează un instantaneu al metadatelor SEO ale produsului"
-#: engine/core/docs/drf/viewsets.py:726
+#: engine/core/docs/drf/viewsets.py:779
msgid "list all addresses"
msgstr "Enumerați toate adresele"
-#: engine/core/docs/drf/viewsets.py:736
+#: engine/core/docs/drf/viewsets.py:789
msgid "retrieve a single address"
msgstr "Recuperarea unei singure adrese"
-#: engine/core/docs/drf/viewsets.py:746
+#: engine/core/docs/drf/viewsets.py:799
msgid "create a new address"
msgstr "Creați o adresă nouă"
-#: engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:810
msgid "delete an address"
msgstr "Ștergeți o adresă"
-#: engine/core/docs/drf/viewsets.py:767
+#: engine/core/docs/drf/viewsets.py:820
msgid "update an entire address"
msgstr "Actualizarea unei adrese întregi"
-#: engine/core/docs/drf/viewsets.py:778
+#: engine/core/docs/drf/viewsets.py:831
msgid "partially update an address"
msgstr "Actualizarea parțială a unei adrese"
-#: engine/core/docs/drf/viewsets.py:789
+#: engine/core/docs/drf/viewsets.py:842
msgid "autocomplete address suggestions"
msgstr "Autocompletare adresă de intrare"
-#: engine/core/docs/drf/viewsets.py:794
+#: engine/core/docs/drf/viewsets.py:848
msgid "raw data query string, please append with data from geo-IP endpoint"
msgstr ""
-"docker compose exec app poetry run python manage.py deepl_translate -l en-gb"
-" -l ar-ar -l cs-cz -l da-dk -l de-de -l en-us -l es-es -l fr-fr -l hi-in -l "
+"docker compose exec app poetry run python manage.py deepl_translate -l en-gb "
+"-l ar-ar -l cs-cz -l da-dk -l de-de -l en-us -l es-es -l fr-fr -l hi-in -l "
"it-it -l ja-jp -l kk-kz -l nl-nl -l pl-pl -l pt-br -l ro-ro -l ru-ru -l zh-"
"hans -a core -a geo -a plăți -a vibes_auth -a blog"
-#: engine/core/docs/drf/viewsets.py:800
+#: engine/core/docs/drf/viewsets.py:855
msgid "limit the results amount, 1 < limit < 10, default: 5"
msgstr "limitează cantitatea de rezultate, 1 < limit < 10, implicit: 5"
-#: engine/core/docs/drf/viewsets.py:816
+#: engine/core/docs/drf/viewsets.py:871
msgid "list all feedbacks (simple view)"
msgstr "lista tuturor feedback-urilor (vizualizare simplă)"
-#: engine/core/docs/drf/viewsets.py:823
+#: engine/core/docs/drf/viewsets.py:881
msgid "retrieve a single feedback (detailed view)"
msgstr "recuperați un singur feedback (vizualizare detaliată)"
-#: engine/core/docs/drf/viewsets.py:830
+#: engine/core/docs/drf/viewsets.py:888
msgid "create a feedback"
msgstr "creați un feedback"
-#: engine/core/docs/drf/viewsets.py:837
+#: engine/core/docs/drf/viewsets.py:895
msgid "delete a feedback"
msgstr "ștergeți un feedback"
-#: engine/core/docs/drf/viewsets.py:844
+#: engine/core/docs/drf/viewsets.py:902
msgid "rewrite an existing feedback saving non-editables"
msgstr "rescrierea unui feedback existent cu salvarea elementelor needitabile"
-#: engine/core/docs/drf/viewsets.py:851
+#: engine/core/docs/drf/viewsets.py:909
msgid "rewrite some fields of an existing feedback saving non-editables"
msgstr ""
"Rescrieți unele câmpuri ale unei categorii existente, salvând elementele "
"needitabile"
-#: engine/core/docs/drf/viewsets.py:861
+#: engine/core/docs/drf/viewsets.py:919
msgid "list all order–product relations (simple view)"
msgstr "lista tuturor relațiilor comandă-produs (vedere simplă)"
-#: engine/core/docs/drf/viewsets.py:871
+#: engine/core/docs/drf/viewsets.py:929
msgid "retrieve a single order–product relation (detailed view)"
msgstr "recuperarea unei singure relații comandă-produs (vedere detaliată)"
-#: engine/core/docs/drf/viewsets.py:881
+#: engine/core/docs/drf/viewsets.py:939
msgid "create a new order–product relation"
msgstr "crearea unei noi relații comandă-produs"
-#: engine/core/docs/drf/viewsets.py:891
+#: engine/core/docs/drf/viewsets.py:949
msgid "replace an existing order–product relation"
msgstr "să înlocuiască o relație comandă-produs existentă"
-#: engine/core/docs/drf/viewsets.py:901
+#: engine/core/docs/drf/viewsets.py:959
msgid "partially update an existing order–product relation"
msgstr "actualizarea parțială a unei relații comandă-produs existente"
-#: engine/core/docs/drf/viewsets.py:911
+#: engine/core/docs/drf/viewsets.py:969
msgid "delete an order–product relation"
msgstr "ștergeți o relație comandă-produs"
-#: engine/core/docs/drf/viewsets.py:921
+#: engine/core/docs/drf/viewsets.py:979
msgid "add or remove feedback on an order–product relation"
msgstr "adăugarea sau eliminarea feedback-ului într-o relație comandă-produs"
-#: engine/core/docs/drf/viewsets.py:938
+#: engine/core/docs/drf/viewsets.py:996
msgid "list all brands (simple view)"
msgstr "Lista tuturor mărcilor (vizualizare simplă)"
-#: engine/core/docs/drf/viewsets.py:945
+#: engine/core/docs/drf/viewsets.py:1003
msgid "retrieve a single brand (detailed view)"
msgstr "Recuperarea unei singure mărci (vedere detaliată)"
-#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993
+#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051
msgid "Brand UUID or slug"
msgstr "Marca UUID sau slug"
-#: engine/core/docs/drf/viewsets.py:960
+#: engine/core/docs/drf/viewsets.py:1018
msgid "create a brand"
msgstr "Creați un brand"
-#: engine/core/docs/drf/viewsets.py:967
+#: engine/core/docs/drf/viewsets.py:1025
msgid "delete a brand"
msgstr "Ștergeți un brand"
-#: engine/core/docs/drf/viewsets.py:974
+#: engine/core/docs/drf/viewsets.py:1032
msgid "rewrite an existing brand saving non-editables"
-msgstr ""
-"Rescrierea unui brand existent care economisește materiale needitabile"
+msgstr "Rescrierea unui brand existent care economisește materiale needitabile"
-#: engine/core/docs/drf/viewsets.py:981
+#: engine/core/docs/drf/viewsets.py:1039
msgid "rewrite some fields of an existing brand saving non-editables"
msgstr ""
"Rescrieți unele câmpuri ale unei categorii existente, salvând elementele "
"needitabile"
-#: engine/core/docs/drf/viewsets.py:1006
+#: engine/core/docs/drf/viewsets.py:1064
msgid "list all vendors (simple view)"
msgstr "Lista tuturor furnizorilor (vizualizare simplă)"
-#: engine/core/docs/drf/viewsets.py:1013
+#: engine/core/docs/drf/viewsets.py:1074
msgid "retrieve a single vendor (detailed view)"
msgstr "Recuperarea unui singur furnizor (vedere detaliată)"
-#: engine/core/docs/drf/viewsets.py:1020
+#: engine/core/docs/drf/viewsets.py:1081
msgid "create a vendor"
msgstr "Creați un furnizor"
-#: engine/core/docs/drf/viewsets.py:1027
+#: engine/core/docs/drf/viewsets.py:1088
msgid "delete a vendor"
msgstr "Ștergeți un furnizor"
-#: engine/core/docs/drf/viewsets.py:1034
+#: engine/core/docs/drf/viewsets.py:1095
msgid "rewrite an existing vendor saving non-editables"
msgstr "Rescrierea unui furnizor existent cu salvarea elementelor needitabile"
-#: engine/core/docs/drf/viewsets.py:1041
+#: engine/core/docs/drf/viewsets.py:1102
msgid "rewrite some fields of an existing vendor saving non-editables"
msgstr ""
"Rescrieți unele câmpuri ale unei categorii existente, salvând elementele "
"needitabile"
-#: engine/core/docs/drf/viewsets.py:1051
+#: engine/core/docs/drf/viewsets.py:1112
msgid "list all product images (simple view)"
msgstr "Listați toate imaginile produsului (vizualizare simplă)"
-#: engine/core/docs/drf/viewsets.py:1058
+#: engine/core/docs/drf/viewsets.py:1122
msgid "retrieve a single product image (detailed view)"
msgstr "Preluarea unei singure imagini a produsului (vedere detaliată)"
-#: engine/core/docs/drf/viewsets.py:1065
+#: engine/core/docs/drf/viewsets.py:1129
msgid "create a product image"
msgstr "Creați o imagine a produsului"
-#: engine/core/docs/drf/viewsets.py:1072
+#: engine/core/docs/drf/viewsets.py:1139
msgid "delete a product image"
msgstr "Ștergeți imaginea unui produs"
-#: engine/core/docs/drf/viewsets.py:1079
+#: engine/core/docs/drf/viewsets.py:1146
msgid "rewrite an existing product image saving non-editables"
-msgstr ""
-"Rescrieți o imagine de produs existentă salvând elementele needitabile"
+msgstr "Rescrieți o imagine de produs existentă salvând elementele needitabile"
-#: engine/core/docs/drf/viewsets.py:1086
+#: engine/core/docs/drf/viewsets.py:1154
msgid "rewrite some fields of an existing product image saving non-editables"
msgstr ""
"Rescrieți unele câmpuri ale unei categorii existente, salvând elementele "
"needitabile"
-#: engine/core/docs/drf/viewsets.py:1096
+#: engine/core/docs/drf/viewsets.py:1165
msgid "list all promo codes (simple view)"
msgstr "Lista tuturor codurilor promoționale (vizualizare simplă)"
-#: engine/core/docs/drf/viewsets.py:1103
+#: engine/core/docs/drf/viewsets.py:1175
msgid "retrieve a single promo code (detailed view)"
msgstr "Recuperarea unui singur cod promoțional (vizualizare detaliată)"
-#: engine/core/docs/drf/viewsets.py:1110
+#: engine/core/docs/drf/viewsets.py:1182
msgid "create a promo code"
msgstr "Creați un cod promoțional"
-#: engine/core/docs/drf/viewsets.py:1117
+#: engine/core/docs/drf/viewsets.py:1189
msgid "delete a promo code"
msgstr "Ștergeți un cod promoțional"
-#: engine/core/docs/drf/viewsets.py:1124
+#: engine/core/docs/drf/viewsets.py:1196
msgid "rewrite an existing promo code saving non-editables"
msgstr "Rescrieți un cod promoțional existent, economisind non-editabile"
-#: engine/core/docs/drf/viewsets.py:1131
+#: engine/core/docs/drf/viewsets.py:1203
msgid "rewrite some fields of an existing promo code saving non-editables"
msgstr ""
"Rescrieți unele câmpuri ale unei categorii existente, salvând elementele "
"needitabile"
-#: engine/core/docs/drf/viewsets.py:1141
+#: engine/core/docs/drf/viewsets.py:1213
msgid "list all promotions (simple view)"
msgstr "Lista tuturor promoțiilor (vizualizare simplă)"
-#: engine/core/docs/drf/viewsets.py:1148
+#: engine/core/docs/drf/viewsets.py:1223
msgid "retrieve a single promotion (detailed view)"
msgstr "Recuperarea unei singure promoții (vedere detaliată)"
-#: engine/core/docs/drf/viewsets.py:1155
+#: engine/core/docs/drf/viewsets.py:1230
msgid "create a promotion"
msgstr "Creați o promoție"
-#: engine/core/docs/drf/viewsets.py:1162
+#: engine/core/docs/drf/viewsets.py:1237
msgid "delete a promotion"
msgstr "Ștergeți o promovare"
-#: engine/core/docs/drf/viewsets.py:1169
+#: engine/core/docs/drf/viewsets.py:1244
msgid "rewrite an existing promotion saving non-editables"
-msgstr ""
-"Rescrierea unei promoții existente cu salvarea elementelor needitabile"
+msgstr "Rescrierea unei promoții existente cu salvarea elementelor needitabile"
-#: engine/core/docs/drf/viewsets.py:1176
+#: engine/core/docs/drf/viewsets.py:1251
msgid "rewrite some fields of an existing promotion saving non-editables"
msgstr ""
"Rescrieți unele câmpuri ale unei categorii existente, salvând elementele "
"needitabile"
-#: engine/core/docs/drf/viewsets.py:1186
+#: engine/core/docs/drf/viewsets.py:1261
msgid "list all stocks (simple view)"
msgstr "Lista tuturor stocurilor (vizualizare simplă)"
-#: engine/core/docs/drf/viewsets.py:1193
+#: engine/core/docs/drf/viewsets.py:1268
msgid "retrieve a single stock (detailed view)"
msgstr "Recuperarea unui singur stoc (vedere detaliată)"
-#: engine/core/docs/drf/viewsets.py:1200
+#: engine/core/docs/drf/viewsets.py:1275
msgid "create a stock record"
msgstr "Crearea unei fișe de stoc"
-#: engine/core/docs/drf/viewsets.py:1207
+#: engine/core/docs/drf/viewsets.py:1282
msgid "delete a stock record"
msgstr "Ștergerea unei înregistrări de stoc"
-#: engine/core/docs/drf/viewsets.py:1214
+#: engine/core/docs/drf/viewsets.py:1289
msgid "rewrite an existing stock record saving non-editables"
msgstr ""
"Rescrierea unei fișe de stoc existente cu salvarea elementelor needitabile"
-#: engine/core/docs/drf/viewsets.py:1221
+#: engine/core/docs/drf/viewsets.py:1297
msgid "rewrite some fields of an existing stock record saving non-editables"
msgstr ""
"Rescrieți unele câmpuri ale unei categorii existente, salvând elementele "
"needitabile"
-#: engine/core/docs/drf/viewsets.py:1231
+#: engine/core/docs/drf/viewsets.py:1308
msgid "list all product tags (simple view)"
msgstr "Listați toate etichetele produselor (vizualizare simplă)"
-#: engine/core/docs/drf/viewsets.py:1238
+#: engine/core/docs/drf/viewsets.py:1318
msgid "retrieve a single product tag (detailed view)"
msgstr "Recuperarea unei singure etichete de produs (vizualizare detaliată)"
-#: engine/core/docs/drf/viewsets.py:1245
+#: engine/core/docs/drf/viewsets.py:1325
msgid "create a product tag"
msgstr "Creați o etichetă de produs"
-#: engine/core/docs/drf/viewsets.py:1252
+#: engine/core/docs/drf/viewsets.py:1335
msgid "delete a product tag"
msgstr "Ștergeți o etichetă de produs"
-#: engine/core/docs/drf/viewsets.py:1259
+#: engine/core/docs/drf/viewsets.py:1342
msgid "rewrite an existing product tag saving non-editables"
msgstr ""
"Rescrieți o etichetă de produs existentă salvând elementele needitabile"
-#: engine/core/docs/drf/viewsets.py:1266
+#: engine/core/docs/drf/viewsets.py:1350
msgid "rewrite some fields of an existing product tag saving non-editables"
msgstr ""
"Rescrieți unele câmpuri ale unei categorii existente, salvând elementele "
"needitabile"
-#: engine/core/elasticsearch/__init__.py:122
-#: engine/core/elasticsearch/__init__.py:570
+#: engine/core/elasticsearch/__init__.py:127
+#: engine/core/elasticsearch/__init__.py:627
msgid "no search term provided."
msgstr "Nu a fost furnizat niciun termen de căutare."
-#: engine/core/filters.py:69 engine/core/filters.py:426
-#: engine/core/filters.py:553
+#: engine/core/filters.py:78 engine/core/filters.py:484
+#: engine/core/filters.py:625
msgid "Search"
msgstr "Căutare"
-#: engine/core/filters.py:70 engine/core/filters.py:583
-#: engine/core/filters.py:612
+#: engine/core/filters.py:79 engine/core/filters.py:662
+#: engine/core/filters.py:691
msgid "UUID"
msgstr "UUID"
-#: engine/core/filters.py:71 engine/core/filters.py:428
-#: engine/core/filters.py:555
+#: engine/core/filters.py:80 engine/core/filters.py:487
+#: engine/core/filters.py:627
msgid "Name"
msgstr "Nume și prenume"
-#: engine/core/filters.py:72 engine/core/filters.py:557
+#: engine/core/filters.py:82 engine/core/filters.py:630
msgid "Categories"
msgstr "Categorii"
-#: engine/core/filters.py:74
+#: engine/core/filters.py:86
msgid "Categories Slugs"
msgstr "Categorii Melci"
-#: engine/core/filters.py:75 engine/core/filters.py:436
+#: engine/core/filters.py:88 engine/core/filters.py:495
msgid "Tags"
msgstr "Etichete"
-#: engine/core/filters.py:76
+#: engine/core/filters.py:90
msgid "Min Price"
msgstr "Preț minim"
-#: engine/core/filters.py:77
+#: engine/core/filters.py:93
msgid "Max Price"
msgstr "Preț maxim"
-#: engine/core/filters.py:78
+#: engine/core/filters.py:95
msgid "Is Active"
msgstr "Este activ"
-#: engine/core/filters.py:79
+#: engine/core/filters.py:96
msgid "Brand"
msgstr "Marca"
-#: engine/core/filters.py:80
+#: engine/core/filters.py:97
msgid "Attributes"
msgstr "Atribute"
-#: engine/core/filters.py:81
+#: engine/core/filters.py:99
msgid "Quantity"
msgstr "Cantitate"
-#: engine/core/filters.py:82 engine/core/filters.py:430
-#: engine/core/filters.py:556 engine/core/models.py:321
-#: engine/core/models.py:489 engine/core/models.py:644
+#: engine/core/filters.py:101 engine/core/filters.py:489
+#: engine/core/filters.py:628 engine/core/models.py:327
+#: engine/core/models.py:508 engine/core/models.py:665
msgid "Slug"
msgstr "Melc"
-#: engine/core/filters.py:83
+#: engine/core/filters.py:102
msgid "Is Digital"
msgstr "Este digital"
-#: engine/core/filters.py:84
+#: engine/core/filters.py:104
msgid "Include sub-categories"
msgstr "Includeți subcategorii"
-#: engine/core/filters.py:87
+#: engine/core/filters.py:108
msgid "Include personal ordered"
msgstr "Includeți produsele comandate personal"
-#: engine/core/filters.py:89 engine/core/models.py:648
+#: engine/core/filters.py:110 engine/core/models.py:669
msgid "SKU"
msgstr "SKU"
-#: engine/core/filters.py:184
+#: engine/core/filters.py:212
msgid "there must be a category_uuid to use include_subcategories flag"
msgstr ""
"Trebuie să existe un category_uuid pentru a utiliza flagul "
"include_subcategories"
-#: engine/core/filters.py:353
+#: engine/core/filters.py:398
msgid "Search (ID, product name or part number)"
msgstr "Căutare (ID, numele produsului sau numărul piesei)"
-#: engine/core/filters.py:356
+#: engine/core/filters.py:402
msgid "Bought after (inclusive)"
msgstr "Cumpărat după (inclusiv)"
-#: engine/core/filters.py:357
+#: engine/core/filters.py:405
msgid "Bought before (inclusive)"
msgstr "Cumpărat înainte (inclusiv)"
-#: engine/core/filters.py:360 engine/core/filters.py:407
-#: engine/core/filters.py:614
+#: engine/core/filters.py:410 engine/core/filters.py:461
+#: engine/core/filters.py:696
msgid "User email"
msgstr "E-mail utilizator"
-#: engine/core/filters.py:361 engine/core/filters.py:408
-#: engine/core/filters.py:592 engine/core/filters.py:613
+#: engine/core/filters.py:413 engine/core/filters.py:464
+#: engine/core/filters.py:671 engine/core/filters.py:693
msgid "User UUID"
msgstr "UUID utilizator"
-#: engine/core/filters.py:362
+#: engine/core/filters.py:415
msgid "Status"
msgstr "Statut"
-#: engine/core/filters.py:366
+#: engine/core/filters.py:419
msgid "Human Readable ID"
msgstr "ID lizibil de către om"
-#: engine/core/filters.py:429
+#: engine/core/filters.py:488
msgid "Parent"
msgstr "Părinte"
-#: engine/core/filters.py:433
+#: engine/core/filters.py:492
msgid "Whole category(has at least 1 product or not)"
msgstr "Întreaga categorie (are cel puțin 1 produs sau nu)"
-#: engine/core/filters.py:437
+#: engine/core/filters.py:496
msgid "Level"
msgstr "Nivel"
-#: engine/core/filters.py:587
+#: engine/core/filters.py:666
msgid "Product UUID"
msgstr "UUID produs"
-#: engine/core/graphene/mutations.py:40
+#: engine/core/graphene/mutations.py:41
msgid "key to look for in or set into the cache"
msgstr "Cheie care trebuie căutată sau introdusă în cache"
-#: engine/core/graphene/mutations.py:41
+#: engine/core/graphene/mutations.py:43
msgid "data to store in cache"
msgstr "Date de stocat în cache"
-#: engine/core/graphene/mutations.py:44
+#: engine/core/graphene/mutations.py:46
msgid "timeout in seconds to set the data for into the cache"
msgstr "Timeout în secunde pentru a seta datele în cache"
-#: engine/core/graphene/mutations.py:47
+#: engine/core/graphene/mutations.py:49
msgid "cached data"
msgstr "Date în cache"
-#: engine/core/graphene/mutations.py:62
+#: engine/core/graphene/mutations.py:64
msgid "camelized JSON data from the requested URL"
msgstr "Date JSON Camelizate de la URL-ul solicitat"
-#: engine/core/graphene/mutations.py:67 engine/core/views.py:257
+#: engine/core/graphene/mutations.py:69 engine/core/views.py:249
msgid "only URLs starting with http(s):// are allowed"
msgstr "Sunt permise numai URL-urile care încep cu http(s)://"
-#: engine/core/graphene/mutations.py:83
+#: engine/core/graphene/mutations.py:87
msgid "add a product to the order"
msgstr "Adăugați un produs la comandă"
-#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131
-#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287
+#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139
+#: engine/core/graphene/mutations.py:255 engine/core/graphene/mutations.py:307
#, python-brace-format
msgid "order {order_uuid} not found"
msgstr "Comanda {order_uuid} nu a fost găsită!"
-#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159
+#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167
msgid "remove a product from the order"
msgstr "Eliminați un produs din comandă"
-#: engine/core/graphene/mutations.py:137
+#: engine/core/graphene/mutations.py:145
msgid "remove all products from the order"
msgstr "Eliminați toate produsele din comandă"
-#: engine/core/graphene/mutations.py:182
+#: engine/core/graphene/mutations.py:190
msgid "buy an order"
msgstr "Cumpărați o comandă"
-#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265
+#: engine/core/graphene/mutations.py:221 engine/core/graphene/mutations.py:283
msgid "please provide either order_uuid or order_hr_id - mutually exclusive"
msgstr ""
"Vă rugăm să furnizați fie order_uuid sau order_hr_id - se exclud reciproc!"
-#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501
-#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712
+#: engine/core/graphene/mutations.py:250 engine/core/graphene/mutations.py:525
+#: engine/core/graphene/mutations.py:574 engine/core/viewsets.py:753
msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr "Metoda order.buy() a generat un tip greșit: {type(instance)!s}"
-#: engine/core/graphene/mutations.py:245
+#: engine/core/graphene/mutations.py:261
msgid "perform an action on a list of products in the order"
msgstr "Efectuați o acțiune asupra unei liste de produse din comandă"
-#: engine/core/graphene/mutations.py:250
+#: engine/core/graphene/mutations.py:266
msgid "remove/add"
msgstr "Eliminare/adăugare"
-#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323
+#: engine/core/graphene/mutations.py:302 engine/core/graphene/mutations.py:343
msgid "action must be either add or remove"
msgstr "Acțiunea trebuie să fie fie \"adăugare\" sau \"eliminare\"!"
-#: engine/core/graphene/mutations.py:293
+#: engine/core/graphene/mutations.py:313
msgid "perform an action on a list of products in the wishlist"
msgstr "Efectuați o acțiune pe o listă de produse din lista de dorințe"
-#: engine/core/graphene/mutations.py:311
+#: engine/core/graphene/mutations.py:331
msgid "please provide wishlist_uuid value"
msgstr "Vă rugăm să furnizați valoarea `wishlist_uuid`."
-#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404
-#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460
-#: engine/core/graphene/mutations.py:504
+#: engine/core/graphene/mutations.py:348 engine/core/graphene/mutations.py:424
+#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480
+#: engine/core/graphene/mutations.py:530
#, python-brace-format
msgid "wishlist {wishlist_uuid} not found"
msgstr "Wishlist {wishlist_uuid} nu a fost găsit!"
-#: engine/core/graphene/mutations.py:382
+#: engine/core/graphene/mutations.py:402
msgid "add a product to the wishlist"
msgstr "Adăugați un produs la comandă"
-#: engine/core/graphene/mutations.py:410
+#: engine/core/graphene/mutations.py:430
msgid "remove a product from the wishlist"
msgstr "Eliminați un produs din comandă"
-#: engine/core/graphene/mutations.py:438
+#: engine/core/graphene/mutations.py:458
msgid "remove all products from the wishlist"
msgstr "Eliminați un produs din comandă"
-#: engine/core/graphene/mutations.py:466
+#: engine/core/graphene/mutations.py:486
msgid "buy all products from the wishlist"
msgstr "Eliminați un produs din comandă"
-#: engine/core/graphene/mutations.py:510
+#: engine/core/graphene/mutations.py:536
msgid "buy a product"
msgstr "Cumpărați o comandă"
-#: engine/core/graphene/mutations.py:516
+#: engine/core/graphene/mutations.py:543
msgid ""
-"please send the attributes as the string formatted like "
-"attr1=value1,attr2=value2"
+"please send the attributes as the string formatted like attr1=value1,"
+"attr2=value2"
msgstr ""
"Vă rugăm să trimiteți atributele sub formă de șir format ca attr1=valoare1, "
"attr2=valoare2"
-#: engine/core/graphene/mutations.py:549
+#: engine/core/graphene/mutations.py:581
msgid "add or delete a feedback for orderproduct"
msgstr "Adăugați sau ștergeți un feedback pentru comandaprodus"
-#: engine/core/graphene/mutations.py:573
+#: engine/core/graphene/mutations.py:607
msgid "action must be either `add` or `remove`"
msgstr "Acțiunea trebuie să fie `add` sau `remove`!"
-#: engine/core/graphene/mutations.py:576
+#: engine/core/graphene/mutations.py:610
#, python-brace-format
msgid "order product {order_product_uuid} not found"
msgstr "Comandaprodus {order_product_uuid} nu a fost găsită!"
-#: engine/core/graphene/mutations.py:582
+#: engine/core/graphene/mutations.py:617
msgid "original address string provided by the user"
msgstr "Șirul de adrese original furnizat de utilizator"
-#: engine/core/graphene/mutations.py:618 engine/core/models.py:955
-#: engine/core/models.py:968 engine/core/models.py:1383
-#: engine/core/models.py:1412 engine/core/models.py:1437
-#: engine/core/viewsets.py:715
+#: engine/core/graphene/mutations.py:654 engine/core/models.py:978
+#: engine/core/models.py:991 engine/core/models.py:1435
+#: engine/core/models.py:1466 engine/core/models.py:1497
+#: engine/core/viewsets.py:760
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr "{name} nu există: {uuid}!"
-#: engine/core/graphene/mutations.py:632
+#: engine/core/graphene/mutations.py:668
msgid "limit must be between 1 and 10"
msgstr "Limita trebuie să fie între 1 și 10"
-#: engine/core/graphene/mutations.py:681
+#: engine/core/graphene/mutations.py:717
msgid "elasticsearch - works like a charm"
msgstr "ElasticSearch - funcționează ca un farmec"
#: engine/core/graphene/object_types.py:82
-#: engine/core/graphene/object_types.py:370
-#: engine/core/graphene/object_types.py:417 engine/core/models.py:772
-#: engine/core/models.py:1250 engine/core/models.py:1897
+#: engine/core/graphene/object_types.py:417
+#: engine/core/graphene/object_types.py:468 engine/core/models.py:795
+#: engine/core/models.py:1289 engine/core/models.py:2021
msgid "attributes"
msgstr "Atribute"
@@ -1286,92 +1292,91 @@ msgid "groups of attributes"
msgstr "Grupuri de atribute"
#: engine/core/graphene/object_types.py:116
-#: engine/core/graphene/object_types.py:193
-#: engine/core/graphene/object_types.py:223 engine/core/models.py:432
+#: engine/core/graphene/object_types.py:214
+#: engine/core/graphene/object_types.py:252 engine/core/models.py:451
msgid "categories"
msgstr "Categorii"
-#: engine/core/graphene/object_types.py:124 engine/core/models.py:503
+#: engine/core/graphene/object_types.py:132 engine/core/models.py:522
msgid "brands"
msgstr "Mărci"
-#: engine/core/graphene/object_types.py:195
+#: engine/core/graphene/object_types.py:216
msgid "category image url"
msgstr "Categorii"
-#: engine/core/graphene/object_types.py:196
-#: engine/core/graphene/object_types.py:317 engine/core/models.py:283
+#: engine/core/graphene/object_types.py:217
+#: engine/core/graphene/object_types.py:362 engine/core/models.py:289
msgid "markup percentage"
msgstr "Procentul de majorare"
-#: engine/core/graphene/object_types.py:199
+#: engine/core/graphene/object_types.py:221
msgid "which attributes and values can be used for filtering this category."
msgstr ""
"Atributele și valorile care pot fi utilizate pentru filtrarea acestei "
"categorii."
-#: engine/core/graphene/object_types.py:203
-msgid ""
-"minimum and maximum prices for products in this category, if available."
+#: engine/core/graphene/object_types.py:227
+msgid "minimum and maximum prices for products in this category, if available."
msgstr ""
-"Prețurile minime și maxime pentru produsele din această categorie, dacă sunt"
-" disponibile."
+"Prețurile minime și maxime pentru produsele din această categorie, dacă sunt "
+"disponibile."
-#: engine/core/graphene/object_types.py:205
+#: engine/core/graphene/object_types.py:231
msgid "tags for this category"
msgstr "Etichete pentru această categorie"
-#: engine/core/graphene/object_types.py:206
+#: engine/core/graphene/object_types.py:234
msgid "products in this category"
msgstr "Produse din această categorie"
-#: engine/core/graphene/object_types.py:324 engine/core/models.py:188
+#: engine/core/graphene/object_types.py:369 engine/core/models.py:194
msgid "vendors"
msgstr "Furnizori"
-#: engine/core/graphene/object_types.py:328
+#: engine/core/graphene/object_types.py:373
msgid "Latitude (Y coordinate)"
msgstr "Latitudine (coordonata Y)"
-#: engine/core/graphene/object_types.py:329
+#: engine/core/graphene/object_types.py:374
msgid "Longitude (X coordinate)"
msgstr "Longitudine (coordonata X)"
-#: engine/core/graphene/object_types.py:358
+#: engine/core/graphene/object_types.py:403
msgid "comment"
msgstr "Cum să"
-#: engine/core/graphene/object_types.py:359
-#: engine/core/graphene/object_types.py:483
+#: engine/core/graphene/object_types.py:405
+#: engine/core/graphene/object_types.py:539
msgid "rating value from 1 to 10, inclusive, or 0 if not set."
msgstr "Valoare nominală de la 1 la 10, inclusiv, sau 0 dacă nu este setată."
-#: engine/core/graphene/object_types.py:366
+#: engine/core/graphene/object_types.py:413
msgid "represents feedback from a user."
msgstr "Reprezintă feedback de la un utilizator."
-#: engine/core/graphene/object_types.py:371
-#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244
+#: engine/core/graphene/object_types.py:418
+#: engine/core/graphene/object_types.py:469 engine/core/models.py:1283
msgid "notifications"
msgstr "Notificări"
-#: engine/core/graphene/object_types.py:372
+#: engine/core/graphene/object_types.py:420
msgid "download url for this order product if applicable"
msgstr "URL de descărcare pentru acest produs de comandă, dacă este cazul"
-#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736
+#: engine/core/graphene/object_types.py:422 engine/core/models.py:1848
msgid "feedback"
msgstr "Feedback"
-#: engine/core/graphene/object_types.py:407
+#: engine/core/graphene/object_types.py:456
msgid "a list of order products in this order"
msgstr "O listă a produselor comandate în această comandă"
-#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214
+#: engine/core/graphene/object_types.py:458 engine/core/models.py:1253
msgid "billing address"
msgstr "Adresa de facturare"
-#: engine/core/graphene/object_types.py:412
+#: engine/core/graphene/object_types.py:462
msgid ""
"shipping address for this order, leave blank if same as billing address or "
"if not applicable"
@@ -1379,53 +1384,53 @@ msgstr ""
"Adresa de expediere pentru această comandă, lăsați în alb dacă este aceeași "
"cu adresa de facturare sau dacă nu se aplică"
-#: engine/core/graphene/object_types.py:414
+#: engine/core/graphene/object_types.py:465
msgid "total price of this order"
msgstr "Prețul total al acestei comenzi"
-#: engine/core/graphene/object_types.py:415
+#: engine/core/graphene/object_types.py:466
msgid "total quantity of products in order"
msgstr "Cantitatea totală de produse din comandă"
-#: engine/core/graphene/object_types.py:416
+#: engine/core/graphene/object_types.py:467
msgid "are all products in the order digital"
msgstr "Sunt toate produsele din comanda digitală"
-#: engine/core/graphene/object_types.py:419
+#: engine/core/graphene/object_types.py:471
msgid "transactions for this order"
msgstr "Tranzacții pentru această comandă"
-#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278
+#: engine/core/graphene/object_types.py:491 engine/core/models.py:1317
msgid "orders"
msgstr "Ordine"
-#: engine/core/graphene/object_types.py:459
+#: engine/core/graphene/object_types.py:512
msgid "image url"
msgstr "URL imagine"
-#: engine/core/graphene/object_types.py:466
+#: engine/core/graphene/object_types.py:519
msgid "product's images"
msgstr "Imagini ale produsului"
-#: engine/core/graphene/object_types.py:473 engine/core/models.py:431
-#: engine/core/models.py:586
+#: engine/core/graphene/object_types.py:526 engine/core/models.py:450
+#: engine/core/models.py:607
msgid "category"
msgstr "Categorie"
-#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737
+#: engine/core/graphene/object_types.py:528 engine/core/models.py:1849
msgid "feedbacks"
msgstr "Feedback-uri"
-#: engine/core/graphene/object_types.py:476 engine/core/models.py:502
-#: engine/core/models.py:595
+#: engine/core/graphene/object_types.py:529 engine/core/models.py:521
+#: engine/core/models.py:616
msgid "brand"
msgstr "Marca"
-#: engine/core/graphene/object_types.py:477 engine/core/models.py:106
+#: engine/core/graphene/object_types.py:531 engine/core/models.py:106
msgid "attribute groups"
msgstr "Grupuri de atribute"
-#: engine/core/graphene/object_types.py:478
+#: engine/core/graphene/object_types.py:533
#: engine/core/templates/digital_order_created_email.html:111
#: engine/core/templates/digital_order_delivered_email.html:109
#: engine/core/templates/shipped_order_created_email.html:109
@@ -1433,7 +1438,7 @@ msgstr "Grupuri de atribute"
msgid "price"
msgstr "Preț"
-#: engine/core/graphene/object_types.py:479
+#: engine/core/graphene/object_types.py:534
#: engine/core/templates/digital_order_created_email.html:110
#: engine/core/templates/digital_order_delivered_email.html:108
#: engine/core/templates/shipped_order_created_email.html:108
@@ -1441,39 +1446,39 @@ msgstr "Preț"
msgid "quantity"
msgstr "Cantitate"
-#: engine/core/graphene/object_types.py:480
+#: engine/core/graphene/object_types.py:535
msgid "number of feedbacks"
msgstr "Numărul de reacții"
-#: engine/core/graphene/object_types.py:481
+#: engine/core/graphene/object_types.py:536
msgid "only available for personal orders"
msgstr "Produse disponibile numai pentru comenzi personale"
-#: engine/core/graphene/object_types.py:484
+#: engine/core/graphene/object_types.py:541
msgid "discount price"
msgstr "Preț redus"
-#: engine/core/graphene/object_types.py:508 engine/core/models.py:658
+#: engine/core/graphene/object_types.py:565 engine/core/models.py:679
msgid "products"
msgstr "Produse"
-#: engine/core/graphene/object_types.py:611
+#: engine/core/graphene/object_types.py:675
msgid "promocodes"
msgstr "Coduri promoționale"
-#: engine/core/graphene/object_types.py:621
+#: engine/core/graphene/object_types.py:690
msgid "products on sale"
msgstr "Produse scoase la vânzare"
-#: engine/core/graphene/object_types.py:628 engine/core/models.py:904
+#: engine/core/graphene/object_types.py:698 engine/core/models.py:927
msgid "promotions"
msgstr "Promoții"
-#: engine/core/graphene/object_types.py:632 engine/core/models.py:187
+#: engine/core/graphene/object_types.py:702 engine/core/models.py:193
msgid "vendor"
msgstr "Furnizor"
-#: engine/core/graphene/object_types.py:633 engine/core/models.py:657
+#: engine/core/graphene/object_types.py:703 engine/core/models.py:678
#: engine/core/templates/digital_order_created_email.html:109
#: engine/core/templates/digital_order_delivered_email.html:107
#: engine/core/templates/shipped_order_created_email.html:107
@@ -1481,100 +1486,100 @@ msgstr "Furnizor"
msgid "product"
msgstr "Produs"
-#: engine/core/graphene/object_types.py:644 engine/core/models.py:927
+#: engine/core/graphene/object_types.py:715 engine/core/models.py:950
msgid "wishlisted products"
msgstr "Produse dorite"
-#: engine/core/graphene/object_types.py:650 engine/core/models.py:944
+#: engine/core/graphene/object_types.py:722 engine/core/models.py:967
msgid "wishlists"
msgstr "Liste de dorințe"
-#: engine/core/graphene/object_types.py:654
+#: engine/core/graphene/object_types.py:727
msgid "tagged products"
msgstr "Produse etichetate"
-#: engine/core/graphene/object_types.py:661 engine/core/models.py:224
-#: engine/core/models.py:601
+#: engine/core/graphene/object_types.py:735 engine/core/models.py:230
+#: engine/core/models.py:622
msgid "product tags"
msgstr "Etichete de produs"
-#: engine/core/graphene/object_types.py:665
+#: engine/core/graphene/object_types.py:740
msgid "tagged categories"
msgstr "Categorii etichetate"
-#: engine/core/graphene/object_types.py:672
+#: engine/core/graphene/object_types.py:748
msgid "categories tags"
msgstr "Etichete \"Categorii"
-#: engine/core/graphene/object_types.py:676
+#: engine/core/graphene/object_types.py:752
msgid "project name"
msgstr "Numele proiectului"
-#: engine/core/graphene/object_types.py:677
+#: engine/core/graphene/object_types.py:753
msgid "company name"
msgstr "Numele companiei"
-#: engine/core/graphene/object_types.py:678
+#: engine/core/graphene/object_types.py:754
msgid "company address"
msgstr "Adresa companiei"
-#: engine/core/graphene/object_types.py:679
+#: engine/core/graphene/object_types.py:755
msgid "company phone number"
msgstr "Numărul de telefon al companiei"
-#: engine/core/graphene/object_types.py:680
+#: engine/core/graphene/object_types.py:758
msgid "email from, sometimes it must be used instead of host user value"
msgstr ""
"\"e-mail de la\", uneori trebuie să fie utilizat în locul valorii "
"utilizatorului gazdă"
-#: engine/core/graphene/object_types.py:681
+#: engine/core/graphene/object_types.py:761
msgid "email host user"
msgstr "Utilizator gazdă e-mail"
-#: engine/core/graphene/object_types.py:682
+#: engine/core/graphene/object_types.py:762
msgid "maximum amount for payment"
msgstr "Suma maximă pentru plată"
-#: engine/core/graphene/object_types.py:683
+#: engine/core/graphene/object_types.py:763
msgid "minimum amount for payment"
msgstr "Suma minimă pentru plată"
-#: engine/core/graphene/object_types.py:684
+#: engine/core/graphene/object_types.py:764
msgid "analytics data"
msgstr "Date analitice"
-#: engine/core/graphene/object_types.py:685
+#: engine/core/graphene/object_types.py:765
msgid "advertisement data"
msgstr "Date publicitare"
-#: engine/core/graphene/object_types.py:688
+#: engine/core/graphene/object_types.py:768
msgid "company configuration"
msgstr "Configurație"
-#: engine/core/graphene/object_types.py:692
+#: engine/core/graphene/object_types.py:772
msgid "language code"
msgstr "Codul limbii"
-#: engine/core/graphene/object_types.py:693
+#: engine/core/graphene/object_types.py:773
msgid "language name"
msgstr "Numele limbii"
-#: engine/core/graphene/object_types.py:694
+#: engine/core/graphene/object_types.py:774
msgid "language flag, if exists :)"
msgstr "Indicatorul de limbă, dacă există :)"
-#: engine/core/graphene/object_types.py:697
+#: engine/core/graphene/object_types.py:777
msgid "supported languages"
msgstr "Obțineți o listă a limbilor acceptate"
-#: engine/core/graphene/object_types.py:728
-#: engine/core/graphene/object_types.py:729
-#: engine/core/graphene/object_types.py:730
+#: engine/core/graphene/object_types.py:809
+#: engine/core/graphene/object_types.py:812
+#: engine/core/graphene/object_types.py:815
msgid "products search results"
msgstr "Rezultate căutare produse"
-#: engine/core/graphene/object_types.py:731
+#: engine/core/graphene/object_types.py:817
msgid "posts search results"
msgstr "Rezultate căutare produse"
@@ -1587,8 +1592,8 @@ msgid ""
msgstr ""
"Reprezintă un grup de atribute, care poate fi ierarhic. Această clasă este "
"utilizată pentru gestionarea și organizarea grupurilor de atribute. Un grup "
-"de atribute poate avea un grup părinte, formând o structură ierarhică. Acest"
-" lucru poate fi util pentru clasificarea și gestionarea mai eficientă a "
+"de atribute poate avea un grup părinte, formând o structură ierarhică. Acest "
+"lucru poate fi util pentru clasificarea și gestionarea mai eficientă a "
"atributelor în cadrul unui sistem complex."
#: engine/core/models.py:91
@@ -1603,7 +1608,7 @@ msgstr "Grup de atribute părinte"
msgid "attribute group's name"
msgstr "Numele grupului de atribute"
-#: engine/core/models.py:105 engine/core/models.py:734
+#: engine/core/models.py:105 engine/core/models.py:755
msgid "attribute group"
msgstr "Grup de atribute"
@@ -1626,50 +1631,50 @@ msgstr ""
"metadate și constrângeri suplimentare, ceea ce îl face potrivit pentru "
"utilizarea în sisteme care interacționează cu furnizori terți."
-#: engine/core/models.py:124
+#: engine/core/models.py:125
msgid "stores credentials and endpoints required for vendor communication"
msgstr ""
"Stochează acreditările și punctele finale necesare pentru comunicarea API a "
"furnizorului"
-#: engine/core/models.py:125
+#: engine/core/models.py:127
msgid "authentication info"
msgstr "Informații privind autentificarea"
-#: engine/core/models.py:130
+#: engine/core/models.py:132
msgid "define the markup for products retrieved from this vendor"
msgstr ""
"Definirea marjei de profit pentru produsele preluate de la acest furnizor"
-#: engine/core/models.py:131
+#: engine/core/models.py:133
msgid "vendor markup percentage"
msgstr "Procentul de majorare al furnizorului"
-#: engine/core/models.py:135
+#: engine/core/models.py:137
msgid "name of this vendor"
msgstr "Numele acestui vânzător"
-#: engine/core/models.py:136
+#: engine/core/models.py:138
msgid "vendor name"
msgstr "Numele furnizorului"
-#: engine/core/models.py:147
+#: engine/core/models.py:153
msgid "response file"
msgstr "fișier de răspuns"
-#: engine/core/models.py:148
+#: engine/core/models.py:154
msgid "vendor's last processing response"
msgstr "ultimul răspuns de prelucrare al vânzătorului"
-#: engine/core/models.py:154
+#: engine/core/models.py:160
msgid "vendor's integration file path"
msgstr "Calea fișierului de integrare al furnizorului"
-#: engine/core/models.py:155
+#: engine/core/models.py:161
msgid "integration path"
msgstr "Calea de integrare"
-#: engine/core/models.py:197
+#: engine/core/models.py:203
msgid ""
"Represents a product tag used for classifying or identifying products. The "
"ProductTag class is designed to uniquely identify and classify products "
@@ -1684,27 +1689,27 @@ msgstr ""
"Aceasta acceptă operațiuni exportate prin mixins și oferă personalizarea "
"metadatelor în scopuri administrative."
-#: engine/core/models.py:209 engine/core/models.py:240
+#: engine/core/models.py:215 engine/core/models.py:246
msgid "internal tag identifier for the product tag"
msgstr "Identificator intern de etichetă pentru eticheta produsului"
-#: engine/core/models.py:210 engine/core/models.py:241
+#: engine/core/models.py:216 engine/core/models.py:247
msgid "tag name"
msgstr "Nume etichetă"
-#: engine/core/models.py:214 engine/core/models.py:245
+#: engine/core/models.py:220 engine/core/models.py:251
msgid "user-friendly name for the product tag"
msgstr "Nume ușor de utilizat pentru eticheta produsului"
-#: engine/core/models.py:215 engine/core/models.py:246
+#: engine/core/models.py:221 engine/core/models.py:252
msgid "tag display name"
msgstr "Nume afișare etichetă"
-#: engine/core/models.py:223
+#: engine/core/models.py:229
msgid "product tag"
msgstr "Etichetă produs"
-#: engine/core/models.py:229
+#: engine/core/models.py:235
msgid ""
"Represents a category tag used for products. This class models a category "
"tag that can be used to associate and classify products. It includes "
@@ -1712,18 +1717,18 @@ msgid ""
msgstr ""
"Reprezintă o etichetă de categorie utilizată pentru produse. Această clasă "
"modelează o etichetă de categorie care poate fi utilizată pentru asocierea "
-"și clasificarea produselor. Aceasta include atribute pentru un identificator"
-" intern al etichetei și un nume de afișare ușor de utilizat."
+"și clasificarea produselor. Aceasta include atribute pentru un identificator "
+"intern al etichetei și un nume de afișare ușor de utilizat."
-#: engine/core/models.py:254
+#: engine/core/models.py:260
msgid "category tag"
msgstr "etichetă de categorie"
-#: engine/core/models.py:255 engine/core/models.py:327
+#: engine/core/models.py:261 engine/core/models.py:333
msgid "category tags"
msgstr "Etichete de categorie"
-#: engine/core/models.py:260
+#: engine/core/models.py:266
msgid ""
"Represents a category entity to organize and group related items in a "
"hierarchical structure. Categories may have hierarchical relationships with "
@@ -1741,113 +1746,111 @@ msgstr ""
"include câmpuri pentru metadate și reprezentare vizuală, care servesc drept "
"bază pentru caracteristicile legate de categorie. Această clasă este "
"utilizată de obicei pentru a defini și gestiona categoriile de produse sau "
-"alte grupări similare în cadrul unei aplicații, permițând utilizatorilor sau"
-" administratorilor să specifice numele, descrierea și ierarhia categoriilor,"
-" precum și să atribuie atribute precum imagini, etichete sau prioritate."
+"alte grupări similare în cadrul unei aplicații, permițând utilizatorilor sau "
+"administratorilor să specifice numele, descrierea și ierarhia categoriilor, "
+"precum și să atribuie atribute precum imagini, etichete sau prioritate."
-#: engine/core/models.py:274
+#: engine/core/models.py:280
msgid "upload an image representing this category"
msgstr "Încărcați o imagine care reprezintă această categorie"
-#: engine/core/models.py:277
+#: engine/core/models.py:283
msgid "category image"
msgstr "Categorie imagine"
-#: engine/core/models.py:282
+#: engine/core/models.py:288
msgid "define a markup percentage for products in this category"
-msgstr ""
-"Definiți un procent de majorare pentru produsele din această categorie"
+msgstr "Definiți un procent de majorare pentru produsele din această categorie"
-#: engine/core/models.py:291
+#: engine/core/models.py:297
msgid "parent of this category to form a hierarchical structure"
msgstr "Părinte al acestei categorii pentru a forma o structură ierarhică"
-#: engine/core/models.py:292
+#: engine/core/models.py:298
msgid "parent category"
msgstr "Categoria de părinți"
-#: engine/core/models.py:297
+#: engine/core/models.py:303
msgid "category name"
msgstr "Numele categoriei"
-#: engine/core/models.py:298
+#: engine/core/models.py:304
msgid "provide a name for this category"
msgstr "Furnizați un nume pentru această categorie"
-#: engine/core/models.py:305
+#: engine/core/models.py:311
msgid "add a detailed description for this category"
msgstr "Adăugați o descriere detaliată pentru această categorie"
-#: engine/core/models.py:306
+#: engine/core/models.py:312
msgid "category description"
msgstr "Descriere categorie"
-#: engine/core/models.py:326
+#: engine/core/models.py:332
msgid "tags that help describe or group this category"
msgstr "etichete care ajută la descrierea sau gruparea acestei categorii"
-#: engine/core/models.py:333 engine/core/models.py:495
+#: engine/core/models.py:339 engine/core/models.py:514
msgid "priority"
msgstr "Prioritate"
-#: engine/core/models.py:438
+#: engine/core/models.py:457
msgid ""
"Represents a Brand object in the system. This class handles information and "
"attributes related to a brand, including its name, logos, description, "
"associated categories, a unique slug, and priority order. It allows for the "
-"organization and representation of brand-related data within the "
-"application."
+"organization and representation of brand-related data within the application."
msgstr ""
-"Reprezintă un obiect Brand în sistem. Această clasă gestionează informațiile"
-" și atributele legate de o marcă, inclusiv numele acesteia, logo-urile, "
+"Reprezintă un obiect Brand în sistem. Această clasă gestionează informațiile "
+"și atributele legate de o marcă, inclusiv numele acesteia, logo-urile, "
"descrierea, categoriile asociate, un slug unic și ordinea de prioritate. "
"Aceasta permite organizarea și reprezentarea datelor legate de marcă în "
"cadrul aplicației."
-#: engine/core/models.py:448
+#: engine/core/models.py:467
msgid "name of this brand"
msgstr "Denumirea acestui brand"
-#: engine/core/models.py:449
+#: engine/core/models.py:468
msgid "brand name"
msgstr "Nume de marcă"
-#: engine/core/models.py:456
+#: engine/core/models.py:475
msgid "upload a logo representing this brand"
msgstr "Încărcați un logo care reprezintă acest brand"
-#: engine/core/models.py:458
+#: engine/core/models.py:477
msgid "brand small image"
msgstr "Brand imagine mică"
-#: engine/core/models.py:464
+#: engine/core/models.py:483
msgid "upload a big logo representing this brand"
msgstr "Încărcați un logo mare care reprezintă acest brand"
-#: engine/core/models.py:466
+#: engine/core/models.py:485
msgid "brand big image"
msgstr "Imagine de marcă mare"
-#: engine/core/models.py:471
+#: engine/core/models.py:490
msgid "add a detailed description of the brand"
msgstr "Adăugați o descriere detaliată a mărcii"
-#: engine/core/models.py:472
+#: engine/core/models.py:491
msgid "brand description"
msgstr "Descrierea mărcii"
-#: engine/core/models.py:477
+#: engine/core/models.py:496
msgid "optional categories that this brand is associated with"
msgstr "Categorii opționale cu care acest brand este asociat"
-#: engine/core/models.py:478
+#: engine/core/models.py:497
msgid "associated categories"
msgstr "Categorii"
-#: engine/core/models.py:508
+#: engine/core/models.py:527
msgid ""
-"Represents the stock of a product managed in the system. This class provides"
-" details about the relationship between vendors, products, and their stock "
+"Represents the stock of a product managed in the system. This class provides "
+"details about the relationship between vendors, products, and their stock "
"information, as well as inventory-related properties like price, purchase "
"price, quantity, SKU, and digital assets. It is part of the inventory "
"management system to allow tracking and evaluation of products available "
@@ -1860,72 +1863,72 @@ msgstr ""
"parte din sistemul de gestionare a stocurilor pentru a permite urmărirea și "
"evaluarea produselor disponibile de la diverși furnizori."
-#: engine/core/models.py:520
+#: engine/core/models.py:539
msgid "the vendor supplying this product stock"
msgstr "Furnizorul care furnizează acest stoc de produse"
-#: engine/core/models.py:521
+#: engine/core/models.py:540
msgid "associated vendor"
msgstr "Furnizor asociat"
-#: engine/core/models.py:525
+#: engine/core/models.py:544
msgid "final price to the customer after markups"
msgstr "Prețul final pentru client după majorări"
-#: engine/core/models.py:526
+#: engine/core/models.py:545
msgid "selling price"
msgstr "Prețul de vânzare"
-#: engine/core/models.py:531
+#: engine/core/models.py:550
msgid "the product associated with this stock entry"
msgstr "Produsul asociat cu această intrare în stoc"
-#: engine/core/models.py:532 engine/core/models.py:797
-#: engine/core/models.py:843 engine/core/models.py:1792
+#: engine/core/models.py:551 engine/core/models.py:820
+#: engine/core/models.py:866 engine/core/models.py:1904
msgid "associated product"
msgstr "Produs asociat"
-#: engine/core/models.py:539
+#: engine/core/models.py:558
msgid "the price paid to the vendor for this product"
msgstr "Prețul plătit vânzătorului pentru acest produs"
-#: engine/core/models.py:540
+#: engine/core/models.py:559
msgid "vendor purchase price"
msgstr "Prețul de achiziție al furnizorului"
-#: engine/core/models.py:544
+#: engine/core/models.py:563
msgid "available quantity of the product in stock"
msgstr "Cantitatea disponibilă a produsului în stoc"
-#: engine/core/models.py:545
+#: engine/core/models.py:564
msgid "quantity in stock"
msgstr "Cantitate în stoc"
-#: engine/core/models.py:549
+#: engine/core/models.py:568
msgid "vendor-assigned SKU for identifying the product"
msgstr "SKU atribuit de furnizor pentru identificarea produsului"
-#: engine/core/models.py:550
+#: engine/core/models.py:569
msgid "vendor sku"
msgstr "SKU al furnizorului"
-#: engine/core/models.py:556
+#: engine/core/models.py:575
msgid "digital file associated with this stock if applicable"
msgstr "Fișier digital asociat cu acest stoc, dacă este cazul"
-#: engine/core/models.py:557
+#: engine/core/models.py:576
msgid "digital file"
msgstr "Fișier digital"
-#: engine/core/models.py:560
+#: engine/core/models.py:580
msgid "system attributes"
msgstr "Atribute de sistem"
-#: engine/core/models.py:567
+#: engine/core/models.py:588
msgid "stock entries"
msgstr "Intrări pe stoc"
-#: engine/core/models.py:572
+#: engine/core/models.py:593
msgid ""
"Represents a product with attributes such as category, brand, tags, digital "
"status, name, description, part number, and slug. Provides related utility "
@@ -1936,166 +1939,166 @@ msgid ""
"properties to improve performance. It is used to define and manipulate "
"product data and its associated information within an application."
msgstr ""
-"Reprezintă un produs cu atribute precum categoria, marca, etichetele, starea"
-" digitală, numele, descrierea, numărul piesei și slug-ul. Oferă proprietăți "
+"Reprezintă un produs cu atribute precum categoria, marca, etichetele, starea "
+"digitală, numele, descrierea, numărul piesei și slug-ul. Oferă proprietăți "
"utilitare conexe pentru a prelua evaluări, numărul de comentarii, prețul, "
"cantitatea și comenzile totale. Concepută pentru a fi utilizată într-un "
"sistem care gestionează comerțul electronic sau inventarul. Această clasă "
"interacționează cu modele conexe (cum ar fi Category, Brand și ProductTag) "
-"și gestionează memoria cache pentru proprietățile accesate frecvent pentru a"
-" îmbunătăți performanța. Este utilizată pentru a defini și manipula datele "
+"și gestionează memoria cache pentru proprietățile accesate frecvent pentru a "
+"îmbunătăți performanța. Este utilizată pentru a defini și manipula datele "
"despre produse și informațiile asociate acestora în cadrul unei aplicații."
-#: engine/core/models.py:585
+#: engine/core/models.py:606
msgid "category this product belongs to"
msgstr "Categoria din care face parte acest produs"
-#: engine/core/models.py:594
+#: engine/core/models.py:615
msgid "optionally associate this product with a brand"
msgstr "Opțional, asociați acest produs cu un brand"
-#: engine/core/models.py:600
+#: engine/core/models.py:621
msgid "tags that help describe or group this product"
msgstr "Etichete care ajută la descrierea sau gruparea acestui produs"
-#: engine/core/models.py:605
+#: engine/core/models.py:626
msgid "indicates whether this product is digitally delivered"
msgstr "Indică dacă acest produs este livrat digital"
-#: engine/core/models.py:606
+#: engine/core/models.py:627
msgid "is product digital"
msgstr "Produsul este digital"
-#: engine/core/models.py:612
+#: engine/core/models.py:633
msgid "provide a clear identifying name for the product"
msgstr "Furnizați o denumire clară de identificare a produsului"
-#: engine/core/models.py:613
+#: engine/core/models.py:634
msgid "product name"
msgstr "Denumirea produsului"
-#: engine/core/models.py:619 engine/core/models.py:892
+#: engine/core/models.py:640 engine/core/models.py:915
msgid "add a detailed description of the product"
msgstr "Adăugați o descriere detaliată a produsului"
-#: engine/core/models.py:620
+#: engine/core/models.py:641
msgid "product description"
msgstr "Descrierea produsului"
-#: engine/core/models.py:627
+#: engine/core/models.py:648
msgid "part number for this product"
msgstr "Numărul piesei pentru acest produs"
-#: engine/core/models.py:628
+#: engine/core/models.py:649
msgid "part number"
msgstr "Numărul piesei"
-#: engine/core/models.py:647
+#: engine/core/models.py:668
msgid "stock keeping unit for this product"
msgstr "Stock Keeping Unit pentru acest produs"
-#: engine/core/models.py:720
+#: engine/core/models.py:741
msgid ""
"Represents an attribute in the system. This class is used to define and "
"manage attributes, which are customizable pieces of data that can be "
"associated with other entities. Attributes have associated categories, "
-"groups, value types, and names. The model supports multiple types of values,"
-" including string, integer, float, boolean, array, and object. This allows "
+"groups, value types, and names. The model supports multiple types of values, "
+"including string, integer, float, boolean, array, and object. This allows "
"for dynamic and flexible data structuring."
msgstr ""
"Reprezintă un atribut în sistem. Această clasă este utilizată pentru "
"definirea și gestionarea atributelor, care sunt elemente de date "
"personalizabile care pot fi asociate cu alte entități. Atributele au "
"asociate categorii, grupuri, tipuri de valori și nume. Modelul acceptă mai "
-"multe tipuri de valori, inclusiv șir, număr întreg, float, boolean, array și"
-" obiect. Acest lucru permite structurarea dinamică și flexibilă a datelor."
+"multe tipuri de valori, inclusiv șir, număr întreg, float, boolean, array și "
+"obiect. Acest lucru permite structurarea dinamică și flexibilă a datelor."
-#: engine/core/models.py:733
+#: engine/core/models.py:754
msgid "group of this attribute"
msgstr "Grupul acestui atribut"
-#: engine/core/models.py:739
+#: engine/core/models.py:760
msgid "string"
msgstr "Șir de caractere"
-#: engine/core/models.py:740
+#: engine/core/models.py:761
msgid "integer"
msgstr "Număr întreg"
-#: engine/core/models.py:741
+#: engine/core/models.py:762
msgid "float"
msgstr "Float"
-#: engine/core/models.py:742
+#: engine/core/models.py:763
msgid "boolean"
msgstr "Boolean"
-#: engine/core/models.py:743
+#: engine/core/models.py:764
msgid "array"
msgstr "Array"
-#: engine/core/models.py:744
+#: engine/core/models.py:765
msgid "object"
msgstr "Obiect"
-#: engine/core/models.py:746
+#: engine/core/models.py:767
msgid "type of the attribute's value"
msgstr "Tipul valorii atributului"
-#: engine/core/models.py:747
+#: engine/core/models.py:768
msgid "value type"
msgstr "Tipul de valoare"
-#: engine/core/models.py:752
+#: engine/core/models.py:773
msgid "name of this attribute"
msgstr "Denumirea acestui atribut"
-#: engine/core/models.py:753
+#: engine/core/models.py:774
msgid "attribute's name"
msgstr "Numele atributului"
-#: engine/core/models.py:758
+#: engine/core/models.py:779
msgid "is filterable"
msgstr "este filtrabil"
-#: engine/core/models.py:759
+#: engine/core/models.py:781
msgid "designates whether this attribute can be used for filtering or not"
msgstr ""
"Atributele și valorile care pot fi utilizate pentru filtrarea acestei "
"categorii."
-#: engine/core/models.py:771 engine/core/models.py:789
+#: engine/core/models.py:794 engine/core/models.py:812
#: engine/core/templates/digital_order_delivered_email.html:134
msgid "attribute"
msgstr "Atribut"
-#: engine/core/models.py:777
+#: engine/core/models.py:800
msgid ""
-"Represents a specific value for an attribute that is linked to a product. It"
-" links the 'attribute' to a unique 'value', allowing better organization and"
-" dynamic representation of product characteristics."
+"Represents a specific value for an attribute that is linked to a product. It "
+"links the 'attribute' to a unique 'value', allowing better organization and "
+"dynamic representation of product characteristics."
msgstr ""
"Reprezintă o valoare specifică pentru un atribut care este legat de un "
"produs. Leagă \"atributul\" de o \"valoare\" unică, permițând o mai bună "
"organizare și reprezentare dinamică a caracteristicilor produsului."
-#: engine/core/models.py:788
+#: engine/core/models.py:811
msgid "attribute of this value"
msgstr "Atributul acestei valori"
-#: engine/core/models.py:796
+#: engine/core/models.py:819
msgid "the specific product associated with this attribute's value"
msgstr "Produsul specific asociat cu valoarea acestui atribut"
-#: engine/core/models.py:802
+#: engine/core/models.py:825
msgid "the specific value for this attribute"
msgstr "Valoarea specifică pentru acest atribut"
-#: engine/core/models.py:815
+#: engine/core/models.py:838
msgid ""
"Represents a product image associated with a product in the system. This "
-"class is designed to manage images for products, including functionality for"
-" uploading image files, associating them with specific products, and "
+"class is designed to manage images for products, including functionality for "
+"uploading image files, associating them with specific products, and "
"determining their display order. It also includes an accessibility feature "
"with alternative text for the images."
msgstr ""
@@ -2106,46 +2109,46 @@ msgstr ""
"asemenea, include o funcție de accesibilitate cu text alternativ pentru "
"imagini."
-#: engine/core/models.py:826
+#: engine/core/models.py:849
msgid "provide alternative text for the image for accessibility"
msgstr "Furnizați text alternativ pentru imagine pentru accesibilitate"
-#: engine/core/models.py:827
+#: engine/core/models.py:850
msgid "image alt text"
msgstr "Textul alt al imaginii"
-#: engine/core/models.py:830
+#: engine/core/models.py:853
msgid "upload the image file for this product"
msgstr "Încărcați fișierul de imagine pentru acest produs"
-#: engine/core/models.py:831 engine/core/models.py:862
+#: engine/core/models.py:854 engine/core/models.py:885
msgid "product image"
msgstr "Imaginea produsului"
-#: engine/core/models.py:836
+#: engine/core/models.py:859
msgid "determines the order in which images are displayed"
msgstr "Determină ordinea în care sunt afișate imaginile"
-#: engine/core/models.py:837
+#: engine/core/models.py:860
msgid "display priority"
msgstr "Prioritatea afișării"
-#: engine/core/models.py:842
+#: engine/core/models.py:865
msgid "the product that this image represents"
msgstr "Produsul pe care îl reprezintă această imagine"
-#: engine/core/models.py:863
+#: engine/core/models.py:886
msgid "product images"
msgstr "Imagini ale produsului"
-#: engine/core/models.py:868
+#: engine/core/models.py:891
msgid ""
"Represents a promotional campaign for products with a discount. This class "
"is used to define and manage promotional campaigns that offer a percentage-"
"based discount for products. The class includes attributes for setting the "
"discount rate, providing details about the promotion, and linking it to the "
-"applicable products. It integrates with the product catalog to determine the"
-" affected items in the campaign."
+"applicable products. It integrates with the product catalog to determine the "
+"affected items in the campaign."
msgstr ""
"Reprezintă o campanie promoțională pentru produse cu o reducere. Această "
"clasă este utilizată pentru a defini și gestiona campanii promoționale care "
@@ -2154,75 +2157,75 @@ msgstr ""
"asocierea acesteia la produsele aplicabile. Se integrează cu catalogul de "
"produse pentru a determina articolele afectate în cadrul campaniei."
-#: engine/core/models.py:880
+#: engine/core/models.py:903
msgid "percentage discount for the selected products"
msgstr "Procentul de reducere pentru produsele selectate"
-#: engine/core/models.py:881
+#: engine/core/models.py:904
msgid "discount percentage"
msgstr "Procent de reducere"
-#: engine/core/models.py:886
+#: engine/core/models.py:909
msgid "provide a unique name for this promotion"
msgstr "Furnizați un nume unic pentru această promoție"
-#: engine/core/models.py:887
+#: engine/core/models.py:910
msgid "promotion name"
msgstr "Numele promoției"
-#: engine/core/models.py:893
+#: engine/core/models.py:916
msgid "promotion description"
msgstr "Descrierea promoției"
-#: engine/core/models.py:898
+#: engine/core/models.py:921
msgid "select which products are included in this promotion"
msgstr "Selectați ce produse sunt incluse în această promoție"
-#: engine/core/models.py:899
+#: engine/core/models.py:922
msgid "included products"
msgstr "Produse incluse"
-#: engine/core/models.py:903
+#: engine/core/models.py:926
msgid "promotion"
msgstr "Promovare"
-#: engine/core/models.py:914
+#: engine/core/models.py:937
msgid ""
"Represents a user's wishlist for storing and managing desired products. The "
"class provides functionality to manage a collection of products, supporting "
"operations such as adding and removing products, as well as supporting "
"operations for adding and removing multiple products at once."
msgstr ""
-"Reprezintă lista de dorințe a unui utilizator pentru stocarea și gestionarea"
-" produselor dorite. Clasa oferă funcționalitatea de a gestiona o colecție de"
-" produse, suportând operațiuni precum adăugarea și eliminarea de produse, "
+"Reprezintă lista de dorințe a unui utilizator pentru stocarea și gestionarea "
+"produselor dorite. Clasa oferă funcționalitatea de a gestiona o colecție de "
+"produse, suportând operațiuni precum adăugarea și eliminarea de produse, "
"precum și operațiuni pentru adăugarea și eliminarea mai multor produse "
"simultan."
-#: engine/core/models.py:926
+#: engine/core/models.py:949
msgid "products that the user has marked as wanted"
msgstr "Produse pe care utilizatorul le-a marcat ca fiind dorite"
-#: engine/core/models.py:934
+#: engine/core/models.py:957
msgid "user who owns this wishlist"
msgstr "Utilizatorul care deține această listă de dorințe"
-#: engine/core/models.py:935
+#: engine/core/models.py:958
msgid "wishlist owner"
msgstr "Proprietarul listei de dorințe"
-#: engine/core/models.py:943
+#: engine/core/models.py:966
msgid "wishlist"
msgstr "Lista dorințelor"
-#: engine/core/models.py:985
+#: engine/core/models.py:1008
msgid ""
"Represents a documentary record tied to a product. This class is used to "
"store information about documentaries related to specific products, "
"including file uploads and their metadata. It contains methods and "
"properties to handle the file type and storage path for the documentary "
-"files. It extends functionality from specific mixins and provides additional"
-" custom features."
+"files. It extends functionality from specific mixins and provides additional "
+"custom features."
msgstr ""
"Reprezintă o înregistrare documentară legată de un produs. Această clasă "
"este utilizată pentru a stoca informații despre documentarele legate de "
@@ -2232,28 +2235,28 @@ msgstr ""
"funcționalitatea mixinilor specifici și oferă caracteristici personalizate "
"suplimentare."
-#: engine/core/models.py:998
+#: engine/core/models.py:1023
msgid "documentary"
msgstr "Documentar"
-#: engine/core/models.py:999
+#: engine/core/models.py:1024
msgid "documentaries"
msgstr "Documentare"
-#: engine/core/models.py:1009
+#: engine/core/models.py:1034
msgid "unresolved"
msgstr "Nerezolvat"
-#: engine/core/models.py:1014
+#: engine/core/models.py:1039
msgid ""
-"Represents an address entity that includes location details and associations"
-" with a user. Provides functionality for geographic and address data "
-"storage, as well as integration with geocoding services. This class is "
-"designed to store detailed address information including components like "
-"street, city, region, country, and geolocation (longitude and latitude). It "
-"supports integration with geocoding APIs, enabling the storage of raw API "
-"responses for further processing or inspection. The class also allows "
-"associating an address with a user, facilitating personalized data handling."
+"Represents an address entity that includes location details and associations "
+"with a user. Provides functionality for geographic and address data storage, "
+"as well as integration with geocoding services. This class is designed to "
+"store detailed address information including components like street, city, "
+"region, country, and geolocation (longitude and latitude). It supports "
+"integration with geocoding APIs, enabling the storage of raw API responses "
+"for further processing or inspection. The class also allows associating an "
+"address with a user, facilitating personalized data handling."
msgstr ""
"Reprezintă o entitate de adresă care include detalii despre locație și "
"asocieri cu un utilizator. Oferă funcționalitate pentru stocarea datelor "
@@ -2263,62 +2266,61 @@ msgstr ""
"geolocalizarea (longitudine și latitudine). Aceasta suportă integrarea cu "
"API-urile de geocodare, permițând stocarea răspunsurilor API brute pentru "
"procesare sau inspecție ulterioară. De asemenea, clasa permite asocierea "
-"unei adrese cu un utilizator, facilitând gestionarea personalizată a "
-"datelor."
+"unei adrese cu un utilizator, facilitând gestionarea personalizată a datelor."
-#: engine/core/models.py:1029
+#: engine/core/models.py:1054
msgid "address line for the customer"
msgstr "Linia de adresă pentru client"
-#: engine/core/models.py:1030
+#: engine/core/models.py:1055
msgid "address line"
msgstr "Linia de adresă"
-#: engine/core/models.py:1032
+#: engine/core/models.py:1057
msgid "street"
msgstr "Strada"
-#: engine/core/models.py:1033
+#: engine/core/models.py:1058
msgid "district"
msgstr "Districtul"
-#: engine/core/models.py:1034
+#: engine/core/models.py:1059
msgid "city"
msgstr "Oraș"
-#: engine/core/models.py:1035
+#: engine/core/models.py:1060
msgid "region"
msgstr "Regiunea"
-#: engine/core/models.py:1036
+#: engine/core/models.py:1061
msgid "postal code"
msgstr "Cod poștal"
-#: engine/core/models.py:1037
+#: engine/core/models.py:1062
msgid "country"
msgstr "Țara"
-#: engine/core/models.py:1044
+#: engine/core/models.py:1069
msgid "geolocation point: (longitude, latitude)"
msgstr "Punct de geolocație (longitudine, latitudine)"
-#: engine/core/models.py:1047
+#: engine/core/models.py:1075
msgid "full JSON response from geocoder for this address"
msgstr "Răspuns JSON complet de la geocoder pentru această adresă"
-#: engine/core/models.py:1052
+#: engine/core/models.py:1081
msgid "stored JSON response from the geocoding service"
msgstr "Răspuns JSON stocat de la serviciul de geocodare"
-#: engine/core/models.py:1060
+#: engine/core/models.py:1091
msgid "address"
msgstr "Adresă"
-#: engine/core/models.py:1061
+#: engine/core/models.py:1092
msgid "addresses"
msgstr "Adrese"
-#: engine/core/models.py:1073
+#: engine/core/models.py:1104
msgid ""
"Represents a promotional code that can be used for discounts, managing its "
"validity, type of discount, and application. The PromoCode class stores "
@@ -2332,77 +2334,77 @@ msgstr ""
"PromoCode stochează detalii despre un cod promoțional, inclusiv "
"identificatorul său unic, proprietățile de reducere (sumă sau procent), "
"perioada de valabilitate, utilizatorul asociat (dacă există) și starea "
-"utilizării acestuia. Aceasta include funcționalități de validare și aplicare"
-" a codului promoțional la o comandă, asigurându-se în același timp că sunt "
+"utilizării acestuia. Aceasta include funcționalități de validare și aplicare "
+"a codului promoțional la o comandă, asigurându-se în același timp că sunt "
"respectate constrângerile."
-#: engine/core/models.py:1087
+#: engine/core/models.py:1118
msgid "unique code used by a user to redeem a discount"
msgstr "Cod unic utilizat de un utilizator pentru a răscumpăra o reducere"
-#: engine/core/models.py:1088
+#: engine/core/models.py:1119
msgid "promo code identifier"
msgstr "Cod promoțional de identificare"
-#: engine/core/models.py:1095
+#: engine/core/models.py:1126
msgid "fixed discount amount applied if percent is not used"
msgstr "Valoarea fixă a reducerii aplicate dacă procentul nu este utilizat"
-#: engine/core/models.py:1096
+#: engine/core/models.py:1127
msgid "fixed discount amount"
msgstr "Valoarea fixă a reducerii"
-#: engine/core/models.py:1102
+#: engine/core/models.py:1133
msgid "percentage discount applied if fixed amount is not used"
msgstr "Procentul de reducere aplicat dacă suma fixă nu este utilizată"
-#: engine/core/models.py:1103
+#: engine/core/models.py:1134
msgid "percentage discount"
msgstr "Reducere procentuală"
-#: engine/core/models.py:1108
+#: engine/core/models.py:1139
msgid "timestamp when the promocode expires"
msgstr "Data la care expiră codul promoțional"
-#: engine/core/models.py:1109
+#: engine/core/models.py:1140
msgid "end validity time"
msgstr "Timpul final de valabilitate"
-#: engine/core/models.py:1114
+#: engine/core/models.py:1145
msgid "timestamp from which this promocode is valid"
msgstr "Timestamp de la care acest cod promoțional este valabil"
-#: engine/core/models.py:1115
+#: engine/core/models.py:1146
msgid "start validity time"
msgstr "Ora de începere a valabilității"
-#: engine/core/models.py:1120
+#: engine/core/models.py:1151
msgid "timestamp when the promocode was used, blank if not used yet"
msgstr ""
"Momentul în care codul promoțional a fost utilizat, gol dacă nu a fost "
"utilizat încă"
-#: engine/core/models.py:1121
+#: engine/core/models.py:1152
msgid "usage timestamp"
msgstr "Timestamp de utilizare"
-#: engine/core/models.py:1126
+#: engine/core/models.py:1157
msgid "user assigned to this promocode if applicable"
msgstr "Utilizatorul atribuit acestui cod promoțional, dacă este cazul"
-#: engine/core/models.py:1127
+#: engine/core/models.py:1158
msgid "assigned user"
msgstr "Utilizator atribuit"
-#: engine/core/models.py:1134
+#: engine/core/models.py:1165
msgid "promo code"
msgstr "Cod promoțional"
-#: engine/core/models.py:1135
+#: engine/core/models.py:1166
msgid "promo codes"
msgstr "Coduri promoționale"
-#: engine/core/models.py:1150
+#: engine/core/models.py:1182
msgid ""
"only one type of discount should be defined (amount or percent), but not "
"both or neither."
@@ -2410,167 +2412,167 @@ msgstr ""
"Trebuie definit un singur tip de reducere (sumă sau procent), dar nu ambele "
"sau niciuna."
-#: engine/core/models.py:1171
+#: engine/core/models.py:1204
msgid "promocode already used"
msgstr "Codul promoțional a fost deja utilizat"
-#: engine/core/models.py:1187
+#: engine/core/models.py:1226
#, python-brace-format
msgid "invalid discount type for promocode {self.uuid}"
msgstr "Tip de reducere invalid pentru codul promoțional {self.uuid}!"
-#: engine/core/models.py:1196
+#: engine/core/models.py:1235
msgid ""
"Represents an order placed by a user. This class models an order within the "
"application, including its various attributes such as billing and shipping "
-"information, status, associated user, notifications, and related operations."
-" Orders can have associated products, promotions can be applied, addresses "
+"information, status, associated user, notifications, and related operations. "
+"Orders can have associated products, promotions can be applied, addresses "
"set, and shipping or billing details updated. Equally, functionality "
"supports managing the products in the order lifecycle."
msgstr ""
"Reprezintă o comandă plasată de un utilizator. Această clasă modelează o "
"comandă în cadrul aplicației, inclusiv diferitele sale atribute, cum ar fi "
-"informațiile privind facturarea și expedierea, starea, utilizatorul asociat,"
-" notificările și operațiunile conexe. Comenzile pot avea produse asociate, "
-"se pot aplica promoții, se pot stabili adrese și se pot actualiza detaliile "
-"de expediere sau de facturare. În egală măsură, funcționalitatea sprijină "
+"informațiile privind facturarea și expedierea, starea, utilizatorul asociat, "
+"notificările și operațiunile conexe. Comenzile pot avea produse asociate, se "
+"pot aplica promoții, se pot stabili adrese și se pot actualiza detaliile de "
+"expediere sau de facturare. În egală măsură, funcționalitatea sprijină "
"gestionarea produselor în ciclul de viață al comenzii."
-#: engine/core/models.py:1213
+#: engine/core/models.py:1252
msgid "the billing address used for this order"
msgstr "Adresa de facturare utilizată pentru această comandă"
-#: engine/core/models.py:1221
+#: engine/core/models.py:1260
msgid "optional promo code applied to this order"
msgstr "Cod promoțional opțional aplicat la această comandă"
-#: engine/core/models.py:1222
+#: engine/core/models.py:1261
msgid "applied promo code"
msgstr "Cod promoțional aplicat"
-#: engine/core/models.py:1230
+#: engine/core/models.py:1269
msgid "the shipping address used for this order"
msgstr "Adresa de expediere utilizată pentru această comandă"
-#: engine/core/models.py:1231
+#: engine/core/models.py:1270
msgid "shipping address"
msgstr "Adresa de expediere"
-#: engine/core/models.py:1237
+#: engine/core/models.py:1276
msgid "current status of the order in its lifecycle"
msgstr "Stadiul actual al comenzii în ciclul său de viață"
-#: engine/core/models.py:1238
+#: engine/core/models.py:1277
msgid "order status"
msgstr "Stadiul comenzii"
-#: engine/core/models.py:1243 engine/core/models.py:1769
+#: engine/core/models.py:1282 engine/core/models.py:1881
msgid "json structure of notifications to display to users"
msgstr ""
"Structura JSON a notificărilor care urmează să fie afișate utilizatorilor, "
"în interfața de administrare este utilizată vizualizarea tabelară"
-#: engine/core/models.py:1249
+#: engine/core/models.py:1288
msgid "json representation of order attributes for this order"
msgstr "Reprezentarea JSON a atributelor comenzii pentru această comandă"
-#: engine/core/models.py:1255
+#: engine/core/models.py:1294
msgid "the user who placed the order"
msgstr "Utilizatorul care a plasat comanda"
-#: engine/core/models.py:1256
+#: engine/core/models.py:1295
msgid "user"
msgstr "Utilizator"
-#: engine/core/models.py:1262
+#: engine/core/models.py:1301
msgid "the timestamp when the order was finalized"
msgstr "Momentul în care comanda a fost finalizată"
-#: engine/core/models.py:1263
+#: engine/core/models.py:1302
msgid "buy time"
msgstr "Cumpărați timp"
-#: engine/core/models.py:1270
+#: engine/core/models.py:1309
msgid "a human-readable identifier for the order"
msgstr "Un identificator ușor de citit pentru comandă"
-#: engine/core/models.py:1271
+#: engine/core/models.py:1310
msgid "human readable id"
msgstr "ID lizibil de către om"
-#: engine/core/models.py:1277
+#: engine/core/models.py:1316
msgid "order"
msgstr "Comandă"
-#: engine/core/models.py:1319
+#: engine/core/models.py:1363
msgid "a user must have only one pending order at a time"
msgstr ""
"Un utilizator trebuie să aibă un singur ordin în așteptare la un moment dat!"
-#: engine/core/models.py:1351
+#: engine/core/models.py:1396
msgid "you cannot add products to an order that is not a pending one"
msgstr "Nu puteți adăuga produse la o comandă care nu este în așteptare"
-#: engine/core/models.py:1356
+#: engine/core/models.py:1402
msgid "you cannot add inactive products to order"
msgstr "Nu puteți adăuga produse inactive la comandă"
-#: engine/core/models.py:1373
+#: engine/core/models.py:1424
msgid "you cannot add more products than available in stock"
msgstr "Nu puteți adăuga mai multe produse decât cele disponibile în stoc"
-#: engine/core/models.py:1395 engine/core/models.py:1420
-#: engine/core/models.py:1428
+#: engine/core/models.py:1448 engine/core/models.py:1477
+#: engine/core/models.py:1487
msgid "you cannot remove products from an order that is not a pending one"
msgstr ""
"Nu puteți elimina produse dintr-o comandă care nu este o comandă în curs"
-#: engine/core/models.py:1416
+#: engine/core/models.py:1472
#, python-brace-format
msgid "{name} does not exist with query <{query}>"
msgstr "{name} nu există cu interogarea <{query}>!"
-#: engine/core/models.py:1448
+#: engine/core/models.py:1511
msgid "promocode does not exist"
msgstr "Codul promoțional nu există"
-#: engine/core/models.py:1454
+#: engine/core/models.py:1526
msgid "you can only buy physical products with shipping address specified"
msgstr ""
"Puteți cumpăra numai produse fizice cu adresa de expediere specificată!"
-#: engine/core/models.py:1473
+#: engine/core/models.py:1547
msgid "address does not exist"
msgstr "Adresa nu există"
-#: engine/core/models.py:1494 engine/core/models.py:1563
+#: engine/core/models.py:1569 engine/core/models.py:1648
msgid "you can not buy at this moment, please try again in a few minutes"
msgstr ""
"Nu puteți achiziționa în acest moment, vă rugăm să încercați din nou în "
"câteva minute."
-#: engine/core/models.py:1497 engine/core/models.py:1559
+#: engine/core/models.py:1575 engine/core/models.py:1641
msgid "invalid force value"
msgstr "Valoare forță invalidă"
-#: engine/core/models.py:1503 engine/core/models.py:1566
+#: engine/core/models.py:1581 engine/core/models.py:1652
msgid "you cannot purchase an empty order!"
msgstr "Nu puteți achiziționa o comandă goală!"
-#: engine/core/models.py:1522
+#: engine/core/models.py:1602
msgid "you cannot buy an order without a user"
msgstr ""
"Nu puteți elimina produse dintr-o comandă care nu este o comandă în curs"
-#: engine/core/models.py:1536
+#: engine/core/models.py:1616
msgid "a user without a balance cannot buy with balance"
msgstr "Un utilizator fără sold nu poate cumpăra cu sold!"
-#: engine/core/models.py:1541
+#: engine/core/models.py:1622
msgid "insufficient funds to complete the order"
msgstr "Insuficiența fondurilor pentru finalizarea comenzii"
-#: engine/core/models.py:1575
+#: engine/core/models.py:1663
msgid ""
"you cannot buy without registration, please provide the following "
"information: customer name, customer email, customer phone number"
@@ -2578,15 +2580,14 @@ msgstr ""
"nu puteți cumpăra fără înregistrare, vă rugăm să furnizați următoarele "
"informații: nume client, e-mail client, număr de telefon client"
-#: engine/core/models.py:1584
+#: engine/core/models.py:1674
#, python-brace-format
msgid ""
"invalid payment method: {payment_method} from {available_payment_methods}"
msgstr ""
-"Metodă de plată invalidă: {payment_method} de la "
-"{available_payment_methods}!"
+"Metodă de plată invalidă: {payment_method} de la {available_payment_methods}!"
-#: engine/core/models.py:1699
+#: engine/core/models.py:1805
msgid ""
"Manages user feedback for products. This class is designed to capture and "
"store user feedback for specific products that they have purchased. It "
@@ -2601,35 +2602,34 @@ msgstr ""
"un rating atribuit de utilizator. Clasa utilizează câmpuri din baza de date "
"pentru a modela și gestiona în mod eficient datele de feedback."
-#: engine/core/models.py:1711
+#: engine/core/models.py:1817
msgid "user-provided comments about their experience with the product"
msgstr ""
"Comentarii furnizate de utilizatori cu privire la experiența lor cu produsul"
-#: engine/core/models.py:1712
+#: engine/core/models.py:1818
msgid "feedback comments"
msgstr "Comentarii de feedback"
-#: engine/core/models.py:1719
-msgid ""
-"references the specific product in an order that this feedback is about"
+#: engine/core/models.py:1826
+msgid "references the specific product in an order that this feedback is about"
msgstr ""
-"Face referire la produsul specific dintr-o comandă despre care este vorba în"
-" acest feedback"
+"Face referire la produsul specific dintr-o comandă despre care este vorba în "
+"acest feedback"
-#: engine/core/models.py:1720
+#: engine/core/models.py:1828
msgid "related order product"
msgstr "Produs aferent comenzii"
-#: engine/core/models.py:1725
+#: engine/core/models.py:1833
msgid "user-assigned rating for the product"
msgstr "Rating atribuit de utilizator pentru produs"
-#: engine/core/models.py:1726
+#: engine/core/models.py:1834
msgid "product rating"
msgstr "Evaluarea produsului"
-#: engine/core/models.py:1742
+#: engine/core/models.py:1854
msgid ""
"Represents products associated with orders and their attributes. The "
"OrderProduct model maintains information about a product that is part of an "
@@ -2643,8 +2643,8 @@ msgid ""
msgstr ""
"Reprezintă produsele asociate comenzilor și atributele acestora. Modelul "
"OrderProduct păstrează informații despre un produs care face parte dintr-o "
-"comandă, inclusiv detalii precum prețul de achiziție, cantitatea, atributele"
-" produsului și starea acestuia. Acesta gestionează notificările pentru "
+"comandă, inclusiv detalii precum prețul de achiziție, cantitatea, atributele "
+"produsului și starea acestuia. Acesta gestionează notificările pentru "
"utilizator și administratori și se ocupă de operațiuni precum returnarea "
"soldului produsului sau adăugarea de feedback. Acest model oferă, de "
"asemenea, metode și proprietăți care susțin logica de afaceri, cum ar fi "
@@ -2652,140 +2652,140 @@ msgstr ""
"produsele digitale. Modelul se integrează cu modelele Order și Product și "
"stochează o referință la acestea."
-#: engine/core/models.py:1757
+#: engine/core/models.py:1869
msgid "the price paid by the customer for this product at purchase time"
msgstr "Prețul plătit de client pentru acest produs la momentul achiziției"
-#: engine/core/models.py:1758
+#: engine/core/models.py:1870
msgid "purchase price at order time"
msgstr "Prețul de achiziție la momentul comenzii"
-#: engine/core/models.py:1763
+#: engine/core/models.py:1875
msgid "internal comments for admins about this ordered product"
msgstr ""
"Comentarii interne pentru administratori cu privire la acest produs comandat"
-#: engine/core/models.py:1764
+#: engine/core/models.py:1876
msgid "internal comments"
msgstr "Observații interne"
-#: engine/core/models.py:1770
+#: engine/core/models.py:1882
msgid "user notifications"
msgstr "Notificări pentru utilizatori"
-#: engine/core/models.py:1775
+#: engine/core/models.py:1887
msgid "json representation of this item's attributes"
msgstr "Reprezentarea JSON a atributelor acestui element"
-#: engine/core/models.py:1776
+#: engine/core/models.py:1888
msgid "ordered product attributes"
msgstr "Atribute de produs ordonate"
-#: engine/core/models.py:1781
+#: engine/core/models.py:1893
msgid "reference to the parent order that contains this product"
msgstr "Trimitere la comanda mamă care conține acest produs"
-#: engine/core/models.py:1782
+#: engine/core/models.py:1894
msgid "parent order"
msgstr "Ordinul părinților"
-#: engine/core/models.py:1791
+#: engine/core/models.py:1903
msgid "the specific product associated with this order line"
msgstr "Produsul specific asociat cu această linie de comandă"
-#: engine/core/models.py:1798
+#: engine/core/models.py:1910
msgid "quantity of this specific product in the order"
msgstr "Cantitatea acestui produs specific din comandă"
-#: engine/core/models.py:1799
+#: engine/core/models.py:1911
msgid "product quantity"
msgstr "Cantitatea produsului"
-#: engine/core/models.py:1806
+#: engine/core/models.py:1918
msgid "current status of this product in the order"
msgstr "Starea actuală a acestui produs în comandă"
-#: engine/core/models.py:1807
+#: engine/core/models.py:1919
msgid "product line status"
msgstr "Starea liniei de produse"
-#: engine/core/models.py:1872
+#: engine/core/models.py:1986
msgid "order product must have an order"
msgstr "Comandaprodusul trebuie să aibă o comandă asociată!"
-#: engine/core/models.py:1874
+#: engine/core/models.py:1988
#, python-brace-format
msgid "wrong action specified for feedback: {action}"
msgstr "Acțiune greșită specificată pentru feedback: {action}!"
-#: engine/core/models.py:1888
+#: engine/core/models.py:2005
msgid "you cannot feedback an order which is not received"
msgstr ""
"Nu puteți elimina produse dintr-o comandă care nu este o comandă în curs"
-#: engine/core/models.py:1894
+#: engine/core/models.py:2014
msgid "name"
msgstr "Nume și prenume"
-#: engine/core/models.py:1895
+#: engine/core/models.py:2016
msgid "URL of the integration"
msgstr "Adresa URL a integrării"
-#: engine/core/models.py:1896
+#: engine/core/models.py:2019
msgid "authentication credentials"
msgstr "Acreditări de autentificare"
-#: engine/core/models.py:1918
+#: engine/core/models.py:2042
msgid "you can only have one default CRM provider"
msgstr "Puteți avea un singur furnizor CRM implicit"
-#: engine/core/models.py:1928
+#: engine/core/models.py:2052
msgid "CRM"
msgstr "CRM"
-#: engine/core/models.py:1929
+#: engine/core/models.py:2053
msgid "CRMs"
msgstr "CRM-uri"
-#: engine/core/models.py:1941
+#: engine/core/models.py:2069
msgid "order CRM link"
msgstr "Legătura CRM a comenzii"
-#: engine/core/models.py:1942
+#: engine/core/models.py:2070
msgid "orders CRM links"
msgstr "Legături CRM pentru comenzi"
-#: engine/core/models.py:1947
+#: engine/core/models.py:2075
msgid ""
"Represents the downloading functionality for digital assets associated with "
"orders. The DigitalAssetDownload class provides the ability to manage and "
"access downloads related to order products. It maintains information about "
-"the associated order product, the number of downloads, and whether the asset"
-" is publicly visible. It includes a method to generate a URL for downloading"
-" the asset when the associated order is in a completed status."
+"the associated order product, the number of downloads, and whether the asset "
+"is publicly visible. It includes a method to generate a URL for downloading "
+"the asset when the associated order is in a completed status."
msgstr ""
"Reprezintă funcționalitatea de descărcare pentru activele digitale asociate "
"comenzilor. Clasa DigitalAssetDownload oferă posibilitatea de a gestiona și "
"de a accesa descărcările legate de produsele de comandă. Aceasta păstrează "
-"informații despre produsul de comandă asociat, numărul de descărcări și dacă"
-" activul este vizibil public. Aceasta include o metodă de generare a unei "
-"adrese URL pentru descărcarea activului atunci când comanda asociată este în"
-" stare finalizată."
+"informații despre produsul de comandă asociat, numărul de descărcări și dacă "
+"activul este vizibil public. Aceasta include o metodă de generare a unei "
+"adrese URL pentru descărcarea activului atunci când comanda asociată este în "
+"stare finalizată."
-#: engine/core/models.py:1961
+#: engine/core/models.py:2091
msgid "download"
msgstr "Descărcare"
-#: engine/core/models.py:1962
+#: engine/core/models.py:2092
msgid "downloads"
msgstr "Descărcări"
-#: engine/core/serializers/utility.py:89
+#: engine/core/serializers/utility.py:91
msgid ""
"you must provide a comment, rating, and order product uuid to add feedback."
msgstr ""
-"trebuie să furnizați un comentariu, un rating și uuid-ul produsului comandat"
-" pentru a adăuga feedback."
+"trebuie să furnizați un comentariu, un rating și uuid-ul produsului comandat "
+"pentru a adăuga feedback."
#: engine/core/sitemaps.py:25
msgid "Home"
@@ -2977,7 +2977,8 @@ msgstr "Bună ziua %(order.user.first_name)s,"
#, python-format
msgid ""
"thank you for your order #%(order.pk)s! we are pleased to inform you that\n"
-" we have taken your order into work. below are the details of your\n"
+" we have taken your order into work. below are "
+"the details of your\n"
" order:"
msgstr ""
"Vă mulțumim pentru comanda dvs. #%(order.pk)s! Suntem încântați să vă "
@@ -3092,11 +3093,12 @@ msgstr ""
#: engine/core/templates/shipped_order_created_email.html:101
#: engine/core/templates/shipped_order_delivered_email.html:101
msgid ""
-"thank you for your order! we are pleased to confirm your purchase. below are\n"
+"thank you for your order! we are pleased to confirm your purchase. below "
+"are\n"
" the details of your order:"
msgstr ""
-"Vă mulțumim pentru comanda dvs.! Suntem încântați să vă confirmăm achiziția."
-" Mai jos sunt detaliile comenzii dvs:"
+"Vă mulțumim pentru comanda dvs.! Suntem încântați să vă confirmăm achiziția. "
+"Mai jos sunt detaliile comenzii dvs:"
#: engine/core/templates/shipped_order_created_email.html:123
#: engine/core/templates/shipped_order_delivered_email.html:123
@@ -3123,11 +3125,11 @@ msgstr ""
"toate drepturile\n"
" rezervate"
-#: engine/core/utils/caching.py:44
+#: engine/core/utils/caching.py:48
msgid "both data and timeout are required"
msgstr "Sunt necesare atât datele, cât și timpul de așteptare"
-#: engine/core/utils/caching.py:46
+#: engine/core/utils/caching.py:51
msgid "invalid timeout value, it must be between 0 and 216000 seconds"
msgstr "Valoare timeout invalidă, trebuie să fie între 0 și 216000 secunde"
@@ -3136,17 +3138,17 @@ msgstr "Valoare timeout invalidă, trebuie să fie între 0 și 216000 secunde"
msgid "{settings.PROJECT_NAME} | contact us initiated"
msgstr "{settings.PROJECT_NAME} | contactați-ne inițiat"
-#: engine/core/utils/emailing.py:73
+#: engine/core/utils/emailing.py:81
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order confirmation"
msgstr "{settings.PROJECT_NAME} | confirmarea comenzii"
-#: engine/core/utils/emailing.py:105
+#: engine/core/utils/emailing.py:115
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order delivered"
msgstr "{settings.PROJECT_NAME} | comandă livrată"
-#: engine/core/utils/emailing.py:188
+#: engine/core/utils/emailing.py:203
#, python-brace-format
msgid "{settings.PROJECT_NAME} | promocode granted"
msgstr "{settings.PROJECT_NAME} | promocode acordat"
@@ -3159,14 +3161,14 @@ msgstr "Nu aveți permisiunea de a efectua această acțiune."
msgid "NOMINATIM_URL must be configured."
msgstr "Parametrul NOMINATIM_URL trebuie să fie configurat!"
-#: engine/core/validators.py:19
+#: engine/core/validators.py:21
#, python-brace-format
msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels"
msgstr ""
"Dimensiunile imaginii nu trebuie să depășească w{max_width} x h{max_height} "
"pixeli"
-#: engine/core/views.py:91
+#: engine/core/views.py:105
msgid ""
"Handles the request for the sitemap index and returns an XML response. It "
"ensures the response includes the appropriate content type header for XML."
@@ -3174,119 +3176,128 @@ msgstr ""
"Gestionează cererea pentru indexul sitemap și returnează un răspuns XML. Se "
"asigură că răspunsul include antetul tip de conținut adecvat pentru XML."
-#: engine/core/views.py:106
+#: engine/core/views.py:120
msgid ""
"Handles the detailed view response for a sitemap. This function processes "
"the request, fetches the appropriate sitemap detail response, and sets the "
"Content-Type header for XML."
msgstr ""
"Gestionează răspunsul de vizualizare detaliată pentru o hartă a site-ului. "
-"Această funcție procesează cererea, extrage răspunsul detaliat corespunzător"
-" al hărții site-ului și stabilește antetul Content-Type pentru XML."
+"Această funcție procesează cererea, extrage răspunsul detaliat corespunzător "
+"al hărții site-ului și stabilește antetul Content-Type pentru XML."
-#: engine/core/views.py:141
+#: engine/core/views.py:156
msgid ""
"Returns a list of supported languages and their corresponding information."
msgstr ""
"Returnează o listă a limbilor acceptate și informațiile corespunzătoare."
-#: engine/core/views.py:173
+#: engine/core/views.py:183
msgid "Returns the parameters of the website as a JSON object."
msgstr "Returnează parametrii site-ului web sub forma unui obiect JSON."
-#: engine/core/views.py:192
+#: engine/core/views.py:199
msgid ""
"Handles cache operations such as reading and setting cache data with a "
"specified key and timeout."
msgstr ""
-"Gestionează operațiunile din cache, cum ar fi citirea și setarea datelor din"
-" cache cu o cheie și un timeout specificate."
+"Gestionează operațiunile din cache, cum ar fi citirea și setarea datelor din "
+"cache cu o cheie și un timeout specificate."
-#: engine/core/views.py:219
+#: engine/core/views.py:221
msgid "Handles `contact us` form submissions."
msgstr "Gestionează trimiterea formularelor `contact us`."
-#: engine/core/views.py:240
+#: engine/core/views.py:237
msgid ""
"Handles requests for processing and validating URLs from incoming POST "
"requests."
msgstr ""
-"Gestionează cererile de procesare și validare a URL-urilor din cererile POST"
-" primite."
+"Gestionează cererile de procesare și validare a URL-urilor din cererile POST "
+"primite."
-#: engine/core/views.py:280
+#: engine/core/views.py:274
msgid "Handles global search queries."
msgstr "Gestionează interogările de căutare globală."
-#: engine/core/views.py:295
+#: engine/core/views.py:290
msgid "Handles the logic of buying as a business without registration."
msgstr "Gestionează logica cumpărării ca o afacere fără înregistrare."
-#: engine/core/views.py:332
+#: engine/core/views.py:338
msgid ""
"Handles the downloading of a digital asset associated with an order.\n"
-"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the digital asset file located in the "
+"storage directory of the project. If the file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
msgstr ""
"Gestionează descărcarea unui bun digital asociat cu o comandă.\n"
-"Această funcție încearcă să servească fișierul activului digital situat în directorul de stocare al proiectului. Dacă fișierul nu este găsit, este generată o eroare HTTP 404 pentru a indica faptul că resursa nu este disponibilă."
+"Această funcție încearcă să servească fișierul activului digital situat în "
+"directorul de stocare al proiectului. Dacă fișierul nu este găsit, este "
+"generată o eroare HTTP 404 pentru a indica faptul că resursa nu este "
+"disponibilă."
-#: engine/core/views.py:343
+#: engine/core/views.py:349
msgid "order_product_uuid is required"
msgstr "order_product_uuid este necesar"
-#: engine/core/views.py:350
+#: engine/core/views.py:356
msgid "order product does not exist"
msgstr "comanda produsul nu există"
-#: engine/core/views.py:353
+#: engine/core/views.py:359
msgid "you can only download the digital asset once"
msgstr "Puteți descărca activul digital o singură dată"
-#: engine/core/views.py:356
+#: engine/core/views.py:363
msgid "the order must be paid before downloading the digital asset"
msgstr "comanda trebuie plătită înainte de descărcarea activului digital"
-#: engine/core/views.py:362
+#: engine/core/views.py:370
msgid "the order product does not have a product"
msgstr "Produsul de comandă nu are un produs"
-#: engine/core/views.py:399
+#: engine/core/views.py:414
msgid "favicon not found"
msgstr "favicon nu a fost găsit"
-#: engine/core/views.py:404
+#: engine/core/views.py:419
msgid ""
"Handles requests for the favicon of a website.\n"
-"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the favicon file located in the static "
+"directory of the project. If the favicon file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
msgstr ""
"Gestionează cererile pentru favicon-ul unui site web.\n"
-"Această funcție încearcă să servească fișierul favicon situat în directorul static al proiectului. Dacă fișierul favicon nu este găsit, este generată o eroare HTTP 404 pentru a indica faptul că resursa nu este disponibilă."
+"Această funcție încearcă să servească fișierul favicon situat în directorul "
+"static al proiectului. Dacă fișierul favicon nu este găsit, este generată o "
+"eroare HTTP 404 pentru a indica faptul că resursa nu este disponibilă."
-#: engine/core/views.py:416
+#: engine/core/views.py:431
msgid ""
-"Redirects the request to the admin index page. The function handles incoming"
-" HTTP requests and redirects them to the Django admin interface index page. "
+"Redirects the request to the admin index page. The function handles incoming "
+"HTTP requests and redirects them to the Django admin interface index page. "
"It uses Django's `redirect` function for handling the HTTP redirection."
msgstr ""
"Redirecționează solicitarea către pagina de index a administratorului. "
-"Funcția gestionează cererile HTTP primite și le redirecționează către pagina"
-" index a interfeței de administrare Django. Aceasta utilizează funcția "
+"Funcția gestionează cererile HTTP primite și le redirecționează către pagina "
+"index a interfeței de administrare Django. Aceasta utilizează funcția "
"`redirect` din Django pentru gestionarea redirecționării HTTP."
-#: engine/core/views.py:429
+#: engine/core/views.py:443
msgid "Returns current version of the eVibes. "
msgstr "Returnează versiunea curentă a eVibes."
-#: engine/core/views.py:623 engine/core/views.py:636
+#: engine/core/views.py:672 engine/core/views.py:687
#, python-format
msgid "Revenue & Orders (last %(days)d)"
msgstr "Venituri și comenzi (ultimul %(days)d)"
-#: engine/core/views.py:793
+#: engine/core/views.py:868
msgid "Returns custom variables for Dashboard. "
msgstr "Returnează variabilele personalizate pentru tabloul de bord."
-#: engine/core/viewsets.py:136
+#: engine/core/viewsets.py:139
msgid ""
"Defines a viewset for managing Evibes-related operations. The EvibesViewSet "
"class inherits from ModelViewSet and provides functionality for handling "
@@ -3301,13 +3312,12 @@ msgstr ""
"dinamice în funcție de acțiunea curentă, permisiuni personalizabile și "
"formate de redare."
-#: engine/core/viewsets.py:156
+#: engine/core/viewsets.py:160
msgid ""
-"Represents a viewset for managing AttributeGroup objects. Handles operations"
-" related to AttributeGroup, including filtering, serialization, and "
-"retrieval of data. This class is part of the application's API layer and "
-"provides a standardized way to process requests and responses for "
-"AttributeGroup data."
+"Represents a viewset for managing AttributeGroup objects. Handles operations "
+"related to AttributeGroup, including filtering, serialization, and retrieval "
+"of data. This class is part of the application's API layer and provides a "
+"standardized way to process requests and responses for AttributeGroup data."
msgstr ""
"Reprezintă un set de vizualizări pentru gestionarea obiectelor "
"AttributeGroup. Gestionează operațiunile legate de AttributeGroup, inclusiv "
@@ -3315,7 +3325,7 @@ msgstr ""
"stratul API al aplicației și oferă o modalitate standardizată de a procesa "
"cererile și răspunsurile pentru datele AttributeGroup."
-#: engine/core/viewsets.py:175
+#: engine/core/viewsets.py:179
msgid ""
"Handles operations related to Attribute objects within the application. "
"Provides a set of API endpoints to interact with Attribute data. This class "
@@ -3324,20 +3334,20 @@ msgid ""
"specific fields or retrieving detailed versus simplified information "
"depending on the request."
msgstr ""
-"Gestionează operațiunile legate de obiectele Attribute în cadrul aplicației."
-" Oferă un set de puncte finale API pentru a interacționa cu datele "
-"Attribute. Această clasă gestionează interogarea, filtrarea și serializarea "
-"obiectelor Attribute, permițând controlul dinamic asupra datelor returnate, "
-"cum ar fi filtrarea după câmpuri specifice sau recuperarea de informații "
-"detaliate sau simplificate în funcție de cerere."
+"Gestionează operațiunile legate de obiectele Attribute în cadrul aplicației. "
+"Oferă un set de puncte finale API pentru a interacționa cu datele Attribute. "
+"Această clasă gestionează interogarea, filtrarea și serializarea obiectelor "
+"Attribute, permițând controlul dinamic asupra datelor returnate, cum ar fi "
+"filtrarea după câmpuri specifice sau recuperarea de informații detaliate sau "
+"simplificate în funcție de cerere."
-#: engine/core/viewsets.py:194
+#: engine/core/viewsets.py:198
msgid ""
"A viewset for managing AttributeValue objects. This viewset provides "
"functionality for listing, retrieving, creating, updating, and deleting "
"AttributeValue objects. It integrates with Django REST Framework's viewset "
-"mechanisms and uses appropriate serializers for different actions. Filtering"
-" capabilities are provided through the DjangoFilterBackend."
+"mechanisms and uses appropriate serializers for different actions. Filtering "
+"capabilities are provided through the DjangoFilterBackend."
msgstr ""
"Un set de vizualizări pentru gestionarea obiectelor AttributeValue. Acest "
"set de vizualizări oferă funcționalități pentru listarea, extragerea, "
@@ -3346,7 +3356,7 @@ msgstr ""
"serializatoare adecvate pentru diferite acțiuni. Capacitățile de filtrare "
"sunt furnizate prin DjangoFilterBackend."
-#: engine/core/viewsets.py:213
+#: engine/core/viewsets.py:217
msgid ""
"Manages views for Category-related operations. The CategoryViewSet class is "
"responsible for handling operations related to the Category model in the "
@@ -3361,7 +3371,7 @@ msgstr ""
"permisiuni pentru a se asigura că numai utilizatorii autorizați pot accesa "
"date specifice."
-#: engine/core/viewsets.py:326
+#: engine/core/viewsets.py:346
msgid ""
"Represents a viewset for managing Brand instances. This class provides "
"functionality for querying, filtering, and serializing Brand objects. It "
@@ -3373,7 +3383,7 @@ msgstr ""
"serializarea obiectelor Brand. Utilizează cadrul ViewSet al Django pentru a "
"simplifica implementarea punctelor finale API pentru obiectele Brand."
-#: engine/core/viewsets.py:438
+#: engine/core/viewsets.py:458
msgid ""
"Manages operations related to the `Product` model in the system. This class "
"provides a viewset for managing products, including their filtering, "
@@ -3385,13 +3395,13 @@ msgid ""
msgstr ""
"Gestionează operațiunile legate de modelul `Product` din sistem. Această "
"clasă oferă un set de vizualizări pentru gestionarea produselor, inclusiv "
-"filtrarea lor, serializarea și operațiunile asupra instanțelor specifice. Se"
-" extinde de la `EvibesViewSet` pentru a utiliza funcționalități comune și se"
-" integrează cu cadrul REST Django pentru operațiuni API RESTful. Include "
+"filtrarea lor, serializarea și operațiunile asupra instanțelor specifice. Se "
+"extinde de la `EvibesViewSet` pentru a utiliza funcționalități comune și se "
+"integrează cu cadrul REST Django pentru operațiuni API RESTful. Include "
"metode pentru recuperarea detaliilor produsului, aplicarea permisiunilor și "
"accesarea feedback-ului aferent unui produs."
-#: engine/core/viewsets.py:574
+#: engine/core/viewsets.py:605
msgid ""
"Represents a viewset for managing Vendor objects. This viewset allows "
"fetching, filtering, and serializing Vendor data. It defines the queryset, "
@@ -3399,38 +3409,38 @@ msgid ""
"actions. The purpose of this class is to provide streamlined access to "
"Vendor-related resources through the Django REST framework."
msgstr ""
-"Reprezintă un set de vizualizări pentru gestionarea obiectelor Vendor. Acest"
-" set de vizualizare permite preluarea, filtrarea și serializarea datelor "
+"Reprezintă un set de vizualizări pentru gestionarea obiectelor Vendor. Acest "
+"set de vizualizare permite preluarea, filtrarea și serializarea datelor "
"furnizorului. Aceasta definește queryset-ul, configurațiile de filtrare și "
"clasele de serializare utilizate pentru a gestiona diferite acțiuni. Scopul "
"acestei clase este de a oferi acces simplificat la resursele legate de "
"Vendor prin intermediul cadrului REST Django."
-#: engine/core/viewsets.py:594
+#: engine/core/viewsets.py:625
msgid ""
"Representation of a view set handling Feedback objects. This class manages "
"operations related to Feedback objects, including listing, filtering, and "
"retrieving details. The purpose of this view set is to provide different "
-"serializers for different actions and implement permission-based handling of"
-" accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
+"serializers for different actions and implement permission-based handling of "
+"accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
"use of Django's filtering system for querying data."
msgstr ""
"Reprezentarea unui set de vizualizări care gestionează obiecte Feedback. "
"Această clasă gestionează operațiunile legate de obiectele Feedback, "
-"inclusiv listarea, filtrarea și extragerea detaliilor. Scopul acestui set de"
-" vizualizări este de a furniza serializatoare diferite pentru acțiuni "
+"inclusiv listarea, filtrarea și extragerea detaliilor. Scopul acestui set de "
+"vizualizări este de a furniza serializatoare diferite pentru acțiuni "
"diferite și de a implementa gestionarea pe bază de permisiuni a obiectelor "
"Feedback accesibile. Aceasta extinde clasa de bază `EvibesViewSet` și "
"utilizează sistemul de filtrare Django pentru interogarea datelor."
-#: engine/core/viewsets.py:621
+#: engine/core/viewsets.py:652
msgid ""
"ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes "
"various endpoints for handling order operations such as adding or removing "
-"products, performing purchases for registered as well as unregistered users,"
-" and retrieving the current authenticated user's pending orders. The ViewSet"
-" uses multiple serializers based on the specific action being performed and "
+"products, performing purchases for registered as well as unregistered users, "
+"and retrieving the current authenticated user's pending orders. The ViewSet "
+"uses multiple serializers based on the specific action being performed and "
"enforces permissions accordingly while interacting with order data."
msgstr ""
"ViewSet pentru gestionarea comenzilor și a operațiunilor conexe. Această "
@@ -3443,12 +3453,12 @@ msgstr ""
"de acțiunea specifică efectuată și aplică permisiunile corespunzătoare în "
"timpul interacțiunii cu datele comenzii."
-#: engine/core/viewsets.py:825
+#: engine/core/viewsets.py:914
msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It "
-"includes filtering, permission checks, and serializer switching based on the"
-" requested action. Additionally, it provides a detailed action for handling "
+"includes filtering, permission checks, and serializer switching based on the "
+"requested action. Additionally, it provides a detailed action for handling "
"feedback on OrderProduct instances"
msgstr ""
"Oferă un set de vizualizări pentru gestionarea entităților OrderProduct. "
@@ -3458,12 +3468,11 @@ msgstr ""
"solicitată. În plus, oferă o acțiune detaliată pentru gestionarea feedback-"
"ului privind instanțele OrderProduct"
-#: engine/core/viewsets.py:879
+#: engine/core/viewsets.py:974
msgid "Manages operations related to Product images in the application. "
-msgstr ""
-"Gestionează operațiunile legate de imaginile produselor din aplicație."
+msgstr "Gestionează operațiunile legate de imaginile produselor din aplicație."
-#: engine/core/viewsets.py:892
+#: engine/core/viewsets.py:988
msgid ""
"Manages the retrieval and handling of PromoCode instances through various "
"API actions."
@@ -3471,21 +3480,21 @@ msgstr ""
"Gestionează recuperarea și gestionarea instanțelor PromoCode prin diverse "
"acțiuni API."
-#: engine/core/viewsets.py:914
+#: engine/core/viewsets.py:1019
msgid "Represents a view set for managing promotions. "
msgstr "Reprezintă un set de vizualizări pentru gestionarea promoțiilor."
-#: engine/core/viewsets.py:927
+#: engine/core/viewsets.py:1032
msgid "Handles operations related to Stock data in the system."
msgstr ""
"Gestionează operațiunile legate de datele privind stocurile din sistem."
-#: engine/core/viewsets.py:941
+#: engine/core/viewsets.py:1046
msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the "
-"retrieval, modification, and customization of products within the wish list."
-" This ViewSet facilitates functionality such as adding, removing, and bulk "
+"retrieval, modification, and customization of products within the wish list. "
+"This ViewSet facilitates functionality such as adding, removing, and bulk "
"actions for wishlist products. Permission checks are integrated to ensure "
"that users can only manage their own wishlists unless explicit permissions "
"are granted."
@@ -3499,7 +3508,7 @@ msgstr ""
"utilizatorii își pot gestiona doar propriile liste de dorințe, cu excepția "
"cazului în care sunt acordate permisiuni explicite."
-#: engine/core/viewsets.py:1056
+#: engine/core/viewsets.py:1183
msgid ""
"This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom "
@@ -3508,18 +3517,18 @@ msgid ""
"on the request context."
msgstr ""
"Această clasă oferă funcționalități de tip viewset pentru gestionarea "
-"obiectelor `Address`. Clasa AddressViewSet permite operațiuni CRUD, filtrare"
-" și acțiuni personalizate legate de entitățile adresă. Aceasta include "
+"obiectelor `Address`. Clasa AddressViewSet permite operațiuni CRUD, filtrare "
+"și acțiuni personalizate legate de entitățile adresă. Aceasta include "
"comportamente specializate pentru diferite metode HTTP, înlocuiri ale "
"serializatorului și gestionarea permisiunilor în funcție de contextul "
"cererii."
-#: engine/core/viewsets.py:1123
+#: engine/core/viewsets.py:1254
#, python-brace-format
msgid "Geocoding error: {e}"
msgstr "Eroare de geocodare: {e}"
-#: engine/core/viewsets.py:1131
+#: engine/core/viewsets.py:1262
msgid ""
"Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing "
diff --git a/engine/core/locale/ru_RU/LC_MESSAGES/django.po b/engine/core/locale/ru_RU/LC_MESSAGES/django.po
index 33d6410c..a6b4cc47 100644
--- a/engine/core/locale/ru_RU/LC_MESSAGES/django.po
+++ b/engine/core/locale/ru_RU/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 22:12+0300\n"
+"POT-Creation-Date: 2025-12-18 19:09+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -27,113 +27,112 @@ msgstr ""
msgid "is active"
msgstr "Активен"
-#: engine/core/abstract.py:21
+#: engine/core/abstract.py:22
msgid ""
-"if set to false, this object can't be seen by users without needed "
-"permission"
+"if set to false, this object can't be seen by users without needed permission"
msgstr ""
"Если установлено значение false, этот объект не может быть виден "
"пользователям без необходимого разрешения"
-#: engine/core/abstract.py:23 engine/core/choices.py:18
+#: engine/core/abstract.py:26 engine/core/choices.py:18
msgid "created"
msgstr "Создано"
-#: engine/core/abstract.py:23
+#: engine/core/abstract.py:26
msgid "when the object first appeared on the database"
msgstr "Когда объект впервые появился в базе данных"
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "modified"
msgstr "Модифицированный"
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "when the object was last modified"
msgstr "Когда объект был отредактирован в последний раз"
-#: engine/core/admin.py:85
+#: engine/core/admin.py:94
msgid "translations"
msgstr "Переводы"
-#: engine/core/admin.py:89
+#: engine/core/admin.py:102
msgid "general"
msgstr "Общие сведения"
-#: engine/core/admin.py:91
+#: engine/core/admin.py:106
msgid "relations"
msgstr "Отношения"
-#: engine/core/admin.py:93
+#: engine/core/admin.py:111
msgid "additional info"
msgstr "дополнительная информация"
-#: engine/core/admin.py:111
+#: engine/core/admin.py:133
msgid "metadata"
msgstr "Метаданные"
-#: engine/core/admin.py:118
+#: engine/core/admin.py:141
msgid "timestamps"
msgstr "Временные метки"
-#: engine/core/admin.py:133
+#: engine/core/admin.py:157
#, python-format
msgid "activate selected %(verbose_name_plural)s"
msgstr "Активировать выбранный %(verbose_name_plural)s"
-#: engine/core/admin.py:138
+#: engine/core/admin.py:165
msgid "selected items have been activated."
msgstr "Выбранные сущности активированы!"
-#: engine/core/admin.py:144
+#: engine/core/admin.py:173
#, python-format
msgid "deactivate selected %(verbose_name_plural)s"
msgstr "Деактивировать выбранный %(verbose_name_plural)s"
-#: engine/core/admin.py:149
+#: engine/core/admin.py:183
msgid "selected items have been deactivated."
msgstr "Выбранные сущности были деактивированы!"
-#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586
-#: engine/core/graphene/object_types.py:593 engine/core/models.py:801
-#: engine/core/models.py:809
+#: engine/core/admin.py:195 engine/core/graphene/object_types.py:650
+#: engine/core/graphene/object_types.py:657 engine/core/models.py:824
+#: engine/core/models.py:832
msgid "attribute value"
msgstr "Значение атрибута"
-#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75
-#: engine/core/models.py:810
+#: engine/core/admin.py:196 engine/core/graphene/object_types.py:75
+#: engine/core/models.py:833
msgid "attribute values"
msgstr "Значения атрибутов"
-#: engine/core/admin.py:172
+#: engine/core/admin.py:207
msgid "image"
msgstr "Изображение"
-#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474
+#: engine/core/admin.py:208 engine/core/graphene/object_types.py:527
msgid "images"
msgstr "Изображения"
-#: engine/core/admin.py:184 engine/core/models.py:566
+#: engine/core/admin.py:219 engine/core/models.py:587
msgid "stock"
msgstr "Наличие"
-#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640
+#: engine/core/admin.py:220 engine/core/graphene/object_types.py:710
msgid "stocks"
msgstr "Наличия"
-#: engine/core/admin.py:196 engine/core/models.py:1818
+#: engine/core/admin.py:231 engine/core/models.py:1930
msgid "order product"
msgstr "Заказанный товар"
-#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389
-#: engine/core/models.py:1819
+#: engine/core/admin.py:232 engine/core/graphene/object_types.py:438
+#: engine/core/models.py:1931
msgid "order products"
msgstr "Заказанные товары"
-#: engine/core/admin.py:210 engine/core/admin.py:211
+#: engine/core/admin.py:250 engine/core/admin.py:251
msgid "children"
msgstr "Дети"
-#: engine/core/admin.py:977
+#: engine/core/admin.py:1059
msgid "Config"
msgstr "Конфигурация"
@@ -157,8 +156,7 @@ msgstr "Доставлено"
msgid "canceled"
msgstr "Отменено"
-#: engine/core/choices.py:8 engine/core/choices.py:16
-#: engine/core/choices.py:24
+#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24
msgid "failed"
msgstr "Не удалось"
@@ -186,11 +184,11 @@ msgstr "Моментальный"
msgid "successful"
msgstr "Успешный"
-#: engine/core/docs/drf/views.py:31
+#: engine/core/docs/drf/views.py:30
msgid "OpenAPI schema in selected format with selected language"
msgstr "Схема OpenAPI в выбранном формате с выбранным языком"
-#: engine/core/docs/drf/views.py:33
+#: engine/core/docs/drf/views.py:32
msgid ""
"OpenApi3 schema for this API. Format can be selected via content "
"negotiation. Language can be selected with Accept-Language and query "
@@ -200,11 +198,11 @@ msgstr ""
"содержимого. Язык может быть выбран с помощью Accept-Language и параметра "
"запроса."
-#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37
+#: engine/core/docs/drf/views.py:43 engine/core/graphene/mutations.py:37
msgid "cache I/O"
msgstr "Ввод/вывод кэша"
-#: engine/core/docs/drf/views.py:46
+#: engine/core/docs/drf/views.py:45
msgid ""
"apply only a key to read permitted data from cache.\n"
"apply key, data and timeout with authentication to write data to cache."
@@ -212,36 +210,36 @@ msgstr ""
"Применяйте только ключ для чтения разрешенных данных из кэша.\n"
"Применяйте ключ, данные и таймаут с аутентификацией для записи данных в кэш."
-#: engine/core/docs/drf/views.py:62
+#: engine/core/docs/drf/views.py:63
msgid "get a list of supported languages"
msgstr "Получите список поддерживаемых языков"
-#: engine/core/docs/drf/views.py:74
+#: engine/core/docs/drf/views.py:75
msgid "get application's exposable parameters"
msgstr "Получите параметры приложения, которые можно использовать"
-#: engine/core/docs/drf/views.py:84
+#: engine/core/docs/drf/views.py:89
msgid "send a message to the support team"
msgstr "Отправьте сообщение в службу поддержки"
-#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57
+#: engine/core/docs/drf/views.py:103 engine/core/graphene/mutations.py:59
msgid "request a CORSed URL"
msgstr "Запросите URL-адрес с поддержкой CORS. Допускается только https."
-#: engine/core/docs/drf/views.py:112
+#: engine/core/docs/drf/views.py:119
msgid "Search between products, categories and brands"
msgstr "Поиск между продуктами, категориями и брендами"
-#: engine/core/docs/drf/views.py:130
+#: engine/core/docs/drf/views.py:141
msgid "global search endpoint to query across project's tables"
msgstr ""
"Ручка глобального поиска для запросов по всем открытым таблицам проекта"
-#: engine/core/docs/drf/views.py:139
+#: engine/core/docs/drf/views.py:150
msgid "purchase an order as a business"
msgstr "Приобрести заказ в качестве предприятия"
-#: engine/core/docs/drf/views.py:146
+#: engine/core/docs/drf/views.py:158
msgid ""
"purchase an order as a business, using the provided `products` with "
"`product_uuid` and `attributes`."
@@ -249,233 +247,231 @@ msgstr ""
"Приобретите заказ как бизнес, используя предоставленные `продукты` с "
"`product_uuid` и `attributes`."
-#: engine/core/docs/drf/views.py:164
+#: engine/core/docs/drf/views.py:177
msgid "download a digital asset from purchased digital order"
msgstr "загрузить цифровой актив из приобретенного цифрового заказа"
-#: engine/core/docs/drf/viewsets.py:61
+#: engine/core/docs/drf/viewsets.py:65
msgid "list all attribute groups (simple view)"
msgstr "Список всех групп атрибутов (простой вид)"
-#: engine/core/docs/drf/viewsets.py:68
+#: engine/core/docs/drf/viewsets.py:75
msgid "retrieve a single attribute group (detailed view)"
msgstr "Получение одной группы атрибутов (подробный просмотр)"
-#: engine/core/docs/drf/viewsets.py:75
+#: engine/core/docs/drf/viewsets.py:82
msgid "create an attribute group"
msgstr "Создайте группу атрибутов"
-#: engine/core/docs/drf/viewsets.py:82
+#: engine/core/docs/drf/viewsets.py:92
msgid "delete an attribute group"
msgstr "Удаление группы атрибутов"
-#: engine/core/docs/drf/viewsets.py:89
+#: engine/core/docs/drf/viewsets.py:99
msgid "rewrite an existing attribute group saving non-editables"
msgstr ""
"Переписать существующую группу атрибутов с сохранением нередактируемых "
"элементов"
-#: engine/core/docs/drf/viewsets.py:96
-msgid ""
-"rewrite some fields of an existing attribute group saving non-editables"
+#: engine/core/docs/drf/viewsets.py:107
+msgid "rewrite some fields of an existing attribute group saving non-editables"
msgstr ""
"Переписывание некоторых полей существующей группы атрибутов с сохранением "
"нередактируемых полей"
-#: engine/core/docs/drf/viewsets.py:106
+#: engine/core/docs/drf/viewsets.py:118
msgid "list all attributes (simple view)"
msgstr "Список всех атрибутов (простой вид)"
-#: engine/core/docs/drf/viewsets.py:113
+#: engine/core/docs/drf/viewsets.py:128
msgid "retrieve a single attribute (detailed view)"
msgstr "Получение одного атрибута (подробный просмотр)"
-#: engine/core/docs/drf/viewsets.py:120
+#: engine/core/docs/drf/viewsets.py:135
msgid "create an attribute"
msgstr "Создайте атрибут"
-#: engine/core/docs/drf/viewsets.py:127
+#: engine/core/docs/drf/viewsets.py:142
msgid "delete an attribute"
msgstr "Удалить атрибут"
-#: engine/core/docs/drf/viewsets.py:134
+#: engine/core/docs/drf/viewsets.py:149
msgid "rewrite an existing attribute saving non-editables"
msgstr "Переписать существующий атрибут, сохранив нередактируемый"
-#: engine/core/docs/drf/viewsets.py:141
+#: engine/core/docs/drf/viewsets.py:156
msgid "rewrite some fields of an existing attribute saving non-editables"
msgstr ""
"Переписывание некоторых полей существующего атрибута с сохранением "
"нередактируемых полей"
-#: engine/core/docs/drf/viewsets.py:151
+#: engine/core/docs/drf/viewsets.py:166
msgid "list all attribute values (simple view)"
msgstr "Список всех значений атрибутов (простой вид)"
-#: engine/core/docs/drf/viewsets.py:158
+#: engine/core/docs/drf/viewsets.py:176
msgid "retrieve a single attribute value (detailed view)"
msgstr "Получение значения одного атрибута (подробный просмотр)"
-#: engine/core/docs/drf/viewsets.py:165
+#: engine/core/docs/drf/viewsets.py:183
msgid "create an attribute value"
msgstr "Создание значения атрибута"
-#: engine/core/docs/drf/viewsets.py:172
+#: engine/core/docs/drf/viewsets.py:193
msgid "delete an attribute value"
msgstr "Удалить значение атрибута"
-#: engine/core/docs/drf/viewsets.py:179
+#: engine/core/docs/drf/viewsets.py:200
msgid "rewrite an existing attribute value saving non-editables"
msgstr ""
"Перезапись существующего значения атрибута с сохранением нередактируемых "
"значений"
-#: engine/core/docs/drf/viewsets.py:186
-msgid ""
-"rewrite some fields of an existing attribute value saving non-editables"
+#: engine/core/docs/drf/viewsets.py:208
+msgid "rewrite some fields of an existing attribute value saving non-editables"
msgstr ""
"Переписывание некоторых полей существующего значения атрибута с сохранением "
"нередактируемых значений"
-#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197
+#: engine/core/docs/drf/viewsets.py:219 engine/core/docs/drf/viewsets.py:220
msgid "list all categories (simple view)"
msgstr "Список всех категорий (простой вид)"
-#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205
+#: engine/core/docs/drf/viewsets.py:230 engine/core/docs/drf/viewsets.py:231
msgid "retrieve a single category (detailed view)"
msgstr "Получение одной категории (подробный просмотр)"
-#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258
+#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:286
msgid "Category UUID or slug"
msgstr "UUID или slug категории"
-#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221
+#: engine/core/docs/drf/viewsets.py:246 engine/core/docs/drf/viewsets.py:247
msgid "create a category"
msgstr "Создайте категорию"
-#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229
+#: engine/core/docs/drf/viewsets.py:254 engine/core/docs/drf/viewsets.py:255
msgid "delete a category"
msgstr "Удалить категорию"
-#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237
+#: engine/core/docs/drf/viewsets.py:262 engine/core/docs/drf/viewsets.py:263
msgid "rewrite an existing category saving non-editables"
msgstr ""
"Переписать существующую категорию с сохранением нередактируемых объектов"
-#: engine/core/docs/drf/viewsets.py:244 engine/core/docs/drf/viewsets.py:245
+#: engine/core/docs/drf/viewsets.py:270 engine/core/docs/drf/viewsets.py:272
msgid "rewrite some fields of an existing category saving non-editables"
msgstr ""
"Переписать некоторые поля существующей категории с сохранением "
"нередактируемых полей"
-#: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704
-#: engine/core/docs/drf/viewsets.py:988
+#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:1046
#: engine/core/graphene/object_types.py:117
-#: engine/core/graphene/object_types.py:207
-#: engine/core/graphene/object_types.py:482
+#: engine/core/graphene/object_types.py:236
+#: engine/core/graphene/object_types.py:537
msgid "SEO Meta snapshot"
msgstr "Мета-данные для SEO"
-#: engine/core/docs/drf/viewsets.py:253
+#: engine/core/docs/drf/viewsets.py:281
msgid "returns a snapshot of the category's SEO meta data"
msgstr "Возвращает снимок SEO-метаданных категории."
-#: engine/core/docs/drf/viewsets.py:274
+#: engine/core/docs/drf/viewsets.py:302
msgid "list all orders (simple view)"
msgstr "Список всех категорий (простой вид)"
-#: engine/core/docs/drf/viewsets.py:275
+#: engine/core/docs/drf/viewsets.py:303
msgid "for non-staff users, only their own orders are returned."
msgstr ""
"Для пользователей, не являющихся сотрудниками, возвращаются только их "
"собственные заказы."
-#: engine/core/docs/drf/viewsets.py:281
+#: engine/core/docs/drf/viewsets.py:309
msgid ""
-"Case-insensitive substring search across human_readable_id, "
-"order_products.product.name, and order_products.product.partnumber"
+"Case-insensitive substring search across human_readable_id, order_products."
+"product.name, and order_products.product.partnumber"
msgstr ""
-"Поиск подстроки с учетом регистра в human_readable_id, "
-"order_products.product.name и order_products.product.partnumber"
+"Поиск подстроки с учетом регистра в human_readable_id, order_products."
+"product.name и order_products.product.partnumber"
-#: engine/core/docs/drf/viewsets.py:288
+#: engine/core/docs/drf/viewsets.py:316
msgid "Filter orders with buy_time >= this ISO 8601 datetime"
msgstr "Отфильтруйте ордера с buy_time >= этому времени ISO 8601"
-#: engine/core/docs/drf/viewsets.py:293
+#: engine/core/docs/drf/viewsets.py:321
msgid "Filter orders with buy_time <= this ISO 8601 datetime"
msgstr "Отфильтруйте ордера с buy_time <= этому времени ISO 8601"
-#: engine/core/docs/drf/viewsets.py:298
+#: engine/core/docs/drf/viewsets.py:326
msgid "Filter by exact order UUID"
msgstr "Фильтр по точному UUID заказа"
-#: engine/core/docs/drf/viewsets.py:303
+#: engine/core/docs/drf/viewsets.py:331
msgid "Filter by exact human-readable order ID"
msgstr "Фильтр по точному человекочитаемому идентификатору заказа"
-#: engine/core/docs/drf/viewsets.py:308
+#: engine/core/docs/drf/viewsets.py:336
msgid "Filter by user's email (case-insensitive exact match)"
msgstr ""
"Фильтр по электронной почте пользователя (точное совпадение без учета "
"регистра)"
-#: engine/core/docs/drf/viewsets.py:313
+#: engine/core/docs/drf/viewsets.py:341
msgid "Filter by user's UUID"
msgstr "Фильтр по UUID пользователя"
-#: engine/core/docs/drf/viewsets.py:318
+#: engine/core/docs/drf/viewsets.py:347
msgid "Filter by order status (case-insensitive substring match)"
msgstr ""
"Фильтр по статусу заказа (нечувствительное к регистру подстрочное "
"соответствие)"
-#: engine/core/docs/drf/viewsets.py:324
+#: engine/core/docs/drf/viewsets.py:354
msgid ""
-"Order by one of: uuid, human_readable_id, user_email, user, status, created,"
-" modified, buy_time, random. Prefix with '-' for descending (e.g. "
-"'-buy_time')."
+"Order by one of: uuid, human_readable_id, user_email, user, status, created, "
+"modified, buy_time, random. Prefix with '-' for descending (e.g. '-"
+"buy_time')."
msgstr ""
"Упорядочивайте по одному из следующих признаков: uuid, human_readable_id, "
"user_email, user, status, created, modified, buy_time, random. Префикс '-' "
"для нисходящего порядка (например, '-buy_time')."
-#: engine/core/docs/drf/viewsets.py:336
+#: engine/core/docs/drf/viewsets.py:366
msgid "retrieve a single order (detailed view)"
msgstr "Получение одной категории (подробный просмотр)"
-#: engine/core/docs/drf/viewsets.py:341
+#: engine/core/docs/drf/viewsets.py:371
msgid "Order UUID or human-readable id"
msgstr "UUID заказа или человекочитаемый идентификатор"
-#: engine/core/docs/drf/viewsets.py:351
+#: engine/core/docs/drf/viewsets.py:381
msgid "create an order"
msgstr "Создайте атрибут"
-#: engine/core/docs/drf/viewsets.py:352
+#: engine/core/docs/drf/viewsets.py:382
msgid "doesn't work for non-staff users."
msgstr "Не работает для нештатных пользователей."
-#: engine/core/docs/drf/viewsets.py:359
+#: engine/core/docs/drf/viewsets.py:389
msgid "delete an order"
msgstr "Удалить атрибут"
-#: engine/core/docs/drf/viewsets.py:366
+#: engine/core/docs/drf/viewsets.py:396
msgid "rewrite an existing order saving non-editables"
msgstr ""
"Переписать существующую категорию с сохранением нередактируемых объектов"
-#: engine/core/docs/drf/viewsets.py:373
+#: engine/core/docs/drf/viewsets.py:403
msgid "rewrite some fields of an existing order saving non-editables"
msgstr ""
"Переписать некоторые поля существующей категории с сохранением "
"нередактируемых полей"
-#: engine/core/docs/drf/viewsets.py:380
+#: engine/core/docs/drf/viewsets.py:410
msgid "purchase an order"
msgstr "Покупная цена на момент заказа"
-#: engine/core/docs/drf/viewsets.py:382
+#: engine/core/docs/drf/viewsets.py:412
msgid ""
"finalizes the order purchase. if `force_balance` is used, the purchase is "
"completed using the user's balance; if `force_payment` is used, a "
@@ -485,27 +481,27 @@ msgstr ""
"завершается с использованием баланса пользователя; если используется "
"`force_payment`, инициируется транзакция."
-#: engine/core/docs/drf/viewsets.py:397
+#: engine/core/docs/drf/viewsets.py:427
msgid "retrieve current pending order of a user"
msgstr "получить текущий отложенный ордер пользователя"
-#: engine/core/docs/drf/viewsets.py:398
+#: engine/core/docs/drf/viewsets.py:428
msgid "retrieves a current pending order of an authenticated user"
msgstr "извлекает текущий отложенный заказ аутентифицированного пользователя"
-#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334
+#: engine/core/docs/drf/viewsets.py:438 engine/core/graphene/mutations.py:354
msgid "purchase an order without account creation"
msgstr "приобретение заказа без создания учетной записи"
-#: engine/core/docs/drf/viewsets.py:409
+#: engine/core/docs/drf/viewsets.py:439
msgid "finalizes the order purchase for a non-registered user."
msgstr "завершает покупку заказа для незарегистрированного пользователя."
-#: engine/core/docs/drf/viewsets.py:420
+#: engine/core/docs/drf/viewsets.py:450
msgid "add product to order"
msgstr "Добавить товар в заказ"
-#: engine/core/docs/drf/viewsets.py:421
+#: engine/core/docs/drf/viewsets.py:452
msgid ""
"adds a product to an order using the provided `product_uuid` and "
"`attributes`."
@@ -513,23 +509,23 @@ msgstr ""
"Добавляет товар в заказ, используя предоставленные `product_uuid` и "
"`attributes`."
-#: engine/core/docs/drf/viewsets.py:429
+#: engine/core/docs/drf/viewsets.py:461
msgid "add a list of products to order, quantities will not count"
msgstr "Добавьте список продуктов для заказа, количество не учитывается"
-#: engine/core/docs/drf/viewsets.py:430
+#: engine/core/docs/drf/viewsets.py:463
msgid ""
"adds a list of products to an order using the provided `product_uuid` and "
"`attributes`."
msgstr ""
-"Добавляет список товаров в заказ, используя предоставленные `product_uuid` и"
-" `attributes`."
+"Добавляет список товаров в заказ, используя предоставленные `product_uuid` и "
+"`attributes`."
-#: engine/core/docs/drf/viewsets.py:438
+#: engine/core/docs/drf/viewsets.py:472
msgid "remove product from order"
msgstr "Удалить продукт из заказа"
-#: engine/core/docs/drf/viewsets.py:439
+#: engine/core/docs/drf/viewsets.py:474
msgid ""
"removes a product from an order using the provided `product_uuid` and "
"`attributes`."
@@ -537,743 +533,757 @@ msgstr ""
"Удаляет товар из заказа, используя предоставленные `product_uuid` и "
"`attributes`."
-#: engine/core/docs/drf/viewsets.py:447
+#: engine/core/docs/drf/viewsets.py:483
msgid "remove product from order, quantities will not count"
msgstr "Удалите продукт из заказа, количество не будет учитываться"
-#: engine/core/docs/drf/viewsets.py:448
+#: engine/core/docs/drf/viewsets.py:485
msgid ""
"removes a list of products from an order using the provided `product_uuid` "
"and `attributes`"
msgstr ""
-"Удаляет список товаров из заказа, используя предоставленные `product_uuid` и"
-" `attributes`."
+"Удаляет список товаров из заказа, используя предоставленные `product_uuid` и "
+"`attributes`."
-#: engine/core/docs/drf/viewsets.py:459
+#: engine/core/docs/drf/viewsets.py:497
msgid "list all wishlists (simple view)"
msgstr "Список всех атрибутов (простой вид)"
-#: engine/core/docs/drf/viewsets.py:460
+#: engine/core/docs/drf/viewsets.py:498
msgid "for non-staff users, only their own wishlists are returned."
msgstr ""
"Для пользователей, не являющихся сотрудниками, возвращаются только их "
"собственные списки желаний."
-#: engine/core/docs/drf/viewsets.py:467
+#: engine/core/docs/drf/viewsets.py:508
msgid "retrieve a single wishlist (detailed view)"
msgstr "Получение одного атрибута (подробный просмотр)"
-#: engine/core/docs/drf/viewsets.py:474
+#: engine/core/docs/drf/viewsets.py:515
msgid "create an wishlist"
msgstr "Создайте атрибут"
-#: engine/core/docs/drf/viewsets.py:475
+#: engine/core/docs/drf/viewsets.py:516
msgid "Doesn't work for non-staff users."
msgstr "Не работает для нештатных пользователей."
-#: engine/core/docs/drf/viewsets.py:482
+#: engine/core/docs/drf/viewsets.py:523
msgid "delete an wishlist"
msgstr "Удалить атрибут"
-#: engine/core/docs/drf/viewsets.py:489
+#: engine/core/docs/drf/viewsets.py:530
msgid "rewrite an existing wishlist saving non-editables"
msgstr "Переписать существующий атрибут, сохранив нередактируемый"
-#: engine/core/docs/drf/viewsets.py:496
+#: engine/core/docs/drf/viewsets.py:537
msgid "rewrite some fields of an existing wishlist saving non-editables"
msgstr ""
"Переписывание некоторых полей существующего атрибута с сохранением "
"нередактируемых полей"
-#: engine/core/docs/drf/viewsets.py:503
+#: engine/core/docs/drf/viewsets.py:544
msgid "retrieve current pending wishlist of a user"
msgstr "получение текущего списка желаний пользователя"
-#: engine/core/docs/drf/viewsets.py:504
+#: engine/core/docs/drf/viewsets.py:545
msgid "retrieves a current pending wishlist of an authenticated user"
msgstr ""
"Получает текущий ожидающий список желаний аутентифицированного пользователя"
-#: engine/core/docs/drf/viewsets.py:514
+#: engine/core/docs/drf/viewsets.py:555
msgid "add product to wishlist"
msgstr "Добавить товар в заказ"
-#: engine/core/docs/drf/viewsets.py:515
+#: engine/core/docs/drf/viewsets.py:557
msgid "adds a product to an wishlist using the provided `product_uuid`"
msgstr ""
"Добавляет товар в список желаний, используя предоставленный `product_uuid`."
-#: engine/core/docs/drf/viewsets.py:523
+#: engine/core/docs/drf/viewsets.py:566
msgid "remove product from wishlist"
msgstr "Удалить продукт из списка желаний"
-#: engine/core/docs/drf/viewsets.py:524
+#: engine/core/docs/drf/viewsets.py:568
msgid "removes a product from an wishlist using the provided `product_uuid`"
msgstr ""
"Удаляет продукт из списка желаний, используя предоставленный `product_uuid`."
-#: engine/core/docs/drf/viewsets.py:532
+#: engine/core/docs/drf/viewsets.py:577
msgid "add many products to wishlist"
msgstr "Добавьте много товаров в список желаний"
-#: engine/core/docs/drf/viewsets.py:533
+#: engine/core/docs/drf/viewsets.py:579
msgid "adds many products to an wishlist using the provided `product_uuids`"
msgstr ""
"Добавляет множество товаров в список желаний, используя предоставленные "
"`product_uuids`."
-#: engine/core/docs/drf/viewsets.py:541
+#: engine/core/docs/drf/viewsets.py:588
msgid "remove many products from wishlist"
msgstr "Удалить продукт из заказа"
-#: engine/core/docs/drf/viewsets.py:542
+#: engine/core/docs/drf/viewsets.py:590
msgid ""
"removes many products from an wishlist using the provided `product_uuids`"
msgstr ""
"Удаляет множество товаров из списка желаний, используя предоставленные "
"`product_uuids`."
-#: engine/core/docs/drf/viewsets.py:549
+#: engine/core/docs/drf/viewsets.py:598
msgid ""
"Filter by one or more attribute name/value pairs. \n"
"• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n"
-"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n"
-"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n"
+"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, "
+"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, "
+"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n"
+"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), "
+"`true`/`false` for booleans, integers, floats; otherwise treated as "
+"string. \n"
"• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n"
"Examples: \n"
-"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n"
+"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\","
+"\"bluetooth\"]`, \n"
"`b64-description=icontains-aGVhdC1jb2xk`"
msgstr ""
"Фильтр по одной или нескольким парам имя/значение атрибута. \n"
"- **Синтаксис**: `attr_name=method-value[;attr2=method2-value2]...`.\n"
-"- **Методы** (по умолчанию используется `icontains`, если опущено): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`.\n"
-"- **Типизация значений**: JSON сначала пытается принять значение (так что вы можете передавать списки/дискреты), `true`/`false` для булевых, целых чисел, плавающих; в противном случае обрабатывается как строка. \n"
-"- **Base64**: префикс `b64-` для безопасного для URL base64-кодирования исходного значения. \n"
+"- **Методы** (по умолчанию используется `icontains`, если опущено): "
+"`iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, "
+"`istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, "
+"`gt`, `gte`, `in`.\n"
+"- **Типизация значений**: JSON сначала пытается принять значение (так что вы "
+"можете передавать списки/дискреты), `true`/`false` для булевых, целых чисел, "
+"плавающих; в противном случае обрабатывается как строка. \n"
+"- **Base64**: префикс `b64-` для безопасного для URL base64-кодирования "
+"исходного значения. \n"
"Примеры: \n"
"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\", \"bluetooth\"]`,\n"
"`b64-description=icontains-aGVhdC1jb2xk`."
-#: engine/core/docs/drf/viewsets.py:568 engine/core/docs/drf/viewsets.py:569
+#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
msgid "list all products (simple view)"
msgstr "Список всех продуктов (простой вид)"
-#: engine/core/docs/drf/viewsets.py:574
+#: engine/core/docs/drf/viewsets.py:623
msgid "(exact) Product UUID"
msgstr "(точный) UUID продукта"
-#: engine/core/docs/drf/viewsets.py:581
+#: engine/core/docs/drf/viewsets.py:630
msgid ""
-"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n"
+"Comma-separated list of fields to sort by. Prefix with `-` for "
+"descending. \n"
"**Allowed:** uuid, rating, name, slug, created, modified, price, random"
msgstr ""
-"Список полей для сортировки, разделенных запятыми. Для сортировки по убыванию используйте префикс `-`. \n"
-"**Разрешенные:** uuid, рейтинг, название, slug, created, modified, price, random"
+"Список полей для сортировки, разделенных запятыми. Для сортировки по "
+"убыванию используйте префикс `-`. \n"
+"**Разрешенные:** uuid, рейтинг, название, slug, created, modified, price, "
+"random"
-#: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599
+#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
msgid "retrieve a single product (detailed view)"
msgstr "Получение одного продукта (подробный просмотр)"
-#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634
-#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672
-#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710
+#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683
+#: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725
+#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763
msgid "Product UUID or slug"
msgstr "UUID или Slug продукта"
-#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
+#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
#: engine/core/graphene/dashboard_mutations/product.py:80
#: engine/core/graphene/dashboard_mutations/product.py:118
#: engine/core/graphene/dashboard_mutations/product.py:166
msgid "create a product"
msgstr "Создать продукт"
-#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629
+#: engine/core/docs/drf/viewsets.py:677 engine/core/docs/drf/viewsets.py:678
msgid "rewrite an existing product, preserving non-editable fields"
msgstr "Переписать существующий продукт, сохранив нередактируемые поля"
-#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
+#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:700
msgid ""
"update some fields of an existing product, preserving non-editable fields"
msgstr ""
"Обновление некоторых полей существующего продукта с сохранением "
"нередактируемых полей"
-#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
+#: engine/core/docs/drf/viewsets.py:719 engine/core/docs/drf/viewsets.py:720
msgid "delete a product"
msgstr "Удалить продукт"
-#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686
+#: engine/core/docs/drf/viewsets.py:738 engine/core/docs/drf/viewsets.py:739
msgid "lists all permitted feedbacks for a product"
msgstr "список всех разрешенных отзывов о продукте"
-#: engine/core/docs/drf/viewsets.py:705
+#: engine/core/docs/drf/viewsets.py:758
msgid "returns a snapshot of the product's SEO meta data"
msgstr "Возвращает снимок метаданных SEO продукта."
-#: engine/core/docs/drf/viewsets.py:726
+#: engine/core/docs/drf/viewsets.py:779
msgid "list all addresses"
msgstr "Перечислите все адреса"
-#: engine/core/docs/drf/viewsets.py:736
+#: engine/core/docs/drf/viewsets.py:789
msgid "retrieve a single address"
msgstr "Получение одного адреса"
-#: engine/core/docs/drf/viewsets.py:746
+#: engine/core/docs/drf/viewsets.py:799
msgid "create a new address"
msgstr "Создайте новый адрес"
-#: engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:810
msgid "delete an address"
msgstr "Удалить адрес"
-#: engine/core/docs/drf/viewsets.py:767
+#: engine/core/docs/drf/viewsets.py:820
msgid "update an entire address"
msgstr "Обновление всего адреса"
-#: engine/core/docs/drf/viewsets.py:778
+#: engine/core/docs/drf/viewsets.py:831
msgid "partially update an address"
msgstr "Частичное обновление адреса"
-#: engine/core/docs/drf/viewsets.py:789
+#: engine/core/docs/drf/viewsets.py:842
msgid "autocomplete address suggestions"
msgstr "Автозаполнение ввода адреса"
-#: engine/core/docs/drf/viewsets.py:794
+#: engine/core/docs/drf/viewsets.py:848
msgid "raw data query string, please append with data from geo-IP endpoint"
msgstr ""
"Строка запроса сырых данных, пожалуйста, дополните ее данными с конечной "
"точки geo-IP"
-#: engine/core/docs/drf/viewsets.py:800
+#: engine/core/docs/drf/viewsets.py:855
msgid "limit the results amount, 1 < limit < 10, default: 5"
msgstr "ограничивает количество результатов, 1 < limit < 10, по умолчанию: 5"
-#: engine/core/docs/drf/viewsets.py:816
+#: engine/core/docs/drf/viewsets.py:871
msgid "list all feedbacks (simple view)"
msgstr "список всех отзывов (простой вид)"
-#: engine/core/docs/drf/viewsets.py:823
+#: engine/core/docs/drf/viewsets.py:881
msgid "retrieve a single feedback (detailed view)"
msgstr "получить один отзыв (подробный просмотр)"
-#: engine/core/docs/drf/viewsets.py:830
+#: engine/core/docs/drf/viewsets.py:888
msgid "create a feedback"
msgstr "создать отзыв"
-#: engine/core/docs/drf/viewsets.py:837
+#: engine/core/docs/drf/viewsets.py:895
msgid "delete a feedback"
msgstr "удалить отзыв"
-#: engine/core/docs/drf/viewsets.py:844
+#: engine/core/docs/drf/viewsets.py:902
msgid "rewrite an existing feedback saving non-editables"
msgstr ""
"Переписать существующую категорию с сохранением нередактируемых объектов"
-#: engine/core/docs/drf/viewsets.py:851
+#: engine/core/docs/drf/viewsets.py:909
msgid "rewrite some fields of an existing feedback saving non-editables"
msgstr ""
"Переписать некоторые поля существующей категории с сохранением "
"нередактируемых полей"
-#: engine/core/docs/drf/viewsets.py:861
+#: engine/core/docs/drf/viewsets.py:919
msgid "list all order–product relations (simple view)"
msgstr "список всех отношений \"заказ-продукт\" (простой вид)"
-#: engine/core/docs/drf/viewsets.py:871
+#: engine/core/docs/drf/viewsets.py:929
msgid "retrieve a single order–product relation (detailed view)"
msgstr "получить одно отношение \"заказ-продукт\" (подробный просмотр)"
-#: engine/core/docs/drf/viewsets.py:881
+#: engine/core/docs/drf/viewsets.py:939
msgid "create a new order–product relation"
msgstr "создать новое отношение \"заказ-продукт"
-#: engine/core/docs/drf/viewsets.py:891
+#: engine/core/docs/drf/viewsets.py:949
msgid "replace an existing order–product relation"
msgstr "заменить существующее отношение \"заказ-продукт"
-#: engine/core/docs/drf/viewsets.py:901
+#: engine/core/docs/drf/viewsets.py:959
msgid "partially update an existing order–product relation"
msgstr "частично обновить существующее отношение \"заказ-продукт"
-#: engine/core/docs/drf/viewsets.py:911
+#: engine/core/docs/drf/viewsets.py:969
msgid "delete an order–product relation"
msgstr "удалить отношение \"заказ-продукт"
-#: engine/core/docs/drf/viewsets.py:921
+#: engine/core/docs/drf/viewsets.py:979
msgid "add or remove feedback on an order–product relation"
msgstr "добавлять или удалять отзывы о связи заказ-продукт"
-#: engine/core/docs/drf/viewsets.py:938
+#: engine/core/docs/drf/viewsets.py:996
msgid "list all brands (simple view)"
msgstr "Список всех брендов (простой вид)"
-#: engine/core/docs/drf/viewsets.py:945
+#: engine/core/docs/drf/viewsets.py:1003
msgid "retrieve a single brand (detailed view)"
msgstr "Извлечение одного бренда (подробный просмотр)"
-#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993
+#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051
msgid "Brand UUID or slug"
msgstr "UUID бренда или ссылка"
-#: engine/core/docs/drf/viewsets.py:960
+#: engine/core/docs/drf/viewsets.py:1018
msgid "create a brand"
msgstr "Создайте бренд"
-#: engine/core/docs/drf/viewsets.py:967
+#: engine/core/docs/drf/viewsets.py:1025
msgid "delete a brand"
msgstr "Удалить бренд"
-#: engine/core/docs/drf/viewsets.py:974
+#: engine/core/docs/drf/viewsets.py:1032
msgid "rewrite an existing brand saving non-editables"
msgstr ""
"Переписать существующую категорию с сохранением нередактируемых объектов"
-#: engine/core/docs/drf/viewsets.py:981
+#: engine/core/docs/drf/viewsets.py:1039
msgid "rewrite some fields of an existing brand saving non-editables"
msgstr ""
"Переписать некоторые поля существующей категории с сохранением "
"нередактируемых полей"
-#: engine/core/docs/drf/viewsets.py:1006
+#: engine/core/docs/drf/viewsets.py:1064
msgid "list all vendors (simple view)"
msgstr "Список всех продавцов (простой вид)"
-#: engine/core/docs/drf/viewsets.py:1013
+#: engine/core/docs/drf/viewsets.py:1074
msgid "retrieve a single vendor (detailed view)"
msgstr "Получение данных по одному поставщику (подробный просмотр)"
-#: engine/core/docs/drf/viewsets.py:1020
+#: engine/core/docs/drf/viewsets.py:1081
msgid "create a vendor"
msgstr "Создать поставщика"
-#: engine/core/docs/drf/viewsets.py:1027
+#: engine/core/docs/drf/viewsets.py:1088
msgid "delete a vendor"
msgstr "Удалить поставщика"
-#: engine/core/docs/drf/viewsets.py:1034
+#: engine/core/docs/drf/viewsets.py:1095
msgid "rewrite an existing vendor saving non-editables"
msgstr ""
"Переписать существующую категорию с сохранением нередактируемых объектов"
-#: engine/core/docs/drf/viewsets.py:1041
+#: engine/core/docs/drf/viewsets.py:1102
msgid "rewrite some fields of an existing vendor saving non-editables"
msgstr ""
"Переписать некоторые поля существующей категории с сохранением "
"нередактируемых полей"
-#: engine/core/docs/drf/viewsets.py:1051
+#: engine/core/docs/drf/viewsets.py:1112
msgid "list all product images (simple view)"
msgstr "Список всех изображений товаров (простой вид)"
-#: engine/core/docs/drf/viewsets.py:1058
+#: engine/core/docs/drf/viewsets.py:1122
msgid "retrieve a single product image (detailed view)"
msgstr "Получение изображения одного продукта (детальный просмотр)"
-#: engine/core/docs/drf/viewsets.py:1065
+#: engine/core/docs/drf/viewsets.py:1129
msgid "create a product image"
msgstr "Создайте изображение продукта"
-#: engine/core/docs/drf/viewsets.py:1072
+#: engine/core/docs/drf/viewsets.py:1139
msgid "delete a product image"
msgstr "Удаление изображения продукта"
-#: engine/core/docs/drf/viewsets.py:1079
+#: engine/core/docs/drf/viewsets.py:1146
msgid "rewrite an existing product image saving non-editables"
msgstr ""
"Переписать существующую категорию с сохранением нередактируемых объектов"
-#: engine/core/docs/drf/viewsets.py:1086
+#: engine/core/docs/drf/viewsets.py:1154
msgid "rewrite some fields of an existing product image saving non-editables"
msgstr ""
"Переписать некоторые поля существующей категории с сохранением "
"нередактируемых полей"
-#: engine/core/docs/drf/viewsets.py:1096
+#: engine/core/docs/drf/viewsets.py:1165
msgid "list all promo codes (simple view)"
msgstr "Список всех промокодов (простой вид)"
-#: engine/core/docs/drf/viewsets.py:1103
+#: engine/core/docs/drf/viewsets.py:1175
msgid "retrieve a single promo code (detailed view)"
msgstr "Получение одного промокода (подробный просмотр)"
-#: engine/core/docs/drf/viewsets.py:1110
+#: engine/core/docs/drf/viewsets.py:1182
msgid "create a promo code"
msgstr "Создайте промокод"
-#: engine/core/docs/drf/viewsets.py:1117
+#: engine/core/docs/drf/viewsets.py:1189
msgid "delete a promo code"
msgstr "Удалить промокод"
-#: engine/core/docs/drf/viewsets.py:1124
+#: engine/core/docs/drf/viewsets.py:1196
msgid "rewrite an existing promo code saving non-editables"
msgstr ""
"Переписать существующую категорию с сохранением нередактируемых объектов"
-#: engine/core/docs/drf/viewsets.py:1131
+#: engine/core/docs/drf/viewsets.py:1203
msgid "rewrite some fields of an existing promo code saving non-editables"
msgstr ""
"Переписать некоторые поля существующей категории с сохранением "
"нередактируемых полей"
-#: engine/core/docs/drf/viewsets.py:1141
+#: engine/core/docs/drf/viewsets.py:1213
msgid "list all promotions (simple view)"
msgstr "Список всех рекламных акций (простой вид)"
-#: engine/core/docs/drf/viewsets.py:1148
+#: engine/core/docs/drf/viewsets.py:1223
msgid "retrieve a single promotion (detailed view)"
msgstr "Получение одной акции (подробный просмотр)"
-#: engine/core/docs/drf/viewsets.py:1155
+#: engine/core/docs/drf/viewsets.py:1230
msgid "create a promotion"
msgstr "Создайте рекламную акцию"
-#: engine/core/docs/drf/viewsets.py:1162
+#: engine/core/docs/drf/viewsets.py:1237
msgid "delete a promotion"
msgstr "Удалить акцию"
-#: engine/core/docs/drf/viewsets.py:1169
+#: engine/core/docs/drf/viewsets.py:1244
msgid "rewrite an existing promotion saving non-editables"
msgstr ""
"Переписать существующую категорию с сохранением нередактируемых объектов"
-#: engine/core/docs/drf/viewsets.py:1176
+#: engine/core/docs/drf/viewsets.py:1251
msgid "rewrite some fields of an existing promotion saving non-editables"
msgstr ""
"Переписать некоторые поля существующей категории с сохранением "
"нередактируемых полей"
-#: engine/core/docs/drf/viewsets.py:1186
+#: engine/core/docs/drf/viewsets.py:1261
msgid "list all stocks (simple view)"
msgstr "Список всех акций (простой вид)"
-#: engine/core/docs/drf/viewsets.py:1193
+#: engine/core/docs/drf/viewsets.py:1268
msgid "retrieve a single stock (detailed view)"
msgstr "Получение одной акции (подробный просмотр)"
-#: engine/core/docs/drf/viewsets.py:1200
+#: engine/core/docs/drf/viewsets.py:1275
msgid "create a stock record"
msgstr "Создайте запись о запасах"
-#: engine/core/docs/drf/viewsets.py:1207
+#: engine/core/docs/drf/viewsets.py:1282
msgid "delete a stock record"
msgstr "Удаление записи о запасах"
-#: engine/core/docs/drf/viewsets.py:1214
+#: engine/core/docs/drf/viewsets.py:1289
msgid "rewrite an existing stock record saving non-editables"
msgstr ""
"Переписать существующую категорию с сохранением нередактируемых объектов"
-#: engine/core/docs/drf/viewsets.py:1221
+#: engine/core/docs/drf/viewsets.py:1297
msgid "rewrite some fields of an existing stock record saving non-editables"
msgstr ""
"Переписать некоторые поля существующей категории с сохранением "
"нередактируемых полей"
-#: engine/core/docs/drf/viewsets.py:1231
+#: engine/core/docs/drf/viewsets.py:1308
msgid "list all product tags (simple view)"
msgstr "Список всех тегов товара (простой вид)"
-#: engine/core/docs/drf/viewsets.py:1238
+#: engine/core/docs/drf/viewsets.py:1318
msgid "retrieve a single product tag (detailed view)"
msgstr "Получение одной метки товара (подробный просмотр)"
-#: engine/core/docs/drf/viewsets.py:1245
+#: engine/core/docs/drf/viewsets.py:1325
msgid "create a product tag"
msgstr "Создайте тег продукта"
-#: engine/core/docs/drf/viewsets.py:1252
+#: engine/core/docs/drf/viewsets.py:1335
msgid "delete a product tag"
msgstr "Удаление тега продукта"
-#: engine/core/docs/drf/viewsets.py:1259
+#: engine/core/docs/drf/viewsets.py:1342
msgid "rewrite an existing product tag saving non-editables"
msgstr ""
"Переписать существующую категорию с сохранением нередактируемых объектов"
-#: engine/core/docs/drf/viewsets.py:1266
+#: engine/core/docs/drf/viewsets.py:1350
msgid "rewrite some fields of an existing product tag saving non-editables"
msgstr ""
"Переписать некоторые поля существующей категории с сохранением "
"нередактируемых полей"
-#: engine/core/elasticsearch/__init__.py:122
-#: engine/core/elasticsearch/__init__.py:570
+#: engine/core/elasticsearch/__init__.py:127
+#: engine/core/elasticsearch/__init__.py:627
msgid "no search term provided."
msgstr "Поисковый запрос не предоставлен."
-#: engine/core/filters.py:69 engine/core/filters.py:426
-#: engine/core/filters.py:553
+#: engine/core/filters.py:78 engine/core/filters.py:484
+#: engine/core/filters.py:625
msgid "Search"
msgstr "Поиск"
-#: engine/core/filters.py:70 engine/core/filters.py:583
-#: engine/core/filters.py:612
+#: engine/core/filters.py:79 engine/core/filters.py:662
+#: engine/core/filters.py:691
msgid "UUID"
msgstr "UUID"
-#: engine/core/filters.py:71 engine/core/filters.py:428
-#: engine/core/filters.py:555
+#: engine/core/filters.py:80 engine/core/filters.py:487
+#: engine/core/filters.py:627
msgid "Name"
msgstr "Имя"
-#: engine/core/filters.py:72 engine/core/filters.py:557
+#: engine/core/filters.py:82 engine/core/filters.py:630
msgid "Categories"
msgstr "Категории"
-#: engine/core/filters.py:74
+#: engine/core/filters.py:86
msgid "Categories Slugs"
msgstr "Категории Слизни"
-#: engine/core/filters.py:75 engine/core/filters.py:436
+#: engine/core/filters.py:88 engine/core/filters.py:495
msgid "Tags"
msgstr "Теги"
-#: engine/core/filters.py:76
+#: engine/core/filters.py:90
msgid "Min Price"
msgstr "Мин. цена"
-#: engine/core/filters.py:77
+#: engine/core/filters.py:93
msgid "Max Price"
msgstr "Максимальная цена"
-#: engine/core/filters.py:78
+#: engine/core/filters.py:95
msgid "Is Active"
msgstr "Активен"
-#: engine/core/filters.py:79
+#: engine/core/filters.py:96
msgid "Brand"
msgstr "Бренд"
-#: engine/core/filters.py:80
+#: engine/core/filters.py:97
msgid "Attributes"
msgstr "Атрибуты"
-#: engine/core/filters.py:81
+#: engine/core/filters.py:99
msgid "Quantity"
msgstr "Количество"
-#: engine/core/filters.py:82 engine/core/filters.py:430
-#: engine/core/filters.py:556 engine/core/models.py:321
-#: engine/core/models.py:489 engine/core/models.py:644
+#: engine/core/filters.py:101 engine/core/filters.py:489
+#: engine/core/filters.py:628 engine/core/models.py:327
+#: engine/core/models.py:508 engine/core/models.py:665
msgid "Slug"
msgstr "Слаг"
-#: engine/core/filters.py:83
+#: engine/core/filters.py:102
msgid "Is Digital"
msgstr "Цифровой"
-#: engine/core/filters.py:84
+#: engine/core/filters.py:104
msgid "Include sub-categories"
msgstr "Включите подкатегории"
-#: engine/core/filters.py:87
+#: engine/core/filters.py:108
msgid "Include personal ordered"
msgstr "Включите продукты, заказанные лично"
-#: engine/core/filters.py:89 engine/core/models.py:648
+#: engine/core/filters.py:110 engine/core/models.py:669
msgid "SKU"
msgstr "Артикул"
-#: engine/core/filters.py:184
+#: engine/core/filters.py:212
msgid "there must be a category_uuid to use include_subcategories flag"
msgstr ""
"Для использования флага include_subcategories должен быть указан "
"category_uuid."
-#: engine/core/filters.py:353
+#: engine/core/filters.py:398
msgid "Search (ID, product name or part number)"
msgstr "Поиск (идентификатор, название продукта или номер детали)"
-#: engine/core/filters.py:356
+#: engine/core/filters.py:402
msgid "Bought after (inclusive)"
msgstr "Куплено после (включительно)"
-#: engine/core/filters.py:357
+#: engine/core/filters.py:405
msgid "Bought before (inclusive)"
msgstr "Куплено ранее (включительно)"
-#: engine/core/filters.py:360 engine/core/filters.py:407
-#: engine/core/filters.py:614
+#: engine/core/filters.py:410 engine/core/filters.py:461
+#: engine/core/filters.py:696
msgid "User email"
msgstr "Электронная почта пользователя"
-#: engine/core/filters.py:361 engine/core/filters.py:408
-#: engine/core/filters.py:592 engine/core/filters.py:613
+#: engine/core/filters.py:413 engine/core/filters.py:464
+#: engine/core/filters.py:671 engine/core/filters.py:693
msgid "User UUID"
msgstr "UUID пользователя"
-#: engine/core/filters.py:362
+#: engine/core/filters.py:415
msgid "Status"
msgstr "Статус"
-#: engine/core/filters.py:366
+#: engine/core/filters.py:419
msgid "Human Readable ID"
msgstr "Человекочитаемый идентификатор"
-#: engine/core/filters.py:429
+#: engine/core/filters.py:488
msgid "Parent"
msgstr "Родитель"
-#: engine/core/filters.py:433
+#: engine/core/filters.py:492
msgid "Whole category(has at least 1 product or not)"
msgstr "Вся категория (есть хотя бы 1 продукт или нет)"
-#: engine/core/filters.py:437
+#: engine/core/filters.py:496
msgid "Level"
msgstr "Уровень"
-#: engine/core/filters.py:587
+#: engine/core/filters.py:666
msgid "Product UUID"
msgstr "UUID продукта"
-#: engine/core/graphene/mutations.py:40
+#: engine/core/graphene/mutations.py:41
msgid "key to look for in or set into the cache"
msgstr "Ключ, который нужно найти в тайнике или вложить в него"
-#: engine/core/graphene/mutations.py:41
+#: engine/core/graphene/mutations.py:43
msgid "data to store in cache"
msgstr "Данные для хранения в кэше"
-#: engine/core/graphene/mutations.py:44
+#: engine/core/graphene/mutations.py:46
msgid "timeout in seconds to set the data for into the cache"
msgstr "Тайм-аут в секундах для занесения данных в кэш"
-#: engine/core/graphene/mutations.py:47
+#: engine/core/graphene/mutations.py:49
msgid "cached data"
msgstr "Кэшированные данные"
-#: engine/core/graphene/mutations.py:62
+#: engine/core/graphene/mutations.py:64
msgid "camelized JSON data from the requested URL"
msgstr "Camelized JSON-данные из запрашиваемого URL"
-#: engine/core/graphene/mutations.py:67 engine/core/views.py:257
+#: engine/core/graphene/mutations.py:69 engine/core/views.py:249
msgid "only URLs starting with http(s):// are allowed"
msgstr "Допускаются только URL-адреса, начинающиеся с http(s)://"
-#: engine/core/graphene/mutations.py:83
+#: engine/core/graphene/mutations.py:87
msgid "add a product to the order"
msgstr "Добавить товар в заказ"
-#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131
-#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287
+#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139
+#: engine/core/graphene/mutations.py:255 engine/core/graphene/mutations.py:307
#, python-brace-format
msgid "order {order_uuid} not found"
msgstr "Заказ {order_uuid} не найден!"
-#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159
+#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167
msgid "remove a product from the order"
msgstr "Удалить продукт из заказа"
-#: engine/core/graphene/mutations.py:137
+#: engine/core/graphene/mutations.py:145
msgid "remove all products from the order"
msgstr "Удалить все товары из заказа"
-#: engine/core/graphene/mutations.py:182
+#: engine/core/graphene/mutations.py:190
msgid "buy an order"
msgstr "Купить заказ"
-#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265
+#: engine/core/graphene/mutations.py:221 engine/core/graphene/mutations.py:283
msgid "please provide either order_uuid or order_hr_id - mutually exclusive"
msgstr ""
"Пожалуйста, укажите либо order_uuid, либо order_hr_id - взаимоисключающие "
"варианты!"
-#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501
-#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712
+#: engine/core/graphene/mutations.py:250 engine/core/graphene/mutations.py:525
+#: engine/core/graphene/mutations.py:574 engine/core/viewsets.py:753
msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr "Неправильный тип получен из метода order.buy(): {type(instance)!s}"
-#: engine/core/graphene/mutations.py:245
+#: engine/core/graphene/mutations.py:261
msgid "perform an action on a list of products in the order"
msgstr "Выполните действие над списком товаров в заказе"
-#: engine/core/graphene/mutations.py:250
+#: engine/core/graphene/mutations.py:266
msgid "remove/add"
msgstr "Удалить/добавить"
-#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323
+#: engine/core/graphene/mutations.py:302 engine/core/graphene/mutations.py:343
msgid "action must be either add or remove"
msgstr "Действие должно быть либо \"добавить\", либо \"удалить\"!"
-#: engine/core/graphene/mutations.py:293
+#: engine/core/graphene/mutations.py:313
msgid "perform an action on a list of products in the wishlist"
msgstr "Выполните действие над списком продуктов в списке желаний"
-#: engine/core/graphene/mutations.py:311
+#: engine/core/graphene/mutations.py:331
msgid "please provide wishlist_uuid value"
msgstr "Пожалуйста, укажите значение `wishlist_uuid`."
-#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404
-#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460
-#: engine/core/graphene/mutations.py:504
+#: engine/core/graphene/mutations.py:348 engine/core/graphene/mutations.py:424
+#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480
+#: engine/core/graphene/mutations.py:530
#, python-brace-format
msgid "wishlist {wishlist_uuid} not found"
msgstr "Список желаний {wishlist_uuid} не найден!"
-#: engine/core/graphene/mutations.py:382
+#: engine/core/graphene/mutations.py:402
msgid "add a product to the wishlist"
msgstr "Добавить товар в заказ"
-#: engine/core/graphene/mutations.py:410
+#: engine/core/graphene/mutations.py:430
msgid "remove a product from the wishlist"
msgstr "Удалить продукт из заказа"
-#: engine/core/graphene/mutations.py:438
+#: engine/core/graphene/mutations.py:458
msgid "remove all products from the wishlist"
msgstr "Удалить продукт из заказа"
-#: engine/core/graphene/mutations.py:466
+#: engine/core/graphene/mutations.py:486
msgid "buy all products from the wishlist"
msgstr "Удалить продукт из заказа"
-#: engine/core/graphene/mutations.py:510
+#: engine/core/graphene/mutations.py:536
msgid "buy a product"
msgstr "Купить заказ"
-#: engine/core/graphene/mutations.py:516
+#: engine/core/graphene/mutations.py:543
msgid ""
-"please send the attributes as the string formatted like "
-"attr1=value1,attr2=value2"
+"please send the attributes as the string formatted like attr1=value1,"
+"attr2=value2"
msgstr ""
"Пожалуйста, отправьте атрибуты в виде строки, отформатированной как "
"attr1=value1,attr2=value2"
-#: engine/core/graphene/mutations.py:549
+#: engine/core/graphene/mutations.py:581
msgid "add or delete a feedback for orderproduct"
msgstr "Добавить или удалить отзыв для продукта заказа"
-#: engine/core/graphene/mutations.py:573
+#: engine/core/graphene/mutations.py:607
msgid "action must be either `add` or `remove`"
msgstr "Действие должно быть либо `add`, либо `remove`!"
-#: engine/core/graphene/mutations.py:576
+#: engine/core/graphene/mutations.py:610
#, python-brace-format
msgid "order product {order_product_uuid} not found"
msgstr "Заказ товара {order_product_uuid} не найден!"
-#: engine/core/graphene/mutations.py:582
+#: engine/core/graphene/mutations.py:617
msgid "original address string provided by the user"
msgstr "Оригинальная строка адреса, предоставленная пользователем"
-#: engine/core/graphene/mutations.py:618 engine/core/models.py:955
-#: engine/core/models.py:968 engine/core/models.py:1383
-#: engine/core/models.py:1412 engine/core/models.py:1437
-#: engine/core/viewsets.py:715
+#: engine/core/graphene/mutations.py:654 engine/core/models.py:978
+#: engine/core/models.py:991 engine/core/models.py:1435
+#: engine/core/models.py:1466 engine/core/models.py:1497
+#: engine/core/viewsets.py:760
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr "{name} не существует: {uuid}!"
-#: engine/core/graphene/mutations.py:632
+#: engine/core/graphene/mutations.py:668
msgid "limit must be between 1 and 10"
msgstr "Предел должен быть от 1 до 10"
-#: engine/core/graphene/mutations.py:681
+#: engine/core/graphene/mutations.py:717
msgid "elasticsearch - works like a charm"
msgstr "ElasticSearch - работает как шарм"
#: engine/core/graphene/object_types.py:82
-#: engine/core/graphene/object_types.py:370
-#: engine/core/graphene/object_types.py:417 engine/core/models.py:772
-#: engine/core/models.py:1250 engine/core/models.py:1897
+#: engine/core/graphene/object_types.py:417
+#: engine/core/graphene/object_types.py:468 engine/core/models.py:795
+#: engine/core/models.py:1289 engine/core/models.py:2021
msgid "attributes"
msgstr "Атрибуты"
@@ -1286,92 +1296,91 @@ msgid "groups of attributes"
msgstr "Группы атрибутов"
#: engine/core/graphene/object_types.py:116
-#: engine/core/graphene/object_types.py:193
-#: engine/core/graphene/object_types.py:223 engine/core/models.py:432
+#: engine/core/graphene/object_types.py:214
+#: engine/core/graphene/object_types.py:252 engine/core/models.py:451
msgid "categories"
msgstr "Категории"
-#: engine/core/graphene/object_types.py:124 engine/core/models.py:503
+#: engine/core/graphene/object_types.py:132 engine/core/models.py:522
msgid "brands"
msgstr "Бренды"
-#: engine/core/graphene/object_types.py:195
+#: engine/core/graphene/object_types.py:216
msgid "category image url"
msgstr "Категории"
-#: engine/core/graphene/object_types.py:196
-#: engine/core/graphene/object_types.py:317 engine/core/models.py:283
+#: engine/core/graphene/object_types.py:217
+#: engine/core/graphene/object_types.py:362 engine/core/models.py:289
msgid "markup percentage"
msgstr "Процент наценки"
-#: engine/core/graphene/object_types.py:199
+#: engine/core/graphene/object_types.py:221
msgid "which attributes and values can be used for filtering this category."
msgstr ""
"Какие атрибуты и значения можно использовать для фильтрации этой категории."
-#: engine/core/graphene/object_types.py:203
-msgid ""
-"minimum and maximum prices for products in this category, if available."
+#: engine/core/graphene/object_types.py:227
+msgid "minimum and maximum prices for products in this category, if available."
msgstr ""
"Минимальные и максимальные цены на товары в этой категории, если они "
"доступны."
-#: engine/core/graphene/object_types.py:205
+#: engine/core/graphene/object_types.py:231
msgid "tags for this category"
msgstr "Теги для этой категории"
-#: engine/core/graphene/object_types.py:206
+#: engine/core/graphene/object_types.py:234
msgid "products in this category"
msgstr "Продукты в этой категории"
-#: engine/core/graphene/object_types.py:324 engine/core/models.py:188
+#: engine/core/graphene/object_types.py:369 engine/core/models.py:194
msgid "vendors"
msgstr "Поставщики"
-#: engine/core/graphene/object_types.py:328
+#: engine/core/graphene/object_types.py:373
msgid "Latitude (Y coordinate)"
msgstr "Широта (координата Y)"
-#: engine/core/graphene/object_types.py:329
+#: engine/core/graphene/object_types.py:374
msgid "Longitude (X coordinate)"
msgstr "Долгота (координата X)"
-#: engine/core/graphene/object_types.py:358
+#: engine/core/graphene/object_types.py:403
msgid "comment"
msgstr "Как"
-#: engine/core/graphene/object_types.py:359
-#: engine/core/graphene/object_types.py:483
+#: engine/core/graphene/object_types.py:405
+#: engine/core/graphene/object_types.py:539
msgid "rating value from 1 to 10, inclusive, or 0 if not set."
msgstr ""
"Значение рейтинга от 1 до 10, включительно, или 0, если он не установлен."
-#: engine/core/graphene/object_types.py:366
+#: engine/core/graphene/object_types.py:413
msgid "represents feedback from a user."
msgstr "Представляет собой отзыв пользователя."
-#: engine/core/graphene/object_types.py:371
-#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244
+#: engine/core/graphene/object_types.py:418
+#: engine/core/graphene/object_types.py:469 engine/core/models.py:1283
msgid "notifications"
msgstr "Уведомления"
-#: engine/core/graphene/object_types.py:372
+#: engine/core/graphene/object_types.py:420
msgid "download url for this order product if applicable"
msgstr "Если применимо, загрузите url для этого продукта заказа"
-#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736
+#: engine/core/graphene/object_types.py:422 engine/core/models.py:1848
msgid "feedback"
msgstr "Обратная связь"
-#: engine/core/graphene/object_types.py:407
+#: engine/core/graphene/object_types.py:456
msgid "a list of order products in this order"
msgstr "Список товаров, заказанных в этом заказе"
-#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214
+#: engine/core/graphene/object_types.py:458 engine/core/models.py:1253
msgid "billing address"
msgstr "Адрес для выставления счетов"
-#: engine/core/graphene/object_types.py:412
+#: engine/core/graphene/object_types.py:462
msgid ""
"shipping address for this order, leave blank if same as billing address or "
"if not applicable"
@@ -1379,53 +1388,53 @@ msgstr ""
"Адрес доставки для данного заказа, оставьте пустым, если он совпадает с "
"адресом выставления счета или не применяется"
-#: engine/core/graphene/object_types.py:414
+#: engine/core/graphene/object_types.py:465
msgid "total price of this order"
msgstr "Общая стоимость этого заказа"
-#: engine/core/graphene/object_types.py:415
+#: engine/core/graphene/object_types.py:466
msgid "total quantity of products in order"
msgstr "Общее количество продуктов в заказе"
-#: engine/core/graphene/object_types.py:416
+#: engine/core/graphene/object_types.py:467
msgid "are all products in the order digital"
msgstr "Все ли товары в заказе представлены в цифровом виде"
-#: engine/core/graphene/object_types.py:419
+#: engine/core/graphene/object_types.py:471
msgid "transactions for this order"
msgstr "Операции для этого заказа"
-#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278
+#: engine/core/graphene/object_types.py:491 engine/core/models.py:1317
msgid "orders"
msgstr "Заказы"
-#: engine/core/graphene/object_types.py:459
+#: engine/core/graphene/object_types.py:512
msgid "image url"
msgstr "URL-адрес изображения"
-#: engine/core/graphene/object_types.py:466
+#: engine/core/graphene/object_types.py:519
msgid "product's images"
msgstr "Изображения товара"
-#: engine/core/graphene/object_types.py:473 engine/core/models.py:431
-#: engine/core/models.py:586
+#: engine/core/graphene/object_types.py:526 engine/core/models.py:450
+#: engine/core/models.py:607
msgid "category"
msgstr "Категория"
-#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737
+#: engine/core/graphene/object_types.py:528 engine/core/models.py:1849
msgid "feedbacks"
msgstr "Отзывы"
-#: engine/core/graphene/object_types.py:476 engine/core/models.py:502
-#: engine/core/models.py:595
+#: engine/core/graphene/object_types.py:529 engine/core/models.py:521
+#: engine/core/models.py:616
msgid "brand"
msgstr "Бренд"
-#: engine/core/graphene/object_types.py:477 engine/core/models.py:106
+#: engine/core/graphene/object_types.py:531 engine/core/models.py:106
msgid "attribute groups"
msgstr "Группы атрибутов"
-#: engine/core/graphene/object_types.py:478
+#: engine/core/graphene/object_types.py:533
#: engine/core/templates/digital_order_created_email.html:111
#: engine/core/templates/digital_order_delivered_email.html:109
#: engine/core/templates/shipped_order_created_email.html:109
@@ -1433,7 +1442,7 @@ msgstr "Группы атрибутов"
msgid "price"
msgstr "Цена"
-#: engine/core/graphene/object_types.py:479
+#: engine/core/graphene/object_types.py:534
#: engine/core/templates/digital_order_created_email.html:110
#: engine/core/templates/digital_order_delivered_email.html:108
#: engine/core/templates/shipped_order_created_email.html:108
@@ -1441,39 +1450,39 @@ msgstr "Цена"
msgid "quantity"
msgstr "Количество"
-#: engine/core/graphene/object_types.py:480
+#: engine/core/graphene/object_types.py:535
msgid "number of feedbacks"
msgstr "Количество отзывов"
-#: engine/core/graphene/object_types.py:481
+#: engine/core/graphene/object_types.py:536
msgid "only available for personal orders"
msgstr "Продукты доступны только для личных заказов"
-#: engine/core/graphene/object_types.py:484
+#: engine/core/graphene/object_types.py:541
msgid "discount price"
msgstr "Цена со скидкой"
-#: engine/core/graphene/object_types.py:508 engine/core/models.py:658
+#: engine/core/graphene/object_types.py:565 engine/core/models.py:679
msgid "products"
msgstr "Товары"
-#: engine/core/graphene/object_types.py:611
+#: engine/core/graphene/object_types.py:675
msgid "promocodes"
msgstr "Промокоды"
-#: engine/core/graphene/object_types.py:621
+#: engine/core/graphene/object_types.py:690
msgid "products on sale"
msgstr "Продукты в продаже"
-#: engine/core/graphene/object_types.py:628 engine/core/models.py:904
+#: engine/core/graphene/object_types.py:698 engine/core/models.py:927
msgid "promotions"
msgstr "Промоакции"
-#: engine/core/graphene/object_types.py:632 engine/core/models.py:187
+#: engine/core/graphene/object_types.py:702 engine/core/models.py:193
msgid "vendor"
msgstr "Поставщик"
-#: engine/core/graphene/object_types.py:633 engine/core/models.py:657
+#: engine/core/graphene/object_types.py:703 engine/core/models.py:678
#: engine/core/templates/digital_order_created_email.html:109
#: engine/core/templates/digital_order_delivered_email.html:107
#: engine/core/templates/shipped_order_created_email.html:107
@@ -1481,100 +1490,100 @@ msgstr "Поставщик"
msgid "product"
msgstr "Товар"
-#: engine/core/graphene/object_types.py:644 engine/core/models.py:927
+#: engine/core/graphene/object_types.py:715 engine/core/models.py:950
msgid "wishlisted products"
msgstr "Продукты из списка желаний"
-#: engine/core/graphene/object_types.py:650 engine/core/models.py:944
+#: engine/core/graphene/object_types.py:722 engine/core/models.py:967
msgid "wishlists"
msgstr "Списки желаний"
-#: engine/core/graphene/object_types.py:654
+#: engine/core/graphene/object_types.py:727
msgid "tagged products"
msgstr "Tagged products"
-#: engine/core/graphene/object_types.py:661 engine/core/models.py:224
-#: engine/core/models.py:601
+#: engine/core/graphene/object_types.py:735 engine/core/models.py:230
+#: engine/core/models.py:622
msgid "product tags"
msgstr "Теги товара"
-#: engine/core/graphene/object_types.py:665
+#: engine/core/graphene/object_types.py:740
msgid "tagged categories"
msgstr "Категории с метками"
-#: engine/core/graphene/object_types.py:672
+#: engine/core/graphene/object_types.py:748
msgid "categories tags"
msgstr "Теги категорий"
-#: engine/core/graphene/object_types.py:676
+#: engine/core/graphene/object_types.py:752
msgid "project name"
msgstr "Название проекта"
-#: engine/core/graphene/object_types.py:677
+#: engine/core/graphene/object_types.py:753
msgid "company name"
msgstr "Название компании"
-#: engine/core/graphene/object_types.py:678
+#: engine/core/graphene/object_types.py:754
msgid "company address"
msgstr "Адрес компании"
-#: engine/core/graphene/object_types.py:679
+#: engine/core/graphene/object_types.py:755
msgid "company phone number"
msgstr "Номер телефона компании"
-#: engine/core/graphene/object_types.py:680
+#: engine/core/graphene/object_types.py:758
msgid "email from, sometimes it must be used instead of host user value"
msgstr ""
"'email from', иногда его нужно использовать вместо значения пользователя "
"хоста."
-#: engine/core/graphene/object_types.py:681
+#: engine/core/graphene/object_types.py:761
msgid "email host user"
msgstr "Пользователь узла электронной почты"
-#: engine/core/graphene/object_types.py:682
+#: engine/core/graphene/object_types.py:762
msgid "maximum amount for payment"
msgstr "Максимальная сумма для оплаты"
-#: engine/core/graphene/object_types.py:683
+#: engine/core/graphene/object_types.py:763
msgid "minimum amount for payment"
msgstr "Минимальная сумма для оплаты"
-#: engine/core/graphene/object_types.py:684
+#: engine/core/graphene/object_types.py:764
msgid "analytics data"
msgstr "Аналитические данные"
-#: engine/core/graphene/object_types.py:685
+#: engine/core/graphene/object_types.py:765
msgid "advertisement data"
msgstr "Рекламные данные"
-#: engine/core/graphene/object_types.py:688
+#: engine/core/graphene/object_types.py:768
msgid "company configuration"
msgstr "Конфигурация"
-#: engine/core/graphene/object_types.py:692
+#: engine/core/graphene/object_types.py:772
msgid "language code"
msgstr "Код языка"
-#: engine/core/graphene/object_types.py:693
+#: engine/core/graphene/object_types.py:773
msgid "language name"
msgstr "Название языка"
-#: engine/core/graphene/object_types.py:694
+#: engine/core/graphene/object_types.py:774
msgid "language flag, if exists :)"
msgstr "Языковой флаг, если он существует :)"
-#: engine/core/graphene/object_types.py:697
+#: engine/core/graphene/object_types.py:777
msgid "supported languages"
msgstr "Получите список поддерживаемых языков"
-#: engine/core/graphene/object_types.py:728
-#: engine/core/graphene/object_types.py:729
-#: engine/core/graphene/object_types.py:730
+#: engine/core/graphene/object_types.py:809
+#: engine/core/graphene/object_types.py:812
+#: engine/core/graphene/object_types.py:815
msgid "products search results"
msgstr "Результаты поиска товаров"
-#: engine/core/graphene/object_types.py:731
+#: engine/core/graphene/object_types.py:817
msgid "posts search results"
msgstr "Результаты поиска товаров"
@@ -1603,7 +1612,7 @@ msgstr "Родительская группа атрибутов"
msgid "attribute group's name"
msgstr "Имя группы атрибутов"
-#: engine/core/models.py:105 engine/core/models.py:734
+#: engine/core/models.py:105 engine/core/models.py:755
msgid "attribute group"
msgstr "Группа атрибутов"
@@ -1626,49 +1635,49 @@ msgstr ""
"метаданные и ограничения, что делает ее пригодной для использования в "
"системах, взаимодействующих со сторонними поставщиками."
-#: engine/core/models.py:124
+#: engine/core/models.py:125
msgid "stores credentials and endpoints required for vendor communication"
msgstr ""
-"Хранит учетные данные и конечные точки, необходимые для взаимодействия с API"
-" поставщика."
+"Хранит учетные данные и конечные точки, необходимые для взаимодействия с API "
+"поставщика."
-#: engine/core/models.py:125
+#: engine/core/models.py:127
msgid "authentication info"
msgstr "Информация об аутентификации"
-#: engine/core/models.py:130
+#: engine/core/models.py:132
msgid "define the markup for products retrieved from this vendor"
msgstr "Определите наценку для товаров, полученных от этого продавца"
-#: engine/core/models.py:131
+#: engine/core/models.py:133
msgid "vendor markup percentage"
msgstr "Процент наценки поставщика"
-#: engine/core/models.py:135
+#: engine/core/models.py:137
msgid "name of this vendor"
msgstr "Имя этого продавца"
-#: engine/core/models.py:136
+#: engine/core/models.py:138
msgid "vendor name"
msgstr "Название поставщика"
-#: engine/core/models.py:147
+#: engine/core/models.py:153
msgid "response file"
msgstr "файл ответа"
-#: engine/core/models.py:148
+#: engine/core/models.py:154
msgid "vendor's last processing response"
msgstr "последний ответ поставщика на обработку"
-#: engine/core/models.py:154
+#: engine/core/models.py:160
msgid "vendor's integration file path"
msgstr "Путь к файлу интеграции поставщика"
-#: engine/core/models.py:155
+#: engine/core/models.py:161
msgid "integration path"
msgstr "Путь интеграции"
-#: engine/core/models.py:197
+#: engine/core/models.py:203
msgid ""
"Represents a product tag used for classifying or identifying products. The "
"ProductTag class is designed to uniquely identify and classify products "
@@ -1678,32 +1687,32 @@ msgid ""
msgstr ""
"Представляет тег продукта, используемый для классификации или идентификации "
"продуктов. Класс ProductTag предназначен для уникальной идентификации и "
-"классификации продуктов с помощью комбинации внутреннего идентификатора тега"
-" и удобного для пользователя отображаемого имени. Он поддерживает операции, "
+"классификации продуктов с помощью комбинации внутреннего идентификатора тега "
+"и удобного для пользователя отображаемого имени. Он поддерживает операции, "
"экспортируемые через миксины, и обеспечивает настройку метаданных для "
"административных целей."
-#: engine/core/models.py:209 engine/core/models.py:240
+#: engine/core/models.py:215 engine/core/models.py:246
msgid "internal tag identifier for the product tag"
msgstr "Внутренний идентификатор тега для тега продукта"
-#: engine/core/models.py:210 engine/core/models.py:241
+#: engine/core/models.py:216 engine/core/models.py:247
msgid "tag name"
msgstr "Название тега"
-#: engine/core/models.py:214 engine/core/models.py:245
+#: engine/core/models.py:220 engine/core/models.py:251
msgid "user-friendly name for the product tag"
msgstr "Удобное название для метки продукта"
-#: engine/core/models.py:215 engine/core/models.py:246
+#: engine/core/models.py:221 engine/core/models.py:252
msgid "tag display name"
msgstr "Отображаемое имя тега"
-#: engine/core/models.py:223
+#: engine/core/models.py:229
msgid "product tag"
msgstr "Метка продукта"
-#: engine/core/models.py:229
+#: engine/core/models.py:235
msgid ""
"Represents a category tag used for products. This class models a category "
"tag that can be used to associate and classify products. It includes "
@@ -1711,18 +1720,18 @@ msgid ""
msgstr ""
"Представляет тег категории, используемый для продуктов. Этот класс "
"моделирует тег категории, который может быть использован для ассоциации и "
-"классификации продуктов. Он включает атрибуты для внутреннего идентификатора"
-" тега и удобного для пользователя отображаемого имени."
+"классификации продуктов. Он включает атрибуты для внутреннего идентификатора "
+"тега и удобного для пользователя отображаемого имени."
-#: engine/core/models.py:254
+#: engine/core/models.py:260
msgid "category tag"
msgstr "тег категории"
-#: engine/core/models.py:255 engine/core/models.py:327
+#: engine/core/models.py:261 engine/core/models.py:333
msgid "category tags"
msgstr "теги категорий"
-#: engine/core/models.py:260
+#: engine/core/models.py:266
msgid ""
"Represents a category entity to organize and group related items in a "
"hierarchical structure. Categories may have hierarchical relationships with "
@@ -1736,115 +1745,114 @@ msgid ""
msgstr ""
"Представляет собой объект категории для организации и группировки связанных "
"элементов в иерархическую структуру. Категории могут иметь иерархические "
-"отношения с другими категориями, поддерживая отношения \"родитель-ребенок\"."
-" Класс включает поля для метаданных и визуального представления, которые "
+"отношения с другими категориями, поддерживая отношения \"родитель-ребенок\". "
+"Класс включает поля для метаданных и визуального представления, которые "
"служат основой для функций, связанных с категориями. Этот класс обычно "
"используется для определения и управления категориями товаров или другими "
"подобными группировками в приложении, позволяя пользователям или "
"администраторам указывать название, описание и иерархию категорий, а также "
"назначать атрибуты, такие как изображения, теги или приоритет."
-#: engine/core/models.py:274
+#: engine/core/models.py:280
msgid "upload an image representing this category"
msgstr "Загрузите изображение, представляющее эту категорию"
-#: engine/core/models.py:277
+#: engine/core/models.py:283
msgid "category image"
msgstr "Изображение категории"
-#: engine/core/models.py:282
+#: engine/core/models.py:288
msgid "define a markup percentage for products in this category"
msgstr "Определите процент наценки для товаров в этой категории"
-#: engine/core/models.py:291
+#: engine/core/models.py:297
msgid "parent of this category to form a hierarchical structure"
msgstr "Родитель данной категории для формирования иерархической структуры"
-#: engine/core/models.py:292
+#: engine/core/models.py:298
msgid "parent category"
msgstr "Родительская категория"
-#: engine/core/models.py:297
+#: engine/core/models.py:303
msgid "category name"
msgstr "Название категории"
-#: engine/core/models.py:298
+#: engine/core/models.py:304
msgid "provide a name for this category"
msgstr "Укажите название этой категории"
-#: engine/core/models.py:305
+#: engine/core/models.py:311
msgid "add a detailed description for this category"
msgstr "Добавьте подробное описание для этой категории"
-#: engine/core/models.py:306
+#: engine/core/models.py:312
msgid "category description"
msgstr "Описание категории"
-#: engine/core/models.py:326
+#: engine/core/models.py:332
msgid "tags that help describe or group this category"
msgstr "теги, которые помогают описать или сгруппировать эту категорию"
-#: engine/core/models.py:333 engine/core/models.py:495
+#: engine/core/models.py:339 engine/core/models.py:514
msgid "priority"
msgstr "Приоритет"
-#: engine/core/models.py:438
+#: engine/core/models.py:457
msgid ""
"Represents a Brand object in the system. This class handles information and "
"attributes related to a brand, including its name, logos, description, "
"associated categories, a unique slug, and priority order. It allows for the "
-"organization and representation of brand-related data within the "
-"application."
+"organization and representation of brand-related data within the application."
msgstr ""
"Представляет объект Brand в системе. Этот класс обрабатывает информацию и "
"атрибуты, связанные с брендом, включая его название, логотипы, описание, "
"связанные категории, уникальную метку и порядок приоритетов. Он позволяет "
"организовать и представить данные, связанные с брендом, в приложении."
-#: engine/core/models.py:448
+#: engine/core/models.py:467
msgid "name of this brand"
msgstr "Название этой марки"
-#: engine/core/models.py:449
+#: engine/core/models.py:468
msgid "brand name"
msgstr "Название бренда"
-#: engine/core/models.py:456
+#: engine/core/models.py:475
msgid "upload a logo representing this brand"
msgstr "Загрузите логотип, представляющий этот бренд"
-#: engine/core/models.py:458
+#: engine/core/models.py:477
msgid "brand small image"
msgstr "Маленький образ бренда"
-#: engine/core/models.py:464
+#: engine/core/models.py:483
msgid "upload a big logo representing this brand"
msgstr "Загрузите большой логотип, представляющий этот бренд"
-#: engine/core/models.py:466
+#: engine/core/models.py:485
msgid "brand big image"
msgstr "Большой имидж бренда"
-#: engine/core/models.py:471
+#: engine/core/models.py:490
msgid "add a detailed description of the brand"
msgstr "Добавьте подробное описание бренда"
-#: engine/core/models.py:472
+#: engine/core/models.py:491
msgid "brand description"
msgstr "Описание бренда"
-#: engine/core/models.py:477
+#: engine/core/models.py:496
msgid "optional categories that this brand is associated with"
msgstr "Дополнительные категории, с которыми ассоциируется этот бренд"
-#: engine/core/models.py:478
+#: engine/core/models.py:497
msgid "associated categories"
msgstr "Категории"
-#: engine/core/models.py:508
+#: engine/core/models.py:527
msgid ""
-"Represents the stock of a product managed in the system. This class provides"
-" details about the relationship between vendors, products, and their stock "
+"Represents the stock of a product managed in the system. This class provides "
+"details about the relationship between vendors, products, and their stock "
"information, as well as inventory-related properties like price, purchase "
"price, quantity, SKU, and digital assets. It is part of the inventory "
"management system to allow tracking and evaluation of products available "
@@ -1857,72 +1865,72 @@ msgstr ""
"активы. Он является частью системы управления запасами, позволяющей "
"отслеживать и оценивать продукты, доступные у различных поставщиков."
-#: engine/core/models.py:520
+#: engine/core/models.py:539
msgid "the vendor supplying this product stock"
msgstr "Поставщик, поставляющий данный товар на склад"
-#: engine/core/models.py:521
+#: engine/core/models.py:540
msgid "associated vendor"
msgstr "Ассоциированный поставщик"
-#: engine/core/models.py:525
+#: engine/core/models.py:544
msgid "final price to the customer after markups"
msgstr "Окончательная цена для покупателя после наценок"
-#: engine/core/models.py:526
+#: engine/core/models.py:545
msgid "selling price"
msgstr "Цена продажи"
-#: engine/core/models.py:531
+#: engine/core/models.py:550
msgid "the product associated with this stock entry"
msgstr "Продукт, связанный с этой складской записью"
-#: engine/core/models.py:532 engine/core/models.py:797
-#: engine/core/models.py:843 engine/core/models.py:1792
+#: engine/core/models.py:551 engine/core/models.py:820
+#: engine/core/models.py:866 engine/core/models.py:1904
msgid "associated product"
msgstr "Сопутствующий товар"
-#: engine/core/models.py:539
+#: engine/core/models.py:558
msgid "the price paid to the vendor for this product"
msgstr "Цена, уплаченная продавцу за этот продукт"
-#: engine/core/models.py:540
+#: engine/core/models.py:559
msgid "vendor purchase price"
msgstr "Цена покупки у поставщика"
-#: engine/core/models.py:544
+#: engine/core/models.py:563
msgid "available quantity of the product in stock"
msgstr "Доступное количество продукта на складе"
-#: engine/core/models.py:545
+#: engine/core/models.py:564
msgid "quantity in stock"
msgstr "Количество на складе"
-#: engine/core/models.py:549
+#: engine/core/models.py:568
msgid "vendor-assigned SKU for identifying the product"
msgstr "Присвоенный поставщиком SKU для идентификации продукта"
-#: engine/core/models.py:550
+#: engine/core/models.py:569
msgid "vendor sku"
msgstr "Артикул поставщика"
-#: engine/core/models.py:556
+#: engine/core/models.py:575
msgid "digital file associated with this stock if applicable"
msgstr "Цифровой файл, связанный с этой акцией, если применимо"
-#: engine/core/models.py:557
+#: engine/core/models.py:576
msgid "digital file"
msgstr "Цифровой файл"
-#: engine/core/models.py:560
+#: engine/core/models.py:580
msgid "system attributes"
msgstr "Атрибуты системы"
-#: engine/core/models.py:567
+#: engine/core/models.py:588
msgid "stock entries"
msgstr "Наличия"
-#: engine/core/models.py:572
+#: engine/core/models.py:593
msgid ""
"Represents a product with attributes such as category, brand, tags, digital "
"status, name, description, part number, and slug. Provides related utility "
@@ -1937,67 +1945,67 @@ msgstr ""
"цифровой статус, название, описание, номер детали и метка. Предоставляет "
"связанные с ним полезные свойства для получения оценок, количества отзывов, "
"цены, количества и общего числа заказов. Предназначен для использования в "
-"системе, которая занимается электронной коммерцией или управлением запасами."
-" Этот класс взаимодействует со связанными моделями (такими как Category, "
+"системе, которая занимается электронной коммерцией или управлением запасами. "
+"Этот класс взаимодействует со связанными моделями (такими как Category, "
"Brand и ProductTag) и управляет кэшированием часто используемых свойств для "
"повышения производительности. Он используется для определения и "
"манипулирования данными о товаре и связанной с ним информацией в приложении."
-#: engine/core/models.py:585
+#: engine/core/models.py:606
msgid "category this product belongs to"
msgstr "Категория, к которой относится этот продукт"
-#: engine/core/models.py:594
+#: engine/core/models.py:615
msgid "optionally associate this product with a brand"
msgstr "По желанию ассоциируйте этот продукт с брендом"
-#: engine/core/models.py:600
+#: engine/core/models.py:621
msgid "tags that help describe or group this product"
msgstr "Теги, которые помогают описать или сгруппировать этот продукт"
-#: engine/core/models.py:605
+#: engine/core/models.py:626
msgid "indicates whether this product is digitally delivered"
msgstr "Указывает, поставляется ли этот продукт в цифровом виде"
-#: engine/core/models.py:606
+#: engine/core/models.py:627
msgid "is product digital"
msgstr "Является ли продукт цифровым"
-#: engine/core/models.py:612
+#: engine/core/models.py:633
msgid "provide a clear identifying name for the product"
msgstr "Обеспечьте четкое идентификационное название продукта"
-#: engine/core/models.py:613
+#: engine/core/models.py:634
msgid "product name"
msgstr "Название продукта"
-#: engine/core/models.py:619 engine/core/models.py:892
+#: engine/core/models.py:640 engine/core/models.py:915
msgid "add a detailed description of the product"
msgstr "Добавьте подробное описание продукта"
-#: engine/core/models.py:620
+#: engine/core/models.py:641
msgid "product description"
msgstr "Описание товара"
-#: engine/core/models.py:627
+#: engine/core/models.py:648
msgid "part number for this product"
msgstr "Парт. номер для данного товара"
-#: engine/core/models.py:628
+#: engine/core/models.py:649
msgid "part number"
msgstr "Парт. номер"
-#: engine/core/models.py:647
+#: engine/core/models.py:668
msgid "stock keeping unit for this product"
msgstr "Единица складского учета для данного продукта"
-#: engine/core/models.py:720
+#: engine/core/models.py:741
msgid ""
"Represents an attribute in the system. This class is used to define and "
"manage attributes, which are customizable pieces of data that can be "
"associated with other entities. Attributes have associated categories, "
-"groups, value types, and names. The model supports multiple types of values,"
-" including string, integer, float, boolean, array, and object. This allows "
+"groups, value types, and names. The model supports multiple types of values, "
+"including string, integer, float, boolean, array, and object. This allows "
"for dynamic and flexible data structuring."
msgstr ""
"Представляет атрибут в системе. Этот класс используется для определения и "
@@ -2008,91 +2016,91 @@ msgstr ""
"плавающую форму, булевую форму, массив и объект. Это позволяет динамично и "
"гибко структурировать данные."
-#: engine/core/models.py:733
+#: engine/core/models.py:754
msgid "group of this attribute"
msgstr "Группа этого атрибута"
-#: engine/core/models.py:739
+#: engine/core/models.py:760
msgid "string"
msgstr "Строка"
-#: engine/core/models.py:740
+#: engine/core/models.py:761
msgid "integer"
msgstr "Целое число"
-#: engine/core/models.py:741
+#: engine/core/models.py:762
msgid "float"
msgstr "Поплавок"
-#: engine/core/models.py:742
+#: engine/core/models.py:763
msgid "boolean"
msgstr "Булево"
-#: engine/core/models.py:743
+#: engine/core/models.py:764
msgid "array"
msgstr "Массив"
-#: engine/core/models.py:744
+#: engine/core/models.py:765
msgid "object"
msgstr "Объект"
-#: engine/core/models.py:746
+#: engine/core/models.py:767
msgid "type of the attribute's value"
msgstr "Тип значения атрибута"
-#: engine/core/models.py:747
+#: engine/core/models.py:768
msgid "value type"
msgstr "Тип значения"
-#: engine/core/models.py:752
+#: engine/core/models.py:773
msgid "name of this attribute"
msgstr "Имя этого атрибута"
-#: engine/core/models.py:753
+#: engine/core/models.py:774
msgid "attribute's name"
msgstr "Имя атрибута"
-#: engine/core/models.py:758
+#: engine/core/models.py:779
msgid "is filterable"
msgstr "поддается фильтрации"
-#: engine/core/models.py:759
+#: engine/core/models.py:781
msgid "designates whether this attribute can be used for filtering or not"
msgstr ""
"Какие атрибуты и значения можно использовать для фильтрации этой категории."
-#: engine/core/models.py:771 engine/core/models.py:789
+#: engine/core/models.py:794 engine/core/models.py:812
#: engine/core/templates/digital_order_delivered_email.html:134
msgid "attribute"
msgstr "Атрибут"
-#: engine/core/models.py:777
+#: engine/core/models.py:800
msgid ""
-"Represents a specific value for an attribute that is linked to a product. It"
-" links the 'attribute' to a unique 'value', allowing better organization and"
-" dynamic representation of product characteristics."
+"Represents a specific value for an attribute that is linked to a product. It "
+"links the 'attribute' to a unique 'value', allowing better organization and "
+"dynamic representation of product characteristics."
msgstr ""
-"Представляет собой конкретное значение для атрибута, связанного с продуктом."
-" Он связывает \"атрибут\" с уникальным \"значением\", позволяя лучше "
+"Представляет собой конкретное значение для атрибута, связанного с продуктом. "
+"Он связывает \"атрибут\" с уникальным \"значением\", позволяя лучше "
"организовать и динамически представить характеристики продукта."
-#: engine/core/models.py:788
+#: engine/core/models.py:811
msgid "attribute of this value"
msgstr "Атрибут этого значения"
-#: engine/core/models.py:796
+#: engine/core/models.py:819
msgid "the specific product associated with this attribute's value"
msgstr "Конкретный продукт, связанный со значением этого атрибута"
-#: engine/core/models.py:802
+#: engine/core/models.py:825
msgid "the specific value for this attribute"
msgstr "Конкретное значение для этого атрибута"
-#: engine/core/models.py:815
+#: engine/core/models.py:838
msgid ""
"Represents a product image associated with a product in the system. This "
-"class is designed to manage images for products, including functionality for"
-" uploading image files, associating them with specific products, and "
+"class is designed to manage images for products, including functionality for "
+"uploading image files, associating them with specific products, and "
"determining their display order. It also includes an accessibility feature "
"with alternative text for the images."
msgstr ""
@@ -2102,48 +2110,48 @@ msgstr ""
"товарам и определения порядка их отображения. Он также включает функцию "
"доступности с альтернативным текстом для изображений."
-#: engine/core/models.py:826
+#: engine/core/models.py:849
msgid "provide alternative text for the image for accessibility"
msgstr ""
"Предоставьте альтернативный текст для изображения, чтобы обеспечить "
"доступность"
-#: engine/core/models.py:827
+#: engine/core/models.py:850
msgid "image alt text"
msgstr "Альтовый текст изображения"
-#: engine/core/models.py:830
+#: engine/core/models.py:853
msgid "upload the image file for this product"
msgstr "Загрузите файл изображения для этого продукта"
-#: engine/core/models.py:831 engine/core/models.py:862
+#: engine/core/models.py:854 engine/core/models.py:885
msgid "product image"
msgstr "Изображение продукта"
-#: engine/core/models.py:836
+#: engine/core/models.py:859
msgid "determines the order in which images are displayed"
msgstr "Определяет порядок отображения изображений"
-#: engine/core/models.py:837
+#: engine/core/models.py:860
msgid "display priority"
msgstr "Приоритет отображения"
-#: engine/core/models.py:842
+#: engine/core/models.py:865
msgid "the product that this image represents"
msgstr "Продукт, который представлен на этом изображении"
-#: engine/core/models.py:863
+#: engine/core/models.py:886
msgid "product images"
msgstr "Изображения товаров"
-#: engine/core/models.py:868
+#: engine/core/models.py:891
msgid ""
"Represents a promotional campaign for products with a discount. This class "
"is used to define and manage promotional campaigns that offer a percentage-"
"based discount for products. The class includes attributes for setting the "
"discount rate, providing details about the promotion, and linking it to the "
-"applicable products. It integrates with the product catalog to determine the"
-" affected items in the campaign."
+"applicable products. It integrates with the product catalog to determine the "
+"affected items in the campaign."
msgstr ""
"Представляет рекламную кампанию для товаров со скидкой. Этот класс "
"используется для определения и управления рекламными кампаниями, "
@@ -2152,39 +2160,39 @@ msgstr ""
"акции и привязки ее к соответствующим товарам. Он интегрируется с каталогом "
"товаров для определения товаров, на которые распространяется акция."
-#: engine/core/models.py:880
+#: engine/core/models.py:903
msgid "percentage discount for the selected products"
msgstr "Процентная скидка на выбранные продукты"
-#: engine/core/models.py:881
+#: engine/core/models.py:904
msgid "discount percentage"
msgstr "Процент скидки"
-#: engine/core/models.py:886
+#: engine/core/models.py:909
msgid "provide a unique name for this promotion"
msgstr "Укажите уникальное имя для этой акции"
-#: engine/core/models.py:887
+#: engine/core/models.py:910
msgid "promotion name"
msgstr "Название акции"
-#: engine/core/models.py:893
+#: engine/core/models.py:916
msgid "promotion description"
msgstr "Описание акции"
-#: engine/core/models.py:898
+#: engine/core/models.py:921
msgid "select which products are included in this promotion"
msgstr "Выберите, какие продукты участвуют в этой акции"
-#: engine/core/models.py:899
+#: engine/core/models.py:922
msgid "included products"
msgstr "Включенные продукты"
-#: engine/core/models.py:903
+#: engine/core/models.py:926
msgid "promotion"
msgstr "Продвижение"
-#: engine/core/models.py:914
+#: engine/core/models.py:937
msgid ""
"Represents a user's wishlist for storing and managing desired products. The "
"class provides functionality to manage a collection of products, supporting "
@@ -2197,60 +2205,60 @@ msgstr ""
"товаров, а также поддерживая операции добавления и удаления нескольких "
"товаров одновременно."
-#: engine/core/models.py:926
+#: engine/core/models.py:949
msgid "products that the user has marked as wanted"
msgstr "Продукты, которые пользователь отметил как желаемые"
-#: engine/core/models.py:934
+#: engine/core/models.py:957
msgid "user who owns this wishlist"
msgstr "Пользователь, владеющий этим списком желаний"
-#: engine/core/models.py:935
+#: engine/core/models.py:958
msgid "wishlist owner"
msgstr "Владелец вишлиста"
-#: engine/core/models.py:943
+#: engine/core/models.py:966
msgid "wishlist"
msgstr "Список желаний"
-#: engine/core/models.py:985
+#: engine/core/models.py:1008
msgid ""
"Represents a documentary record tied to a product. This class is used to "
"store information about documentaries related to specific products, "
"including file uploads and their metadata. It contains methods and "
"properties to handle the file type and storage path for the documentary "
-"files. It extends functionality from specific mixins and provides additional"
-" custom features."
+"files. It extends functionality from specific mixins and provides additional "
+"custom features."
msgstr ""
"Представляет документальную запись, связанную с продуктом. Этот класс "
"используется для хранения информации о документальных записях, связанных с "
"конкретными продуктами, включая загруженные файлы и их метаданные. Он "
"содержит методы и свойства для обработки типа файла и пути хранения "
-"документальных файлов. Он расширяет функциональность определенных миксинов и"
-" предоставляет дополнительные пользовательские возможности."
+"документальных файлов. Он расширяет функциональность определенных миксинов и "
+"предоставляет дополнительные пользовательские возможности."
-#: engine/core/models.py:998
+#: engine/core/models.py:1023
msgid "documentary"
msgstr "Документальный фильм"
-#: engine/core/models.py:999
+#: engine/core/models.py:1024
msgid "documentaries"
msgstr "Документальные фильмы"
-#: engine/core/models.py:1009
+#: engine/core/models.py:1034
msgid "unresolved"
msgstr "Неразрешенные"
-#: engine/core/models.py:1014
+#: engine/core/models.py:1039
msgid ""
-"Represents an address entity that includes location details and associations"
-" with a user. Provides functionality for geographic and address data "
-"storage, as well as integration with geocoding services. This class is "
-"designed to store detailed address information including components like "
-"street, city, region, country, and geolocation (longitude and latitude). It "
-"supports integration with geocoding APIs, enabling the storage of raw API "
-"responses for further processing or inspection. The class also allows "
-"associating an address with a user, facilitating personalized data handling."
+"Represents an address entity that includes location details and associations "
+"with a user. Provides functionality for geographic and address data storage, "
+"as well as integration with geocoding services. This class is designed to "
+"store detailed address information including components like street, city, "
+"region, country, and geolocation (longitude and latitude). It supports "
+"integration with geocoding APIs, enabling the storage of raw API responses "
+"for further processing or inspection. The class also allows associating an "
+"address with a user, facilitating personalized data handling."
msgstr ""
"Представляет адресную сущность, включающую сведения о местоположении и "
"ассоциации с пользователем. Обеспечивает функциональность для хранения "
@@ -2262,59 +2270,59 @@ msgstr ""
"обработки или проверки. Класс также позволяет ассоциировать адрес с "
"пользователем, что облегчает работу с персонализированными данными."
-#: engine/core/models.py:1029
+#: engine/core/models.py:1054
msgid "address line for the customer"
msgstr "Адресная строка для клиента"
-#: engine/core/models.py:1030
+#: engine/core/models.py:1055
msgid "address line"
msgstr "Адресная строка"
-#: engine/core/models.py:1032
+#: engine/core/models.py:1057
msgid "street"
msgstr "Улица"
-#: engine/core/models.py:1033
+#: engine/core/models.py:1058
msgid "district"
msgstr "Округ"
-#: engine/core/models.py:1034
+#: engine/core/models.py:1059
msgid "city"
msgstr "Город"
-#: engine/core/models.py:1035
+#: engine/core/models.py:1060
msgid "region"
msgstr "Регион"
-#: engine/core/models.py:1036
+#: engine/core/models.py:1061
msgid "postal code"
msgstr "Почтовый индекс"
-#: engine/core/models.py:1037
+#: engine/core/models.py:1062
msgid "country"
msgstr "Страна"
-#: engine/core/models.py:1044
+#: engine/core/models.py:1069
msgid "geolocation point: (longitude, latitude)"
msgstr "Геолокационная точка(долгота, широта)"
-#: engine/core/models.py:1047
+#: engine/core/models.py:1075
msgid "full JSON response from geocoder for this address"
msgstr "Полный JSON-ответ от геокодера для этого адреса"
-#: engine/core/models.py:1052
+#: engine/core/models.py:1081
msgid "stored JSON response from the geocoding service"
msgstr "Сохраненный JSON-ответ от сервиса геокодирования"
-#: engine/core/models.py:1060
+#: engine/core/models.py:1091
msgid "address"
msgstr "Адрес"
-#: engine/core/models.py:1061
+#: engine/core/models.py:1092
msgid "addresses"
msgstr "Адреса"
-#: engine/core/models.py:1073
+#: engine/core/models.py:1104
msgid ""
"Represents a promotional code that can be used for discounts, managing its "
"validity, type of discount, and application. The PromoCode class stores "
@@ -2326,245 +2334,244 @@ msgstr ""
"Представляет промокод, который можно использовать для получения скидки, "
"управляя его сроком действия, типом скидки и применением. Класс PromoCode "
"хранит информацию о промокоде, включая его уникальный идентификатор, "
-"свойства скидки (размер или процент), срок действия, связанного пользователя"
-" (если таковой имеется) и статус его использования. Он включает в себя "
+"свойства скидки (размер или процент), срок действия, связанного пользователя "
+"(если таковой имеется) и статус его использования. Он включает в себя "
"функциональность для проверки и применения промокода к заказу, обеспечивая "
"при этом соблюдение ограничений."
-#: engine/core/models.py:1087
+#: engine/core/models.py:1118
msgid "unique code used by a user to redeem a discount"
msgstr "Уникальный код, используемый пользователем для получения скидки"
-#: engine/core/models.py:1088
+#: engine/core/models.py:1119
msgid "promo code identifier"
msgstr "Идентификатор промо-кода"
-#: engine/core/models.py:1095
+#: engine/core/models.py:1126
msgid "fixed discount amount applied if percent is not used"
msgstr "Фиксированная сумма скидки, применяемая, если процент не используется"
-#: engine/core/models.py:1096
+#: engine/core/models.py:1127
msgid "fixed discount amount"
msgstr "Фиксированная сумма скидки"
-#: engine/core/models.py:1102
+#: engine/core/models.py:1133
msgid "percentage discount applied if fixed amount is not used"
msgstr ""
"Процентная скидка, применяемая, если фиксированная сумма не используется"
-#: engine/core/models.py:1103
+#: engine/core/models.py:1134
msgid "percentage discount"
msgstr "Процентная скидка"
-#: engine/core/models.py:1108
+#: engine/core/models.py:1139
msgid "timestamp when the promocode expires"
msgstr "Временная метка, когда истекает срок действия промокода"
-#: engine/core/models.py:1109
+#: engine/core/models.py:1140
msgid "end validity time"
msgstr "Время окончания срока действия"
-#: engine/core/models.py:1114
+#: engine/core/models.py:1145
msgid "timestamp from which this promocode is valid"
msgstr "Время, с которого действует этот промокод"
-#: engine/core/models.py:1115
+#: engine/core/models.py:1146
msgid "start validity time"
msgstr "Время начала действия"
-#: engine/core/models.py:1120
+#: engine/core/models.py:1151
msgid "timestamp when the promocode was used, blank if not used yet"
msgstr ""
"Временная метка, когда был использован промокод, пустая, если он еще не "
"использовался"
-#: engine/core/models.py:1121
+#: engine/core/models.py:1152
msgid "usage timestamp"
msgstr "Временная метка использования"
-#: engine/core/models.py:1126
+#: engine/core/models.py:1157
msgid "user assigned to this promocode if applicable"
msgstr "Пользователь, назначенный на этот промокод, если применимо"
-#: engine/core/models.py:1127
+#: engine/core/models.py:1158
msgid "assigned user"
msgstr "Назначенный пользователь"
-#: engine/core/models.py:1134
+#: engine/core/models.py:1165
msgid "promo code"
msgstr "Промокод"
-#: engine/core/models.py:1135
+#: engine/core/models.py:1166
msgid "promo codes"
msgstr "Промокоды"
-#: engine/core/models.py:1150
+#: engine/core/models.py:1182
msgid ""
"only one type of discount should be defined (amount or percent), but not "
"both or neither."
msgstr ""
-"Следует определить только один тип скидки (сумма или процент), но не оба или"
-" ни один из них."
+"Следует определить только один тип скидки (сумма или процент), но не оба или "
+"ни один из них."
-#: engine/core/models.py:1171
+#: engine/core/models.py:1204
msgid "promocode already used"
msgstr "Промокоды"
-#: engine/core/models.py:1187
+#: engine/core/models.py:1226
#, python-brace-format
msgid "invalid discount type for promocode {self.uuid}"
msgstr "Неверный тип скидки для промокода {self.uuid}!"
-#: engine/core/models.py:1196
+#: engine/core/models.py:1235
msgid ""
"Represents an order placed by a user. This class models an order within the "
"application, including its various attributes such as billing and shipping "
-"information, status, associated user, notifications, and related operations."
-" Orders can have associated products, promotions can be applied, addresses "
+"information, status, associated user, notifications, and related operations. "
+"Orders can have associated products, promotions can be applied, addresses "
"set, and shipping or billing details updated. Equally, functionality "
"supports managing the products in the order lifecycle."
msgstr ""
-"Представляет заказ, оформленный пользователем. Этот класс моделирует заказ в"
-" приложении, включая его различные атрибуты, такие как информация о "
+"Представляет заказ, оформленный пользователем. Этот класс моделирует заказ в "
+"приложении, включая его различные атрибуты, такие как информация о "
"выставлении счета и доставке, статус, связанный пользователь, уведомления и "
"связанные операции. Заказы могут иметь связанные продукты, к ним можно "
"применять рекламные акции, устанавливать адреса и обновлять данные о "
"доставке или выставлении счета. Кроме того, функциональность поддерживает "
"управление продуктами в жизненном цикле заказа."
-#: engine/core/models.py:1213
+#: engine/core/models.py:1252
msgid "the billing address used for this order"
msgstr "Адрес для выставления счетов, используемый для данного заказа"
-#: engine/core/models.py:1221
+#: engine/core/models.py:1260
msgid "optional promo code applied to this order"
msgstr "Дополнительный промокод, применяемый к этому заказу"
-#: engine/core/models.py:1222
+#: engine/core/models.py:1261
msgid "applied promo code"
msgstr "Примененный промокод"
-#: engine/core/models.py:1230
+#: engine/core/models.py:1269
msgid "the shipping address used for this order"
msgstr "Адрес доставки, используемый для данного заказа"
-#: engine/core/models.py:1231
+#: engine/core/models.py:1270
msgid "shipping address"
msgstr "Адрес доставки"
-#: engine/core/models.py:1237
+#: engine/core/models.py:1276
msgid "current status of the order in its lifecycle"
msgstr "Текущий статус заказа в его жизненном цикле"
-#: engine/core/models.py:1238
+#: engine/core/models.py:1277
msgid "order status"
msgstr "Статус заказа"
-#: engine/core/models.py:1243 engine/core/models.py:1769
+#: engine/core/models.py:1282 engine/core/models.py:1881
msgid "json structure of notifications to display to users"
msgstr ""
-"JSON-структура уведомлений для отображения пользователям, в административном"
-" интерфейсе используется табличный вид"
+"JSON-структура уведомлений для отображения пользователям, в административном "
+"интерфейсе используется табличный вид"
-#: engine/core/models.py:1249
+#: engine/core/models.py:1288
msgid "json representation of order attributes for this order"
msgstr "JSON-представление атрибутов заказа для этого заказа"
-#: engine/core/models.py:1255
+#: engine/core/models.py:1294
msgid "the user who placed the order"
msgstr "Пользователь, разместивший заказ"
-#: engine/core/models.py:1256
+#: engine/core/models.py:1295
msgid "user"
msgstr "Пользователь"
-#: engine/core/models.py:1262
+#: engine/core/models.py:1301
msgid "the timestamp when the order was finalized"
msgstr "Временная метка, когда заказ был завершен"
-#: engine/core/models.py:1263
+#: engine/core/models.py:1302
msgid "buy time"
msgstr "Время покупки"
-#: engine/core/models.py:1270
+#: engine/core/models.py:1309
msgid "a human-readable identifier for the order"
msgstr "Человекочитаемый идентификатор для заказа"
-#: engine/core/models.py:1271
+#: engine/core/models.py:1310
msgid "human readable id"
msgstr "человекочитаемый идентификатор"
-#: engine/core/models.py:1277
+#: engine/core/models.py:1316
msgid "order"
msgstr "Заказ"
-#: engine/core/models.py:1319
+#: engine/core/models.py:1363
msgid "a user must have only one pending order at a time"
msgstr "Пользователь может одновременно иметь только один отложенный ордер!"
-#: engine/core/models.py:1351
+#: engine/core/models.py:1396
msgid "you cannot add products to an order that is not a pending one"
msgstr "Вы не можете добавить товары в заказ, который не является отложенным."
-#: engine/core/models.py:1356
+#: engine/core/models.py:1402
msgid "you cannot add inactive products to order"
msgstr "Вы не можете добавить неактивные товары в заказ"
-#: engine/core/models.py:1373
+#: engine/core/models.py:1424
msgid "you cannot add more products than available in stock"
msgstr "Вы не можете добавить больше товаров, чем есть на складе"
-#: engine/core/models.py:1395 engine/core/models.py:1420
-#: engine/core/models.py:1428
+#: engine/core/models.py:1448 engine/core/models.py:1477
+#: engine/core/models.py:1487
msgid "you cannot remove products from an order that is not a pending one"
-msgstr ""
-"Вы не можете удалить товары из заказа, который не является отложенным."
+msgstr "Вы не можете удалить товары из заказа, который не является отложенным."
-#: engine/core/models.py:1416
+#: engine/core/models.py:1472
#, python-brace-format
msgid "{name} does not exist with query <{query}>"
msgstr "{name} не существует с запросом <{query}>!"
-#: engine/core/models.py:1448
+#: engine/core/models.py:1511
msgid "promocode does not exist"
msgstr "Промокод не существует"
-#: engine/core/models.py:1454
+#: engine/core/models.py:1526
msgid "you can only buy physical products with shipping address specified"
msgstr ""
"Вы можете купить физические товары только с указанным адресом доставки!"
-#: engine/core/models.py:1473
+#: engine/core/models.py:1547
msgid "address does not exist"
msgstr "Адрес не существует"
-#: engine/core/models.py:1494 engine/core/models.py:1563
+#: engine/core/models.py:1569 engine/core/models.py:1648
msgid "you can not buy at this moment, please try again in a few minutes"
msgstr ""
"В данный момент вы не можете совершить покупку, пожалуйста, повторите "
"попытку через несколько минут."
-#: engine/core/models.py:1497 engine/core/models.py:1559
+#: engine/core/models.py:1575 engine/core/models.py:1641
msgid "invalid force value"
msgstr "Недопустимое значение силы"
-#: engine/core/models.py:1503 engine/core/models.py:1566
+#: engine/core/models.py:1581 engine/core/models.py:1652
msgid "you cannot purchase an empty order!"
msgstr "Вы не можете приобрести пустой заказ!"
-#: engine/core/models.py:1522
+#: engine/core/models.py:1602
msgid "you cannot buy an order without a user"
msgstr "Вы не можете купить заказ без пользователя!"
-#: engine/core/models.py:1536
+#: engine/core/models.py:1616
msgid "a user without a balance cannot buy with balance"
msgstr "Пользователь без баланса не может покупать с балансом!"
-#: engine/core/models.py:1541
+#: engine/core/models.py:1622
msgid "insufficient funds to complete the order"
msgstr "Недостаточно средств для выполнения заказа"
-#: engine/core/models.py:1575
+#: engine/core/models.py:1663
msgid ""
"you cannot buy without registration, please provide the following "
"information: customer name, customer email, customer phone number"
@@ -2572,14 +2579,14 @@ msgstr ""
"Вы не можете купить без регистрации, пожалуйста, предоставьте следующую "
"информацию: имя клиента, электронная почта клиента, номер телефона клиента"
-#: engine/core/models.py:1584
+#: engine/core/models.py:1674
#, python-brace-format
msgid ""
"invalid payment method: {payment_method} from {available_payment_methods}"
msgstr ""
"Неверный способ оплаты: {payment_method} от {available_payment_methods}!"
-#: engine/core/models.py:1699
+#: engine/core/models.py:1805
msgid ""
"Manages user feedback for products. This class is designed to capture and "
"store user feedback for specific products that they have purchased. It "
@@ -2594,33 +2601,32 @@ msgstr ""
"пользователем. Класс использует поля базы данных для эффективного "
"моделирования и управления данными отзывов."
-#: engine/core/models.py:1711
+#: engine/core/models.py:1817
msgid "user-provided comments about their experience with the product"
msgstr "Комментарии пользователей об их опыте использования продукта"
-#: engine/core/models.py:1712
+#: engine/core/models.py:1818
msgid "feedback comments"
msgstr "Комментарии к отзывам"
-#: engine/core/models.py:1719
-msgid ""
-"references the specific product in an order that this feedback is about"
+#: engine/core/models.py:1826
+msgid "references the specific product in an order that this feedback is about"
msgstr ""
"Ссылка на конкретный продукт в заказе, о котором идет речь в этом отзыве"
-#: engine/core/models.py:1720
+#: engine/core/models.py:1828
msgid "related order product"
msgstr "Сопутствующий товар для заказа"
-#: engine/core/models.py:1725
+#: engine/core/models.py:1833
msgid "user-assigned rating for the product"
msgstr "Присвоенный пользователем рейтинг продукта"
-#: engine/core/models.py:1726
+#: engine/core/models.py:1834
msgid "product rating"
msgstr "Рейтинг продукции"
-#: engine/core/models.py:1742
+#: engine/core/models.py:1854
msgid ""
"Represents products associated with orders and their attributes. The "
"OrderProduct model maintains information about a product that is part of an "
@@ -2642,133 +2648,132 @@ msgstr ""
"для цифровых продуктов. Модель интегрируется с моделями Order и Product и "
"хранит ссылки на них."
-#: engine/core/models.py:1757
+#: engine/core/models.py:1869
msgid "the price paid by the customer for this product at purchase time"
msgstr "Цена, уплаченная клиентом за данный продукт на момент покупки"
-#: engine/core/models.py:1758
+#: engine/core/models.py:1870
msgid "purchase price at order time"
msgstr "Покупная цена на момент заказа"
-#: engine/core/models.py:1763
+#: engine/core/models.py:1875
msgid "internal comments for admins about this ordered product"
-msgstr ""
-"Внутренние комментарии для администраторов об этом заказанном продукте"
+msgstr "Внутренние комментарии для администраторов об этом заказанном продукте"
-#: engine/core/models.py:1764
+#: engine/core/models.py:1876
msgid "internal comments"
msgstr "Внутренние комментарии"
-#: engine/core/models.py:1770
+#: engine/core/models.py:1882
msgid "user notifications"
msgstr "Уведомления пользователей"
-#: engine/core/models.py:1775
+#: engine/core/models.py:1887
msgid "json representation of this item's attributes"
msgstr "JSON-представление атрибутов этого элемента"
-#: engine/core/models.py:1776
+#: engine/core/models.py:1888
msgid "ordered product attributes"
msgstr "Атрибуты заказанного продукта"
-#: engine/core/models.py:1781
+#: engine/core/models.py:1893
msgid "reference to the parent order that contains this product"
msgstr "Ссылка на родительский заказ, содержащий данный продукт"
-#: engine/core/models.py:1782
+#: engine/core/models.py:1894
msgid "parent order"
msgstr "Родительский приказ"
-#: engine/core/models.py:1791
+#: engine/core/models.py:1903
msgid "the specific product associated with this order line"
msgstr "Конкретный продукт, связанный с этой линией заказа"
-#: engine/core/models.py:1798
+#: engine/core/models.py:1910
msgid "quantity of this specific product in the order"
msgstr "Количество данного товара в заказе"
-#: engine/core/models.py:1799
+#: engine/core/models.py:1911
msgid "product quantity"
msgstr "Количество продукта"
-#: engine/core/models.py:1806
+#: engine/core/models.py:1918
msgid "current status of this product in the order"
msgstr "Текущий статус этого продукта в заказе"
-#: engine/core/models.py:1807
+#: engine/core/models.py:1919
msgid "product line status"
msgstr "Состояние продуктовой линейки"
-#: engine/core/models.py:1872
+#: engine/core/models.py:1986
msgid "order product must have an order"
msgstr "У заказанного продукта должен быть связанный с ним заказ!"
-#: engine/core/models.py:1874
+#: engine/core/models.py:1988
#, python-brace-format
msgid "wrong action specified for feedback: {action}"
msgstr "Для обратной связи указано неверное действие: {action}!"
-#: engine/core/models.py:1888
+#: engine/core/models.py:2005
msgid "you cannot feedback an order which is not received"
msgstr "Вы не можете отозвать заказ, который не был получен"
-#: engine/core/models.py:1894
+#: engine/core/models.py:2014
msgid "name"
msgstr "Имя"
-#: engine/core/models.py:1895
+#: engine/core/models.py:2016
msgid "URL of the integration"
msgstr "URL-адрес интеграции"
-#: engine/core/models.py:1896
+#: engine/core/models.py:2019
msgid "authentication credentials"
msgstr "Учетные данные для аутентификации"
-#: engine/core/models.py:1918
+#: engine/core/models.py:2042
msgid "you can only have one default CRM provider"
msgstr "У вас может быть только один поставщик CRM по умолчанию"
-#: engine/core/models.py:1928
+#: engine/core/models.py:2052
msgid "CRM"
msgstr "CRM"
-#: engine/core/models.py:1929
+#: engine/core/models.py:2053
msgid "CRMs"
msgstr "CRM"
-#: engine/core/models.py:1941
+#: engine/core/models.py:2069
msgid "order CRM link"
msgstr "Ссылка на CRM заказа"
-#: engine/core/models.py:1942
+#: engine/core/models.py:2070
msgid "orders CRM links"
msgstr "Ссылки на CRM заказов"
-#: engine/core/models.py:1947
+#: engine/core/models.py:2075
msgid ""
"Represents the downloading functionality for digital assets associated with "
"orders. The DigitalAssetDownload class provides the ability to manage and "
"access downloads related to order products. It maintains information about "
-"the associated order product, the number of downloads, and whether the asset"
-" is publicly visible. It includes a method to generate a URL for downloading"
-" the asset when the associated order is in a completed status."
+"the associated order product, the number of downloads, and whether the asset "
+"is publicly visible. It includes a method to generate a URL for downloading "
+"the asset when the associated order is in a completed status."
msgstr ""
"Представляет функциональность загрузки цифровых активов, связанных с "
"заказами. Класс DigitalAssetDownload предоставляет возможность управления и "
"доступа к загрузкам, связанным с продуктами заказа. Он хранит информацию о "
-"связанном с заказом продукте, количестве загрузок и о том, является ли актив"
-" общедоступным. Он включает метод для генерации URL-адреса для загрузки "
+"связанном с заказом продукте, количестве загрузок и о том, является ли актив "
+"общедоступным. Он включает метод для генерации URL-адреса для загрузки "
"актива, когда связанный заказ находится в состоянии завершения."
-#: engine/core/models.py:1961
+#: engine/core/models.py:2091
msgid "download"
msgstr "Скачать"
-#: engine/core/models.py:1962
+#: engine/core/models.py:2092
msgid "downloads"
msgstr "Скачать"
-#: engine/core/serializers/utility.py:89
+#: engine/core/serializers/utility.py:91
msgid ""
"you must provide a comment, rating, and order product uuid to add feedback."
msgstr ""
@@ -2965,11 +2970,12 @@ msgstr "Привет %(order.user.first_name)s,"
#, python-format
msgid ""
"thank you for your order #%(order.pk)s! we are pleased to inform you that\n"
-" we have taken your order into work. below are the details of your\n"
+" we have taken your order into work. below are "
+"the details of your\n"
" order:"
msgstr ""
-"Благодарим вас за заказ #%(order.pk)s! Мы рады сообщить Вам, что приняли Ваш"
-" заказ в работу. Ниже приведены детали вашего заказа:"
+"Благодарим вас за заказ #%(order.pk)s! Мы рады сообщить Вам, что приняли Ваш "
+"заказ в работу. Ниже приведены детали вашего заказа:"
#: engine/core/templates/digital_order_created_email.html:112
#: engine/core/templates/digital_order_delivered_email.html:110
@@ -3079,7 +3085,8 @@ msgstr ""
#: engine/core/templates/shipped_order_created_email.html:101
#: engine/core/templates/shipped_order_delivered_email.html:101
msgid ""
-"thank you for your order! we are pleased to confirm your purchase. below are\n"
+"thank you for your order! we are pleased to confirm your purchase. below "
+"are\n"
" the details of your order:"
msgstr ""
"Спасибо за ваш заказ! Мы рады подтвердить вашу покупку. Ниже приведены "
@@ -3110,11 +3117,11 @@ msgstr ""
"все права\n"
" защищены"
-#: engine/core/utils/caching.py:44
+#: engine/core/utils/caching.py:48
msgid "both data and timeout are required"
msgstr "Требуются как данные, так и тайм-аут"
-#: engine/core/utils/caching.py:46
+#: engine/core/utils/caching.py:51
msgid "invalid timeout value, it must be between 0 and 216000 seconds"
msgstr ""
"Неверное значение тайм-аута, оно должно находиться в диапазоне от 0 до "
@@ -3125,17 +3132,17 @@ msgstr ""
msgid "{settings.PROJECT_NAME} | contact us initiated"
msgstr "{settings.PROJECT_NAME} | свяжитесь с нами по инициативе"
-#: engine/core/utils/emailing.py:73
+#: engine/core/utils/emailing.py:81
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order confirmation"
msgstr "{settings.PROJECT_NAME} | подтверждение заказа"
-#: engine/core/utils/emailing.py:105
+#: engine/core/utils/emailing.py:115
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order delivered"
msgstr "{settings.PROJECT_NAME} | заказ доставлен"
-#: engine/core/utils/emailing.py:188
+#: engine/core/utils/emailing.py:203
#, python-brace-format
msgid "{settings.PROJECT_NAME} | promocode granted"
msgstr "{settings.PROJECT_NAME} | Промокод предоставлен"
@@ -3148,14 +3155,13 @@ msgstr "У вас нет разрешения на выполнение этог
msgid "NOMINATIM_URL must be configured."
msgstr "Параметр NOMINATIM_URL должен быть настроен!"
-#: engine/core/validators.py:19
+#: engine/core/validators.py:21
#, python-brace-format
msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels"
msgstr ""
-"Размеры изображения не должны превышать w{max_width} x h{max_height} "
-"пикселей"
+"Размеры изображения не должны превышать w{max_width} x h{max_height} пикселей"
-#: engine/core/views.py:91
+#: engine/core/views.py:105
msgid ""
"Handles the request for the sitemap index and returns an XML response. It "
"ensures the response includes the appropriate content type header for XML."
@@ -3164,27 +3170,27 @@ msgstr ""
"Он обеспечивает включение в ответ заголовка типа содержимого, "
"соответствующего типу XML."
-#: engine/core/views.py:106
+#: engine/core/views.py:120
msgid ""
"Handles the detailed view response for a sitemap. This function processes "
"the request, fetches the appropriate sitemap detail response, and sets the "
"Content-Type header for XML."
msgstr ""
"Обрабатывает подробный ответ на просмотр карты сайта. Эта функция "
-"обрабатывает запрос, извлекает соответствующий подробный ответ карты сайта и"
-" устанавливает заголовок Content-Type для XML."
+"обрабатывает запрос, извлекает соответствующий подробный ответ карты сайта и "
+"устанавливает заголовок Content-Type для XML."
-#: engine/core/views.py:141
+#: engine/core/views.py:156
msgid ""
"Returns a list of supported languages and their corresponding information."
msgstr ""
"Возвращает список поддерживаемых языков и соответствующую информацию о них."
-#: engine/core/views.py:173
+#: engine/core/views.py:183
msgid "Returns the parameters of the website as a JSON object."
msgstr "Возвращает параметры сайта в виде объекта JSON."
-#: engine/core/views.py:192
+#: engine/core/views.py:199
msgid ""
"Handles cache operations such as reading and setting cache data with a "
"specified key and timeout."
@@ -3192,69 +3198,77 @@ msgstr ""
"Выполняет операции с кэшем, такие как чтение и установка данных кэша с "
"заданным ключом и таймаутом."
-#: engine/core/views.py:219
+#: engine/core/views.py:221
msgid "Handles `contact us` form submissions."
msgstr "Обрабатывает отправленные формы `contact us`."
-#: engine/core/views.py:240
+#: engine/core/views.py:237
msgid ""
"Handles requests for processing and validating URLs from incoming POST "
"requests."
msgstr ""
"Обрабатывает запросы на обработку и проверку URL из входящих POST-запросов."
-#: engine/core/views.py:280
+#: engine/core/views.py:274
msgid "Handles global search queries."
msgstr "Обрабатывает глобальные поисковые запросы."
-#: engine/core/views.py:295
+#: engine/core/views.py:290
msgid "Handles the logic of buying as a business without registration."
msgstr "Работает с логикой покупки как бизнеса без регистрации."
-#: engine/core/views.py:332
+#: engine/core/views.py:338
msgid ""
"Handles the downloading of a digital asset associated with an order.\n"
-"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the digital asset file located in the "
+"storage directory of the project. If the file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
msgstr ""
"Обрабатывает загрузку цифрового актива, связанного с заказом.\n"
-"Эта функция пытается обслужить файл цифрового актива, расположенный в каталоге хранения проекта. Если файл не найден, выдается ошибка HTTP 404, указывающая на недоступность ресурса."
+"Эта функция пытается обслужить файл цифрового актива, расположенный в "
+"каталоге хранения проекта. Если файл не найден, выдается ошибка HTTP 404, "
+"указывающая на недоступность ресурса."
-#: engine/core/views.py:343
+#: engine/core/views.py:349
msgid "order_product_uuid is required"
msgstr "требуется order_product_uuid"
-#: engine/core/views.py:350
+#: engine/core/views.py:356
msgid "order product does not exist"
msgstr "заказанный товар не существует"
-#: engine/core/views.py:353
+#: engine/core/views.py:359
msgid "you can only download the digital asset once"
msgstr "Вы можете загрузить цифровой актив только один раз"
-#: engine/core/views.py:356
+#: engine/core/views.py:363
msgid "the order must be paid before downloading the digital asset"
msgstr "заказ должен быть оплачен до загрузки цифрового актива"
-#: engine/core/views.py:362
+#: engine/core/views.py:370
msgid "the order product does not have a product"
msgstr "У заказанного продукта нет продукта"
-#: engine/core/views.py:399
+#: engine/core/views.py:414
msgid "favicon not found"
msgstr "favicon не найден"
-#: engine/core/views.py:404
+#: engine/core/views.py:419
msgid ""
"Handles requests for the favicon of a website.\n"
-"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the favicon file located in the static "
+"directory of the project. If the favicon file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
msgstr ""
"Обрабатывает запросы на фавикон веб-сайта.\n"
-"Эта функция пытается обслужить файл favicon, расположенный в статической директории проекта. Если файл favicon не найден, выдается ошибка HTTP 404, указывающая на недоступность ресурса."
+"Эта функция пытается обслужить файл favicon, расположенный в статической "
+"директории проекта. Если файл favicon не найден, выдается ошибка HTTP 404, "
+"указывающая на недоступность ресурса."
-#: engine/core/views.py:416
+#: engine/core/views.py:431
msgid ""
-"Redirects the request to the admin index page. The function handles incoming"
-" HTTP requests and redirects them to the Django admin interface index page. "
+"Redirects the request to the admin index page. The function handles incoming "
+"HTTP requests and redirects them to the Django admin interface index page. "
"It uses Django's `redirect` function for handling the HTTP redirection."
msgstr ""
"Перенаправляет запрос на индексную страницу админки. Функция обрабатывает "
@@ -3262,20 +3276,20 @@ msgstr ""
"администратора Django. Для обработки HTTP-перенаправления используется "
"функция Django `redirect`."
-#: engine/core/views.py:429
+#: engine/core/views.py:443
msgid "Returns current version of the eVibes. "
msgstr "Возвращает текущую версию eVibes."
-#: engine/core/views.py:623 engine/core/views.py:636
+#: engine/core/views.py:672 engine/core/views.py:687
#, python-format
msgid "Revenue & Orders (last %(days)d)"
msgstr "Доходы и заказы (последние %(days)d)"
-#: engine/core/views.py:793
+#: engine/core/views.py:868
msgid "Returns custom variables for Dashboard. "
msgstr "Возвращает пользовательские переменные для Dashboard."
-#: engine/core/viewsets.py:136
+#: engine/core/viewsets.py:139
msgid ""
"Defines a viewset for managing Evibes-related operations. The EvibesViewSet "
"class inherits from ModelViewSet and provides functionality for handling "
@@ -3285,17 +3299,16 @@ msgid ""
msgstr ""
"Определяет набор представлений для управления операциями, связанными с "
"Evibes. Класс EvibesViewSet наследует от ModelViewSet и предоставляет "
-"функциональность для обработки действий и операций над сущностями Evibes. Он"
-" включает в себя поддержку динамических классов сериализаторов в зависимости"
-" от текущего действия, настраиваемые разрешения и форматы рендеринга."
+"функциональность для обработки действий и операций над сущностями Evibes. Он "
+"включает в себя поддержку динамических классов сериализаторов в зависимости "
+"от текущего действия, настраиваемые разрешения и форматы рендеринга."
-#: engine/core/viewsets.py:156
+#: engine/core/viewsets.py:160
msgid ""
-"Represents a viewset for managing AttributeGroup objects. Handles operations"
-" related to AttributeGroup, including filtering, serialization, and "
-"retrieval of data. This class is part of the application's API layer and "
-"provides a standardized way to process requests and responses for "
-"AttributeGroup data."
+"Represents a viewset for managing AttributeGroup objects. Handles operations "
+"related to AttributeGroup, including filtering, serialization, and retrieval "
+"of data. This class is part of the application's API layer and provides a "
+"standardized way to process requests and responses for AttributeGroup data."
msgstr ""
"Представляет собой набор представлений для управления объектами "
"AttributeGroup. Обрабатывает операции, связанные с AttributeGroup, включая "
@@ -3303,7 +3316,7 @@ msgstr ""
"уровня API приложения и обеспечивает стандартизированный способ обработки "
"запросов и ответов на данные AttributeGroup."
-#: engine/core/viewsets.py:175
+#: engine/core/viewsets.py:179
msgid ""
"Handles operations related to Attribute objects within the application. "
"Provides a set of API endpoints to interact with Attribute data. This class "
@@ -3319,22 +3332,22 @@ msgstr ""
"например, фильтровать по определенным полям или получать подробную или "
"упрощенную информацию в зависимости от запроса."
-#: engine/core/viewsets.py:194
+#: engine/core/viewsets.py:198
msgid ""
"A viewset for managing AttributeValue objects. This viewset provides "
"functionality for listing, retrieving, creating, updating, and deleting "
"AttributeValue objects. It integrates with Django REST Framework's viewset "
-"mechanisms and uses appropriate serializers for different actions. Filtering"
-" capabilities are provided through the DjangoFilterBackend."
+"mechanisms and uses appropriate serializers for different actions. Filtering "
+"capabilities are provided through the DjangoFilterBackend."
msgstr ""
"Набор представлений для управления объектами AttributeValue. Этот набор "
"представлений предоставляет функциональность для перечисления, извлечения, "
"создания, обновления и удаления объектов AttributeValue. Он интегрируется с "
"механизмами наборов представлений Django REST Framework и использует "
-"соответствующие сериализаторы для различных действий. Возможности фильтрации"
-" предоставляются через DjangoFilterBackend."
+"соответствующие сериализаторы для различных действий. Возможности фильтрации "
+"предоставляются через DjangoFilterBackend."
-#: engine/core/viewsets.py:213
+#: engine/core/viewsets.py:217
msgid ""
"Manages views for Category-related operations. The CategoryViewSet class is "
"responsible for handling operations related to the Category model in the "
@@ -3343,13 +3356,13 @@ msgid ""
"can access specific data."
msgstr ""
"Управляет представлениями для операций, связанных с категорией. Класс "
-"CategoryViewSet отвечает за обработку операций, связанных с моделью Category"
-" в системе. Он поддерживает получение, фильтрацию и сериализацию данных "
+"CategoryViewSet отвечает за обработку операций, связанных с моделью Category "
+"в системе. Он поддерживает получение, фильтрацию и сериализацию данных "
"категории. Набор представлений также обеспечивает соблюдение прав доступа, "
"чтобы только авторизованные пользователи могли получить доступ к "
"определенным данным."
-#: engine/core/viewsets.py:326
+#: engine/core/viewsets.py:346
msgid ""
"Represents a viewset for managing Brand instances. This class provides "
"functionality for querying, filtering, and serializing Brand objects. It "
@@ -3361,7 +3374,7 @@ msgstr ""
"сериализации объектов Brand. Он использует фреймворк Django ViewSet для "
"упрощения реализации конечных точек API для объектов Brand."
-#: engine/core/viewsets.py:438
+#: engine/core/viewsets.py:458
msgid ""
"Manages operations related to the `Product` model in the system. This class "
"provides a viewset for managing products, including their filtering, "
@@ -3379,7 +3392,7 @@ msgstr ""
"методы для получения информации о продукте, применения разрешений и доступа "
"к связанным отзывам о продукте."
-#: engine/core/viewsets.py:574
+#: engine/core/viewsets.py:605
msgid ""
"Represents a viewset for managing Vendor objects. This viewset allows "
"fetching, filtering, and serializing Vendor data. It defines the queryset, "
@@ -3387,20 +3400,20 @@ msgid ""
"actions. The purpose of this class is to provide streamlined access to "
"Vendor-related resources through the Django REST framework."
msgstr ""
-"Представляет собой набор представлений для управления объектами Vendor. Этот"
-" набор представлений позволяет получать, фильтровать и сериализовать данные "
-"о поставщиках. Он определяет наборы запросов, конфигурации фильтров и классы"
-" сериализаторов, используемые для выполнения различных действий. Цель этого "
+"Представляет собой набор представлений для управления объектами Vendor. Этот "
+"набор представлений позволяет получать, фильтровать и сериализовать данные о "
+"поставщиках. Он определяет наборы запросов, конфигурации фильтров и классы "
+"сериализаторов, используемые для выполнения различных действий. Цель этого "
"класса - обеспечить упрощенный доступ к ресурсам, связанным с Vendor, через "
"фреймворк Django REST."
-#: engine/core/viewsets.py:594
+#: engine/core/viewsets.py:625
msgid ""
"Representation of a view set handling Feedback objects. This class manages "
"operations related to Feedback objects, including listing, filtering, and "
"retrieving details. The purpose of this view set is to provide different "
-"serializers for different actions and implement permission-based handling of"
-" accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
+"serializers for different actions and implement permission-based handling of "
+"accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
"use of Django's filtering system for querying data."
msgstr ""
"Представление набора представлений, обрабатывающих объекты Feedback. Этот "
@@ -3411,48 +3424,47 @@ msgstr ""
"доступа. Он расширяет базовый `EvibesViewSet` и использует систему "
"фильтрации Django для запроса данных."
-#: engine/core/viewsets.py:621
+#: engine/core/viewsets.py:652
msgid ""
"ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes "
"various endpoints for handling order operations such as adding or removing "
-"products, performing purchases for registered as well as unregistered users,"
-" and retrieving the current authenticated user's pending orders. The ViewSet"
-" uses multiple serializers based on the specific action being performed and "
+"products, performing purchases for registered as well as unregistered users, "
+"and retrieving the current authenticated user's pending orders. The ViewSet "
+"uses multiple serializers based on the specific action being performed and "
"enforces permissions accordingly while interacting with order data."
msgstr ""
"ViewSet для управления заказами и связанными с ними операциями. Этот класс "
"предоставляет функциональность для получения, изменения и управления "
-"объектами заказов. Он включает в себя различные конечные точки для обработки"
-" операций с заказами, таких как добавление или удаление продуктов, "
-"выполнение покупок для зарегистрированных и незарегистрированных "
-"пользователей, а также получение информации о текущих заказах "
-"аутентифицированного пользователя. ViewSet использует несколько "
-"сериализаторов в зависимости от конкретного выполняемого действия и "
-"соответствующим образом устанавливает разрешения при взаимодействии с "
-"данными заказа."
+"объектами заказов. Он включает в себя различные конечные точки для обработки "
+"операций с заказами, таких как добавление или удаление продуктов, выполнение "
+"покупок для зарегистрированных и незарегистрированных пользователей, а также "
+"получение информации о текущих заказах аутентифицированного пользователя. "
+"ViewSet использует несколько сериализаторов в зависимости от конкретного "
+"выполняемого действия и соответствующим образом устанавливает разрешения при "
+"взаимодействии с данными заказа."
-#: engine/core/viewsets.py:825
+#: engine/core/viewsets.py:914
msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It "
-"includes filtering, permission checks, and serializer switching based on the"
-" requested action. Additionally, it provides a detailed action for handling "
+"includes filtering, permission checks, and serializer switching based on the "
+"requested action. Additionally, it provides a detailed action for handling "
"feedback on OrderProduct instances"
msgstr ""
"Предоставляет набор представлений для управления сущностями OrderProduct. "
"Этот набор представлений позволяет выполнять CRUD-операции и "
"пользовательские действия, специфичные для модели OrderProduct. Он включает "
-"фильтрацию, проверку прав доступа и переключение сериализатора в зависимости"
-" от запрашиваемого действия. Кроме того, он предоставляет подробное действие"
-" для обработки отзывов об экземплярах OrderProduct"
+"фильтрацию, проверку прав доступа и переключение сериализатора в зависимости "
+"от запрашиваемого действия. Кроме того, он предоставляет подробное действие "
+"для обработки отзывов об экземплярах OrderProduct"
-#: engine/core/viewsets.py:879
+#: engine/core/viewsets.py:974
msgid "Manages operations related to Product images in the application. "
msgstr ""
"Управляет операциями, связанными с изображениями продуктов в приложении."
-#: engine/core/viewsets.py:892
+#: engine/core/viewsets.py:988
msgid ""
"Manages the retrieval and handling of PromoCode instances through various "
"API actions."
@@ -3460,21 +3472,21 @@ msgstr ""
"Управляет получением и обработкой экземпляров PromoCode с помощью различных "
"действий API."
-#: engine/core/viewsets.py:914
+#: engine/core/viewsets.py:1019
msgid "Represents a view set for managing promotions. "
msgstr ""
"Представляет собой набор представлений для управления рекламными акциями."
-#: engine/core/viewsets.py:927
+#: engine/core/viewsets.py:1032
msgid "Handles operations related to Stock data in the system."
msgstr "Выполняет операции, связанные с данными о запасах в системе."
-#: engine/core/viewsets.py:941
+#: engine/core/viewsets.py:1046
msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the "
-"retrieval, modification, and customization of products within the wish list."
-" This ViewSet facilitates functionality such as adding, removing, and bulk "
+"retrieval, modification, and customization of products within the wish list. "
+"This ViewSet facilitates functionality such as adding, removing, and bulk "
"actions for wishlist products. Permission checks are integrated to ensure "
"that users can only manage their own wishlists unless explicit permissions "
"are granted."
@@ -3487,7 +3499,7 @@ msgstr ""
"проверка прав доступа гарантирует, что пользователи смогут управлять только "
"своими списками желаний, если не предоставлены явные права."
-#: engine/core/viewsets.py:1056
+#: engine/core/viewsets.py:1183
msgid ""
"This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom "
@@ -3502,12 +3514,12 @@ msgstr ""
"методов HTTP, переопределение сериализатора и обработку разрешений в "
"зависимости от контекста запроса."
-#: engine/core/viewsets.py:1123
+#: engine/core/viewsets.py:1254
#, python-brace-format
msgid "Geocoding error: {e}"
msgstr "Ошибка геокодирования: {e}"
-#: engine/core/viewsets.py:1131
+#: engine/core/viewsets.py:1262
msgid ""
"Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing "
@@ -3515,8 +3527,8 @@ msgid ""
"using the specified filter backend and dynamically uses different "
"serializers based on the action being performed."
msgstr ""
-"Обрабатывает операции, связанные с тегами продуктов в приложении. Этот класс"
-" предоставляет функциональность для получения, фильтрации и сериализации "
+"Обрабатывает операции, связанные с тегами продуктов в приложении. Этот класс "
+"предоставляет функциональность для получения, фильтрации и сериализации "
"объектов Product Tag. Он поддерживает гибкую фильтрацию по определенным "
"атрибутам с помощью указанного бэкэнда фильтрации и динамически использует "
"различные сериализаторы в зависимости от выполняемого действия."
diff --git a/engine/core/locale/sv_SE/LC_MESSAGES/django.po b/engine/core/locale/sv_SE/LC_MESSAGES/django.po
index 4c22742b..b31b36da 100644
--- a/engine/core/locale/sv_SE/LC_MESSAGES/django.po
+++ b/engine/core/locale/sv_SE/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 22:12+0300\n"
+"POT-Creation-Date: 2025-12-18 19:09+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -25,113 +25,112 @@ msgstr "Unikt ID används för att säkert identifiera alla databasobjekt"
msgid "is active"
msgstr "Är aktiv"
-#: engine/core/abstract.py:21
+#: engine/core/abstract.py:22
msgid ""
-"if set to false, this object can't be seen by users without needed "
-"permission"
+"if set to false, this object can't be seen by users without needed permission"
msgstr ""
"Om det är inställt på false kan objektet inte ses av användare utan "
"nödvändigt tillstånd"
-#: engine/core/abstract.py:23 engine/core/choices.py:18
+#: engine/core/abstract.py:26 engine/core/choices.py:18
msgid "created"
msgstr "Skapad"
-#: engine/core/abstract.py:23
+#: engine/core/abstract.py:26
msgid "when the object first appeared on the database"
msgstr "När objektet först dök upp på databasen"
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "modified"
msgstr "Modifierad"
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "when the object was last modified"
msgstr "När objektet senast redigerades"
-#: engine/core/admin.py:85
+#: engine/core/admin.py:94
msgid "translations"
msgstr "Översättningar"
-#: engine/core/admin.py:89
+#: engine/core/admin.py:102
msgid "general"
msgstr "Allmänt"
-#: engine/core/admin.py:91
+#: engine/core/admin.py:106
msgid "relations"
msgstr "Relationer"
-#: engine/core/admin.py:93
+#: engine/core/admin.py:111
msgid "additional info"
msgstr "Ytterligare information"
-#: engine/core/admin.py:111
+#: engine/core/admin.py:133
msgid "metadata"
msgstr "Metadata"
-#: engine/core/admin.py:118
+#: engine/core/admin.py:141
msgid "timestamps"
msgstr "Tidsstämplar"
-#: engine/core/admin.py:133
+#: engine/core/admin.py:157
#, python-format
msgid "activate selected %(verbose_name_plural)s"
msgstr "Aktivera vald %(verbose_name_plural)s."
-#: engine/core/admin.py:138
+#: engine/core/admin.py:165
msgid "selected items have been activated."
msgstr "Valda artiklar har aktiverats!"
-#: engine/core/admin.py:144
+#: engine/core/admin.py:173
#, python-format
msgid "deactivate selected %(verbose_name_plural)s"
msgstr "Avaktivera vald %(verbose_name_plural)s."
-#: engine/core/admin.py:149
+#: engine/core/admin.py:183
msgid "selected items have been deactivated."
msgstr "Valda objekt har avaktiverats!"
-#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586
-#: engine/core/graphene/object_types.py:593 engine/core/models.py:801
-#: engine/core/models.py:809
+#: engine/core/admin.py:195 engine/core/graphene/object_types.py:650
+#: engine/core/graphene/object_types.py:657 engine/core/models.py:824
+#: engine/core/models.py:832
msgid "attribute value"
msgstr "Attributvärde"
-#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75
-#: engine/core/models.py:810
+#: engine/core/admin.py:196 engine/core/graphene/object_types.py:75
+#: engine/core/models.py:833
msgid "attribute values"
msgstr "Attributets värden"
-#: engine/core/admin.py:172
+#: engine/core/admin.py:207
msgid "image"
msgstr "Bild"
-#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474
+#: engine/core/admin.py:208 engine/core/graphene/object_types.py:527
msgid "images"
msgstr "Bilder"
-#: engine/core/admin.py:184 engine/core/models.py:566
+#: engine/core/admin.py:219 engine/core/models.py:587
msgid "stock"
msgstr "Stock"
-#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640
+#: engine/core/admin.py:220 engine/core/graphene/object_types.py:710
msgid "stocks"
msgstr "Stocks"
-#: engine/core/admin.py:196 engine/core/models.py:1818
+#: engine/core/admin.py:231 engine/core/models.py:1930
msgid "order product"
msgstr "Beställ produkt"
-#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389
-#: engine/core/models.py:1819
+#: engine/core/admin.py:232 engine/core/graphene/object_types.py:438
+#: engine/core/models.py:1931
msgid "order products"
msgstr "Beställ produkter"
-#: engine/core/admin.py:210 engine/core/admin.py:211
+#: engine/core/admin.py:250 engine/core/admin.py:251
msgid "children"
msgstr "Barn och ungdomar"
-#: engine/core/admin.py:977
+#: engine/core/admin.py:1059
msgid "Config"
msgstr "Konfig"
@@ -155,8 +154,7 @@ msgstr "Levereras"
msgid "canceled"
msgstr "Annullerad"
-#: engine/core/choices.py:8 engine/core/choices.py:16
-#: engine/core/choices.py:24
+#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24
msgid "failed"
msgstr "Misslyckades"
@@ -184,11 +182,11 @@ msgstr "Momental"
msgid "successful"
msgstr "Framgångsrik"
-#: engine/core/docs/drf/views.py:31
+#: engine/core/docs/drf/views.py:30
msgid "OpenAPI schema in selected format with selected language"
msgstr "OpenAPI-schema i valt format med valt språk"
-#: engine/core/docs/drf/views.py:33
+#: engine/core/docs/drf/views.py:32
msgid ""
"OpenApi3 schema for this API. Format can be selected via content "
"negotiation. Language can be selected with Accept-Language and query "
@@ -197,47 +195,48 @@ msgstr ""
"OpenApi3-schema för detta API. Format kan väljas via innehållsförhandling. "
"Språk kan väljas med både Accept-Language och frågeparameter."
-#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37
+#: engine/core/docs/drf/views.py:43 engine/core/graphene/mutations.py:37
msgid "cache I/O"
msgstr "Cache I/O"
-#: engine/core/docs/drf/views.py:46
+#: engine/core/docs/drf/views.py:45
msgid ""
"apply only a key to read permitted data from cache.\n"
"apply key, data and timeout with authentication to write data to cache."
msgstr ""
"Använd endast en nyckel för att läsa tillåtna data från cacheminnet.\n"
-"Använd nyckel, data och timeout med autentisering för att skriva data till cacheminnet."
+"Använd nyckel, data och timeout med autentisering för att skriva data till "
+"cacheminnet."
-#: engine/core/docs/drf/views.py:62
+#: engine/core/docs/drf/views.py:63
msgid "get a list of supported languages"
msgstr "Hämta en lista över språk som stöds"
-#: engine/core/docs/drf/views.py:74
+#: engine/core/docs/drf/views.py:75
msgid "get application's exposable parameters"
msgstr "Hämta applikationens exponerbara parametrar"
-#: engine/core/docs/drf/views.py:84
+#: engine/core/docs/drf/views.py:89
msgid "send a message to the support team"
msgstr "Skicka ett meddelande till supportteamet"
-#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57
+#: engine/core/docs/drf/views.py:103 engine/core/graphene/mutations.py:59
msgid "request a CORSed URL"
msgstr "Begär en CORSed URL. Endast https tillåtet."
-#: engine/core/docs/drf/views.py:112
+#: engine/core/docs/drf/views.py:119
msgid "Search between products, categories and brands"
msgstr "Sök mellan produkter, kategorier och varumärken"
-#: engine/core/docs/drf/views.py:130
+#: engine/core/docs/drf/views.py:141
msgid "global search endpoint to query across project's tables"
msgstr "Global sökpunkt för att söka i projektets alla tabeller"
-#: engine/core/docs/drf/views.py:139
+#: engine/core/docs/drf/views.py:150
msgid "purchase an order as a business"
msgstr "Köpa en order som ett företag"
-#: engine/core/docs/drf/views.py:146
+#: engine/core/docs/drf/views.py:158
msgid ""
"purchase an order as a business, using the provided `products` with "
"`product_uuid` and `attributes`."
@@ -245,222 +244,218 @@ msgstr ""
"Köp en order som ett företag, med hjälp av de tillhandahållna `produkterna` "
"med `produkt_uuid` och `attribut`."
-#: engine/core/docs/drf/views.py:164
+#: engine/core/docs/drf/views.py:177
msgid "download a digital asset from purchased digital order"
msgstr "ladda ner en digital tillgång från en köpt digital order"
-#: engine/core/docs/drf/viewsets.py:61
+#: engine/core/docs/drf/viewsets.py:65
msgid "list all attribute groups (simple view)"
msgstr "Lista alla attributgrupper (enkel vy)"
-#: engine/core/docs/drf/viewsets.py:68
+#: engine/core/docs/drf/viewsets.py:75
msgid "retrieve a single attribute group (detailed view)"
msgstr "Hämta en enskild attributgrupp (detaljerad vy)"
-#: engine/core/docs/drf/viewsets.py:75
+#: engine/core/docs/drf/viewsets.py:82
msgid "create an attribute group"
msgstr "Skapa en attributgrupp"
-#: engine/core/docs/drf/viewsets.py:82
+#: engine/core/docs/drf/viewsets.py:92
msgid "delete an attribute group"
msgstr "Ta bort en attributgrupp"
-#: engine/core/docs/drf/viewsets.py:89
+#: engine/core/docs/drf/viewsets.py:99
msgid "rewrite an existing attribute group saving non-editables"
msgstr ""
"Skriva om en befintlig attributgrupp och spara icke-redigerbara attribut"
-#: engine/core/docs/drf/viewsets.py:96
-msgid ""
-"rewrite some fields of an existing attribute group saving non-editables"
+#: engine/core/docs/drf/viewsets.py:107
+msgid "rewrite some fields of an existing attribute group saving non-editables"
msgstr ""
"Skriv om vissa fält i en befintlig attributgrupp och spara icke-redigerbara "
"fält"
-#: engine/core/docs/drf/viewsets.py:106
+#: engine/core/docs/drf/viewsets.py:118
msgid "list all attributes (simple view)"
msgstr "Lista alla attribut (enkel vy)"
-#: engine/core/docs/drf/viewsets.py:113
+#: engine/core/docs/drf/viewsets.py:128
msgid "retrieve a single attribute (detailed view)"
msgstr "Hämta ett enskilt attribut (detaljerad vy)"
-#: engine/core/docs/drf/viewsets.py:120
+#: engine/core/docs/drf/viewsets.py:135
msgid "create an attribute"
msgstr "Skapa ett attribut"
-#: engine/core/docs/drf/viewsets.py:127
+#: engine/core/docs/drf/viewsets.py:142
msgid "delete an attribute"
msgstr "Ta bort ett attribut"
-#: engine/core/docs/drf/viewsets.py:134
+#: engine/core/docs/drf/viewsets.py:149
msgid "rewrite an existing attribute saving non-editables"
msgstr "Skriva om ett befintligt attribut och spara icke-redigerbara"
-#: engine/core/docs/drf/viewsets.py:141
+#: engine/core/docs/drf/viewsets.py:156
msgid "rewrite some fields of an existing attribute saving non-editables"
msgstr ""
-"Skriv om vissa fält i ett befintligt attribut och spara icke-redigerbara "
-"fält"
+"Skriv om vissa fält i ett befintligt attribut och spara icke-redigerbara fält"
-#: engine/core/docs/drf/viewsets.py:151
+#: engine/core/docs/drf/viewsets.py:166
msgid "list all attribute values (simple view)"
msgstr "Lista alla attributvärden (enkel vy)"
-#: engine/core/docs/drf/viewsets.py:158
+#: engine/core/docs/drf/viewsets.py:176
msgid "retrieve a single attribute value (detailed view)"
msgstr "Hämta ett enskilt attributvärde (detaljerad vy)"
-#: engine/core/docs/drf/viewsets.py:165
+#: engine/core/docs/drf/viewsets.py:183
msgid "create an attribute value"
msgstr "Skapa ett attributvärde"
-#: engine/core/docs/drf/viewsets.py:172
+#: engine/core/docs/drf/viewsets.py:193
msgid "delete an attribute value"
msgstr "Ta bort ett attributvärde"
-#: engine/core/docs/drf/viewsets.py:179
+#: engine/core/docs/drf/viewsets.py:200
msgid "rewrite an existing attribute value saving non-editables"
msgstr "Skriva om ett befintligt attributvärde som sparar icke-redigerbara"
-#: engine/core/docs/drf/viewsets.py:186
-msgid ""
-"rewrite some fields of an existing attribute value saving non-editables"
+#: engine/core/docs/drf/viewsets.py:208
+msgid "rewrite some fields of an existing attribute value saving non-editables"
msgstr ""
"Skriva om vissa fält i ett befintligt attributvärde och spara icke-"
"redigerbara fält"
-#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197
+#: engine/core/docs/drf/viewsets.py:219 engine/core/docs/drf/viewsets.py:220
msgid "list all categories (simple view)"
msgstr "Lista alla kategorier (enkel vy)"
-#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205
+#: engine/core/docs/drf/viewsets.py:230 engine/core/docs/drf/viewsets.py:231
msgid "retrieve a single category (detailed view)"
msgstr "Hämta en enskild kategori (detaljerad vy)"
-#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258
+#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:286
msgid "Category UUID or slug"
msgstr "Kategori UUID eller slug"
-#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221
+#: engine/core/docs/drf/viewsets.py:246 engine/core/docs/drf/viewsets.py:247
msgid "create a category"
msgstr "Skapa en kategori"
-#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229
+#: engine/core/docs/drf/viewsets.py:254 engine/core/docs/drf/viewsets.py:255
msgid "delete a category"
msgstr "Ta bort en kategori"
-#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237
+#: engine/core/docs/drf/viewsets.py:262 engine/core/docs/drf/viewsets.py:263
msgid "rewrite an existing category saving non-editables"
msgstr "Skriva om en befintlig kategori som sparar icke-redigerbara"
-#: engine/core/docs/drf/viewsets.py:244 engine/core/docs/drf/viewsets.py:245
+#: engine/core/docs/drf/viewsets.py:270 engine/core/docs/drf/viewsets.py:272
msgid "rewrite some fields of an existing category saving non-editables"
msgstr "Skriva om vissa fält i en befintlig kategori spara icke-redigerbara"
-#: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704
-#: engine/core/docs/drf/viewsets.py:988
+#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:1046
#: engine/core/graphene/object_types.py:117
-#: engine/core/graphene/object_types.py:207
-#: engine/core/graphene/object_types.py:482
+#: engine/core/graphene/object_types.py:236
+#: engine/core/graphene/object_types.py:537
msgid "SEO Meta snapshot"
msgstr "SEO Meta snapshot"
-#: engine/core/docs/drf/viewsets.py:253
+#: engine/core/docs/drf/viewsets.py:281
msgid "returns a snapshot of the category's SEO meta data"
msgstr "Returnerar en ögonblicksbild av kategorins SEO-metadata"
-#: engine/core/docs/drf/viewsets.py:274
+#: engine/core/docs/drf/viewsets.py:302
msgid "list all orders (simple view)"
msgstr "Lista alla kategorier (enkel vy)"
-#: engine/core/docs/drf/viewsets.py:275
+#: engine/core/docs/drf/viewsets.py:303
msgid "for non-staff users, only their own orders are returned."
msgstr ""
"För användare som inte är anställda returneras endast deras egna "
"beställningar."
-#: engine/core/docs/drf/viewsets.py:281
+#: engine/core/docs/drf/viewsets.py:309
msgid ""
-"Case-insensitive substring search across human_readable_id, "
-"order_products.product.name, and order_products.product.partnumber"
+"Case-insensitive substring search across human_readable_id, order_products."
+"product.name, and order_products.product.partnumber"
msgstr ""
"Substringsökning utan skiftlägeskänslighet över human_readable_id, "
"order_products.product.name och order_products.product.partnumber"
-#: engine/core/docs/drf/viewsets.py:288
+#: engine/core/docs/drf/viewsets.py:316
msgid "Filter orders with buy_time >= this ISO 8601 datetime"
msgstr "Filtrera order med buy_time >= denna ISO 8601-datumtid"
-#: engine/core/docs/drf/viewsets.py:293
+#: engine/core/docs/drf/viewsets.py:321
msgid "Filter orders with buy_time <= this ISO 8601 datetime"
msgstr "Filtrera order med buy_time <= denna ISO 8601-datumtid"
-#: engine/core/docs/drf/viewsets.py:298
+#: engine/core/docs/drf/viewsets.py:326
msgid "Filter by exact order UUID"
msgstr "Filtrera efter exakt order UUID"
-#: engine/core/docs/drf/viewsets.py:303
+#: engine/core/docs/drf/viewsets.py:331
msgid "Filter by exact human-readable order ID"
msgstr "Filtrera efter exakt mänskligt läsbart order-ID"
-#: engine/core/docs/drf/viewsets.py:308
+#: engine/core/docs/drf/viewsets.py:336
msgid "Filter by user's email (case-insensitive exact match)"
msgstr ""
-"Filtrera efter användarens e-post (exakt matchning utan "
-"skiftlägeskänslighet)"
+"Filtrera efter användarens e-post (exakt matchning utan skiftlägeskänslighet)"
-#: engine/core/docs/drf/viewsets.py:313
+#: engine/core/docs/drf/viewsets.py:341
msgid "Filter by user's UUID"
msgstr "Filtrera efter användarens UUID"
-#: engine/core/docs/drf/viewsets.py:318
+#: engine/core/docs/drf/viewsets.py:347
msgid "Filter by order status (case-insensitive substring match)"
msgstr "Filtrera efter orderstatus (skiftlägeskänslig matchning av delsträng)"
-#: engine/core/docs/drf/viewsets.py:324
+#: engine/core/docs/drf/viewsets.py:354
msgid ""
-"Order by one of: uuid, human_readable_id, user_email, user, status, created,"
-" modified, buy_time, random. Prefix with '-' for descending (e.g. "
-"'-buy_time')."
+"Order by one of: uuid, human_readable_id, user_email, user, status, created, "
+"modified, buy_time, random. Prefix with '-' for descending (e.g. '-"
+"buy_time')."
msgstr ""
"Ordna efter en av följande: uuid, human_readable_id, user_email, user, "
"status, created, modified, buy_time, random. Prefix med \"-\" för fallande "
"ordning (t.ex. \"-buy_time\")."
-#: engine/core/docs/drf/viewsets.py:336
+#: engine/core/docs/drf/viewsets.py:366
msgid "retrieve a single order (detailed view)"
msgstr "Hämta en enskild kategori (detaljerad vy)"
-#: engine/core/docs/drf/viewsets.py:341
+#: engine/core/docs/drf/viewsets.py:371
msgid "Order UUID or human-readable id"
msgstr "Order UUID eller mänskligt läsbart id"
-#: engine/core/docs/drf/viewsets.py:351
+#: engine/core/docs/drf/viewsets.py:381
msgid "create an order"
msgstr "Skapa ett attribut"
-#: engine/core/docs/drf/viewsets.py:352
+#: engine/core/docs/drf/viewsets.py:382
msgid "doesn't work for non-staff users."
msgstr "Fungerar inte för användare som inte är anställda."
-#: engine/core/docs/drf/viewsets.py:359
+#: engine/core/docs/drf/viewsets.py:389
msgid "delete an order"
msgstr "Ta bort ett attribut"
-#: engine/core/docs/drf/viewsets.py:366
+#: engine/core/docs/drf/viewsets.py:396
msgid "rewrite an existing order saving non-editables"
msgstr "Skriva om en befintlig kategori som sparar icke-redigerbara"
-#: engine/core/docs/drf/viewsets.py:373
+#: engine/core/docs/drf/viewsets.py:403
msgid "rewrite some fields of an existing order saving non-editables"
msgstr "Skriva om vissa fält i en befintlig kategori spara icke-redigerbara"
-#: engine/core/docs/drf/viewsets.py:380
+#: engine/core/docs/drf/viewsets.py:410
msgid "purchase an order"
msgstr "Inköpspris vid ordertillfället"
-#: engine/core/docs/drf/viewsets.py:382
+#: engine/core/docs/drf/viewsets.py:412
msgid ""
"finalizes the order purchase. if `force_balance` is used, the purchase is "
"completed using the user's balance; if `force_payment` is used, a "
@@ -469,27 +464,27 @@ msgstr ""
"Slutför orderköpet. Om `force_balance` används, slutförs köpet med "
"användarens saldo; Om `force_payment` används, initieras en transaktion."
-#: engine/core/docs/drf/viewsets.py:397
+#: engine/core/docs/drf/viewsets.py:427
msgid "retrieve current pending order of a user"
msgstr "hämta aktuell pågående order för en användare"
-#: engine/core/docs/drf/viewsets.py:398
+#: engine/core/docs/drf/viewsets.py:428
msgid "retrieves a current pending order of an authenticated user"
msgstr "hämtar en aktuell väntande order för en autentiserad användare"
-#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334
+#: engine/core/docs/drf/viewsets.py:438 engine/core/graphene/mutations.py:354
msgid "purchase an order without account creation"
msgstr "köpa en order utan att skapa ett konto"
-#: engine/core/docs/drf/viewsets.py:409
+#: engine/core/docs/drf/viewsets.py:439
msgid "finalizes the order purchase for a non-registered user."
msgstr "slutför orderköpet för en icke registrerad användare."
-#: engine/core/docs/drf/viewsets.py:420
+#: engine/core/docs/drf/viewsets.py:450
msgid "add product to order"
msgstr "Lägg till en produkt i ordern"
-#: engine/core/docs/drf/viewsets.py:421
+#: engine/core/docs/drf/viewsets.py:452
msgid ""
"adds a product to an order using the provided `product_uuid` and "
"`attributes`."
@@ -497,11 +492,11 @@ msgstr ""
"Lägger till en produkt till en order med hjälp av de angivna `product_uuid` "
"och `attributes`."
-#: engine/core/docs/drf/viewsets.py:429
+#: engine/core/docs/drf/viewsets.py:461
msgid "add a list of products to order, quantities will not count"
msgstr "Lägg till en lista med produkter till ordern, kvantiteter räknas inte"
-#: engine/core/docs/drf/viewsets.py:430
+#: engine/core/docs/drf/viewsets.py:463
msgid ""
"adds a list of products to an order using the provided `product_uuid` and "
"`attributes`."
@@ -509,23 +504,23 @@ msgstr ""
"Lägger till en lista med produkter till en order med hjälp av de angivna "
"`product_uuid` och `attributes`."
-#: engine/core/docs/drf/viewsets.py:438
+#: engine/core/docs/drf/viewsets.py:472
msgid "remove product from order"
msgstr "Ta bort en produkt från ordern"
-#: engine/core/docs/drf/viewsets.py:439
+#: engine/core/docs/drf/viewsets.py:474
msgid ""
"removes a product from an order using the provided `product_uuid` and "
"`attributes`."
msgstr ""
-"Tar bort en produkt från en order med hjälp av de angivna `product_uuid` och"
-" `attributen`."
+"Tar bort en produkt från en order med hjälp av de angivna `product_uuid` och "
+"`attributen`."
-#: engine/core/docs/drf/viewsets.py:447
+#: engine/core/docs/drf/viewsets.py:483
msgid "remove product from order, quantities will not count"
msgstr "Ta bort en produkt från ordern, kvantiteter räknas inte"
-#: engine/core/docs/drf/viewsets.py:448
+#: engine/core/docs/drf/viewsets.py:485
msgid ""
"removes a list of products from an order using the provided `product_uuid` "
"and `attributes`"
@@ -533,719 +528,727 @@ msgstr ""
"Tar bort en lista med produkter från en order med hjälp av de angivna "
"`product_uuid` och `attributes`."
-#: engine/core/docs/drf/viewsets.py:459
+#: engine/core/docs/drf/viewsets.py:497
msgid "list all wishlists (simple view)"
msgstr "Lista alla attribut (enkel vy)"
-#: engine/core/docs/drf/viewsets.py:460
+#: engine/core/docs/drf/viewsets.py:498
msgid "for non-staff users, only their own wishlists are returned."
msgstr ""
-"För användare som inte är anställda returneras endast deras egna "
-"önskelistor."
+"För användare som inte är anställda returneras endast deras egna önskelistor."
-#: engine/core/docs/drf/viewsets.py:467
+#: engine/core/docs/drf/viewsets.py:508
msgid "retrieve a single wishlist (detailed view)"
msgstr "Hämta ett enskilt attribut (detaljerad vy)"
-#: engine/core/docs/drf/viewsets.py:474
+#: engine/core/docs/drf/viewsets.py:515
msgid "create an wishlist"
msgstr "Skapa ett attribut"
-#: engine/core/docs/drf/viewsets.py:475
+#: engine/core/docs/drf/viewsets.py:516
msgid "Doesn't work for non-staff users."
msgstr "Fungerar inte för användare som inte är anställda."
-#: engine/core/docs/drf/viewsets.py:482
+#: engine/core/docs/drf/viewsets.py:523
msgid "delete an wishlist"
msgstr "Ta bort ett attribut"
-#: engine/core/docs/drf/viewsets.py:489
+#: engine/core/docs/drf/viewsets.py:530
msgid "rewrite an existing wishlist saving non-editables"
msgstr "Skriva om ett befintligt attribut och spara icke-redigerbara"
-#: engine/core/docs/drf/viewsets.py:496
+#: engine/core/docs/drf/viewsets.py:537
msgid "rewrite some fields of an existing wishlist saving non-editables"
msgstr ""
-"Skriv om vissa fält i ett befintligt attribut och spara icke-redigerbara "
-"fält"
+"Skriv om vissa fält i ett befintligt attribut och spara icke-redigerbara fält"
-#: engine/core/docs/drf/viewsets.py:503
+#: engine/core/docs/drf/viewsets.py:544
msgid "retrieve current pending wishlist of a user"
msgstr "hämta aktuell väntande önskelista för en användare"
-#: engine/core/docs/drf/viewsets.py:504
+#: engine/core/docs/drf/viewsets.py:545
msgid "retrieves a current pending wishlist of an authenticated user"
msgstr "hämtar en aktuell väntande önskelista för en autentiserad användare"
-#: engine/core/docs/drf/viewsets.py:514
+#: engine/core/docs/drf/viewsets.py:555
msgid "add product to wishlist"
msgstr "Lägg till en produkt i ordern"
-#: engine/core/docs/drf/viewsets.py:515
+#: engine/core/docs/drf/viewsets.py:557
msgid "adds a product to an wishlist using the provided `product_uuid`"
msgstr ""
"Lägger till en produkt i en önskelista med hjälp av den angivna "
"`product_uuid`."
-#: engine/core/docs/drf/viewsets.py:523
+#: engine/core/docs/drf/viewsets.py:566
msgid "remove product from wishlist"
msgstr "Ta bort en produkt från önskelistan"
-#: engine/core/docs/drf/viewsets.py:524
+#: engine/core/docs/drf/viewsets.py:568
msgid "removes a product from an wishlist using the provided `product_uuid`"
msgstr ""
"Tar bort en produkt från en önskelista med hjälp av den angivna "
"`product_uuid`"
-#: engine/core/docs/drf/viewsets.py:532
+#: engine/core/docs/drf/viewsets.py:577
msgid "add many products to wishlist"
msgstr "Lägg till många produkter på önskelistan"
-#: engine/core/docs/drf/viewsets.py:533
+#: engine/core/docs/drf/viewsets.py:579
msgid "adds many products to an wishlist using the provided `product_uuids`"
msgstr ""
"Lägger till många produkter till en önskelista med hjälp av de angivna "
"`product_uuids`"
-#: engine/core/docs/drf/viewsets.py:541
+#: engine/core/docs/drf/viewsets.py:588
msgid "remove many products from wishlist"
msgstr "Ta bort en produkt från ordern"
-#: engine/core/docs/drf/viewsets.py:542
+#: engine/core/docs/drf/viewsets.py:590
msgid ""
"removes many products from an wishlist using the provided `product_uuids`"
msgstr ""
"Tar bort många produkter från en önskelista med hjälp av de angivna "
"`product_uuids`"
-#: engine/core/docs/drf/viewsets.py:549
+#: engine/core/docs/drf/viewsets.py:598
msgid ""
"Filter by one or more attribute name/value pairs. \n"
"• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n"
-"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n"
-"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n"
+"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, "
+"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, "
+"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n"
+"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), "
+"`true`/`false` for booleans, integers, floats; otherwise treated as "
+"string. \n"
"• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n"
"Examples: \n"
-"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n"
+"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\","
+"\"bluetooth\"]`, \n"
"`b64-description=icontains-aGVhdC1jb2xk`"
msgstr ""
"Filtrera efter ett eller flera attributnamn/värdepar. \n"
"- **Syntax**: `attr_namn=metod-värde[;attr2=metod2-värde2]...`\n"
-"- **Metoder** (standard är `icontains` om den utelämnas): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`\n"
-"- **Värde typning**: JSON prövas först (så att du kan skicka listor/dikter), `true`/`false` för booleaner, heltal, flottörer; annars behandlas som sträng. \n"
+"- **Metoder** (standard är `icontains` om den utelämnas): `iexact`, `exact`, "
+"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, "
+"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`\n"
+"- **Värde typning**: JSON prövas först (så att du kan skicka listor/dikter), "
+"`true`/`false` för booleaner, heltal, flottörer; annars behandlas som "
+"sträng. \n"
"- **Base64**: prefix med `b64-` för URL-säker base64-kodning av råvärdet. \n"
"Exempel på detta: \n"
"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`,\n"
"`b64-beskrivning=icontains-aGVhdC1jb2xk`"
-#: engine/core/docs/drf/viewsets.py:568 engine/core/docs/drf/viewsets.py:569
+#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
msgid "list all products (simple view)"
msgstr "Lista alla produkter (enkel vy)"
-#: engine/core/docs/drf/viewsets.py:574
+#: engine/core/docs/drf/viewsets.py:623
msgid "(exact) Product UUID"
msgstr "(exakt) UUID för produkt"
-#: engine/core/docs/drf/viewsets.py:581
+#: engine/core/docs/drf/viewsets.py:630
msgid ""
-"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n"
+"Comma-separated list of fields to sort by. Prefix with `-` for "
+"descending. \n"
"**Allowed:** uuid, rating, name, slug, created, modified, price, random"
msgstr ""
-"Kommaseparerad lista över fält att sortera efter. Prefix med `-` för fallande. \n"
+"Kommaseparerad lista över fält att sortera efter. Prefix med `-` för "
+"fallande. \n"
"**Tillåtna:** uuid, betyg, namn, slug, skapad, modifierad, pris, slumpmässig"
-#: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599
+#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
msgid "retrieve a single product (detailed view)"
msgstr "Hämta en enskild produkt (detaljerad vy)"
-#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634
-#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672
-#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710
+#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683
+#: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725
+#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763
msgid "Product UUID or slug"
msgstr "Produkt UUID eller Slug"
-#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
+#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
#: engine/core/graphene/dashboard_mutations/product.py:80
#: engine/core/graphene/dashboard_mutations/product.py:118
#: engine/core/graphene/dashboard_mutations/product.py:166
msgid "create a product"
msgstr "Skapa en produkt"
-#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629
+#: engine/core/docs/drf/viewsets.py:677 engine/core/docs/drf/viewsets.py:678
msgid "rewrite an existing product, preserving non-editable fields"
msgstr "Skriva om en befintlig produkt och bevara icke redigerbara fält"
-#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
+#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:700
msgid ""
"update some fields of an existing product, preserving non-editable fields"
msgstr ""
"Uppdatera vissa fält i en befintlig produkt och bevara icke redigerbara fält"
-#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
+#: engine/core/docs/drf/viewsets.py:719 engine/core/docs/drf/viewsets.py:720
msgid "delete a product"
msgstr "Ta bort en produkt"
-#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686
+#: engine/core/docs/drf/viewsets.py:738 engine/core/docs/drf/viewsets.py:739
msgid "lists all permitted feedbacks for a product"
msgstr "listar alla tillåtna återkopplingar för en produkt"
-#: engine/core/docs/drf/viewsets.py:705
+#: engine/core/docs/drf/viewsets.py:758
msgid "returns a snapshot of the product's SEO meta data"
msgstr "Returnerar en ögonblicksbild av produktens SEO-metadata"
-#: engine/core/docs/drf/viewsets.py:726
+#: engine/core/docs/drf/viewsets.py:779
msgid "list all addresses"
msgstr "Lista alla adresser"
-#: engine/core/docs/drf/viewsets.py:736
+#: engine/core/docs/drf/viewsets.py:789
msgid "retrieve a single address"
msgstr "Hämta en enskild adress"
-#: engine/core/docs/drf/viewsets.py:746
+#: engine/core/docs/drf/viewsets.py:799
msgid "create a new address"
msgstr "Skapa en ny adress"
-#: engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:810
msgid "delete an address"
msgstr "Ta bort en adress"
-#: engine/core/docs/drf/viewsets.py:767
+#: engine/core/docs/drf/viewsets.py:820
msgid "update an entire address"
msgstr "Uppdatera en hel adress"
-#: engine/core/docs/drf/viewsets.py:778
+#: engine/core/docs/drf/viewsets.py:831
msgid "partially update an address"
msgstr "Delvis uppdatera en adress"
-#: engine/core/docs/drf/viewsets.py:789
+#: engine/core/docs/drf/viewsets.py:842
msgid "autocomplete address suggestions"
msgstr "Autokomplettering av adressinmatning"
-#: engine/core/docs/drf/viewsets.py:794
+#: engine/core/docs/drf/viewsets.py:848
msgid "raw data query string, please append with data from geo-IP endpoint"
msgstr "Frågesträng för rådata, komplettera med data från geo-IP-slutpunkt"
-#: engine/core/docs/drf/viewsets.py:800
+#: engine/core/docs/drf/viewsets.py:855
msgid "limit the results amount, 1 < limit < 10, default: 5"
msgstr "begränsar resultatmängden, 1 < limit < 10, standard: 5"
-#: engine/core/docs/drf/viewsets.py:816
+#: engine/core/docs/drf/viewsets.py:871
msgid "list all feedbacks (simple view)"
msgstr "lista alla återkopplingar (enkel vy)"
-#: engine/core/docs/drf/viewsets.py:823
+#: engine/core/docs/drf/viewsets.py:881
msgid "retrieve a single feedback (detailed view)"
msgstr "hämta en enskild feedback (detaljerad vy)"
-#: engine/core/docs/drf/viewsets.py:830
+#: engine/core/docs/drf/viewsets.py:888
msgid "create a feedback"
msgstr "skapa en återkoppling"
-#: engine/core/docs/drf/viewsets.py:837
+#: engine/core/docs/drf/viewsets.py:895
msgid "delete a feedback"
msgstr "ta bort en återkoppling"
-#: engine/core/docs/drf/viewsets.py:844
+#: engine/core/docs/drf/viewsets.py:902
msgid "rewrite an existing feedback saving non-editables"
msgstr "skriva om en befintlig feedback och spara icke-redigerbara filer"
-#: engine/core/docs/drf/viewsets.py:851
+#: engine/core/docs/drf/viewsets.py:909
msgid "rewrite some fields of an existing feedback saving non-editables"
msgstr ""
"skriva om vissa fält i en befintlig feedback och spara icke-redigerbara fält"
-#: engine/core/docs/drf/viewsets.py:861
+#: engine/core/docs/drf/viewsets.py:919
msgid "list all order–product relations (simple view)"
msgstr "lista alla order-produktrelationer (enkel vy)"
-#: engine/core/docs/drf/viewsets.py:871
+#: engine/core/docs/drf/viewsets.py:929
msgid "retrieve a single order–product relation (detailed view)"
msgstr "hämta en enskild order-produktrelation (detaljerad vy)"
-#: engine/core/docs/drf/viewsets.py:881
+#: engine/core/docs/drf/viewsets.py:939
msgid "create a new order–product relation"
msgstr "skapa en ny relation mellan order och produkt"
-#: engine/core/docs/drf/viewsets.py:891
+#: engine/core/docs/drf/viewsets.py:949
msgid "replace an existing order–product relation"
msgstr "ersätta en befintlig order-produktrelation"
-#: engine/core/docs/drf/viewsets.py:901
+#: engine/core/docs/drf/viewsets.py:959
msgid "partially update an existing order–product relation"
msgstr "delvis uppdatera en befintlig order-produktrelation"
-#: engine/core/docs/drf/viewsets.py:911
+#: engine/core/docs/drf/viewsets.py:969
msgid "delete an order–product relation"
msgstr "ta bort en order-produktrelation"
-#: engine/core/docs/drf/viewsets.py:921
+#: engine/core/docs/drf/viewsets.py:979
msgid "add or remove feedback on an order–product relation"
msgstr "lägga till eller ta bort feedback om en order-produktrelation"
-#: engine/core/docs/drf/viewsets.py:938
+#: engine/core/docs/drf/viewsets.py:996
msgid "list all brands (simple view)"
msgstr "Lista alla varumärken (enkel vy)"
-#: engine/core/docs/drf/viewsets.py:945
+#: engine/core/docs/drf/viewsets.py:1003
msgid "retrieve a single brand (detailed view)"
msgstr "Hämta ett enskilt varumärke (detaljerad vy)"
-#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993
+#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051
msgid "Brand UUID or slug"
msgstr "UUID eller slug för varumärke"
-#: engine/core/docs/drf/viewsets.py:960
+#: engine/core/docs/drf/viewsets.py:1018
msgid "create a brand"
msgstr "Skapa ett varumärke"
-#: engine/core/docs/drf/viewsets.py:967
+#: engine/core/docs/drf/viewsets.py:1025
msgid "delete a brand"
msgstr "Ta bort ett varumärke"
-#: engine/core/docs/drf/viewsets.py:974
+#: engine/core/docs/drf/viewsets.py:1032
msgid "rewrite an existing brand saving non-editables"
msgstr ""
"Skriva om ett befintligt varumärke och spara icke-redigerbara produkter"
-#: engine/core/docs/drf/viewsets.py:981
+#: engine/core/docs/drf/viewsets.py:1039
msgid "rewrite some fields of an existing brand saving non-editables"
msgstr ""
"Skriva om vissa fält i ett befintligt varumärke och spara icke-redigerbara "
"fält"
-#: engine/core/docs/drf/viewsets.py:1006
+#: engine/core/docs/drf/viewsets.py:1064
msgid "list all vendors (simple view)"
msgstr "Lista alla leverantörer (enkel vy)"
-#: engine/core/docs/drf/viewsets.py:1013
+#: engine/core/docs/drf/viewsets.py:1074
msgid "retrieve a single vendor (detailed view)"
msgstr "Hämta en enskild leverantör (detaljerad vy)"
-#: engine/core/docs/drf/viewsets.py:1020
+#: engine/core/docs/drf/viewsets.py:1081
msgid "create a vendor"
msgstr "Skapa en leverantör"
-#: engine/core/docs/drf/viewsets.py:1027
+#: engine/core/docs/drf/viewsets.py:1088
msgid "delete a vendor"
msgstr "Ta bort en leverantör"
-#: engine/core/docs/drf/viewsets.py:1034
+#: engine/core/docs/drf/viewsets.py:1095
msgid "rewrite an existing vendor saving non-editables"
msgstr "Skriva om en befintlig leverantör och spara icke-redigerbara filer"
-#: engine/core/docs/drf/viewsets.py:1041
+#: engine/core/docs/drf/viewsets.py:1102
msgid "rewrite some fields of an existing vendor saving non-editables"
msgstr ""
"Skriva om vissa fält i en befintlig leverantör och spara icke-redigerbara "
"fält"
-#: engine/core/docs/drf/viewsets.py:1051
+#: engine/core/docs/drf/viewsets.py:1112
msgid "list all product images (simple view)"
msgstr "Lista alla produktbilder (enkel vy)"
-#: engine/core/docs/drf/viewsets.py:1058
+#: engine/core/docs/drf/viewsets.py:1122
msgid "retrieve a single product image (detailed view)"
msgstr "Hämta en enskild produktbild (detaljerad vy)"
-#: engine/core/docs/drf/viewsets.py:1065
+#: engine/core/docs/drf/viewsets.py:1129
msgid "create a product image"
msgstr "Skapa en produktbild"
-#: engine/core/docs/drf/viewsets.py:1072
+#: engine/core/docs/drf/viewsets.py:1139
msgid "delete a product image"
msgstr "Ta bort en produktbild"
-#: engine/core/docs/drf/viewsets.py:1079
+#: engine/core/docs/drf/viewsets.py:1146
msgid "rewrite an existing product image saving non-editables"
msgstr "Skriva om en befintlig produktbild och spara icke-redigerbara objekt"
-#: engine/core/docs/drf/viewsets.py:1086
+#: engine/core/docs/drf/viewsets.py:1154
msgid "rewrite some fields of an existing product image saving non-editables"
msgstr ""
"Skriva om några fält i en befintlig produktbild och spara icke-redigerbara "
"fält"
-#: engine/core/docs/drf/viewsets.py:1096
+#: engine/core/docs/drf/viewsets.py:1165
msgid "list all promo codes (simple view)"
msgstr "Lista alla kampanjkoder (enkel vy)"
-#: engine/core/docs/drf/viewsets.py:1103
+#: engine/core/docs/drf/viewsets.py:1175
msgid "retrieve a single promo code (detailed view)"
msgstr "Hämta en enskild kampanjkod (detaljerad vy)"
-#: engine/core/docs/drf/viewsets.py:1110
+#: engine/core/docs/drf/viewsets.py:1182
msgid "create a promo code"
msgstr "Skapa en kampanjkod"
-#: engine/core/docs/drf/viewsets.py:1117
+#: engine/core/docs/drf/viewsets.py:1189
msgid "delete a promo code"
msgstr "Ta bort en kampanjkod"
-#: engine/core/docs/drf/viewsets.py:1124
+#: engine/core/docs/drf/viewsets.py:1196
msgid "rewrite an existing promo code saving non-editables"
msgstr "Skriva om en befintlig kampanjkod som sparar icke-redigerbara"
-#: engine/core/docs/drf/viewsets.py:1131
+#: engine/core/docs/drf/viewsets.py:1203
msgid "rewrite some fields of an existing promo code saving non-editables"
msgstr ""
"Skriva om vissa fält i en befintlig kampanjkod och spara icke-redigerbara "
"fält"
-#: engine/core/docs/drf/viewsets.py:1141
+#: engine/core/docs/drf/viewsets.py:1213
msgid "list all promotions (simple view)"
msgstr "Lista alla kampanjer (enkel vy)"
-#: engine/core/docs/drf/viewsets.py:1148
+#: engine/core/docs/drf/viewsets.py:1223
msgid "retrieve a single promotion (detailed view)"
msgstr "Hämta en enskild kampanj (detaljerad vy)"
-#: engine/core/docs/drf/viewsets.py:1155
+#: engine/core/docs/drf/viewsets.py:1230
msgid "create a promotion"
msgstr "Skapa en kampanj"
-#: engine/core/docs/drf/viewsets.py:1162
+#: engine/core/docs/drf/viewsets.py:1237
msgid "delete a promotion"
msgstr "Ta bort en kampanj"
-#: engine/core/docs/drf/viewsets.py:1169
+#: engine/core/docs/drf/viewsets.py:1244
msgid "rewrite an existing promotion saving non-editables"
msgstr "Skriv om en befintlig kampanj som sparar icke-redigerbara"
-#: engine/core/docs/drf/viewsets.py:1176
+#: engine/core/docs/drf/viewsets.py:1251
msgid "rewrite some fields of an existing promotion saving non-editables"
msgstr ""
"Skriva om vissa fält i en befintlig kampanj och spara icke-redigerbara fält"
-#: engine/core/docs/drf/viewsets.py:1186
+#: engine/core/docs/drf/viewsets.py:1261
msgid "list all stocks (simple view)"
msgstr "Lista alla aktier (enkel vy)"
-#: engine/core/docs/drf/viewsets.py:1193
+#: engine/core/docs/drf/viewsets.py:1268
msgid "retrieve a single stock (detailed view)"
msgstr "Hämta en enskild aktie (detaljerad vy)"
-#: engine/core/docs/drf/viewsets.py:1200
+#: engine/core/docs/drf/viewsets.py:1275
msgid "create a stock record"
msgstr "Skapa en lagerpost"
-#: engine/core/docs/drf/viewsets.py:1207
+#: engine/core/docs/drf/viewsets.py:1282
msgid "delete a stock record"
msgstr "Ta bort en lagerpost"
-#: engine/core/docs/drf/viewsets.py:1214
+#: engine/core/docs/drf/viewsets.py:1289
msgid "rewrite an existing stock record saving non-editables"
msgstr "Skriva om en befintlig lagerpost och spara icke-redigerbara uppgifter"
-#: engine/core/docs/drf/viewsets.py:1221
+#: engine/core/docs/drf/viewsets.py:1297
msgid "rewrite some fields of an existing stock record saving non-editables"
msgstr ""
"Skriva om vissa fält i en befintlig lagerpost och spara icke-redigerbara "
"uppgifter"
-#: engine/core/docs/drf/viewsets.py:1231
+#: engine/core/docs/drf/viewsets.py:1308
msgid "list all product tags (simple view)"
msgstr "Lista alla produkttaggar (enkel vy)"
-#: engine/core/docs/drf/viewsets.py:1238
+#: engine/core/docs/drf/viewsets.py:1318
msgid "retrieve a single product tag (detailed view)"
msgstr "Hämta en enskild produkttagg (detaljerad vy)"
-#: engine/core/docs/drf/viewsets.py:1245
+#: engine/core/docs/drf/viewsets.py:1325
msgid "create a product tag"
msgstr "Skapa en produkttagg"
-#: engine/core/docs/drf/viewsets.py:1252
+#: engine/core/docs/drf/viewsets.py:1335
msgid "delete a product tag"
msgstr "Ta bort en produkttagg"
-#: engine/core/docs/drf/viewsets.py:1259
+#: engine/core/docs/drf/viewsets.py:1342
msgid "rewrite an existing product tag saving non-editables"
msgstr "Skriv om en befintlig produkttagg och spara icke-redigerbara objekt"
-#: engine/core/docs/drf/viewsets.py:1266
+#: engine/core/docs/drf/viewsets.py:1350
msgid "rewrite some fields of an existing product tag saving non-editables"
msgstr ""
"Skriva om vissa fält i en befintlig produkttagg och spara icke-redigerbara "
"fält"
-#: engine/core/elasticsearch/__init__.py:122
-#: engine/core/elasticsearch/__init__.py:570
+#: engine/core/elasticsearch/__init__.py:127
+#: engine/core/elasticsearch/__init__.py:627
msgid "no search term provided."
msgstr "Ingen sökterm angavs."
-#: engine/core/filters.py:69 engine/core/filters.py:426
-#: engine/core/filters.py:553
+#: engine/core/filters.py:78 engine/core/filters.py:484
+#: engine/core/filters.py:625
msgid "Search"
msgstr "Sök"
-#: engine/core/filters.py:70 engine/core/filters.py:583
-#: engine/core/filters.py:612
+#: engine/core/filters.py:79 engine/core/filters.py:662
+#: engine/core/filters.py:691
msgid "UUID"
msgstr "UUID"
-#: engine/core/filters.py:71 engine/core/filters.py:428
-#: engine/core/filters.py:555
+#: engine/core/filters.py:80 engine/core/filters.py:487
+#: engine/core/filters.py:627
msgid "Name"
msgstr "Namn"
-#: engine/core/filters.py:72 engine/core/filters.py:557
+#: engine/core/filters.py:82 engine/core/filters.py:630
msgid "Categories"
msgstr "Kategorier"
-#: engine/core/filters.py:74
+#: engine/core/filters.py:86
msgid "Categories Slugs"
msgstr "Kategorier Sniglar"
-#: engine/core/filters.py:75 engine/core/filters.py:436
+#: engine/core/filters.py:88 engine/core/filters.py:495
msgid "Tags"
msgstr "Etiketter"
-#: engine/core/filters.py:76
+#: engine/core/filters.py:90
msgid "Min Price"
msgstr "Min pris"
-#: engine/core/filters.py:77
+#: engine/core/filters.py:93
msgid "Max Price"
msgstr "Max pris"
-#: engine/core/filters.py:78
+#: engine/core/filters.py:95
msgid "Is Active"
msgstr "Är aktiv"
-#: engine/core/filters.py:79
+#: engine/core/filters.py:96
msgid "Brand"
msgstr "Varumärke"
-#: engine/core/filters.py:80
+#: engine/core/filters.py:97
msgid "Attributes"
msgstr "Attribut"
-#: engine/core/filters.py:81
+#: engine/core/filters.py:99
msgid "Quantity"
msgstr "Kvantitet"
-#: engine/core/filters.py:82 engine/core/filters.py:430
-#: engine/core/filters.py:556 engine/core/models.py:321
-#: engine/core/models.py:489 engine/core/models.py:644
+#: engine/core/filters.py:101 engine/core/filters.py:489
+#: engine/core/filters.py:628 engine/core/models.py:327
+#: engine/core/models.py:508 engine/core/models.py:665
msgid "Slug"
msgstr "Snigel"
-#: engine/core/filters.py:83
+#: engine/core/filters.py:102
msgid "Is Digital"
msgstr "Är digital"
-#: engine/core/filters.py:84
+#: engine/core/filters.py:104
msgid "Include sub-categories"
msgstr "Inkludera underkategorier"
-#: engine/core/filters.py:87
+#: engine/core/filters.py:108
msgid "Include personal ordered"
msgstr "Inkludera personligt beställda produkter"
-#: engine/core/filters.py:89 engine/core/models.py:648
+#: engine/core/filters.py:110 engine/core/models.py:669
msgid "SKU"
msgstr "SKU"
-#: engine/core/filters.py:184
+#: engine/core/filters.py:212
msgid "there must be a category_uuid to use include_subcategories flag"
msgstr ""
"Det måste finnas en category_uuid för att använda flaggan "
"include_subcategories"
-#: engine/core/filters.py:353
+#: engine/core/filters.py:398
msgid "Search (ID, product name or part number)"
msgstr "Sök (ID, produktnamn eller artikelnummer)"
-#: engine/core/filters.py:356
+#: engine/core/filters.py:402
msgid "Bought after (inclusive)"
msgstr "Köpt efter (inklusive)"
-#: engine/core/filters.py:357
+#: engine/core/filters.py:405
msgid "Bought before (inclusive)"
msgstr "Köpt tidigare (inklusive)"
-#: engine/core/filters.py:360 engine/core/filters.py:407
-#: engine/core/filters.py:614
+#: engine/core/filters.py:410 engine/core/filters.py:461
+#: engine/core/filters.py:696
msgid "User email"
msgstr "Användarens e-post"
-#: engine/core/filters.py:361 engine/core/filters.py:408
-#: engine/core/filters.py:592 engine/core/filters.py:613
+#: engine/core/filters.py:413 engine/core/filters.py:464
+#: engine/core/filters.py:671 engine/core/filters.py:693
msgid "User UUID"
msgstr "Användarens UUID"
-#: engine/core/filters.py:362
+#: engine/core/filters.py:415
msgid "Status"
msgstr "Status"
-#: engine/core/filters.py:366
+#: engine/core/filters.py:419
msgid "Human Readable ID"
msgstr "Human Readable ID"
-#: engine/core/filters.py:429
+#: engine/core/filters.py:488
msgid "Parent"
msgstr "Förälder"
-#: engine/core/filters.py:433
+#: engine/core/filters.py:492
msgid "Whole category(has at least 1 product or not)"
msgstr "Hela kategorin (har minst 1 produkt eller inte)"
-#: engine/core/filters.py:437
+#: engine/core/filters.py:496
msgid "Level"
msgstr "Nivå"
-#: engine/core/filters.py:587
+#: engine/core/filters.py:666
msgid "Product UUID"
msgstr "Produktens UUID"
-#: engine/core/graphene/mutations.py:40
+#: engine/core/graphene/mutations.py:41
msgid "key to look for in or set into the cache"
msgstr "Nyckel att leta efter i eller sätta in i cachen"
-#: engine/core/graphene/mutations.py:41
+#: engine/core/graphene/mutations.py:43
msgid "data to store in cache"
msgstr "Data som ska lagras i cacheminnet"
-#: engine/core/graphene/mutations.py:44
+#: engine/core/graphene/mutations.py:46
msgid "timeout in seconds to set the data for into the cache"
msgstr "Timeout i sekunder för att lägga data i cacheminnet"
-#: engine/core/graphene/mutations.py:47
+#: engine/core/graphene/mutations.py:49
msgid "cached data"
msgstr "Cachad data"
-#: engine/core/graphene/mutations.py:62
+#: engine/core/graphene/mutations.py:64
msgid "camelized JSON data from the requested URL"
msgstr "Cameliserad JSON-data från den begärda URL:en"
-#: engine/core/graphene/mutations.py:67 engine/core/views.py:257
+#: engine/core/graphene/mutations.py:69 engine/core/views.py:249
msgid "only URLs starting with http(s):// are allowed"
msgstr "Endast webbadresser som börjar med http(s):// är tillåtna"
-#: engine/core/graphene/mutations.py:83
+#: engine/core/graphene/mutations.py:87
msgid "add a product to the order"
msgstr "Lägg till en produkt i ordern"
-#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131
-#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287
+#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139
+#: engine/core/graphene/mutations.py:255 engine/core/graphene/mutations.py:307
#, python-brace-format
msgid "order {order_uuid} not found"
msgstr "Order {order_uuid} hittades inte!"
-#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159
+#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167
msgid "remove a product from the order"
msgstr "Ta bort en produkt från ordern"
-#: engine/core/graphene/mutations.py:137
+#: engine/core/graphene/mutations.py:145
msgid "remove all products from the order"
msgstr "Ta bort alla produkter från ordern"
-#: engine/core/graphene/mutations.py:182
+#: engine/core/graphene/mutations.py:190
msgid "buy an order"
msgstr "Köpa en order"
-#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265
+#: engine/core/graphene/mutations.py:221 engine/core/graphene/mutations.py:283
msgid "please provide either order_uuid or order_hr_id - mutually exclusive"
msgstr ""
-"Vänligen ange antingen order_uuid eller order_hr_id - ömsesidigt "
-"uteslutande!"
+"Vänligen ange antingen order_uuid eller order_hr_id - ömsesidigt uteslutande!"
-#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501
-#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712
+#: engine/core/graphene/mutations.py:250 engine/core/graphene/mutations.py:525
+#: engine/core/graphene/mutations.py:574 engine/core/viewsets.py:753
msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr "Fel typ kom från order.buy()-metoden: {type(instance)!s}"
-#: engine/core/graphene/mutations.py:245
+#: engine/core/graphene/mutations.py:261
msgid "perform an action on a list of products in the order"
msgstr "Utför en åtgärd på en lista med produkter i ordern"
-#: engine/core/graphene/mutations.py:250
+#: engine/core/graphene/mutations.py:266
msgid "remove/add"
msgstr "Ta bort/lägga till"
-#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323
+#: engine/core/graphene/mutations.py:302 engine/core/graphene/mutations.py:343
msgid "action must be either add or remove"
msgstr "Åtgärden måste vara antingen \"lägg till\" eller \"ta bort\"!"
-#: engine/core/graphene/mutations.py:293
+#: engine/core/graphene/mutations.py:313
msgid "perform an action on a list of products in the wishlist"
msgstr "Utför en åtgärd på en lista med produkter i önskelistan"
-#: engine/core/graphene/mutations.py:311
+#: engine/core/graphene/mutations.py:331
msgid "please provide wishlist_uuid value"
msgstr "Vänligen ange värdet för `wishlist_uuid`."
-#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404
-#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460
-#: engine/core/graphene/mutations.py:504
+#: engine/core/graphene/mutations.py:348 engine/core/graphene/mutations.py:424
+#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480
+#: engine/core/graphene/mutations.py:530
#, python-brace-format
msgid "wishlist {wishlist_uuid} not found"
msgstr "Önskelista {wishlist_uuid} hittades inte!"
-#: engine/core/graphene/mutations.py:382
+#: engine/core/graphene/mutations.py:402
msgid "add a product to the wishlist"
msgstr "Lägg till en produkt i ordern"
-#: engine/core/graphene/mutations.py:410
+#: engine/core/graphene/mutations.py:430
msgid "remove a product from the wishlist"
msgstr "Ta bort en produkt från ordern"
-#: engine/core/graphene/mutations.py:438
+#: engine/core/graphene/mutations.py:458
msgid "remove all products from the wishlist"
msgstr "Ta bort en produkt från ordern"
-#: engine/core/graphene/mutations.py:466
+#: engine/core/graphene/mutations.py:486
msgid "buy all products from the wishlist"
msgstr "Ta bort en produkt från ordern"
-#: engine/core/graphene/mutations.py:510
+#: engine/core/graphene/mutations.py:536
msgid "buy a product"
msgstr "Köpa en order"
-#: engine/core/graphene/mutations.py:516
+#: engine/core/graphene/mutations.py:543
msgid ""
-"please send the attributes as the string formatted like "
-"attr1=value1,attr2=value2"
+"please send the attributes as the string formatted like attr1=value1,"
+"attr2=value2"
msgstr ""
"Skicka attributen som en sträng formaterad som attr1=värde1,attr2=värde2"
-#: engine/core/graphene/mutations.py:549
+#: engine/core/graphene/mutations.py:581
msgid "add or delete a feedback for orderproduct"
msgstr "Lägg till eller ta bort en feedback för orderprodukten"
-#: engine/core/graphene/mutations.py:573
+#: engine/core/graphene/mutations.py:607
msgid "action must be either `add` or `remove`"
msgstr "Åtgärden måste vara antingen `add` eller `remove`!"
-#: engine/core/graphene/mutations.py:576
+#: engine/core/graphene/mutations.py:610
#, python-brace-format
msgid "order product {order_product_uuid} not found"
msgstr "Orderprodukt {order_product_uuid} hittades inte!"
-#: engine/core/graphene/mutations.py:582
+#: engine/core/graphene/mutations.py:617
msgid "original address string provided by the user"
msgstr "Originaladresssträng som tillhandahålls av användaren"
-#: engine/core/graphene/mutations.py:618 engine/core/models.py:955
-#: engine/core/models.py:968 engine/core/models.py:1383
-#: engine/core/models.py:1412 engine/core/models.py:1437
-#: engine/core/viewsets.py:715
+#: engine/core/graphene/mutations.py:654 engine/core/models.py:978
+#: engine/core/models.py:991 engine/core/models.py:1435
+#: engine/core/models.py:1466 engine/core/models.py:1497
+#: engine/core/viewsets.py:760
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr "{name} existerar inte: {uuid}!"
-#: engine/core/graphene/mutations.py:632
+#: engine/core/graphene/mutations.py:668
msgid "limit must be between 1 and 10"
msgstr "Gränsen måste vara mellan 1 och 10"
-#: engine/core/graphene/mutations.py:681
+#: engine/core/graphene/mutations.py:717
msgid "elasticsearch - works like a charm"
msgstr "ElasticSearch - fungerar som en smäck"
#: engine/core/graphene/object_types.py:82
-#: engine/core/graphene/object_types.py:370
-#: engine/core/graphene/object_types.py:417 engine/core/models.py:772
-#: engine/core/models.py:1250 engine/core/models.py:1897
+#: engine/core/graphene/object_types.py:417
+#: engine/core/graphene/object_types.py:468 engine/core/models.py:795
+#: engine/core/models.py:1289 engine/core/models.py:2021
msgid "attributes"
msgstr "Attribut"
@@ -1258,90 +1261,89 @@ msgid "groups of attributes"
msgstr "Grupper av attribut"
#: engine/core/graphene/object_types.py:116
-#: engine/core/graphene/object_types.py:193
-#: engine/core/graphene/object_types.py:223 engine/core/models.py:432
+#: engine/core/graphene/object_types.py:214
+#: engine/core/graphene/object_types.py:252 engine/core/models.py:451
msgid "categories"
msgstr "Kategorier"
-#: engine/core/graphene/object_types.py:124 engine/core/models.py:503
+#: engine/core/graphene/object_types.py:132 engine/core/models.py:522
msgid "brands"
msgstr "Brands"
-#: engine/core/graphene/object_types.py:195
+#: engine/core/graphene/object_types.py:216
msgid "category image url"
msgstr "Kategorier"
-#: engine/core/graphene/object_types.py:196
-#: engine/core/graphene/object_types.py:317 engine/core/models.py:283
+#: engine/core/graphene/object_types.py:217
+#: engine/core/graphene/object_types.py:362 engine/core/models.py:289
msgid "markup percentage"
msgstr "Procentuell påslagning"
-#: engine/core/graphene/object_types.py:199
+#: engine/core/graphene/object_types.py:221
msgid "which attributes and values can be used for filtering this category."
msgstr ""
"Vilka attribut och värden som kan användas för att filtrera denna kategori."
-#: engine/core/graphene/object_types.py:203
-msgid ""
-"minimum and maximum prices for products in this category, if available."
+#: engine/core/graphene/object_types.py:227
+msgid "minimum and maximum prices for products in this category, if available."
msgstr ""
"Minsta och högsta pris för produkter i denna kategori, om tillgängligt."
-#: engine/core/graphene/object_types.py:205
+#: engine/core/graphene/object_types.py:231
msgid "tags for this category"
msgstr "Taggar för denna kategori"
-#: engine/core/graphene/object_types.py:206
+#: engine/core/graphene/object_types.py:234
msgid "products in this category"
msgstr "Produkter i denna kategori"
-#: engine/core/graphene/object_types.py:324 engine/core/models.py:188
+#: engine/core/graphene/object_types.py:369 engine/core/models.py:194
msgid "vendors"
msgstr "Leverantörer"
-#: engine/core/graphene/object_types.py:328
+#: engine/core/graphene/object_types.py:373
msgid "Latitude (Y coordinate)"
msgstr "Latitud (Y-koordinat)"
-#: engine/core/graphene/object_types.py:329
+#: engine/core/graphene/object_types.py:374
msgid "Longitude (X coordinate)"
msgstr "Longitud (X-koordinat)"
-#: engine/core/graphene/object_types.py:358
+#: engine/core/graphene/object_types.py:403
msgid "comment"
msgstr "Hur gör man"
-#: engine/core/graphene/object_types.py:359
-#: engine/core/graphene/object_types.py:483
+#: engine/core/graphene/object_types.py:405
+#: engine/core/graphene/object_types.py:539
msgid "rating value from 1 to 10, inclusive, or 0 if not set."
msgstr "Ratingvärde från 1 till och med 10, eller 0 om det inte är inställt."
-#: engine/core/graphene/object_types.py:366
+#: engine/core/graphene/object_types.py:413
msgid "represents feedback from a user."
msgstr "Representerar feedback från en användare."
-#: engine/core/graphene/object_types.py:371
-#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244
+#: engine/core/graphene/object_types.py:418
+#: engine/core/graphene/object_types.py:469 engine/core/models.py:1283
msgid "notifications"
msgstr "Meddelanden"
-#: engine/core/graphene/object_types.py:372
+#: engine/core/graphene/object_types.py:420
msgid "download url for this order product if applicable"
msgstr "Nedladdningsadress för denna orderprodukt om tillämpligt"
-#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736
+#: engine/core/graphene/object_types.py:422 engine/core/models.py:1848
msgid "feedback"
msgstr "Återkoppling"
-#: engine/core/graphene/object_types.py:407
+#: engine/core/graphene/object_types.py:456
msgid "a list of order products in this order"
msgstr "En lista över orderprodukter i den här ordern"
-#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214
+#: engine/core/graphene/object_types.py:458 engine/core/models.py:1253
msgid "billing address"
msgstr "Faktureringsadress"
-#: engine/core/graphene/object_types.py:412
+#: engine/core/graphene/object_types.py:462
msgid ""
"shipping address for this order, leave blank if same as billing address or "
"if not applicable"
@@ -1349,53 +1351,53 @@ msgstr ""
"Leveransadress för denna order, lämna tom om den är samma som "
"faktureringsadressen eller om den inte är tillämplig"
-#: engine/core/graphene/object_types.py:414
+#: engine/core/graphene/object_types.py:465
msgid "total price of this order"
msgstr "Totalpris för denna order"
-#: engine/core/graphene/object_types.py:415
+#: engine/core/graphene/object_types.py:466
msgid "total quantity of products in order"
msgstr "Totalt antal produkter i ordern"
-#: engine/core/graphene/object_types.py:416
+#: engine/core/graphene/object_types.py:467
msgid "are all products in the order digital"
msgstr "Är alla produkter i beställningen digitala"
-#: engine/core/graphene/object_types.py:419
+#: engine/core/graphene/object_types.py:471
msgid "transactions for this order"
msgstr "Transaktioner för denna order"
-#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278
+#: engine/core/graphene/object_types.py:491 engine/core/models.py:1317
msgid "orders"
msgstr "Beställningar"
-#: engine/core/graphene/object_types.py:459
+#: engine/core/graphene/object_types.py:512
msgid "image url"
msgstr "URL för bild"
-#: engine/core/graphene/object_types.py:466
+#: engine/core/graphene/object_types.py:519
msgid "product's images"
msgstr "Produktens bilder"
-#: engine/core/graphene/object_types.py:473 engine/core/models.py:431
-#: engine/core/models.py:586
+#: engine/core/graphene/object_types.py:526 engine/core/models.py:450
+#: engine/core/models.py:607
msgid "category"
msgstr "Kategori"
-#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737
+#: engine/core/graphene/object_types.py:528 engine/core/models.py:1849
msgid "feedbacks"
msgstr "Återkoppling"
-#: engine/core/graphene/object_types.py:476 engine/core/models.py:502
-#: engine/core/models.py:595
+#: engine/core/graphene/object_types.py:529 engine/core/models.py:521
+#: engine/core/models.py:616
msgid "brand"
msgstr "Varumärke"
-#: engine/core/graphene/object_types.py:477 engine/core/models.py:106
+#: engine/core/graphene/object_types.py:531 engine/core/models.py:106
msgid "attribute groups"
msgstr "Attributgrupper"
-#: engine/core/graphene/object_types.py:478
+#: engine/core/graphene/object_types.py:533
#: engine/core/templates/digital_order_created_email.html:111
#: engine/core/templates/digital_order_delivered_email.html:109
#: engine/core/templates/shipped_order_created_email.html:109
@@ -1403,7 +1405,7 @@ msgstr "Attributgrupper"
msgid "price"
msgstr "Pris"
-#: engine/core/graphene/object_types.py:479
+#: engine/core/graphene/object_types.py:534
#: engine/core/templates/digital_order_created_email.html:110
#: engine/core/templates/digital_order_delivered_email.html:108
#: engine/core/templates/shipped_order_created_email.html:108
@@ -1411,39 +1413,39 @@ msgstr "Pris"
msgid "quantity"
msgstr "Kvantitet"
-#: engine/core/graphene/object_types.py:480
+#: engine/core/graphene/object_types.py:535
msgid "number of feedbacks"
msgstr "Antal återkopplingar"
-#: engine/core/graphene/object_types.py:481
+#: engine/core/graphene/object_types.py:536
msgid "only available for personal orders"
msgstr "Produkter endast tillgängliga för personliga beställningar"
-#: engine/core/graphene/object_types.py:484
+#: engine/core/graphene/object_types.py:541
msgid "discount price"
msgstr "Rabatterat pris"
-#: engine/core/graphene/object_types.py:508 engine/core/models.py:658
+#: engine/core/graphene/object_types.py:565 engine/core/models.py:679
msgid "products"
msgstr "Produkter"
-#: engine/core/graphene/object_types.py:611
+#: engine/core/graphene/object_types.py:675
msgid "promocodes"
msgstr "Promokoder"
-#: engine/core/graphene/object_types.py:621
+#: engine/core/graphene/object_types.py:690
msgid "products on sale"
msgstr "Produkter på rea"
-#: engine/core/graphene/object_types.py:628 engine/core/models.py:904
+#: engine/core/graphene/object_types.py:698 engine/core/models.py:927
msgid "promotions"
msgstr "Kampanjer"
-#: engine/core/graphene/object_types.py:632 engine/core/models.py:187
+#: engine/core/graphene/object_types.py:702 engine/core/models.py:193
msgid "vendor"
msgstr "Leverantör"
-#: engine/core/graphene/object_types.py:633 engine/core/models.py:657
+#: engine/core/graphene/object_types.py:703 engine/core/models.py:678
#: engine/core/templates/digital_order_created_email.html:109
#: engine/core/templates/digital_order_delivered_email.html:107
#: engine/core/templates/shipped_order_created_email.html:107
@@ -1451,98 +1453,99 @@ msgstr "Leverantör"
msgid "product"
msgstr "Produkt"
-#: engine/core/graphene/object_types.py:644 engine/core/models.py:927
+#: engine/core/graphene/object_types.py:715 engine/core/models.py:950
msgid "wishlisted products"
msgstr "Önskelistade produkter"
-#: engine/core/graphene/object_types.py:650 engine/core/models.py:944
+#: engine/core/graphene/object_types.py:722 engine/core/models.py:967
msgid "wishlists"
msgstr "Önskelistor"
-#: engine/core/graphene/object_types.py:654
+#: engine/core/graphene/object_types.py:727
msgid "tagged products"
msgstr "Taggade produkter"
-#: engine/core/graphene/object_types.py:661 engine/core/models.py:224
-#: engine/core/models.py:601
+#: engine/core/graphene/object_types.py:735 engine/core/models.py:230
+#: engine/core/models.py:622
msgid "product tags"
msgstr "Produkttaggar"
-#: engine/core/graphene/object_types.py:665
+#: engine/core/graphene/object_types.py:740
msgid "tagged categories"
msgstr "Taggade kategorier"
-#: engine/core/graphene/object_types.py:672
+#: engine/core/graphene/object_types.py:748
msgid "categories tags"
msgstr "Kategoriernas taggar"
-#: engine/core/graphene/object_types.py:676
+#: engine/core/graphene/object_types.py:752
msgid "project name"
msgstr "Projektets namn"
-#: engine/core/graphene/object_types.py:677
+#: engine/core/graphene/object_types.py:753
msgid "company name"
msgstr "Företagets namn"
-#: engine/core/graphene/object_types.py:678
+#: engine/core/graphene/object_types.py:754
msgid "company address"
msgstr "Företagets adress"
-#: engine/core/graphene/object_types.py:679
+#: engine/core/graphene/object_types.py:755
msgid "company phone number"
msgstr "Företagets telefonnummer"
-#: engine/core/graphene/object_types.py:680
+#: engine/core/graphene/object_types.py:758
msgid "email from, sometimes it must be used instead of host user value"
-msgstr "\"email from\", ibland måste det användas istället för host user-värdet"
+msgstr ""
+"\"email from\", ibland måste det användas istället för host user-värdet"
-#: engine/core/graphene/object_types.py:681
+#: engine/core/graphene/object_types.py:761
msgid "email host user"
msgstr "E-post värd användare"
-#: engine/core/graphene/object_types.py:682
+#: engine/core/graphene/object_types.py:762
msgid "maximum amount for payment"
msgstr "Högsta belopp för betalning"
-#: engine/core/graphene/object_types.py:683
+#: engine/core/graphene/object_types.py:763
msgid "minimum amount for payment"
msgstr "Lägsta belopp för betalning"
-#: engine/core/graphene/object_types.py:684
+#: engine/core/graphene/object_types.py:764
msgid "analytics data"
msgstr "Analysdata"
-#: engine/core/graphene/object_types.py:685
+#: engine/core/graphene/object_types.py:765
msgid "advertisement data"
msgstr "Annonsdata"
-#: engine/core/graphene/object_types.py:688
+#: engine/core/graphene/object_types.py:768
msgid "company configuration"
msgstr "Konfiguration"
-#: engine/core/graphene/object_types.py:692
+#: engine/core/graphene/object_types.py:772
msgid "language code"
msgstr "Språkkod"
-#: engine/core/graphene/object_types.py:693
+#: engine/core/graphene/object_types.py:773
msgid "language name"
msgstr "Språkets namn"
-#: engine/core/graphene/object_types.py:694
+#: engine/core/graphene/object_types.py:774
msgid "language flag, if exists :)"
msgstr "Språkflagga, om sådan finns :)"
-#: engine/core/graphene/object_types.py:697
+#: engine/core/graphene/object_types.py:777
msgid "supported languages"
msgstr "Hämta en lista över språk som stöds"
-#: engine/core/graphene/object_types.py:728
-#: engine/core/graphene/object_types.py:729
-#: engine/core/graphene/object_types.py:730
+#: engine/core/graphene/object_types.py:809
+#: engine/core/graphene/object_types.py:812
+#: engine/core/graphene/object_types.py:815
msgid "products search results"
msgstr "Sökresultat för produkter"
-#: engine/core/graphene/object_types.py:731
+#: engine/core/graphene/object_types.py:817
msgid "posts search results"
msgstr "Sökresultat för produkter"
@@ -1554,8 +1557,8 @@ msgid ""
"categorizing and managing attributes more effectively in acomplex system."
msgstr ""
"Representerar en grupp av attribut, som kan vara hierarkiska. Denna klass "
-"används för att hantera och organisera attributgrupper. En attributgrupp kan"
-" ha en överordnad grupp som bildar en hierarkisk struktur. Detta kan vara "
+"används för att hantera och organisera attributgrupper. En attributgrupp kan "
+"ha en överordnad grupp som bildar en hierarkisk struktur. Detta kan vara "
"användbart för att kategorisera och hantera attribut på ett mer effektivt "
"sätt i ett komplext system."
@@ -1571,7 +1574,7 @@ msgstr "Överordnad attributgrupp"
msgid "attribute group's name"
msgstr "Attributgruppens namn"
-#: engine/core/models.py:105 engine/core/models.py:734
+#: engine/core/models.py:105 engine/core/models.py:755
msgid "attribute group"
msgstr "Attributgrupp"
@@ -1588,56 +1591,56 @@ msgstr ""
"Representerar en vendor-enhet som kan lagra information om externa "
"leverantörer och deras interaktionskrav. Klassen Vendor används för att "
"definiera och hantera information som är relaterad till en extern "
-"leverantör. Den lagrar leverantörens namn, autentiseringsuppgifter som krävs"
-" för kommunikation och den procentuella markering som tillämpas på produkter"
-" som hämtas från leverantören. Modellen innehåller också ytterligare "
-"metadata och begränsningar, vilket gör den lämplig att använda i system som "
+"leverantör. Den lagrar leverantörens namn, autentiseringsuppgifter som krävs "
+"för kommunikation och den procentuella markering som tillämpas på produkter "
+"som hämtas från leverantören. Modellen innehåller också ytterligare metadata "
+"och begränsningar, vilket gör den lämplig att använda i system som "
"interagerar med tredjepartsleverantörer."
-#: engine/core/models.py:124
+#: engine/core/models.py:125
msgid "stores credentials and endpoints required for vendor communication"
msgstr ""
"Lagrar autentiseringsuppgifter och ändpunkter som krävs för leverantörens "
"API-kommunikation"
-#: engine/core/models.py:125
+#: engine/core/models.py:127
msgid "authentication info"
msgstr "Autentiseringsinformation"
-#: engine/core/models.py:130
+#: engine/core/models.py:132
msgid "define the markup for products retrieved from this vendor"
msgstr ""
"Definiera markeringen för produkter som hämtas från den här leverantören"
-#: engine/core/models.py:131
+#: engine/core/models.py:133
msgid "vendor markup percentage"
msgstr "Leverantörens påslag i procent"
-#: engine/core/models.py:135
+#: engine/core/models.py:137
msgid "name of this vendor"
msgstr "Namn på denna säljare"
-#: engine/core/models.py:136
+#: engine/core/models.py:138
msgid "vendor name"
msgstr "Leverantörens namn"
-#: engine/core/models.py:147
+#: engine/core/models.py:153
msgid "response file"
msgstr "svarsfil"
-#: engine/core/models.py:148
+#: engine/core/models.py:154
msgid "vendor's last processing response"
msgstr "säljarens senaste bearbetningssvar"
-#: engine/core/models.py:154
+#: engine/core/models.py:160
msgid "vendor's integration file path"
msgstr "Sökväg till leverantörens integrationsfil"
-#: engine/core/models.py:155
+#: engine/core/models.py:161
msgid "integration path"
msgstr "Integrationsväg"
-#: engine/core/models.py:197
+#: engine/core/models.py:203
msgid ""
"Represents a product tag used for classifying or identifying products. The "
"ProductTag class is designed to uniquely identify and classify products "
@@ -1649,30 +1652,30 @@ msgstr ""
"identifiera produkter. Klassen ProductTag är utformad för att unikt "
"identifiera och klassificera produkter genom en kombination av en intern "
"taggidentifierare och ett användarvänligt visningsnamn. Den stöder "
-"operationer som exporteras via mixins och tillhandahåller metadataanpassning"
-" för administrativa ändamål."
+"operationer som exporteras via mixins och tillhandahåller metadataanpassning "
+"för administrativa ändamål."
-#: engine/core/models.py:209 engine/core/models.py:240
+#: engine/core/models.py:215 engine/core/models.py:246
msgid "internal tag identifier for the product tag"
msgstr "Intern taggidentifierare för produkttaggen"
-#: engine/core/models.py:210 engine/core/models.py:241
+#: engine/core/models.py:216 engine/core/models.py:247
msgid "tag name"
msgstr "Tagg namn"
-#: engine/core/models.py:214 engine/core/models.py:245
+#: engine/core/models.py:220 engine/core/models.py:251
msgid "user-friendly name for the product tag"
msgstr "Användarvänligt namn för produkttaggen"
-#: engine/core/models.py:215 engine/core/models.py:246
+#: engine/core/models.py:221 engine/core/models.py:252
msgid "tag display name"
msgstr "Taggens visningsnamn"
-#: engine/core/models.py:223
+#: engine/core/models.py:229
msgid "product tag"
msgstr "Produktmärkning"
-#: engine/core/models.py:229
+#: engine/core/models.py:235
msgid ""
"Represents a category tag used for products. This class models a category "
"tag that can be used to associate and classify products. It includes "
@@ -1683,15 +1686,15 @@ msgstr ""
"klassificera produkter. Den innehåller attribut för en intern "
"taggidentifierare och ett användarvänligt visningsnamn."
-#: engine/core/models.py:254
+#: engine/core/models.py:260
msgid "category tag"
msgstr "kategori tagg"
-#: engine/core/models.py:255 engine/core/models.py:327
+#: engine/core/models.py:261 engine/core/models.py:333
msgid "category tags"
msgstr "Kategoritaggar"
-#: engine/core/models.py:260
+#: engine/core/models.py:266
msgid ""
"Represents a category entity to organize and group related items in a "
"hierarchical structure. Categories may have hierarchical relationships with "
@@ -1709,61 +1712,60 @@ msgstr ""
"innehåller fält för metadata och visuell representation, som utgör grunden "
"för kategorirelaterade funktioner. Den här klassen används vanligtvis för "
"att definiera och hantera produktkategorier eller andra liknande "
-"grupperingar inom en applikation, så att användare eller administratörer kan"
-" ange namn, beskrivning och hierarki för kategorier samt tilldela attribut "
+"grupperingar inom en applikation, så att användare eller administratörer kan "
+"ange namn, beskrivning och hierarki för kategorier samt tilldela attribut "
"som bilder, taggar eller prioritet."
-#: engine/core/models.py:274
+#: engine/core/models.py:280
msgid "upload an image representing this category"
msgstr "Ladda upp en bild som representerar denna kategori"
-#: engine/core/models.py:277
+#: engine/core/models.py:283
msgid "category image"
msgstr "Kategori bild"
-#: engine/core/models.py:282
+#: engine/core/models.py:288
msgid "define a markup percentage for products in this category"
msgstr "Definiera en påslagsprocent för produkter i den här kategorin"
-#: engine/core/models.py:291
+#: engine/core/models.py:297
msgid "parent of this category to form a hierarchical structure"
msgstr "Förälder till denna kategori för att bilda en hierarkisk struktur"
-#: engine/core/models.py:292
+#: engine/core/models.py:298
msgid "parent category"
msgstr "Föräldrakategori"
-#: engine/core/models.py:297
+#: engine/core/models.py:303
msgid "category name"
msgstr "Namn på kategori"
-#: engine/core/models.py:298
+#: engine/core/models.py:304
msgid "provide a name for this category"
msgstr "Ange ett namn för denna kategori"
-#: engine/core/models.py:305
+#: engine/core/models.py:311
msgid "add a detailed description for this category"
msgstr "Lägg till en detaljerad beskrivning för denna kategori"
-#: engine/core/models.py:306
+#: engine/core/models.py:312
msgid "category description"
msgstr "Beskrivning av kategori"
-#: engine/core/models.py:326
+#: engine/core/models.py:332
msgid "tags that help describe or group this category"
msgstr "taggar som hjälper till att beskriva eller gruppera denna kategori"
-#: engine/core/models.py:333 engine/core/models.py:495
+#: engine/core/models.py:339 engine/core/models.py:514
msgid "priority"
msgstr "Prioritet"
-#: engine/core/models.py:438
+#: engine/core/models.py:457
msgid ""
"Represents a Brand object in the system. This class handles information and "
"attributes related to a brand, including its name, logos, description, "
"associated categories, a unique slug, and priority order. It allows for the "
-"organization and representation of brand-related data within the "
-"application."
+"organization and representation of brand-related data within the application."
msgstr ""
"Representerar ett Brand-objekt i systemet. Klassen hanterar information och "
"attribut som är relaterade till ett varumärke, inklusive dess namn, "
@@ -1771,50 +1773,50 @@ msgstr ""
"prioritetsordning. Den gör det möjligt att organisera och representera "
"varumärkesrelaterade data i applikationen."
-#: engine/core/models.py:448
+#: engine/core/models.py:467
msgid "name of this brand"
msgstr "Namn på detta varumärke"
-#: engine/core/models.py:449
+#: engine/core/models.py:468
msgid "brand name"
msgstr "Varumärke"
-#: engine/core/models.py:456
+#: engine/core/models.py:475
msgid "upload a logo representing this brand"
msgstr "Ladda upp en logotyp som representerar detta varumärke"
-#: engine/core/models.py:458
+#: engine/core/models.py:477
msgid "brand small image"
msgstr "Varumärke liten image"
-#: engine/core/models.py:464
+#: engine/core/models.py:483
msgid "upload a big logo representing this brand"
msgstr "Ladda upp en stor logotyp som representerar detta varumärke"
-#: engine/core/models.py:466
+#: engine/core/models.py:485
msgid "brand big image"
msgstr "Varumärke med stor image"
-#: engine/core/models.py:471
+#: engine/core/models.py:490
msgid "add a detailed description of the brand"
msgstr "Lägg till en detaljerad beskrivning av varumärket"
-#: engine/core/models.py:472
+#: engine/core/models.py:491
msgid "brand description"
msgstr "Varumärkesbeskrivning"
-#: engine/core/models.py:477
+#: engine/core/models.py:496
msgid "optional categories that this brand is associated with"
msgstr "Valfria kategorier som detta varumärke är förknippat med"
-#: engine/core/models.py:478
+#: engine/core/models.py:497
msgid "associated categories"
msgstr "Kategorier"
-#: engine/core/models.py:508
+#: engine/core/models.py:527
msgid ""
-"Represents the stock of a product managed in the system. This class provides"
-" details about the relationship between vendors, products, and their stock "
+"Represents the stock of a product managed in the system. This class provides "
+"details about the relationship between vendors, products, and their stock "
"information, as well as inventory-related properties like price, purchase "
"price, quantity, SKU, and digital assets. It is part of the inventory "
"management system to allow tracking and evaluation of products available "
@@ -1827,72 +1829,72 @@ msgstr ""
"lagerhanteringssystemet för att möjliggöra spårning och utvärdering av "
"produkter som finns tillgängliga från olika leverantörer."
-#: engine/core/models.py:520
+#: engine/core/models.py:539
msgid "the vendor supplying this product stock"
msgstr "Leverantören som levererar denna produkt lager"
-#: engine/core/models.py:521
+#: engine/core/models.py:540
msgid "associated vendor"
msgstr "Associerad leverantör"
-#: engine/core/models.py:525
+#: engine/core/models.py:544
msgid "final price to the customer after markups"
msgstr "Slutligt pris till kunden efter påslag"
-#: engine/core/models.py:526
+#: engine/core/models.py:545
msgid "selling price"
msgstr "Försäljningspris"
-#: engine/core/models.py:531
+#: engine/core/models.py:550
msgid "the product associated with this stock entry"
msgstr "Produkten som är associerad med denna lagerpost"
-#: engine/core/models.py:532 engine/core/models.py:797
-#: engine/core/models.py:843 engine/core/models.py:1792
+#: engine/core/models.py:551 engine/core/models.py:820
+#: engine/core/models.py:866 engine/core/models.py:1904
msgid "associated product"
msgstr "Tillhörande produkt"
-#: engine/core/models.py:539
+#: engine/core/models.py:558
msgid "the price paid to the vendor for this product"
msgstr "Det pris som betalats till säljaren för denna produkt"
-#: engine/core/models.py:540
+#: engine/core/models.py:559
msgid "vendor purchase price"
msgstr "Leverantörens inköpspris"
-#: engine/core/models.py:544
+#: engine/core/models.py:563
msgid "available quantity of the product in stock"
msgstr "Tillgänglig kvantitet av produkten i lager"
-#: engine/core/models.py:545
+#: engine/core/models.py:564
msgid "quantity in stock"
msgstr "Antal i lager"
-#: engine/core/models.py:549
+#: engine/core/models.py:568
msgid "vendor-assigned SKU for identifying the product"
msgstr "SKU som tilldelats av leverantören för identifiering av produkten"
-#: engine/core/models.py:550
+#: engine/core/models.py:569
msgid "vendor sku"
msgstr "Leverantörens SKU"
-#: engine/core/models.py:556
+#: engine/core/models.py:575
msgid "digital file associated with this stock if applicable"
msgstr "Digital fil associerad med detta lager om tillämpligt"
-#: engine/core/models.py:557
+#: engine/core/models.py:576
msgid "digital file"
msgstr "Digital fil"
-#: engine/core/models.py:560
+#: engine/core/models.py:580
msgid "system attributes"
msgstr "Systemattribut"
-#: engine/core/models.py:567
+#: engine/core/models.py:588
msgid "stock entries"
msgstr "Lagerposter"
-#: engine/core/models.py:572
+#: engine/core/models.py:593
msgid ""
"Represents a product with attributes such as category, brand, tags, digital "
"status, name, description, part number, and slug. Provides related utility "
@@ -1906,163 +1908,163 @@ msgstr ""
"Representerar en produkt med attribut som kategori, varumärke, taggar, "
"digital status, namn, beskrivning, artikelnummer och slug. Tillhandahåller "
"relaterade verktygsegenskaper för att hämta betyg, feedbackräkning, pris, "
-"kvantitet och totala beställningar. Utformad för användning i ett system som"
-" hanterar e-handel eller lagerhantering. Klassen interagerar med relaterade "
+"kvantitet och totala beställningar. Utformad för användning i ett system som "
+"hanterar e-handel eller lagerhantering. Klassen interagerar med relaterade "
"modeller (t.ex. Category, Brand och ProductTag) och hanterar cachelagring "
"för egenskaper som används ofta för att förbättra prestandan. Den används "
"för att definiera och manipulera produktdata och tillhörande information i "
"en applikation."
-#: engine/core/models.py:585
+#: engine/core/models.py:606
msgid "category this product belongs to"
msgstr "Kategori som denna produkt tillhör"
-#: engine/core/models.py:594
+#: engine/core/models.py:615
msgid "optionally associate this product with a brand"
msgstr "Möjlighet att associera produkten med ett varumärke"
-#: engine/core/models.py:600
+#: engine/core/models.py:621
msgid "tags that help describe or group this product"
msgstr "Taggar som hjälper till att beskriva eller gruppera denna produkt"
-#: engine/core/models.py:605
+#: engine/core/models.py:626
msgid "indicates whether this product is digitally delivered"
msgstr "Anger om denna produkt levereras digitalt"
-#: engine/core/models.py:606
+#: engine/core/models.py:627
msgid "is product digital"
msgstr "Är produkten digital"
-#: engine/core/models.py:612
+#: engine/core/models.py:633
msgid "provide a clear identifying name for the product"
msgstr "Tillhandahålla ett tydligt identifierande namn för produkten"
-#: engine/core/models.py:613
+#: engine/core/models.py:634
msgid "product name"
msgstr "Produktens namn"
-#: engine/core/models.py:619 engine/core/models.py:892
+#: engine/core/models.py:640 engine/core/models.py:915
msgid "add a detailed description of the product"
msgstr "Lägg till en detaljerad beskrivning av produkten"
-#: engine/core/models.py:620
+#: engine/core/models.py:641
msgid "product description"
msgstr "Produktbeskrivning"
-#: engine/core/models.py:627
+#: engine/core/models.py:648
msgid "part number for this product"
msgstr "Artikelnummer för denna produkt"
-#: engine/core/models.py:628
+#: engine/core/models.py:649
msgid "part number"
msgstr "Artikelnummer"
-#: engine/core/models.py:647
+#: engine/core/models.py:668
msgid "stock keeping unit for this product"
msgstr "Lagerhållningsenhet för denna produkt"
-#: engine/core/models.py:720
+#: engine/core/models.py:741
msgid ""
"Represents an attribute in the system. This class is used to define and "
"manage attributes, which are customizable pieces of data that can be "
"associated with other entities. Attributes have associated categories, "
-"groups, value types, and names. The model supports multiple types of values,"
-" including string, integer, float, boolean, array, and object. This allows "
+"groups, value types, and names. The model supports multiple types of values, "
+"including string, integer, float, boolean, array, and object. This allows "
"for dynamic and flexible data structuring."
msgstr ""
-"Representerar ett attribut i systemet. Denna klass används för att definiera"
-" och hantera attribut, som är anpassningsbara bitar av data som kan "
+"Representerar ett attribut i systemet. Denna klass används för att definiera "
+"och hantera attribut, som är anpassningsbara bitar av data som kan "
"associeras med andra enheter. Attribut har associerade kategorier, grupper, "
"värdetyper och namn. Modellen stöder flera typer av värden, inklusive "
-"sträng, heltal, flottör, boolean, array och objekt. Detta ger möjlighet till"
-" dynamisk och flexibel datastrukturering."
+"sträng, heltal, flottör, boolean, array och objekt. Detta ger möjlighet till "
+"dynamisk och flexibel datastrukturering."
-#: engine/core/models.py:733
+#: engine/core/models.py:754
msgid "group of this attribute"
msgstr "Grupp av detta attribut"
-#: engine/core/models.py:739
+#: engine/core/models.py:760
msgid "string"
msgstr "Sträng"
-#: engine/core/models.py:740
+#: engine/core/models.py:761
msgid "integer"
msgstr "Heltal"
-#: engine/core/models.py:741
+#: engine/core/models.py:762
msgid "float"
msgstr "Flottör"
-#: engine/core/models.py:742
+#: engine/core/models.py:763
msgid "boolean"
msgstr "Boolean"
-#: engine/core/models.py:743
+#: engine/core/models.py:764
msgid "array"
msgstr "Array"
-#: engine/core/models.py:744
+#: engine/core/models.py:765
msgid "object"
msgstr "Objekt"
-#: engine/core/models.py:746
+#: engine/core/models.py:767
msgid "type of the attribute's value"
msgstr "Typ av attributets värde"
-#: engine/core/models.py:747
+#: engine/core/models.py:768
msgid "value type"
msgstr "Typ av värde"
-#: engine/core/models.py:752
+#: engine/core/models.py:773
msgid "name of this attribute"
msgstr "Namn på detta attribut"
-#: engine/core/models.py:753
+#: engine/core/models.py:774
msgid "attribute's name"
msgstr "Attributets namn"
-#: engine/core/models.py:758
+#: engine/core/models.py:779
msgid "is filterable"
msgstr "är filtrerbar"
-#: engine/core/models.py:759
+#: engine/core/models.py:781
msgid "designates whether this attribute can be used for filtering or not"
msgstr ""
"Vilka attribut och värden som kan användas för att filtrera denna kategori."
-#: engine/core/models.py:771 engine/core/models.py:789
+#: engine/core/models.py:794 engine/core/models.py:812
#: engine/core/templates/digital_order_delivered_email.html:134
msgid "attribute"
msgstr "Attribut"
-#: engine/core/models.py:777
+#: engine/core/models.py:800
msgid ""
-"Represents a specific value for an attribute that is linked to a product. It"
-" links the 'attribute' to a unique 'value', allowing better organization and"
-" dynamic representation of product characteristics."
+"Represents a specific value for an attribute that is linked to a product. It "
+"links the 'attribute' to a unique 'value', allowing better organization and "
+"dynamic representation of product characteristics."
msgstr ""
"Representerar ett specifikt värde för ett attribut som är kopplat till en "
"produkt. Det kopplar \"attributet\" till ett unikt \"värde\", vilket "
"möjliggör bättre organisation och dynamisk representation av "
"produktegenskaper."
-#: engine/core/models.py:788
+#: engine/core/models.py:811
msgid "attribute of this value"
msgstr "Attribut för detta värde"
-#: engine/core/models.py:796
+#: engine/core/models.py:819
msgid "the specific product associated with this attribute's value"
msgstr "Den specifika produkt som är associerad med detta attributs värde"
-#: engine/core/models.py:802
+#: engine/core/models.py:825
msgid "the specific value for this attribute"
msgstr "Det specifika värdet för detta attribut"
-#: engine/core/models.py:815
+#: engine/core/models.py:838
msgid ""
"Represents a product image associated with a product in the system. This "
-"class is designed to manage images for products, including functionality for"
-" uploading image files, associating them with specific products, and "
+"class is designed to manage images for products, including functionality for "
+"uploading image files, associating them with specific products, and "
"determining their display order. It also includes an accessibility feature "
"with alternative text for the images."
msgstr ""
@@ -2072,46 +2074,46 @@ msgstr ""
"produkter och bestämma deras visningsordning. Den innehåller också en "
"tillgänglighetsfunktion med alternativ text för bilderna."
-#: engine/core/models.py:826
+#: engine/core/models.py:849
msgid "provide alternative text for the image for accessibility"
msgstr "Tillhandahåll alternativ text för bilden för tillgänglighet"
-#: engine/core/models.py:827
+#: engine/core/models.py:850
msgid "image alt text"
msgstr "Alt-text för bild"
-#: engine/core/models.py:830
+#: engine/core/models.py:853
msgid "upload the image file for this product"
msgstr "Ladda upp bildfilen för den här produkten"
-#: engine/core/models.py:831 engine/core/models.py:862
+#: engine/core/models.py:854 engine/core/models.py:885
msgid "product image"
msgstr "Produktbild"
-#: engine/core/models.py:836
+#: engine/core/models.py:859
msgid "determines the order in which images are displayed"
msgstr "Bestämmer i vilken ordning bilderna ska visas"
-#: engine/core/models.py:837
+#: engine/core/models.py:860
msgid "display priority"
msgstr "Prioritet för visning"
-#: engine/core/models.py:842
+#: engine/core/models.py:865
msgid "the product that this image represents"
msgstr "Den produkt som denna bild representerar"
-#: engine/core/models.py:863
+#: engine/core/models.py:886
msgid "product images"
msgstr "Produktbilder"
-#: engine/core/models.py:868
+#: engine/core/models.py:891
msgid ""
"Represents a promotional campaign for products with a discount. This class "
"is used to define and manage promotional campaigns that offer a percentage-"
"based discount for products. The class includes attributes for setting the "
"discount rate, providing details about the promotion, and linking it to the "
-"applicable products. It integrates with the product catalog to determine the"
-" affected items in the campaign."
+"applicable products. It integrates with the product catalog to determine the "
+"affected items in the campaign."
msgstr ""
"Representerar en kampanj för produkter med rabatt. Den här klassen används "
"för att definiera och hantera kampanjer som erbjuder en procentbaserad "
@@ -2120,39 +2122,39 @@ msgstr ""
"tillämpliga produkterna. Den integreras med produktkatalogen för att "
"fastställa vilka artiklar som påverkas av kampanjen."
-#: engine/core/models.py:880
+#: engine/core/models.py:903
msgid "percentage discount for the selected products"
msgstr "Procentuell rabatt för de valda produkterna"
-#: engine/core/models.py:881
+#: engine/core/models.py:904
msgid "discount percentage"
msgstr "Rabattprocent"
-#: engine/core/models.py:886
+#: engine/core/models.py:909
msgid "provide a unique name for this promotion"
msgstr "Ange ett unikt namn för denna kampanj"
-#: engine/core/models.py:887
+#: engine/core/models.py:910
msgid "promotion name"
msgstr "Kampanjens namn"
-#: engine/core/models.py:893
+#: engine/core/models.py:916
msgid "promotion description"
msgstr "Beskrivning av kampanjen"
-#: engine/core/models.py:898
+#: engine/core/models.py:921
msgid "select which products are included in this promotion"
msgstr "Välj vilka produkter som ingår i denna kampanj"
-#: engine/core/models.py:899
+#: engine/core/models.py:922
msgid "included products"
msgstr "Inkluderade produkter"
-#: engine/core/models.py:903
+#: engine/core/models.py:926
msgid "promotion"
msgstr "Marknadsföring"
-#: engine/core/models.py:914
+#: engine/core/models.py:937
msgid ""
"Represents a user's wishlist for storing and managing desired products. The "
"class provides functionality to manage a collection of products, supporting "
@@ -2160,129 +2162,129 @@ msgid ""
"operations for adding and removing multiple products at once."
msgstr ""
"Representerar en användares önskelista för lagring och hantering av önskade "
-"produkter. Klassen tillhandahåller funktionalitet för att hantera en samling"
-" produkter, med stöd för operationer som att lägga till och ta bort "
+"produkter. Klassen tillhandahåller funktionalitet för att hantera en samling "
+"produkter, med stöd för operationer som att lägga till och ta bort "
"produkter, samt stöd för operationer för att lägga till och ta bort flera "
"produkter samtidigt."
-#: engine/core/models.py:926
+#: engine/core/models.py:949
msgid "products that the user has marked as wanted"
msgstr "Produkter som användaren har markerat som önskade"
-#: engine/core/models.py:934
+#: engine/core/models.py:957
msgid "user who owns this wishlist"
msgstr "Användare som äger denna önskelista"
-#: engine/core/models.py:935
+#: engine/core/models.py:958
msgid "wishlist owner"
msgstr "Wishlist's ägare"
-#: engine/core/models.py:943
+#: engine/core/models.py:966
msgid "wishlist"
msgstr "Önskelista"
-#: engine/core/models.py:985
+#: engine/core/models.py:1008
msgid ""
"Represents a documentary record tied to a product. This class is used to "
"store information about documentaries related to specific products, "
"including file uploads and their metadata. It contains methods and "
"properties to handle the file type and storage path for the documentary "
-"files. It extends functionality from specific mixins and provides additional"
-" custom features."
+"files. It extends functionality from specific mixins and provides additional "
+"custom features."
msgstr ""
"Representerar en dokumentärpost som är knuten till en produkt. Denna klass "
"används för att lagra information om dokumentärer som är relaterade till "
"specifika produkter, inklusive filuppladdningar och deras metadata. Den "
"innehåller metoder och egenskaper för att hantera filtyp och lagringssökväg "
-"för dokumentärfilerna. Den utökar funktionaliteten från specifika mixins och"
-" tillhandahåller ytterligare anpassade funktioner."
+"för dokumentärfilerna. Den utökar funktionaliteten från specifika mixins och "
+"tillhandahåller ytterligare anpassade funktioner."
-#: engine/core/models.py:998
+#: engine/core/models.py:1023
msgid "documentary"
msgstr "Dokumentärfilm"
-#: engine/core/models.py:999
+#: engine/core/models.py:1024
msgid "documentaries"
msgstr "Dokumentärer"
-#: engine/core/models.py:1009
+#: engine/core/models.py:1034
msgid "unresolved"
msgstr "Olöst"
-#: engine/core/models.py:1014
+#: engine/core/models.py:1039
msgid ""
-"Represents an address entity that includes location details and associations"
-" with a user. Provides functionality for geographic and address data "
-"storage, as well as integration with geocoding services. This class is "
-"designed to store detailed address information including components like "
-"street, city, region, country, and geolocation (longitude and latitude). It "
-"supports integration with geocoding APIs, enabling the storage of raw API "
-"responses for further processing or inspection. The class also allows "
-"associating an address with a user, facilitating personalized data handling."
+"Represents an address entity that includes location details and associations "
+"with a user. Provides functionality for geographic and address data storage, "
+"as well as integration with geocoding services. This class is designed to "
+"store detailed address information including components like street, city, "
+"region, country, and geolocation (longitude and latitude). It supports "
+"integration with geocoding APIs, enabling the storage of raw API responses "
+"for further processing or inspection. The class also allows associating an "
+"address with a user, facilitating personalized data handling."
msgstr ""
"Representerar en adressentitet som innehåller platsinformation och "
"associationer med en användare. Tillhandahåller funktionalitet för lagring "
-"av geografiska data och adressdata samt integration med geokodningstjänster."
-" Denna klass är utformad för att lagra detaljerad adressinformation "
-"inklusive komponenter som gata, stad, region, land och geolokalisering "
-"(longitud och latitud). Den stöder integration med API:er för geokodning, "
-"vilket möjliggör lagring av råa API-svar för vidare bearbetning eller "
-"inspektion. Klassen gör det också möjligt att associera en adress med en "
-"användare, vilket underlättar personlig datahantering."
+"av geografiska data och adressdata samt integration med geokodningstjänster. "
+"Denna klass är utformad för att lagra detaljerad adressinformation inklusive "
+"komponenter som gata, stad, region, land och geolokalisering (longitud och "
+"latitud). Den stöder integration med API:er för geokodning, vilket möjliggör "
+"lagring av råa API-svar för vidare bearbetning eller inspektion. Klassen gör "
+"det också möjligt att associera en adress med en användare, vilket "
+"underlättar personlig datahantering."
-#: engine/core/models.py:1029
+#: engine/core/models.py:1054
msgid "address line for the customer"
msgstr "Adressrad till kunden"
-#: engine/core/models.py:1030
+#: engine/core/models.py:1055
msgid "address line"
msgstr "Adresslinje"
-#: engine/core/models.py:1032
+#: engine/core/models.py:1057
msgid "street"
msgstr "Gata"
-#: engine/core/models.py:1033
+#: engine/core/models.py:1058
msgid "district"
msgstr "Distrikt"
-#: engine/core/models.py:1034
+#: engine/core/models.py:1059
msgid "city"
msgstr "Stad"
-#: engine/core/models.py:1035
+#: engine/core/models.py:1060
msgid "region"
msgstr "Region"
-#: engine/core/models.py:1036
+#: engine/core/models.py:1061
msgid "postal code"
msgstr "Postnummer"
-#: engine/core/models.py:1037
+#: engine/core/models.py:1062
msgid "country"
msgstr "Land"
-#: engine/core/models.py:1044
+#: engine/core/models.py:1069
msgid "geolocation point: (longitude, latitude)"
msgstr "Geolokaliseringspunkt (longitud, latitud)"
-#: engine/core/models.py:1047
+#: engine/core/models.py:1075
msgid "full JSON response from geocoder for this address"
msgstr "Fullständigt JSON-svar från geokodaren för denna adress"
-#: engine/core/models.py:1052
+#: engine/core/models.py:1081
msgid "stored JSON response from the geocoding service"
msgstr "Lagrad JSON-svar från geokodningstjänsten"
-#: engine/core/models.py:1060
+#: engine/core/models.py:1091
msgid "address"
msgstr "Adress"
-#: engine/core/models.py:1061
+#: engine/core/models.py:1092
msgid "addresses"
msgstr "Adresser"
-#: engine/core/models.py:1073
+#: engine/core/models.py:1104
msgid ""
"Represents a promotional code that can be used for discounts, managing its "
"validity, type of discount, and application. The PromoCode class stores "
@@ -2299,94 +2301,94 @@ msgstr ""
"funktioner för att validera och tillämpa kampanjkoden på en order och "
"samtidigt säkerställa att begränsningarna uppfylls."
-#: engine/core/models.py:1087
+#: engine/core/models.py:1118
msgid "unique code used by a user to redeem a discount"
msgstr "Unik kod som används av en användare för att lösa in en rabatt"
-#: engine/core/models.py:1088
+#: engine/core/models.py:1119
msgid "promo code identifier"
msgstr "Identifierare för kampanjkod"
-#: engine/core/models.py:1095
+#: engine/core/models.py:1126
msgid "fixed discount amount applied if percent is not used"
msgstr "Fast rabattbelopp tillämpas om procent inte används"
-#: engine/core/models.py:1096
+#: engine/core/models.py:1127
msgid "fixed discount amount"
msgstr "Fast diskonteringsbelopp"
-#: engine/core/models.py:1102
+#: engine/core/models.py:1133
msgid "percentage discount applied if fixed amount is not used"
msgstr "Procentuell rabatt som tillämpas om fast belopp inte används"
-#: engine/core/models.py:1103
+#: engine/core/models.py:1134
msgid "percentage discount"
msgstr "Procentuell rabatt"
-#: engine/core/models.py:1108
+#: engine/core/models.py:1139
msgid "timestamp when the promocode expires"
msgstr "Tidsstämpel när kampanjkoden upphör att gälla"
-#: engine/core/models.py:1109
+#: engine/core/models.py:1140
msgid "end validity time"
msgstr "Slutgiltig giltighetstid"
-#: engine/core/models.py:1114
+#: engine/core/models.py:1145
msgid "timestamp from which this promocode is valid"
msgstr "Tidsstämpel från vilken denna promokod är giltig"
-#: engine/core/models.py:1115
+#: engine/core/models.py:1146
msgid "start validity time"
msgstr "Start giltighetstid"
-#: engine/core/models.py:1120
+#: engine/core/models.py:1151
msgid "timestamp when the promocode was used, blank if not used yet"
msgstr ""
"Tidsstämpel när kampanjkoden användes, tom om den inte har använts ännu"
-#: engine/core/models.py:1121
+#: engine/core/models.py:1152
msgid "usage timestamp"
msgstr "Tidsstämpel för användning"
-#: engine/core/models.py:1126
+#: engine/core/models.py:1157
msgid "user assigned to this promocode if applicable"
msgstr "Användare som tilldelats denna promokod om tillämpligt"
-#: engine/core/models.py:1127
+#: engine/core/models.py:1158
msgid "assigned user"
msgstr "Tilldelad användare"
-#: engine/core/models.py:1134
+#: engine/core/models.py:1165
msgid "promo code"
msgstr "Kampanjkod"
-#: engine/core/models.py:1135
+#: engine/core/models.py:1166
msgid "promo codes"
msgstr "Kampanjkoder"
-#: engine/core/models.py:1150
+#: engine/core/models.py:1182
msgid ""
"only one type of discount should be defined (amount or percent), but not "
"both or neither."
msgstr ""
-"Endast en typ av rabatt ska definieras (belopp eller procent), men inte båda"
-" eller ingendera."
+"Endast en typ av rabatt ska definieras (belopp eller procent), men inte båda "
+"eller ingendera."
-#: engine/core/models.py:1171
+#: engine/core/models.py:1204
msgid "promocode already used"
msgstr "Promokoden har redan använts"
-#: engine/core/models.py:1187
+#: engine/core/models.py:1226
#, python-brace-format
msgid "invalid discount type for promocode {self.uuid}"
msgstr "Ogiltig rabattyp för promokod {self.uuid}!"
-#: engine/core/models.py:1196
+#: engine/core/models.py:1235
msgid ""
"Represents an order placed by a user. This class models an order within the "
"application, including its various attributes such as billing and shipping "
-"information, status, associated user, notifications, and related operations."
-" Orders can have associated products, promotions can be applied, addresses "
+"information, status, associated user, notifications, and related operations. "
+"Orders can have associated products, promotions can be applied, addresses "
"set, and shipping or billing details updated. Equally, functionality "
"supports managing the products in the order lifecycle."
msgstr ""
@@ -2398,137 +2400,137 @@ msgstr ""
"faktureringsuppgifter kan uppdateras. På samma sätt stöder funktionaliteten "
"hanteringen av produkterna i orderns livscykel."
-#: engine/core/models.py:1213
+#: engine/core/models.py:1252
msgid "the billing address used for this order"
msgstr "Den faktureringsadress som används för denna order"
-#: engine/core/models.py:1221
+#: engine/core/models.py:1260
msgid "optional promo code applied to this order"
msgstr "Valfri kampanjkod tillämpas på denna beställning"
-#: engine/core/models.py:1222
+#: engine/core/models.py:1261
msgid "applied promo code"
msgstr "Tillämpad kampanjkod"
-#: engine/core/models.py:1230
+#: engine/core/models.py:1269
msgid "the shipping address used for this order"
msgstr "Den leveransadress som används för denna order"
-#: engine/core/models.py:1231
+#: engine/core/models.py:1270
msgid "shipping address"
msgstr "Leveransadress"
-#: engine/core/models.py:1237
+#: engine/core/models.py:1276
msgid "current status of the order in its lifecycle"
msgstr "Aktuell status för ordern i dess livscykel"
-#: engine/core/models.py:1238
+#: engine/core/models.py:1277
msgid "order status"
msgstr "Orderstatus"
-#: engine/core/models.py:1243 engine/core/models.py:1769
+#: engine/core/models.py:1282 engine/core/models.py:1881
msgid "json structure of notifications to display to users"
msgstr ""
"JSON-struktur för meddelanden som ska visas för användare, i admin UI "
"används tabellvyn"
-#: engine/core/models.py:1249
+#: engine/core/models.py:1288
msgid "json representation of order attributes for this order"
msgstr "JSON-representation av orderattribut för denna order"
-#: engine/core/models.py:1255
+#: engine/core/models.py:1294
msgid "the user who placed the order"
msgstr "Användaren som gjorde beställningen"
-#: engine/core/models.py:1256
+#: engine/core/models.py:1295
msgid "user"
msgstr "Användare"
-#: engine/core/models.py:1262
+#: engine/core/models.py:1301
msgid "the timestamp when the order was finalized"
msgstr "Tidsstämpel när ordern slutfördes"
-#: engine/core/models.py:1263
+#: engine/core/models.py:1302
msgid "buy time"
msgstr "Köp tid"
-#: engine/core/models.py:1270
+#: engine/core/models.py:1309
msgid "a human-readable identifier for the order"
msgstr "En mänskligt läsbar identifierare för ordern"
-#: engine/core/models.py:1271
+#: engine/core/models.py:1310
msgid "human readable id"
msgstr "mänskligt läsbart ID"
-#: engine/core/models.py:1277
+#: engine/core/models.py:1316
msgid "order"
msgstr "Beställning"
-#: engine/core/models.py:1319
+#: engine/core/models.py:1363
msgid "a user must have only one pending order at a time"
msgstr "En användare får bara ha en väntande order åt gången!"
-#: engine/core/models.py:1351
+#: engine/core/models.py:1396
msgid "you cannot add products to an order that is not a pending one"
msgstr ""
"Du kan inte lägga till produkter i en order som inte är en pågående order"
-#: engine/core/models.py:1356
+#: engine/core/models.py:1402
msgid "you cannot add inactive products to order"
msgstr "Du kan inte lägga till inaktiva produkter i ordern"
-#: engine/core/models.py:1373
+#: engine/core/models.py:1424
msgid "you cannot add more products than available in stock"
msgstr "Du kan inte lägga till fler produkter än vad som finns i lager"
-#: engine/core/models.py:1395 engine/core/models.py:1420
-#: engine/core/models.py:1428
+#: engine/core/models.py:1448 engine/core/models.py:1477
+#: engine/core/models.py:1487
msgid "you cannot remove products from an order that is not a pending one"
msgstr ""
"Du kan inte ta bort produkter från en order som inte är en pågående order"
-#: engine/core/models.py:1416
+#: engine/core/models.py:1472
#, python-brace-format
msgid "{name} does not exist with query <{query}>"
msgstr "{name} finns inte med frågan <{query}>!"
-#: engine/core/models.py:1448
+#: engine/core/models.py:1511
msgid "promocode does not exist"
msgstr "Promokoden finns inte"
-#: engine/core/models.py:1454
+#: engine/core/models.py:1526
msgid "you can only buy physical products with shipping address specified"
msgstr "Du kan bara köpa fysiska produkter med angiven leveransadress!"
-#: engine/core/models.py:1473
+#: engine/core/models.py:1547
msgid "address does not exist"
msgstr "Adressen finns inte"
-#: engine/core/models.py:1494 engine/core/models.py:1563
+#: engine/core/models.py:1569 engine/core/models.py:1648
msgid "you can not buy at this moment, please try again in a few minutes"
msgstr "Du kan inte köpa just nu, vänligen försök igen om några minuter."
-#: engine/core/models.py:1497 engine/core/models.py:1559
+#: engine/core/models.py:1575 engine/core/models.py:1641
msgid "invalid force value"
msgstr "Ogiltigt kraftvärde"
-#: engine/core/models.py:1503 engine/core/models.py:1566
+#: engine/core/models.py:1581 engine/core/models.py:1652
msgid "you cannot purchase an empty order!"
msgstr "Du kan inte köpa en tom order!"
-#: engine/core/models.py:1522
+#: engine/core/models.py:1602
msgid "you cannot buy an order without a user"
msgstr "Du kan inte köpa en order utan en användare!"
-#: engine/core/models.py:1536
+#: engine/core/models.py:1616
msgid "a user without a balance cannot buy with balance"
msgstr "En användare utan balans kan inte köpa med balans!"
-#: engine/core/models.py:1541
+#: engine/core/models.py:1622
msgid "insufficient funds to complete the order"
msgstr "Otillräckliga medel för att slutföra ordern"
-#: engine/core/models.py:1575
+#: engine/core/models.py:1663
msgid ""
"you cannot buy without registration, please provide the following "
"information: customer name, customer email, customer phone number"
@@ -2536,14 +2538,14 @@ msgstr ""
"du kan inte köpa utan registrering, vänligen ange följande information: "
"kundens namn, kundens e-post, kundens telefonnummer"
-#: engine/core/models.py:1584
+#: engine/core/models.py:1674
#, python-brace-format
msgid ""
"invalid payment method: {payment_method} from {available_payment_methods}"
msgstr ""
"Ogiltig betalningsmetod: {payment_method} från {available_payment_methods}!"
-#: engine/core/models.py:1699
+#: engine/core/models.py:1805
msgid ""
"Manages user feedback for products. This class is designed to capture and "
"store user feedback for specific products that they have purchased. It "
@@ -2554,38 +2556,37 @@ msgstr ""
"Hanterar feedback från användare för produkter. Den här klassen är utformad "
"för att fånga upp och lagra feedback från användare om specifika produkter "
"som de har köpt. Den innehåller attribut för att lagra användarkommentarer, "
-"en referens till den relaterade produkten i ordern och ett användartilldelat"
-" betyg. Klassen använder databasfält för att effektivt modellera och hantera"
-" feedbackdata."
+"en referens till den relaterade produkten i ordern och ett användartilldelat "
+"betyg. Klassen använder databasfält för att effektivt modellera och hantera "
+"feedbackdata."
-#: engine/core/models.py:1711
+#: engine/core/models.py:1817
msgid "user-provided comments about their experience with the product"
msgstr "Kommentarer från användare om deras erfarenhet av produkten"
-#: engine/core/models.py:1712
+#: engine/core/models.py:1818
msgid "feedback comments"
msgstr "Återkoppling av kommentarer"
-#: engine/core/models.py:1719
-msgid ""
-"references the specific product in an order that this feedback is about"
+#: engine/core/models.py:1826
+msgid "references the specific product in an order that this feedback is about"
msgstr ""
-"Refererar till den specifika produkten i en order som denna feedback handlar"
-" om"
+"Refererar till den specifika produkten i en order som denna feedback handlar "
+"om"
-#: engine/core/models.py:1720
+#: engine/core/models.py:1828
msgid "related order product"
msgstr "Relaterad order produkt"
-#: engine/core/models.py:1725
+#: engine/core/models.py:1833
msgid "user-assigned rating for the product"
msgstr "Användartilldelat betyg för produkten"
-#: engine/core/models.py:1726
+#: engine/core/models.py:1834
msgid "product rating"
msgstr "Produktbetyg"
-#: engine/core/models.py:1742
+#: engine/core/models.py:1854
msgid ""
"Represents products associated with orders and their attributes. The "
"OrderProduct model maintains information about a product that is part of an "
@@ -2601,144 +2602,144 @@ msgstr ""
"OrderProduct-modellen innehåller information om en produkt som ingår i en "
"order, inklusive detaljer som inköpspris, kvantitet, produktattribut och "
"status. Den hanterar meddelanden till användaren och administratörer och "
-"hanterar åtgärder som att returnera produktsaldot eller lägga till feedback."
-" Modellen innehåller också metoder och egenskaper som stöder affärslogik, "
-"t.ex. beräkning av totalpriset eller generering av en URL för nedladdning av"
-" digitala produkter. Modellen integreras med Order- och Product-modellerna "
+"hanterar åtgärder som att returnera produktsaldot eller lägga till feedback. "
+"Modellen innehåller också metoder och egenskaper som stöder affärslogik, t."
+"ex. beräkning av totalpriset eller generering av en URL för nedladdning av "
+"digitala produkter. Modellen integreras med Order- och Product-modellerna "
"och lagrar en referens till dem."
-#: engine/core/models.py:1757
+#: engine/core/models.py:1869
msgid "the price paid by the customer for this product at purchase time"
msgstr "Det pris som kunden betalade för denna produkt vid inköpstillfället"
-#: engine/core/models.py:1758
+#: engine/core/models.py:1870
msgid "purchase price at order time"
msgstr "Inköpspris vid ordertillfället"
-#: engine/core/models.py:1763
+#: engine/core/models.py:1875
msgid "internal comments for admins about this ordered product"
msgstr "Interna kommentarer för administratörer om denna beställda produkt"
-#: engine/core/models.py:1764
+#: engine/core/models.py:1876
msgid "internal comments"
msgstr "Interna kommentarer"
-#: engine/core/models.py:1770
+#: engine/core/models.py:1882
msgid "user notifications"
msgstr "Meddelanden till användare"
-#: engine/core/models.py:1775
+#: engine/core/models.py:1887
msgid "json representation of this item's attributes"
msgstr "JSON-representation av detta objekts attribut"
-#: engine/core/models.py:1776
+#: engine/core/models.py:1888
msgid "ordered product attributes"
msgstr "Sorterade produktattribut"
-#: engine/core/models.py:1781
+#: engine/core/models.py:1893
msgid "reference to the parent order that contains this product"
msgstr "Referens till den överordnade order som innehåller denna produkt"
-#: engine/core/models.py:1782
+#: engine/core/models.py:1894
msgid "parent order"
msgstr "Föräldraorder"
-#: engine/core/models.py:1791
+#: engine/core/models.py:1903
msgid "the specific product associated with this order line"
msgstr "Den specifika produkt som är kopplad till denna orderrad"
-#: engine/core/models.py:1798
+#: engine/core/models.py:1910
msgid "quantity of this specific product in the order"
msgstr "Antal av denna specifika produkt i ordern"
-#: engine/core/models.py:1799
+#: engine/core/models.py:1911
msgid "product quantity"
msgstr "Produktens kvantitet"
-#: engine/core/models.py:1806
+#: engine/core/models.py:1918
msgid "current status of this product in the order"
msgstr "Aktuell status för denna produkt i ordern"
-#: engine/core/models.py:1807
+#: engine/core/models.py:1919
msgid "product line status"
msgstr "Status för produktlinje"
-#: engine/core/models.py:1872
+#: engine/core/models.py:1986
msgid "order product must have an order"
msgstr "Orderprodukt måste ha en tillhörande order!"
-#: engine/core/models.py:1874
+#: engine/core/models.py:1988
#, python-brace-format
msgid "wrong action specified for feedback: {action}"
msgstr "Fel åtgärd angiven för återkoppling: {action}!"
-#: engine/core/models.py:1888
+#: engine/core/models.py:2005
msgid "you cannot feedback an order which is not received"
msgstr "du kan inte återkoppla en order som inte mottagits"
-#: engine/core/models.py:1894
+#: engine/core/models.py:2014
msgid "name"
msgstr "Namn"
-#: engine/core/models.py:1895
+#: engine/core/models.py:2016
msgid "URL of the integration"
msgstr "URL för integrationen"
-#: engine/core/models.py:1896
+#: engine/core/models.py:2019
msgid "authentication credentials"
msgstr "Autentiseringsuppgifter"
-#: engine/core/models.py:1918
+#: engine/core/models.py:2042
msgid "you can only have one default CRM provider"
msgstr "Du kan bara ha en CRM-leverantör som standard"
-#: engine/core/models.py:1928
+#: engine/core/models.py:2052
msgid "CRM"
msgstr "CRM"
-#: engine/core/models.py:1929
+#: engine/core/models.py:2053
msgid "CRMs"
msgstr "CRM-system"
-#: engine/core/models.py:1941
+#: engine/core/models.py:2069
msgid "order CRM link"
msgstr "Beställningens CRM-länk"
-#: engine/core/models.py:1942
+#: engine/core/models.py:2070
msgid "orders CRM links"
msgstr "Beställningarnas CRM-länkar"
-#: engine/core/models.py:1947
+#: engine/core/models.py:2075
msgid ""
"Represents the downloading functionality for digital assets associated with "
"orders. The DigitalAssetDownload class provides the ability to manage and "
"access downloads related to order products. It maintains information about "
-"the associated order product, the number of downloads, and whether the asset"
-" is publicly visible. It includes a method to generate a URL for downloading"
-" the asset when the associated order is in a completed status."
+"the associated order product, the number of downloads, and whether the asset "
+"is publicly visible. It includes a method to generate a URL for downloading "
+"the asset when the associated order is in a completed status."
msgstr ""
-"Representerar nedladdningsfunktionen för digitala tillgångar som är kopplade"
-" till order. Klassen DigitalAssetDownload ger möjlighet att hantera och "
-"komma åt nedladdningar som är relaterade till orderprodukter. Den "
-"upprätthåller information om den associerade orderprodukten, antalet "
-"nedladdningar och om tillgången är offentligt synlig. Den innehåller en "
-"metod för att generera en URL för nedladdning av tillgången när den "
-"associerade ordern har statusen slutförd."
+"Representerar nedladdningsfunktionen för digitala tillgångar som är kopplade "
+"till order. Klassen DigitalAssetDownload ger möjlighet att hantera och komma "
+"åt nedladdningar som är relaterade till orderprodukter. Den upprätthåller "
+"information om den associerade orderprodukten, antalet nedladdningar och om "
+"tillgången är offentligt synlig. Den innehåller en metod för att generera en "
+"URL för nedladdning av tillgången när den associerade ordern har statusen "
+"slutförd."
-#: engine/core/models.py:1961
+#: engine/core/models.py:2091
msgid "download"
msgstr "Nedladdningar"
-#: engine/core/models.py:1962
+#: engine/core/models.py:2092
msgid "downloads"
msgstr "Nedladdningar"
-#: engine/core/serializers/utility.py:89
+#: engine/core/serializers/utility.py:91
msgid ""
"you must provide a comment, rating, and order product uuid to add feedback."
msgstr ""
-"du måste ge en kommentar, betyg och beställa produkt uuid för att lägga till"
-" feedback."
+"du måste ge en kommentar, betyg och beställa produkt uuid för att lägga till "
+"feedback."
#: engine/core/sitemaps.py:25
msgid "Home"
@@ -2930,7 +2931,8 @@ msgstr "Hej %(order.user.first_name)s,"
#, python-format
msgid ""
"thank you for your order #%(order.pk)s! we are pleased to inform you that\n"
-" we have taken your order into work. below are the details of your\n"
+" we have taken your order into work. below are "
+"the details of your\n"
" order:"
msgstr ""
"Tack för din beställning #%(order.pk)s! Vi är glada att kunna informera dig "
@@ -3045,7 +3047,8 @@ msgstr ""
#: engine/core/templates/shipped_order_created_email.html:101
#: engine/core/templates/shipped_order_delivered_email.html:101
msgid ""
-"thank you for your order! we are pleased to confirm your purchase. below are\n"
+"thank you for your order! we are pleased to confirm your purchase. below "
+"are\n"
" the details of your order:"
msgstr ""
"Tack för din beställning! Vi är glada att kunna bekräfta ditt köp. Nedan "
@@ -3076,11 +3079,11 @@ msgstr ""
"Alla rättigheter\n"
" reserverade"
-#: engine/core/utils/caching.py:44
+#: engine/core/utils/caching.py:48
msgid "both data and timeout are required"
msgstr "Både data och timeout krävs"
-#: engine/core/utils/caching.py:46
+#: engine/core/utils/caching.py:51
msgid "invalid timeout value, it must be between 0 and 216000 seconds"
msgstr "Ogiltigt timeout-värde, det måste vara mellan 0 och 216000 sekunder"
@@ -3089,17 +3092,17 @@ msgstr "Ogiltigt timeout-värde, det måste vara mellan 0 och 216000 sekunder"
msgid "{settings.PROJECT_NAME} | contact us initiated"
msgstr "{settings.PROJECT_NAME} | kontakta oss initierad"
-#: engine/core/utils/emailing.py:73
+#: engine/core/utils/emailing.py:81
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order confirmation"
msgstr "{settings.PROJECT_NAME} | orderbekräftelse"
-#: engine/core/utils/emailing.py:105
+#: engine/core/utils/emailing.py:115
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order delivered"
msgstr "{settings.PROJECT_NAME} | order levererad"
-#: engine/core/utils/emailing.py:188
+#: engine/core/utils/emailing.py:203
#, python-brace-format
msgid "{settings.PROJECT_NAME} | promocode granted"
msgstr "{settings.PROJECT_NAME} | promocode beviljad"
@@ -3112,12 +3115,12 @@ msgstr "Du har inte behörighet att utföra den här åtgärden."
msgid "NOMINATIM_URL must be configured."
msgstr "Parametern NOMINATIM_URL måste konfigureras!"
-#: engine/core/validators.py:19
+#: engine/core/validators.py:21
#, python-brace-format
msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels"
msgstr "Bildmåtten får inte överstiga w{max_width} x h{max_height} pixlar!"
-#: engine/core/views.py:91
+#: engine/core/views.py:105
msgid ""
"Handles the request for the sitemap index and returns an XML response. It "
"ensures the response includes the appropriate content type header for XML."
@@ -3125,7 +3128,7 @@ msgstr ""
"Hanterar begäran om index för webbplatskartan och returnerar ett XML-svar. "
"Den ser till att svaret innehåller rätt innehållstypshuvud för XML."
-#: engine/core/views.py:106
+#: engine/core/views.py:120
msgid ""
"Handles the detailed view response for a sitemap. This function processes "
"the request, fetches the appropriate sitemap detail response, and sets the "
@@ -3135,16 +3138,16 @@ msgstr ""
"bearbetar begäran, hämtar det lämpliga detaljerade svaret för "
"webbplatskartan och ställer in Content-Type-huvudet för XML."
-#: engine/core/views.py:141
+#: engine/core/views.py:156
msgid ""
"Returns a list of supported languages and their corresponding information."
msgstr "Returnerar en lista över språk som stöds och motsvarande information."
-#: engine/core/views.py:173
+#: engine/core/views.py:183
msgid "Returns the parameters of the website as a JSON object."
msgstr "Returnerar webbplatsens parametrar som ett JSON-objekt."
-#: engine/core/views.py:192
+#: engine/core/views.py:199
msgid ""
"Handles cache operations such as reading and setting cache data with a "
"specified key and timeout."
@@ -3152,11 +3155,11 @@ msgstr ""
"Hanterar cacheoperationer som att läsa och ställa in cachedata med en "
"angiven nyckel och timeout."
-#: engine/core/views.py:219
+#: engine/core/views.py:221
msgid "Handles `contact us` form submissions."
msgstr "Hanterar formulärinlämningar för `kontakta oss`."
-#: engine/core/views.py:240
+#: engine/core/views.py:237
msgid ""
"Handles requests for processing and validating URLs from incoming POST "
"requests."
@@ -3164,58 +3167,66 @@ msgstr ""
"Hanterar förfrågningar om bearbetning och validering av URL:er från "
"inkommande POST-förfrågningar."
-#: engine/core/views.py:280
+#: engine/core/views.py:274
msgid "Handles global search queries."
msgstr "Hanterar globala sökfrågor."
-#: engine/core/views.py:295
+#: engine/core/views.py:290
msgid "Handles the logic of buying as a business without registration."
msgstr "Hanterar logiken i att köpa som ett företag utan registrering."
-#: engine/core/views.py:332
+#: engine/core/views.py:338
msgid ""
"Handles the downloading of a digital asset associated with an order.\n"
-"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the digital asset file located in the "
+"storage directory of the project. If the file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
msgstr ""
"Hanterar nedladdning av en digital tillgång som är kopplad till en order.\n"
-"Denna funktion försöker servera den digitala tillgångsfilen som finns i lagringskatalogen för projektet. Om filen inte hittas visas ett HTTP 404-fel som indikerar att resursen inte är tillgänglig."
+"Denna funktion försöker servera den digitala tillgångsfilen som finns i "
+"lagringskatalogen för projektet. Om filen inte hittas visas ett HTTP 404-fel "
+"som indikerar att resursen inte är tillgänglig."
-#: engine/core/views.py:343
+#: engine/core/views.py:349
msgid "order_product_uuid is required"
msgstr "order_product_uuid är obligatoriskt"
-#: engine/core/views.py:350
+#: engine/core/views.py:356
msgid "order product does not exist"
msgstr "Beställ produkten finns inte"
-#: engine/core/views.py:353
+#: engine/core/views.py:359
msgid "you can only download the digital asset once"
msgstr "Du kan bara ladda ner den digitala tillgången en gång"
-#: engine/core/views.py:356
+#: engine/core/views.py:363
msgid "the order must be paid before downloading the digital asset"
msgstr "beställningen måste betalas innan den digitala tillgången laddas ner"
-#: engine/core/views.py:362
+#: engine/core/views.py:370
msgid "the order product does not have a product"
msgstr "Beställningens produkt har ingen produkt"
-#: engine/core/views.py:399
+#: engine/core/views.py:414
msgid "favicon not found"
msgstr "favicon hittades inte"
-#: engine/core/views.py:404
+#: engine/core/views.py:419
msgid ""
"Handles requests for the favicon of a website.\n"
-"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the favicon file located in the static "
+"directory of the project. If the favicon file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
msgstr ""
"Hanterar förfrågningar om favicon på en webbplats.\n"
-"Denna funktion försöker servera favicon-filen som finns i den statiska katalogen i projektet. Om favicon-filen inte hittas visas ett HTTP 404-fel som anger att resursen inte är tillgänglig."
+"Denna funktion försöker servera favicon-filen som finns i den statiska "
+"katalogen i projektet. Om favicon-filen inte hittas visas ett HTTP 404-fel "
+"som anger att resursen inte är tillgänglig."
-#: engine/core/views.py:416
+#: engine/core/views.py:431
msgid ""
-"Redirects the request to the admin index page. The function handles incoming"
-" HTTP requests and redirects them to the Django admin interface index page. "
+"Redirects the request to the admin index page. The function handles incoming "
+"HTTP requests and redirects them to the Django admin interface index page. "
"It uses Django's `redirect` function for handling the HTTP redirection."
msgstr ""
"Omdirigerar begäran till indexsidan för admin. Funktionen hanterar "
@@ -3223,20 +3234,20 @@ msgstr ""
"admin-gränssnitt. Den använder Djangos `redirect`-funktion för att hantera "
"HTTP-omdirigeringen."
-#: engine/core/views.py:429
+#: engine/core/views.py:443
msgid "Returns current version of the eVibes. "
msgstr "Returnerar aktuell version av eVibes."
-#: engine/core/views.py:623 engine/core/views.py:636
+#: engine/core/views.py:672 engine/core/views.py:687
#, python-format
msgid "Revenue & Orders (last %(days)d)"
msgstr "Intäkter och order (senast %(days)d)"
-#: engine/core/views.py:793
+#: engine/core/views.py:868
msgid "Returns custom variables for Dashboard. "
msgstr "Returnerar anpassade variabler för Dashboard."
-#: engine/core/viewsets.py:136
+#: engine/core/viewsets.py:139
msgid ""
"Defines a viewset for managing Evibes-related operations. The EvibesViewSet "
"class inherits from ModelViewSet and provides functionality for handling "
@@ -3245,26 +3256,25 @@ msgid ""
"and rendering formats."
msgstr ""
"Definierar en vy för hantering av Evibes-relaterade operationer. Klassen "
-"EvibesViewSet ärver från ModelViewSet och tillhandahåller funktionalitet för"
-" att hantera åtgärder och operationer på Evibes-entiteter. Den innehåller "
+"EvibesViewSet ärver från ModelViewSet och tillhandahåller funktionalitet för "
+"att hantera åtgärder och operationer på Evibes-entiteter. Den innehåller "
"stöd för dynamiska serializerklasser baserat på den aktuella åtgärden, "
"anpassningsbara behörigheter och renderingsformat."
-#: engine/core/viewsets.py:156
+#: engine/core/viewsets.py:160
msgid ""
-"Represents a viewset for managing AttributeGroup objects. Handles operations"
-" related to AttributeGroup, including filtering, serialization, and "
-"retrieval of data. This class is part of the application's API layer and "
-"provides a standardized way to process requests and responses for "
-"AttributeGroup data."
+"Represents a viewset for managing AttributeGroup objects. Handles operations "
+"related to AttributeGroup, including filtering, serialization, and retrieval "
+"of data. This class is part of the application's API layer and provides a "
+"standardized way to process requests and responses for AttributeGroup data."
msgstr ""
"Representerar en vy för hantering av AttributeGroup-objekt. Hanterar "
-"åtgärder relaterade till AttributeGroup, inklusive filtrering, serialisering"
-" och hämtning av data. Denna klass är en del av applikationens API-lager och"
-" tillhandahåller ett standardiserat sätt att behandla förfrågningar och svar"
-" för AttributeGroup-data."
+"åtgärder relaterade till AttributeGroup, inklusive filtrering, serialisering "
+"och hämtning av data. Denna klass är en del av applikationens API-lager och "
+"tillhandahåller ett standardiserat sätt att behandla förfrågningar och svar "
+"för AttributeGroup-data."
-#: engine/core/viewsets.py:175
+#: engine/core/viewsets.py:179
msgid ""
"Handles operations related to Attribute objects within the application. "
"Provides a set of API endpoints to interact with Attribute data. This class "
@@ -3280,13 +3290,13 @@ msgstr ""
"returneras, t.ex. filtrering efter specifika fält eller hämtning av "
"detaljerad eller förenklad information beroende på begäran."
-#: engine/core/viewsets.py:194
+#: engine/core/viewsets.py:198
msgid ""
"A viewset for managing AttributeValue objects. This viewset provides "
"functionality for listing, retrieving, creating, updating, and deleting "
"AttributeValue objects. It integrates with Django REST Framework's viewset "
-"mechanisms and uses appropriate serializers for different actions. Filtering"
-" capabilities are provided through the DjangoFilterBackend."
+"mechanisms and uses appropriate serializers for different actions. Filtering "
+"capabilities are provided through the DjangoFilterBackend."
msgstr ""
"Ett viewset för hantering av AttributeValue-objekt. Denna viewset "
"tillhandahåller funktionalitet för att lista, hämta, skapa, uppdatera och "
@@ -3294,7 +3304,7 @@ msgstr ""
"viewset-mekanismer och använder lämpliga serializers för olika åtgärder. "
"Filtreringsfunktioner tillhandahålls genom DjangoFilterBackend."
-#: engine/core/viewsets.py:213
+#: engine/core/viewsets.py:217
msgid ""
"Manages views for Category-related operations. The CategoryViewSet class is "
"responsible for handling operations related to the Category model in the "
@@ -3308,7 +3318,7 @@ msgstr ""
"kategoridata. Vyuppsättningen tillämpar också behörigheter för att "
"säkerställa att endast behöriga användare kan komma åt specifika data."
-#: engine/core/viewsets.py:326
+#: engine/core/viewsets.py:346
msgid ""
"Represents a viewset for managing Brand instances. This class provides "
"functionality for querying, filtering, and serializing Brand objects. It "
@@ -3316,11 +3326,11 @@ msgid ""
"endpoints for Brand objects."
msgstr ""
"Representerar en vy för hantering av varumärkesinstanser. Denna klass "
-"tillhandahåller funktionalitet för att fråga, filtrera och serialisera "
-"Brand-objekt. Den använder Djangos ViewSet-ramverk för att förenkla "
+"tillhandahåller funktionalitet för att fråga, filtrera och serialisera Brand-"
+"objekt. Den använder Djangos ViewSet-ramverk för att förenkla "
"implementeringen av API-slutpunkter för varumärkesobjekt."
-#: engine/core/viewsets.py:438
+#: engine/core/viewsets.py:458
msgid ""
"Manages operations related to the `Product` model in the system. This class "
"provides a viewset for managing products, including their filtering, "
@@ -3331,14 +3341,14 @@ msgid ""
"product."
msgstr ""
"Hanterar operationer relaterade till modellen `Product` i systemet. Denna "
-"klass tillhandahåller en vy för att hantera produkter, inklusive filtrering,"
-" serialisering och operationer på specifika instanser. Den utökar från "
+"klass tillhandahåller en vy för att hantera produkter, inklusive filtrering, "
+"serialisering och operationer på specifika instanser. Den utökar från "
"`EvibesViewSet` för att använda gemensam funktionalitet och integreras med "
"Django REST-ramverket för RESTful API-operationer. Innehåller metoder för "
"att hämta produktinformation, tillämpa behörigheter och få tillgång till "
"relaterad feedback för en produkt."
-#: engine/core/viewsets.py:574
+#: engine/core/viewsets.py:605
msgid ""
"Represents a viewset for managing Vendor objects. This viewset allows "
"fetching, filtering, and serializing Vendor data. It defines the queryset, "
@@ -3346,54 +3356,54 @@ msgid ""
"actions. The purpose of this class is to provide streamlined access to "
"Vendor-related resources through the Django REST framework."
msgstr ""
-"Representerar en vy för hantering av Vendor-objekt. Denna vy gör det möjligt"
-" att hämta, filtrera och serialisera Vendor-data. Den definierar queryset, "
+"Representerar en vy för hantering av Vendor-objekt. Denna vy gör det möjligt "
+"att hämta, filtrera och serialisera Vendor-data. Den definierar queryset, "
"filterkonfigurationer och serializer-klasser som används för att hantera "
"olika åtgärder. Syftet med denna klass är att ge strömlinjeformad åtkomst "
"till Vendor-relaterade resurser genom Django REST-ramverket."
-#: engine/core/viewsets.py:594
+#: engine/core/viewsets.py:625
msgid ""
"Representation of a view set handling Feedback objects. This class manages "
"operations related to Feedback objects, including listing, filtering, and "
"retrieving details. The purpose of this view set is to provide different "
-"serializers for different actions and implement permission-based handling of"
-" accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
+"serializers for different actions and implement permission-based handling of "
+"accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
"use of Django's filtering system for querying data."
msgstr ""
-"Representation av en vyuppsättning som hanterar Feedback-objekt. Denna klass"
-" hanterar åtgärder relaterade till Feedback-objekt, inklusive listning, "
+"Representation av en vyuppsättning som hanterar Feedback-objekt. Denna klass "
+"hanterar åtgärder relaterade till Feedback-objekt, inklusive listning, "
"filtrering och hämtning av detaljer. Syftet med denna vyuppsättning är att "
"tillhandahålla olika serializers för olika åtgärder och implementera "
"behörighetsbaserad hantering av tillgängliga Feedback-objekt. Den utökar "
"basen `EvibesViewSet` och använder Djangos filtreringssystem för att fråga "
"data."
-#: engine/core/viewsets.py:621
+#: engine/core/viewsets.py:652
msgid ""
"ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes "
"various endpoints for handling order operations such as adding or removing "
-"products, performing purchases for registered as well as unregistered users,"
-" and retrieving the current authenticated user's pending orders. The ViewSet"
-" uses multiple serializers based on the specific action being performed and "
+"products, performing purchases for registered as well as unregistered users, "
+"and retrieving the current authenticated user's pending orders. The ViewSet "
+"uses multiple serializers based on the specific action being performed and "
"enforces permissions accordingly while interacting with order data."
msgstr ""
"ViewSet för hantering av order och relaterade operationer. Den här klassen "
"innehåller funktioner för att hämta, ändra och hantera orderobjekt. Den "
-"innehåller olika slutpunkter för hantering av orderoperationer som att lägga"
-" till eller ta bort produkter, utföra inköp för registrerade och "
+"innehåller olika slutpunkter för hantering av orderoperationer som att lägga "
+"till eller ta bort produkter, utföra inköp för registrerade och "
"oregistrerade användare och hämta den aktuella autentiserade användarens "
"pågående order. ViewSet använder flera serializers baserat på den specifika "
"åtgärd som utförs och verkställer behörigheter i enlighet med detta vid "
"interaktion med orderdata."
-#: engine/core/viewsets.py:825
+#: engine/core/viewsets.py:914
msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It "
-"includes filtering, permission checks, and serializer switching based on the"
-" requested action. Additionally, it provides a detailed action for handling "
+"includes filtering, permission checks, and serializer switching based on the "
+"requested action. Additionally, it provides a detailed action for handling "
"feedback on OrderProduct instances"
msgstr ""
"Tillhandahåller en vy för hantering av OrderProduct-enheter. Denna "
@@ -3403,11 +3413,11 @@ msgstr ""
"åtgärden. Dessutom innehåller den en detaljerad åtgärd för att hantera "
"feedback på OrderProduct-instanser"
-#: engine/core/viewsets.py:879
+#: engine/core/viewsets.py:974
msgid "Manages operations related to Product images in the application. "
msgstr "Hanterar åtgärder relaterade till produktbilder i applikationen."
-#: engine/core/viewsets.py:892
+#: engine/core/viewsets.py:988
msgid ""
"Manages the retrieval and handling of PromoCode instances through various "
"API actions."
@@ -3415,20 +3425,20 @@ msgstr ""
"Hanterar hämtning och hantering av PromoCode-instanser genom olika API-"
"åtgärder."
-#: engine/core/viewsets.py:914
+#: engine/core/viewsets.py:1019
msgid "Represents a view set for managing promotions. "
msgstr "Representerar en vyuppsättning för hantering av kampanjer."
-#: engine/core/viewsets.py:927
+#: engine/core/viewsets.py:1032
msgid "Handles operations related to Stock data in the system."
msgstr "Hanterar åtgärder relaterade till lagerdata i systemet."
-#: engine/core/viewsets.py:941
+#: engine/core/viewsets.py:1046
msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the "
-"retrieval, modification, and customization of products within the wish list."
-" This ViewSet facilitates functionality such as adding, removing, and bulk "
+"retrieval, modification, and customization of products within the wish list. "
+"This ViewSet facilitates functionality such as adding, removing, and bulk "
"actions for wishlist products. Permission checks are integrated to ensure "
"that users can only manage their own wishlists unless explicit permissions "
"are granted."
@@ -3441,7 +3451,7 @@ msgstr ""
"integrerade för att säkerställa att användare endast kan hantera sina egna "
"önskelistor om inte uttryckliga behörigheter beviljas."
-#: engine/core/viewsets.py:1056
+#: engine/core/viewsets.py:1183
msgid ""
"This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom "
@@ -3455,12 +3465,12 @@ msgstr ""
"innehåller specialiserade beteenden för olika HTTP-metoder, serializer-"
"överskrivningar och behörighetshantering baserat på förfrågningskontexten."
-#: engine/core/viewsets.py:1123
+#: engine/core/viewsets.py:1254
#, python-brace-format
msgid "Geocoding error: {e}"
msgstr "Fel i geokodningen: {e}"
-#: engine/core/viewsets.py:1131
+#: engine/core/viewsets.py:1262
msgid ""
"Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing "
@@ -3471,5 +3481,5 @@ msgstr ""
"Hanterar operationer relaterade till Product Tags inom applikationen. "
"Klassen tillhandahåller funktionalitet för att hämta, filtrera och "
"serialisera Product Tag-objekt. Den stöder flexibel filtrering på specifika "
-"attribut med hjälp av det angivna filterbackend och använder dynamiskt olika"
-" serializers baserat på den åtgärd som utförs."
+"attribut med hjälp av det angivna filterbackend och använder dynamiskt olika "
+"serializers baserat på den åtgärd som utförs."
diff --git a/engine/core/locale/th_TH/LC_MESSAGES/django.po b/engine/core/locale/th_TH/LC_MESSAGES/django.po
index 1eff3301..50a4a2b5 100644
--- a/engine/core/locale/th_TH/LC_MESSAGES/django.po
+++ b/engine/core/locale/th_TH/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 22:12+0300\n"
+"POT-Creation-Date: 2025-12-18 19:09+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -25,113 +25,110 @@ msgstr "รหัสประจำตัวที่ไม่ซ้ำกัน
msgid "is active"
msgstr "กำลังใช้งานอยู่"
-#: engine/core/abstract.py:21
+#: engine/core/abstract.py:22
msgid ""
-"if set to false, this object can't be seen by users without needed "
-"permission"
-msgstr ""
-"หากตั้งค่าเป็น false, "
-"วัตถุนี้ไม่สามารถมองเห็นได้โดยผู้ใช้ที่ไม่มีสิทธิ์ที่ต้องการ"
+"if set to false, this object can't be seen by users without needed permission"
+msgstr "หากตั้งค่าเป็น false, วัตถุนี้ไม่สามารถมองเห็นได้โดยผู้ใช้ที่ไม่มีสิทธิ์ที่ต้องการ"
-#: engine/core/abstract.py:23 engine/core/choices.py:18
+#: engine/core/abstract.py:26 engine/core/choices.py:18
msgid "created"
msgstr "สร้างขึ้น"
-#: engine/core/abstract.py:23
+#: engine/core/abstract.py:26
msgid "when the object first appeared on the database"
msgstr "เมื่อวัตถุปรากฏขึ้นครั้งแรกในฐานข้อมูล"
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "modified"
msgstr "แก้ไขแล้ว"
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "when the object was last modified"
msgstr "เมื่อครั้งล่าสุดที่มีการแก้ไขวัตถุ"
-#: engine/core/admin.py:85
+#: engine/core/admin.py:94
msgid "translations"
msgstr "การแปล"
-#: engine/core/admin.py:89
+#: engine/core/admin.py:102
msgid "general"
msgstr "ทั่วไป"
-#: engine/core/admin.py:91
+#: engine/core/admin.py:106
msgid "relations"
msgstr "ความสัมพันธ์"
-#: engine/core/admin.py:93
+#: engine/core/admin.py:111
msgid "additional info"
msgstr "ข้อมูลเพิ่มเติม"
-#: engine/core/admin.py:111
+#: engine/core/admin.py:133
msgid "metadata"
msgstr "เมตาดาตา"
-#: engine/core/admin.py:118
+#: engine/core/admin.py:141
msgid "timestamps"
msgstr "เวลาที่บันทึก"
-#: engine/core/admin.py:133
+#: engine/core/admin.py:157
#, python-format
msgid "activate selected %(verbose_name_plural)s"
msgstr "เปิดใช้งานที่เลือกไว้ %(verbose_name_plural)s"
-#: engine/core/admin.py:138
+#: engine/core/admin.py:165
msgid "selected items have been activated."
msgstr "รายการที่เลือกไว้ได้รับการเปิดใช้งานแล้ว!"
-#: engine/core/admin.py:144
+#: engine/core/admin.py:173
#, python-format
msgid "deactivate selected %(verbose_name_plural)s"
msgstr "ยกเลิกการใช้งานที่เลือกไว้ %(verbose_name_plural)s"
-#: engine/core/admin.py:149
+#: engine/core/admin.py:183
msgid "selected items have been deactivated."
msgstr "รายการที่เลือกถูกยกเลิกการใช้งานแล้ว!"
-#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586
-#: engine/core/graphene/object_types.py:593 engine/core/models.py:801
-#: engine/core/models.py:809
+#: engine/core/admin.py:195 engine/core/graphene/object_types.py:650
+#: engine/core/graphene/object_types.py:657 engine/core/models.py:824
+#: engine/core/models.py:832
msgid "attribute value"
msgstr "ค่าคุณสมบัติ"
-#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75
-#: engine/core/models.py:810
+#: engine/core/admin.py:196 engine/core/graphene/object_types.py:75
+#: engine/core/models.py:833
msgid "attribute values"
msgstr "ค่าของแอตทริบิวต์"
-#: engine/core/admin.py:172
+#: engine/core/admin.py:207
msgid "image"
msgstr "ภาพ"
-#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474
+#: engine/core/admin.py:208 engine/core/graphene/object_types.py:527
msgid "images"
msgstr "รูปภาพ"
-#: engine/core/admin.py:184 engine/core/models.py:566
+#: engine/core/admin.py:219 engine/core/models.py:587
msgid "stock"
msgstr "สต็อก"
-#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640
+#: engine/core/admin.py:220 engine/core/graphene/object_types.py:710
msgid "stocks"
msgstr "หุ้น"
-#: engine/core/admin.py:196 engine/core/models.py:1818
+#: engine/core/admin.py:231 engine/core/models.py:1930
msgid "order product"
msgstr "สั่งซื้อสินค้า"
-#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389
-#: engine/core/models.py:1819
+#: engine/core/admin.py:232 engine/core/graphene/object_types.py:438
+#: engine/core/models.py:1931
msgid "order products"
msgstr "สั่งซื้อสินค้า"
-#: engine/core/admin.py:210 engine/core/admin.py:211
+#: engine/core/admin.py:250 engine/core/admin.py:251
msgid "children"
msgstr "เด็ก"
-#: engine/core/admin.py:977
+#: engine/core/admin.py:1059
msgid "Config"
msgstr "การกำหนดค่า"
@@ -155,8 +152,7 @@ msgstr "ส่งมอบแล้ว"
msgid "canceled"
msgstr "ยกเลิก"
-#: engine/core/choices.py:8 engine/core/choices.py:16
-#: engine/core/choices.py:24
+#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24
msgid "failed"
msgstr "ล้มเหลว"
@@ -184,11 +180,11 @@ msgstr "ชั่วขณะหนึ่ง"
msgid "successful"
msgstr "ประสบความสำเร็จ"
-#: engine/core/docs/drf/views.py:31
+#: engine/core/docs/drf/views.py:30
msgid "OpenAPI schema in selected format with selected language"
msgstr "สคีมา OpenAPI ในรูปแบบที่เลือกพร้อมภาษาที่เลือก"
-#: engine/core/docs/drf/views.py:33
+#: engine/core/docs/drf/views.py:32
msgid ""
"OpenApi3 schema for this API. Format can be selected via content "
"negotiation. Language can be selected with Accept-Language and query "
@@ -197,1048 +193,1010 @@ msgstr ""
"OpenApi3 schema สำหรับ API นี้. รูปแบบสามารถเลือกได้ผ่านการเจรจาเนื้อหา. "
"ภาษาสามารถเลือกได้ทั้งผ่าน Accept-Language และพารามิเตอร์ค้นหา."
-#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37
+#: engine/core/docs/drf/views.py:43 engine/core/graphene/mutations.py:37
msgid "cache I/O"
msgstr "แคช I/O"
-#: engine/core/docs/drf/views.py:46
+#: engine/core/docs/drf/views.py:45
msgid ""
"apply only a key to read permitted data from cache.\n"
"apply key, data and timeout with authentication to write data to cache."
msgstr ""
-"ใช้เฉพาะคีย์เพื่ออ่านข้อมูลที่ได้รับอนุญาตจากแคช ใช้คีย์ ข้อมูล "
-"และระยะเวลาหมดอายุ พร้อมการยืนยันตัวตนเพื่อเขียนข้อมูลลงในแคช"
+"ใช้เฉพาะคีย์เพื่ออ่านข้อมูลที่ได้รับอนุญาตจากแคช ใช้คีย์ ข้อมูล และระยะเวลาหมดอายุ "
+"พร้อมการยืนยันตัวตนเพื่อเขียนข้อมูลลงในแคช"
-#: engine/core/docs/drf/views.py:62
+#: engine/core/docs/drf/views.py:63
msgid "get a list of supported languages"
msgstr "รับรายการภาษาที่รองรับ"
-#: engine/core/docs/drf/views.py:74
+#: engine/core/docs/drf/views.py:75
msgid "get application's exposable parameters"
msgstr "รับพารามิเตอร์ที่สามารถเปิดเผยได้ของแอปพลิเคชัน"
-#: engine/core/docs/drf/views.py:84
+#: engine/core/docs/drf/views.py:89
msgid "send a message to the support team"
msgstr "ส่งข้อความถึงทีมสนับสนุน"
-#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57
+#: engine/core/docs/drf/views.py:103 engine/core/graphene/mutations.py:59
msgid "request a CORSed URL"
msgstr "ขอ URL ที่รองรับ CORS เท่านั้น อนุญาตเฉพาะ https"
-#: engine/core/docs/drf/views.py:112
+#: engine/core/docs/drf/views.py:119
msgid "Search between products, categories and brands"
msgstr "ค้นหาสินค้า หมวดหมู่ และแบรนด์"
-#: engine/core/docs/drf/views.py:130
+#: engine/core/docs/drf/views.py:141
msgid "global search endpoint to query across project's tables"
msgstr "จุดสิ้นสุดการค้นหาทั่วโลกเพื่อค้นหาข้ามตารางของโครงการ"
-#: engine/core/docs/drf/views.py:139
+#: engine/core/docs/drf/views.py:150
msgid "purchase an order as a business"
msgstr "ซื้อสินค้าเป็นธุรกิจ"
-#: engine/core/docs/drf/views.py:146
+#: engine/core/docs/drf/views.py:158
msgid ""
"purchase an order as a business, using the provided `products` with "
"`product_uuid` and `attributes`."
msgstr ""
-"ซื้อสินค้าในฐานะธุรกิจ โดยใช้ `products` ที่ให้มาพร้อมกับ `product_uuid` และ"
-" `attributes`"
+"ซื้อสินค้าในฐานะธุรกิจ โดยใช้ `products` ที่ให้มาพร้อมกับ `product_uuid` และ `attributes`"
-#: engine/core/docs/drf/views.py:164
+#: engine/core/docs/drf/views.py:177
msgid "download a digital asset from purchased digital order"
msgstr "ดาวน์โหลดสินทรัพย์ดิจิทัลจากคำสั่งซื้อดิจิทัลที่ซื้อแล้ว"
-#: engine/core/docs/drf/viewsets.py:61
+#: engine/core/docs/drf/viewsets.py:65
msgid "list all attribute groups (simple view)"
msgstr "แสดงกลุ่มแอตทริบิวต์ทั้งหมด (มุมมองแบบง่าย)"
-#: engine/core/docs/drf/viewsets.py:68
+#: engine/core/docs/drf/viewsets.py:75
msgid "retrieve a single attribute group (detailed view)"
msgstr "ดึงกลุ่มแอตทริบิวต์เดียว (มุมมองรายละเอียด)"
-#: engine/core/docs/drf/viewsets.py:75
+#: engine/core/docs/drf/viewsets.py:82
msgid "create an attribute group"
msgstr "สร้างกลุ่มคุณลักษณะ"
-#: engine/core/docs/drf/viewsets.py:82
+#: engine/core/docs/drf/viewsets.py:92
msgid "delete an attribute group"
msgstr "ลบกลุ่มแอตทริบิวต์"
-#: engine/core/docs/drf/viewsets.py:89
+#: engine/core/docs/drf/viewsets.py:99
msgid "rewrite an existing attribute group saving non-editables"
-msgstr ""
-"เขียนกลุ่มคุณลักษณะที่มีอยู่ใหม่โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้"
+msgstr "เขียนกลุ่มคุณลักษณะที่มีอยู่ใหม่โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้"
-#: engine/core/docs/drf/viewsets.py:96
-msgid ""
-"rewrite some fields of an existing attribute group saving non-editables"
-msgstr ""
-"เขียนฟิลด์บางส่วนของกลุ่มแอตทริบิวต์ที่มีอยู่ใหม่ "
-"โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้"
+#: engine/core/docs/drf/viewsets.py:107
+msgid "rewrite some fields of an existing attribute group saving non-editables"
+msgstr "เขียนฟิลด์บางส่วนของกลุ่มแอตทริบิวต์ที่มีอยู่ใหม่ โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้"
-#: engine/core/docs/drf/viewsets.py:106
+#: engine/core/docs/drf/viewsets.py:118
msgid "list all attributes (simple view)"
msgstr "แสดงรายการคุณลักษณะทั้งหมด (มุมมองแบบง่าย)"
-#: engine/core/docs/drf/viewsets.py:113
+#: engine/core/docs/drf/viewsets.py:128
msgid "retrieve a single attribute (detailed view)"
msgstr "ดึงข้อมูลคุณลักษณะเดียว (มุมมองรายละเอียด)"
-#: engine/core/docs/drf/viewsets.py:120
+#: engine/core/docs/drf/viewsets.py:135
msgid "create an attribute"
msgstr "สร้างแอตทริบิวต์"
-#: engine/core/docs/drf/viewsets.py:127
+#: engine/core/docs/drf/viewsets.py:142
msgid "delete an attribute"
msgstr "ลบแอตทริบิวต์"
-#: engine/core/docs/drf/viewsets.py:134
+#: engine/core/docs/drf/viewsets.py:149
msgid "rewrite an existing attribute saving non-editables"
msgstr "เขียนแอตทริบิวต์ที่มีอยู่ใหม่โดยบันทึกเฉพาะส่วนที่ไม่สามารถแก้ไขได้"
-#: engine/core/docs/drf/viewsets.py:141
+#: engine/core/docs/drf/viewsets.py:156
msgid "rewrite some fields of an existing attribute saving non-editables"
-msgstr ""
-"เขียนฟิลด์บางส่วนของแอตทริบิวต์ที่มีอยู่ใหม่ "
-"โดยบันทึกเฉพาะข้อมูลที่ไม่มีการแก้ไข"
+msgstr "เขียนฟิลด์บางส่วนของแอตทริบิวต์ที่มีอยู่ใหม่ โดยบันทึกเฉพาะข้อมูลที่ไม่มีการแก้ไข"
-#: engine/core/docs/drf/viewsets.py:151
+#: engine/core/docs/drf/viewsets.py:166
msgid "list all attribute values (simple view)"
msgstr "แสดงรายการค่าของแอตทริบิวต์ทั้งหมด (มุมมองแบบง่าย)"
-#: engine/core/docs/drf/viewsets.py:158
+#: engine/core/docs/drf/viewsets.py:176
msgid "retrieve a single attribute value (detailed view)"
msgstr "ดึงค่าแอตทริบิวต์เดียว (มุมมองรายละเอียด)"
-#: engine/core/docs/drf/viewsets.py:165
+#: engine/core/docs/drf/viewsets.py:183
msgid "create an attribute value"
msgstr "สร้างค่าแอตทริบิวต์"
-#: engine/core/docs/drf/viewsets.py:172
+#: engine/core/docs/drf/viewsets.py:193
msgid "delete an attribute value"
msgstr "ลบค่าของแอตทริบิวต์"
-#: engine/core/docs/drf/viewsets.py:179
+#: engine/core/docs/drf/viewsets.py:200
msgid "rewrite an existing attribute value saving non-editables"
msgstr "เขียนค่าแอตทริบิวต์ที่มีอยู่ใหม่โดยเก็บค่าที่ไม่สามารถแก้ไขได้"
-#: engine/core/docs/drf/viewsets.py:186
-msgid ""
-"rewrite some fields of an existing attribute value saving non-editables"
-msgstr ""
-"เขียนฟิลด์บางส่วนของค่าแอตทริบิวต์ที่มีอยู่ใหม่ "
-"โดยเก็บค่าที่ไม่สามารถแก้ไขได้ไว้"
+#: engine/core/docs/drf/viewsets.py:208
+msgid "rewrite some fields of an existing attribute value saving non-editables"
+msgstr "เขียนฟิลด์บางส่วนของค่าแอตทริบิวต์ที่มีอยู่ใหม่ โดยเก็บค่าที่ไม่สามารถแก้ไขได้ไว้"
-#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197
+#: engine/core/docs/drf/viewsets.py:219 engine/core/docs/drf/viewsets.py:220
msgid "list all categories (simple view)"
msgstr "แสดงรายการหมวดหมู่ทั้งหมด (มุมมองแบบง่าย)"
-#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205
+#: engine/core/docs/drf/viewsets.py:230 engine/core/docs/drf/viewsets.py:231
msgid "retrieve a single category (detailed view)"
msgstr "ดึงข้อมูลหมวดหมู่เดียว (มุมมองรายละเอียด)"
-#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258
+#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:286
msgid "Category UUID or slug"
msgstr "หมวดหมู่ UUID หรือ slug"
-#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221
+#: engine/core/docs/drf/viewsets.py:246 engine/core/docs/drf/viewsets.py:247
msgid "create a category"
msgstr "สร้างหมวดหมู่"
-#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229
+#: engine/core/docs/drf/viewsets.py:254 engine/core/docs/drf/viewsets.py:255
msgid "delete a category"
msgstr "ลบหมวดหมู่"
-#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237
+#: engine/core/docs/drf/viewsets.py:262 engine/core/docs/drf/viewsets.py:263
msgid "rewrite an existing category saving non-editables"
msgstr "เขียนหมวดหมู่ที่มีอยู่ใหม่โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้"
-#: engine/core/docs/drf/viewsets.py:244 engine/core/docs/drf/viewsets.py:245
+#: engine/core/docs/drf/viewsets.py:270 engine/core/docs/drf/viewsets.py:272
msgid "rewrite some fields of an existing category saving non-editables"
-msgstr ""
-"เขียนฟิลด์บางส่วนของหมวดหมู่ที่มีอยู่แล้วใหม่ "
-"โดยบันทึกเฉพาะข้อมูลที่ไม่สามารถแก้ไขได้"
+msgstr "เขียนฟิลด์บางส่วนของหมวดหมู่ที่มีอยู่แล้วใหม่ โดยบันทึกเฉพาะข้อมูลที่ไม่สามารถแก้ไขได้"
-#: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704
-#: engine/core/docs/drf/viewsets.py:988
+#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:1046
#: engine/core/graphene/object_types.py:117
-#: engine/core/graphene/object_types.py:207
-#: engine/core/graphene/object_types.py:482
+#: engine/core/graphene/object_types.py:236
+#: engine/core/graphene/object_types.py:537
msgid "SEO Meta snapshot"
msgstr "SEO Meta snapshot"
-#: engine/core/docs/drf/viewsets.py:253
+#: engine/core/docs/drf/viewsets.py:281
msgid "returns a snapshot of the category's SEO meta data"
msgstr "ส่งคืนภาพรวมของข้อมูลเมตา SEO ของหมวดหมู่"
-#: engine/core/docs/drf/viewsets.py:274
+#: engine/core/docs/drf/viewsets.py:302
msgid "list all orders (simple view)"
msgstr "แสดงรายการหมวดหมู่ทั้งหมด (มุมมองแบบง่าย)"
-#: engine/core/docs/drf/viewsets.py:275
+#: engine/core/docs/drf/viewsets.py:303
msgid "for non-staff users, only their own orders are returned."
msgstr "สำหรับผู้ใช้ที่ไม่ใช่พนักงาน จะแสดงเฉพาะคำสั่งซื้อของตนเองเท่านั้น"
-#: engine/core/docs/drf/viewsets.py:281
+#: engine/core/docs/drf/viewsets.py:309
msgid ""
-"Case-insensitive substring search across human_readable_id, "
-"order_products.product.name, and order_products.product.partnumber"
+"Case-insensitive substring search across human_readable_id, order_products."
+"product.name, and order_products.product.partnumber"
msgstr ""
-"การค้นหาส่วนย่อยโดยไม่คำนึงถึงตัวพิมพ์เล็กหรือใหญ่ใน human_readable_id, "
-"order_products.product.name และ order_products.product.partnumber"
+"การค้นหาส่วนย่อยโดยไม่คำนึงถึงตัวพิมพ์เล็กหรือใหญ่ใน human_readable_id, order_products."
+"product.name และ order_products.product.partnumber"
-#: engine/core/docs/drf/viewsets.py:288
+#: engine/core/docs/drf/viewsets.py:316
msgid "Filter orders with buy_time >= this ISO 8601 datetime"
msgstr "กรองคำสั่งซื้อที่มี buy_time >= วันที่และเวลาตามมาตรฐาน ISO 8601 นี้"
-#: engine/core/docs/drf/viewsets.py:293
+#: engine/core/docs/drf/viewsets.py:321
msgid "Filter orders with buy_time <= this ISO 8601 datetime"
msgstr "กรองคำสั่งซื้อที่มี buy_time <= วันที่และเวลาตามมาตรฐาน ISO 8601 นี้"
-#: engine/core/docs/drf/viewsets.py:298
+#: engine/core/docs/drf/viewsets.py:326
msgid "Filter by exact order UUID"
msgstr "กรองตาม UUID ของคำสั่งซื้อที่ตรงกัน"
-#: engine/core/docs/drf/viewsets.py:303
+#: engine/core/docs/drf/viewsets.py:331
msgid "Filter by exact human-readable order ID"
msgstr "กรองตามหมายเลขคำสั่งซื้อที่อ่านได้โดยมนุษย์อย่างถูกต้อง"
-#: engine/core/docs/drf/viewsets.py:308
+#: engine/core/docs/drf/viewsets.py:336
msgid "Filter by user's email (case-insensitive exact match)"
-msgstr ""
-"กรองตามอีเมลของผู้ใช้ (ตรงตามตัวอักษรโดยไม่คำนึงถึงตัวพิมพ์ใหญ่หรือเล็ก)"
+msgstr "กรองตามอีเมลของผู้ใช้ (ตรงตามตัวอักษรโดยไม่คำนึงถึงตัวพิมพ์ใหญ่หรือเล็ก)"
-#: engine/core/docs/drf/viewsets.py:313
+#: engine/core/docs/drf/viewsets.py:341
msgid "Filter by user's UUID"
msgstr "กรองตาม UUID ของผู้ใช้"
-#: engine/core/docs/drf/viewsets.py:318
+#: engine/core/docs/drf/viewsets.py:347
msgid "Filter by order status (case-insensitive substring match)"
-msgstr ""
-"กรองตามสถานะคำสั่งซื้อ (การจับคู่สตริงย่อยโดยไม่คำนึงตัวพิมพ์ใหญ่/เล็ก)"
+msgstr "กรองตามสถานะคำสั่งซื้อ (การจับคู่สตริงย่อยโดยไม่คำนึงตัวพิมพ์ใหญ่/เล็ก)"
-#: engine/core/docs/drf/viewsets.py:324
+#: engine/core/docs/drf/viewsets.py:354
msgid ""
-"Order by one of: uuid, human_readable_id, user_email, user, status, created,"
-" modified, buy_time, random. Prefix with '-' for descending (e.g. "
-"'-buy_time')."
+"Order by one of: uuid, human_readable_id, user_email, user, status, created, "
+"modified, buy_time, random. Prefix with '-' for descending (e.g. '-"
+"buy_time')."
msgstr ""
"เรียงลำดับโดยหนึ่งใน: uuid, human_readable_id, user_email, user, status, "
-"created, modified, buy_time, random. นำหน้าด้วย '-' "
-"สำหรับเรียงลำดับจากมากไปน้อย (เช่น '-buy_time')."
+"created, modified, buy_time, random. นำหน้าด้วย '-' สำหรับเรียงลำดับจากมากไปน้อย "
+"(เช่น '-buy_time')."
-#: engine/core/docs/drf/viewsets.py:336
+#: engine/core/docs/drf/viewsets.py:366
msgid "retrieve a single order (detailed view)"
msgstr "ดึงข้อมูลหมวดหมู่เดียว (มุมมองรายละเอียด)"
-#: engine/core/docs/drf/viewsets.py:341
+#: engine/core/docs/drf/viewsets.py:371
msgid "Order UUID or human-readable id"
msgstr "ลำดับ UUID หรือรหัสที่มนุษย์อ่านได้"
-#: engine/core/docs/drf/viewsets.py:351
+#: engine/core/docs/drf/viewsets.py:381
msgid "create an order"
msgstr "สร้างแอตทริบิวต์"
-#: engine/core/docs/drf/viewsets.py:352
+#: engine/core/docs/drf/viewsets.py:382
msgid "doesn't work for non-staff users."
msgstr "ไม่สามารถใช้งานได้สำหรับผู้ใช้ที่ไม่ใช่พนักงาน"
-#: engine/core/docs/drf/viewsets.py:359
+#: engine/core/docs/drf/viewsets.py:389
msgid "delete an order"
msgstr "ลบแอตทริบิวต์"
-#: engine/core/docs/drf/viewsets.py:366
+#: engine/core/docs/drf/viewsets.py:396
msgid "rewrite an existing order saving non-editables"
msgstr "เขียนหมวดหมู่ที่มีอยู่ใหม่โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้"
-#: engine/core/docs/drf/viewsets.py:373
+#: engine/core/docs/drf/viewsets.py:403
msgid "rewrite some fields of an existing order saving non-editables"
-msgstr ""
-"เขียนฟิลด์บางส่วนของหมวดหมู่ที่มีอยู่แล้วใหม่ "
-"โดยบันทึกเฉพาะข้อมูลที่ไม่สามารถแก้ไขได้"
+msgstr "เขียนฟิลด์บางส่วนของหมวดหมู่ที่มีอยู่แล้วใหม่ โดยบันทึกเฉพาะข้อมูลที่ไม่สามารถแก้ไขได้"
-#: engine/core/docs/drf/viewsets.py:380
+#: engine/core/docs/drf/viewsets.py:410
msgid "purchase an order"
msgstr "ราคาซื้อ ณ เวลาที่สั่งซื้อ"
-#: engine/core/docs/drf/viewsets.py:382
+#: engine/core/docs/drf/viewsets.py:412
msgid ""
"finalizes the order purchase. if `force_balance` is used, the purchase is "
"completed using the user's balance; if `force_payment` is used, a "
"transaction is initiated."
msgstr ""
"สรุปการสั่งซื้อสินค้า หากใช้ `force_balance` "
-"การสั่งซื้อจะเสร็จสมบูรณ์โดยใช้ยอดเงินคงเหลือของผู้ใช้ หากใช้ "
-"`force_payment` จะเริ่มการทำธุรกรรม"
+"การสั่งซื้อจะเสร็จสมบูรณ์โดยใช้ยอดเงินคงเหลือของผู้ใช้ หากใช้ `force_payment` "
+"จะเริ่มการทำธุรกรรม"
-#: engine/core/docs/drf/viewsets.py:397
+#: engine/core/docs/drf/viewsets.py:427
msgid "retrieve current pending order of a user"
msgstr "ดึงคำสั่งซื้อที่รอดำเนินการปัจจุบันของผู้ใช้"
-#: engine/core/docs/drf/viewsets.py:398
+#: engine/core/docs/drf/viewsets.py:428
msgid "retrieves a current pending order of an authenticated user"
msgstr "ดึงคำสั่งซื้อที่รอดำเนินการในปัจจุบันของผู้ใช้ที่ผ่านการยืนยันแล้ว"
-#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334
+#: engine/core/docs/drf/viewsets.py:438 engine/core/graphene/mutations.py:354
msgid "purchase an order without account creation"
msgstr "ซื้อสินค้าโดยไม่ต้องสร้างบัญชี"
-#: engine/core/docs/drf/viewsets.py:409
+#: engine/core/docs/drf/viewsets.py:439
msgid "finalizes the order purchase for a non-registered user."
msgstr "สรุปการสั่งซื้อสินค้าสำหรับผู้ใช้ที่ไม่ได้ลงทะเบียน"
-#: engine/core/docs/drf/viewsets.py:420
+#: engine/core/docs/drf/viewsets.py:450
msgid "add product to order"
msgstr "เพิ่มสินค้าในคำสั่งซื้อ"
-#: engine/core/docs/drf/viewsets.py:421
+#: engine/core/docs/drf/viewsets.py:452
msgid ""
"adds a product to an order using the provided `product_uuid` and "
"`attributes`."
-msgstr ""
-"เพิ่มสินค้าไปยังคำสั่งซื้อโดยใช้ `product_uuid` และ `attributes` ที่ให้มา"
+msgstr "เพิ่มสินค้าไปยังคำสั่งซื้อโดยใช้ `product_uuid` และ `attributes` ที่ให้มา"
-#: engine/core/docs/drf/viewsets.py:429
+#: engine/core/docs/drf/viewsets.py:461
msgid "add a list of products to order, quantities will not count"
msgstr "เพิ่มรายการสินค้าที่ต้องการสั่งซื้อ โดยจำนวนจะไม่ถูกนับ"
-#: engine/core/docs/drf/viewsets.py:430
+#: engine/core/docs/drf/viewsets.py:463
msgid ""
"adds a list of products to an order using the provided `product_uuid` and "
"`attributes`."
-msgstr ""
-"เพิ่มรายการสินค้าไปยังคำสั่งซื้อโดยใช้ `product_uuid` และ `attributes` "
-"ที่ให้มา"
+msgstr "เพิ่มรายการสินค้าไปยังคำสั่งซื้อโดยใช้ `product_uuid` และ `attributes` ที่ให้มา"
-#: engine/core/docs/drf/viewsets.py:438
+#: engine/core/docs/drf/viewsets.py:472
msgid "remove product from order"
msgstr "ลบสินค้าออกจากคำสั่งซื้อ"
-#: engine/core/docs/drf/viewsets.py:439
+#: engine/core/docs/drf/viewsets.py:474
msgid ""
"removes a product from an order using the provided `product_uuid` and "
"`attributes`."
-msgstr ""
-"ลบผลิตภัณฑ์ออกจากคำสั่งซื้อโดยใช้ `product_uuid` และ `attributes` ที่ให้มา"
+msgstr "ลบผลิตภัณฑ์ออกจากคำสั่งซื้อโดยใช้ `product_uuid` และ `attributes` ที่ให้มา"
-#: engine/core/docs/drf/viewsets.py:447
+#: engine/core/docs/drf/viewsets.py:483
msgid "remove product from order, quantities will not count"
msgstr "นำสินค้าออกจากคำสั่งซื้อ, จำนวนจะไม่ถูกนับ"
-#: engine/core/docs/drf/viewsets.py:448
+#: engine/core/docs/drf/viewsets.py:485
msgid ""
"removes a list of products from an order using the provided `product_uuid` "
"and `attributes`"
-msgstr ""
-"ลบรายการสินค้าออกจากคำสั่งซื้อโดยใช้ `product_uuid` และ `attributes` "
-"ที่ให้มา"
+msgstr "ลบรายการสินค้าออกจากคำสั่งซื้อโดยใช้ `product_uuid` และ `attributes` ที่ให้มา"
-#: engine/core/docs/drf/viewsets.py:459
+#: engine/core/docs/drf/viewsets.py:497
msgid "list all wishlists (simple view)"
msgstr "แสดงรายการคุณลักษณะทั้งหมด (มุมมองแบบง่าย)"
-#: engine/core/docs/drf/viewsets.py:460
+#: engine/core/docs/drf/viewsets.py:498
msgid "for non-staff users, only their own wishlists are returned."
-msgstr ""
-"สำหรับผู้ใช้ที่ไม่ใช่บุคลากร "
-"จะแสดงเฉพาะรายการที่อยู่ในรายการสิ่งที่ต้องการของตนเองเท่านั้น"
+msgstr "สำหรับผู้ใช้ที่ไม่ใช่บุคลากร จะแสดงเฉพาะรายการที่อยู่ในรายการสิ่งที่ต้องการของตนเองเท่านั้น"
-#: engine/core/docs/drf/viewsets.py:467
+#: engine/core/docs/drf/viewsets.py:508
msgid "retrieve a single wishlist (detailed view)"
msgstr "ดึงข้อมูลคุณลักษณะเดียว (มุมมองรายละเอียด)"
-#: engine/core/docs/drf/viewsets.py:474
+#: engine/core/docs/drf/viewsets.py:515
msgid "create an wishlist"
msgstr "สร้างแอตทริบิวต์"
-#: engine/core/docs/drf/viewsets.py:475
+#: engine/core/docs/drf/viewsets.py:516
msgid "Doesn't work for non-staff users."
msgstr "ไม่สามารถใช้งานได้สำหรับผู้ใช้ที่ไม่ใช่พนักงาน"
-#: engine/core/docs/drf/viewsets.py:482
+#: engine/core/docs/drf/viewsets.py:523
msgid "delete an wishlist"
msgstr "ลบแอตทริบิวต์"
-#: engine/core/docs/drf/viewsets.py:489
+#: engine/core/docs/drf/viewsets.py:530
msgid "rewrite an existing wishlist saving non-editables"
msgstr "เขียนแอตทริบิวต์ที่มีอยู่ใหม่โดยบันทึกเฉพาะส่วนที่ไม่สามารถแก้ไขได้"
-#: engine/core/docs/drf/viewsets.py:496
+#: engine/core/docs/drf/viewsets.py:537
msgid "rewrite some fields of an existing wishlist saving non-editables"
-msgstr ""
-"เขียนฟิลด์บางส่วนของแอตทริบิวต์ที่มีอยู่ใหม่ "
-"โดยบันทึกเฉพาะข้อมูลที่ไม่มีการแก้ไข"
+msgstr "เขียนฟิลด์บางส่วนของแอตทริบิวต์ที่มีอยู่ใหม่ โดยบันทึกเฉพาะข้อมูลที่ไม่มีการแก้ไข"
-#: engine/core/docs/drf/viewsets.py:503
+#: engine/core/docs/drf/viewsets.py:544
msgid "retrieve current pending wishlist of a user"
msgstr "ดึงรายการสินค้าที่ผู้ใช้ต้องการซื้อที่ยังไม่ได้ซื้อในปัจจุบัน"
-#: engine/core/docs/drf/viewsets.py:504
+#: engine/core/docs/drf/viewsets.py:545
msgid "retrieves a current pending wishlist of an authenticated user"
-msgstr ""
-"ดึงรายการความปรารถนาที่รอดำเนินการในปัจจุบันของผู้ใช้ที่ผ่านการยืนยันแล้ว"
+msgstr "ดึงรายการความปรารถนาที่รอดำเนินการในปัจจุบันของผู้ใช้ที่ผ่านการยืนยันแล้ว"
-#: engine/core/docs/drf/viewsets.py:514
+#: engine/core/docs/drf/viewsets.py:555
msgid "add product to wishlist"
msgstr "เพิ่มสินค้าในคำสั่งซื้อ"
-#: engine/core/docs/drf/viewsets.py:515
+#: engine/core/docs/drf/viewsets.py:557
msgid "adds a product to an wishlist using the provided `product_uuid`"
msgstr "เพิ่มสินค้าไปยังรายการที่ต้องการโดยใช้ `product_uuid` ที่ให้มา"
-#: engine/core/docs/drf/viewsets.py:523
+#: engine/core/docs/drf/viewsets.py:566
msgid "remove product from wishlist"
msgstr "นำสินค้าออกจากรายการที่อยากได้"
-#: engine/core/docs/drf/viewsets.py:524
+#: engine/core/docs/drf/viewsets.py:568
msgid "removes a product from an wishlist using the provided `product_uuid`"
msgstr "ลบผลิตภัณฑ์ออกจากรายการที่ต้องการโดยใช้ `product_uuid` ที่ให้มา"
-#: engine/core/docs/drf/viewsets.py:532
+#: engine/core/docs/drf/viewsets.py:577
msgid "add many products to wishlist"
msgstr "เพิ่มสินค้าหลายรายการลงในรายการที่ต้องการ"
-#: engine/core/docs/drf/viewsets.py:533
+#: engine/core/docs/drf/viewsets.py:579
msgid "adds many products to an wishlist using the provided `product_uuids`"
-msgstr ""
-"เพิ่มสินค้าหลายรายการลงในรายการสินค้าที่ต้องการโดยใช้ `product_uuids` "
-"ที่ให้มา"
+msgstr "เพิ่มสินค้าหลายรายการลงในรายการสินค้าที่ต้องการโดยใช้ `product_uuids` ที่ให้มา"
-#: engine/core/docs/drf/viewsets.py:541
+#: engine/core/docs/drf/viewsets.py:588
msgid "remove many products from wishlist"
msgstr "ลบสินค้าออกจากคำสั่งซื้อ"
-#: engine/core/docs/drf/viewsets.py:542
+#: engine/core/docs/drf/viewsets.py:590
msgid ""
"removes many products from an wishlist using the provided `product_uuids`"
-msgstr ""
-"ลบผลิตภัณฑ์หลายรายการออกจากรายการที่ต้องการโดยใช้ `product_uuids` ที่ให้มา"
+msgstr "ลบผลิตภัณฑ์หลายรายการออกจากรายการที่ต้องการโดยใช้ `product_uuids` ที่ให้มา"
-#: engine/core/docs/drf/viewsets.py:549
+#: engine/core/docs/drf/viewsets.py:598
msgid ""
"Filter by one or more attribute name/value pairs. \n"
"• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n"
-"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n"
-"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n"
+"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, "
+"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, "
+"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n"
+"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), "
+"`true`/`false` for booleans, integers, floats; otherwise treated as "
+"string. \n"
"• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n"
"Examples: \n"
-"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n"
+"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\","
+"\"bluetooth\"]`, \n"
"`b64-description=icontains-aGVhdC1jb2xk`"
msgstr ""
-"กรองตามชื่อ/ค่าของแอตทริบิวต์หนึ่งรายการหรือมากกว่า • **ไวยากรณ์**: `attr_name=method-value[;attr2=method2-value2]…` •**วิธีการ** (ค่าเริ่มต้นคือ `icontains` หากไม่ได้ระบุ): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` •**การกำหนดประเภทข้อมูล**: JSON จะถูกพยายามแปลงก่อน (ดังนั้นคุณสามารถส่งรายการ/ดิคชันนารีได้), `true`/`false` สำหรับบูลีน, จำนวนเต็ม, จำนวนทศนิยม; มิฉะนั้นจะถือว่าเป็นสตริง. • **Base64**: นำหน้าด้วย `b64-` เพื่อเข้ารหัส base64 ที่ปลอดภัยสำหรับ URL ของค่าดิบ. \n"
-"ตัวอย่าง: `color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, `b64-description=icontains-aGVhdC1jb2xk`"
+"กรองตามชื่อ/ค่าของแอตทริบิวต์หนึ่งรายการหรือมากกว่า • **ไวยากรณ์**: `attr_name=method-"
+"value[;attr2=method2-value2]…` •**วิธีการ** (ค่าเริ่มต้นคือ `icontains` "
+"หากไม่ได้ระบุ): `iexact`, `exact`, `icontains`, `contains`, `isnull`, "
+"`startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, "
+"`lt`, `lte`, `gt`, `gte`, `in` •**การกำหนดประเภทข้อมูล**: JSON "
+"จะถูกพยายามแปลงก่อน (ดังนั้นคุณสามารถส่งรายการ/ดิคชันนารีได้), `true`/`false` สำหรับบูลีน, "
+"จำนวนเต็ม, จำนวนทศนิยม; มิฉะนั้นจะถือว่าเป็นสตริง. • **Base64**: นำหน้าด้วย `b64-` "
+"เพื่อเข้ารหัส base64 ที่ปลอดภัยสำหรับ URL ของค่าดิบ. \n"
+"ตัวอย่าง: `color=exact-red`, `size=gt-10`, `features=in-[\"wifi\","
+"\"bluetooth\"]`, `b64-description=icontains-aGVhdC1jb2xk`"
-#: engine/core/docs/drf/viewsets.py:568 engine/core/docs/drf/viewsets.py:569
+#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
msgid "list all products (simple view)"
msgstr "รายการสินค้าทั้งหมด (มุมมองแบบง่าย)"
-#: engine/core/docs/drf/viewsets.py:574
+#: engine/core/docs/drf/viewsets.py:623
msgid "(exact) Product UUID"
msgstr "(exact) รหัส UUID ของผลิตภัณฑ์"
-#: engine/core/docs/drf/viewsets.py:581
+#: engine/core/docs/drf/viewsets.py:630
msgid ""
-"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n"
+"Comma-separated list of fields to sort by. Prefix with `-` for "
+"descending. \n"
"**Allowed:** uuid, rating, name, slug, created, modified, price, random"
msgstr ""
-"รายการฟิลด์ที่คั่นด้วยเครื่องหมายจุลภาคเพื่อเรียงลำดับ โดยให้ขึ้นต้นด้วย `-`"
-" สำหรับการเรียงลำดับจากน้อยไปมาก **ที่อนุญาต:** uuid, rating, name, slug, "
-"created, modified, price, random"
+"รายการฟิลด์ที่คั่นด้วยเครื่องหมายจุลภาคเพื่อเรียงลำดับ โดยให้ขึ้นต้นด้วย `-` "
+"สำหรับการเรียงลำดับจากน้อยไปมาก **ที่อนุญาต:** uuid, rating, name, slug, created, "
+"modified, price, random"
-#: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599
+#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
msgid "retrieve a single product (detailed view)"
msgstr "ดึงข้อมูลสินค้าเพียงรายการเดียว (มุมมองรายละเอียด)"
-#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634
-#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672
-#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710
+#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683
+#: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725
+#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763
msgid "Product UUID or slug"
msgstr "รหัส UUID ของผลิตภัณฑ์ หรือชื่อเรียก"
-#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
+#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
#: engine/core/graphene/dashboard_mutations/product.py:80
#: engine/core/graphene/dashboard_mutations/product.py:118
#: engine/core/graphene/dashboard_mutations/product.py:166
msgid "create a product"
msgstr "สร้างผลิตภัณฑ์"
-#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629
+#: engine/core/docs/drf/viewsets.py:677 engine/core/docs/drf/viewsets.py:678
msgid "rewrite an existing product, preserving non-editable fields"
msgstr "เขียนใหม่ผลิตภัณฑ์ที่มีอยู่ โดยรักษาฟิลด์ที่ไม่สามารถแก้ไขได้"
-#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
+#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:700
msgid ""
"update some fields of an existing product, preserving non-editable fields"
-msgstr ""
-"อัปเดตบางฟิลด์ของสินค้าที่มีอยู่แล้ว โดยคงฟิลด์ที่ไม่สามารถแก้ไขได้ไว้"
+msgstr "อัปเดตบางฟิลด์ของสินค้าที่มีอยู่แล้ว โดยคงฟิลด์ที่ไม่สามารถแก้ไขได้ไว้"
-#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
+#: engine/core/docs/drf/viewsets.py:719 engine/core/docs/drf/viewsets.py:720
msgid "delete a product"
msgstr "ลบผลิตภัณฑ์"
-#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686
+#: engine/core/docs/drf/viewsets.py:738 engine/core/docs/drf/viewsets.py:739
msgid "lists all permitted feedbacks for a product"
msgstr "แสดงรายการข้อเสนอแนะที่ได้รับอนุญาตทั้งหมดสำหรับผลิตภัณฑ์"
-#: engine/core/docs/drf/viewsets.py:705
+#: engine/core/docs/drf/viewsets.py:758
msgid "returns a snapshot of the product's SEO meta data"
msgstr "ส่งคืนภาพรวมของข้อมูลเมตา SEO ของผลิตภัณฑ์"
-#: engine/core/docs/drf/viewsets.py:726
+#: engine/core/docs/drf/viewsets.py:779
msgid "list all addresses"
msgstr "รายการที่อยู่ทั้งหมด"
-#: engine/core/docs/drf/viewsets.py:736
+#: engine/core/docs/drf/viewsets.py:789
msgid "retrieve a single address"
msgstr "ดึงที่อยู่เดียว"
-#: engine/core/docs/drf/viewsets.py:746
+#: engine/core/docs/drf/viewsets.py:799
msgid "create a new address"
msgstr "สร้างที่อยู่ใหม่"
-#: engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:810
msgid "delete an address"
msgstr "ลบที่อยู่"
-#: engine/core/docs/drf/viewsets.py:767
+#: engine/core/docs/drf/viewsets.py:820
msgid "update an entire address"
msgstr "อัปเดตที่อยู่ทั้งหมด"
-#: engine/core/docs/drf/viewsets.py:778
+#: engine/core/docs/drf/viewsets.py:831
msgid "partially update an address"
msgstr "อัปเดตที่อยู่บางส่วน"
-#: engine/core/docs/drf/viewsets.py:789
+#: engine/core/docs/drf/viewsets.py:842
msgid "autocomplete address suggestions"
msgstr "การเติมที่อยู่โดยอัตโนมัติ"
-#: engine/core/docs/drf/viewsets.py:794
+#: engine/core/docs/drf/viewsets.py:848
msgid "raw data query string, please append with data from geo-IP endpoint"
msgstr "ข้อมูลดิบสำหรับคำค้นหา กรุณาเพิ่มข้อมูลจากจุดสิ้นสุด geo-IP"
-#: engine/core/docs/drf/viewsets.py:800
+#: engine/core/docs/drf/viewsets.py:855
msgid "limit the results amount, 1 < limit < 10, default: 5"
msgstr "จำกัดจำนวนผลลัพธ์, 1 < limit < 10, ค่าเริ่มต้น: 5"
-#: engine/core/docs/drf/viewsets.py:816
+#: engine/core/docs/drf/viewsets.py:871
msgid "list all feedbacks (simple view)"
msgstr "แสดงความคิดเห็นทั้งหมด (มุมมองแบบง่าย)"
-#: engine/core/docs/drf/viewsets.py:823
+#: engine/core/docs/drf/viewsets.py:881
msgid "retrieve a single feedback (detailed view)"
msgstr "ดึงข้อมูลความคิดเห็นหนึ่งรายการ (มุมมองแบบละเอียด)"
-#: engine/core/docs/drf/viewsets.py:830
+#: engine/core/docs/drf/viewsets.py:888
msgid "create a feedback"
msgstr "สร้างข้อเสนอแนะ"
-#: engine/core/docs/drf/viewsets.py:837
+#: engine/core/docs/drf/viewsets.py:895
msgid "delete a feedback"
msgstr "ลบความคิดเห็น"
-#: engine/core/docs/drf/viewsets.py:844
+#: engine/core/docs/drf/viewsets.py:902
msgid "rewrite an existing feedback saving non-editables"
msgstr "เขียนใหม่ข้อเสนอแนะที่มีอยู่โดยไม่แก้ไขส่วนที่ไม่สามารถแก้ไขได้"
-#: engine/core/docs/drf/viewsets.py:851
+#: engine/core/docs/drf/viewsets.py:909
msgid "rewrite some fields of an existing feedback saving non-editables"
-msgstr ""
-"เขียนข้อมูลบางส่วนของฟิลด์ในข้อเสนอแนะที่มีอยู่ใหม่ "
-"โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้"
+msgstr "เขียนข้อมูลบางส่วนของฟิลด์ในข้อเสนอแนะที่มีอยู่ใหม่ โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้"
-#: engine/core/docs/drf/viewsets.py:861
+#: engine/core/docs/drf/viewsets.py:919
msgid "list all order–product relations (simple view)"
msgstr "แสดงความสัมพันธ์ระหว่างคำสั่งซื้อและผลิตภัณฑ์ทั้งหมด (มุมมองแบบง่าย)"
-#: engine/core/docs/drf/viewsets.py:871
+#: engine/core/docs/drf/viewsets.py:929
msgid "retrieve a single order–product relation (detailed view)"
-msgstr ""
-"ดึงความสัมพันธ์ระหว่างคำสั่งซื้อและผลิตภัณฑ์เพียงรายการเดียว "
-"(มุมมองรายละเอียด)"
+msgstr "ดึงความสัมพันธ์ระหว่างคำสั่งซื้อและผลิตภัณฑ์เพียงรายการเดียว (มุมมองรายละเอียด)"
-#: engine/core/docs/drf/viewsets.py:881
+#: engine/core/docs/drf/viewsets.py:939
msgid "create a new order–product relation"
msgstr "สร้างความสัมพันธ์ระหว่างคำสั่งซื้อและผลิตภัณฑ์ใหม่"
-#: engine/core/docs/drf/viewsets.py:891
+#: engine/core/docs/drf/viewsets.py:949
msgid "replace an existing order–product relation"
msgstr "แทนที่ความสัมพันธ์ระหว่างคำสั่งซื้อและผลิตภัณฑ์ที่มีอยู่"
-#: engine/core/docs/drf/viewsets.py:901
+#: engine/core/docs/drf/viewsets.py:959
msgid "partially update an existing order–product relation"
msgstr "อัปเดตบางส่วนของความสัมพันธ์ระหว่างคำสั่งซื้อและผลิตภัณฑ์ที่มีอยู่"
-#: engine/core/docs/drf/viewsets.py:911
+#: engine/core/docs/drf/viewsets.py:969
msgid "delete an order–product relation"
msgstr "ลบความสัมพันธ์ระหว่างคำสั่งซื้อและสินค้า"
-#: engine/core/docs/drf/viewsets.py:921
+#: engine/core/docs/drf/viewsets.py:979
msgid "add or remove feedback on an order–product relation"
-msgstr ""
-"เพิ่มหรือลบความคิดเห็นเกี่ยวกับความสัมพันธ์ระหว่างคำสั่งซื้อและผลิตภัณฑ์"
+msgstr "เพิ่มหรือลบความคิดเห็นเกี่ยวกับความสัมพันธ์ระหว่างคำสั่งซื้อและผลิตภัณฑ์"
-#: engine/core/docs/drf/viewsets.py:938
+#: engine/core/docs/drf/viewsets.py:996
msgid "list all brands (simple view)"
msgstr "แสดงรายการทั้งหมดของแบรนด์ (มุมมองแบบง่าย)"
-#: engine/core/docs/drf/viewsets.py:945
+#: engine/core/docs/drf/viewsets.py:1003
msgid "retrieve a single brand (detailed view)"
msgstr "ดึงข้อมูลแบรนด์เดียว (มุมมองรายละเอียด)"
-#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993
+#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051
msgid "Brand UUID or slug"
msgstr "แบรนด์ UUID หรือ slug"
-#: engine/core/docs/drf/viewsets.py:960
+#: engine/core/docs/drf/viewsets.py:1018
msgid "create a brand"
msgstr "สร้างแบรนด์"
-#: engine/core/docs/drf/viewsets.py:967
+#: engine/core/docs/drf/viewsets.py:1025
msgid "delete a brand"
msgstr "ลบแบรนด์"
-#: engine/core/docs/drf/viewsets.py:974
+#: engine/core/docs/drf/viewsets.py:1032
msgid "rewrite an existing brand saving non-editables"
msgstr "เขียนใหม่แบรนด์ที่มีอยู่โดยไม่แก้ไขส่วนที่ไม่สามารถแก้ไขได้"
-#: engine/core/docs/drf/viewsets.py:981
+#: engine/core/docs/drf/viewsets.py:1039
msgid "rewrite some fields of an existing brand saving non-editables"
-msgstr ""
-"เขียนข้อมูลในบางช่องของแบรนด์ที่มีอยู่ใหม่ "
-"โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้"
+msgstr "เขียนข้อมูลในบางช่องของแบรนด์ที่มีอยู่ใหม่ โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้"
-#: engine/core/docs/drf/viewsets.py:1006
+#: engine/core/docs/drf/viewsets.py:1064
msgid "list all vendors (simple view)"
msgstr "แสดงรายชื่อผู้จำหน่ายทั้งหมด (มุมมองแบบง่าย)"
-#: engine/core/docs/drf/viewsets.py:1013
+#: engine/core/docs/drf/viewsets.py:1074
msgid "retrieve a single vendor (detailed view)"
msgstr "ดึงข้อมูลผู้ขายรายเดียว (มุมมองรายละเอียด)"
-#: engine/core/docs/drf/viewsets.py:1020
+#: engine/core/docs/drf/viewsets.py:1081
msgid "create a vendor"
msgstr "สร้างผู้ขาย"
-#: engine/core/docs/drf/viewsets.py:1027
+#: engine/core/docs/drf/viewsets.py:1088
msgid "delete a vendor"
msgstr "ลบผู้ขาย"
-#: engine/core/docs/drf/viewsets.py:1034
+#: engine/core/docs/drf/viewsets.py:1095
msgid "rewrite an existing vendor saving non-editables"
msgstr "เขียนใหม่ผู้ขายที่มีอยู่โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้"
-#: engine/core/docs/drf/viewsets.py:1041
+#: engine/core/docs/drf/viewsets.py:1102
msgid "rewrite some fields of an existing vendor saving non-editables"
-msgstr ""
-"เขียนข้อมูลในบางช่องของซัพพลายเออร์ที่มีอยู่แล้วใหม่ "
-"โดยเก็บค่าที่ไม่สามารถแก้ไขได้ไว้"
+msgstr "เขียนข้อมูลในบางช่องของซัพพลายเออร์ที่มีอยู่แล้วใหม่ โดยเก็บค่าที่ไม่สามารถแก้ไขได้ไว้"
-#: engine/core/docs/drf/viewsets.py:1051
+#: engine/core/docs/drf/viewsets.py:1112
msgid "list all product images (simple view)"
msgstr "แสดงภาพสินค้าทั้งหมด (มุมมองแบบง่าย)"
-#: engine/core/docs/drf/viewsets.py:1058
+#: engine/core/docs/drf/viewsets.py:1122
msgid "retrieve a single product image (detailed view)"
msgstr "ดึงภาพสินค้าเพียงหนึ่งรายการ (มุมมองรายละเอียด)"
-#: engine/core/docs/drf/viewsets.py:1065
+#: engine/core/docs/drf/viewsets.py:1129
msgid "create a product image"
msgstr "สร้างภาพสินค้า"
-#: engine/core/docs/drf/viewsets.py:1072
+#: engine/core/docs/drf/viewsets.py:1139
msgid "delete a product image"
msgstr "ลบรูปภาพสินค้า"
-#: engine/core/docs/drf/viewsets.py:1079
+#: engine/core/docs/drf/viewsets.py:1146
msgid "rewrite an existing product image saving non-editables"
msgstr "เขียนภาพสินค้าที่มีอยู่ใหม่โดยเก็บส่วนที่ไม่สามารถแก้ไขได้"
-#: engine/core/docs/drf/viewsets.py:1086
+#: engine/core/docs/drf/viewsets.py:1154
msgid "rewrite some fields of an existing product image saving non-editables"
-msgstr ""
-"เขียนข้อมูลบางส่วนของภาพสินค้าที่มีอยู่ใหม่ "
-"โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้"
+msgstr "เขียนข้อมูลบางส่วนของภาพสินค้าที่มีอยู่ใหม่ โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้"
-#: engine/core/docs/drf/viewsets.py:1096
+#: engine/core/docs/drf/viewsets.py:1165
msgid "list all promo codes (simple view)"
msgstr "แสดงรายการรหัสโปรโมชั่นทั้งหมด (มุมมองแบบง่าย)"
-#: engine/core/docs/drf/viewsets.py:1103
+#: engine/core/docs/drf/viewsets.py:1175
msgid "retrieve a single promo code (detailed view)"
msgstr "ดึงรหัสโปรโมชั่นเพียงหนึ่งรายการ (มุมมองแบบละเอียด)"
-#: engine/core/docs/drf/viewsets.py:1110
+#: engine/core/docs/drf/viewsets.py:1182
msgid "create a promo code"
msgstr "สร้างรหัสโปรโมชั่น"
-#: engine/core/docs/drf/viewsets.py:1117
+#: engine/core/docs/drf/viewsets.py:1189
msgid "delete a promo code"
msgstr "ลบโค้ดโปรโมชั่น"
-#: engine/core/docs/drf/viewsets.py:1124
+#: engine/core/docs/drf/viewsets.py:1196
msgid "rewrite an existing promo code saving non-editables"
msgstr "เขียนโค้ดโปรโมชั่นใหม่โดยคงส่วนที่ไม่สามารถแก้ไขได้ไว้"
-#: engine/core/docs/drf/viewsets.py:1131
+#: engine/core/docs/drf/viewsets.py:1203
msgid "rewrite some fields of an existing promo code saving non-editables"
-msgstr ""
-"เขียนฟิลด์บางส่วนของรหัสโปรโมชั่นที่มีอยู่ใหม่ "
-"โดยคงค่าที่ไม่สามารถแก้ไขได้ไว้"
+msgstr "เขียนฟิลด์บางส่วนของรหัสโปรโมชั่นที่มีอยู่ใหม่ โดยคงค่าที่ไม่สามารถแก้ไขได้ไว้"
-#: engine/core/docs/drf/viewsets.py:1141
+#: engine/core/docs/drf/viewsets.py:1213
msgid "list all promotions (simple view)"
msgstr "รายการโปรโมชั่นทั้งหมด (มุมมองแบบง่าย)"
-#: engine/core/docs/drf/viewsets.py:1148
+#: engine/core/docs/drf/viewsets.py:1223
msgid "retrieve a single promotion (detailed view)"
msgstr "ดึงข้อมูลโปรโมชั่นเดียว (มุมมองรายละเอียด)"
-#: engine/core/docs/drf/viewsets.py:1155
+#: engine/core/docs/drf/viewsets.py:1230
msgid "create a promotion"
msgstr "สร้างโปรโมชั่น"
-#: engine/core/docs/drf/viewsets.py:1162
+#: engine/core/docs/drf/viewsets.py:1237
msgid "delete a promotion"
msgstr "ลบโปรโมชั่น"
-#: engine/core/docs/drf/viewsets.py:1169
+#: engine/core/docs/drf/viewsets.py:1244
msgid "rewrite an existing promotion saving non-editables"
msgstr "เขียนโปรโมชั่นใหม่โดยคงส่วนที่ไม่สามารถแก้ไขได้ไว้"
-#: engine/core/docs/drf/viewsets.py:1176
+#: engine/core/docs/drf/viewsets.py:1251
msgid "rewrite some fields of an existing promotion saving non-editables"
-msgstr ""
-"เขียนข้อมูลบางส่วนของโปรโมชั่นที่มีอยู่ใหม่ "
-"โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้"
+msgstr "เขียนข้อมูลบางส่วนของโปรโมชั่นที่มีอยู่ใหม่ โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้"
-#: engine/core/docs/drf/viewsets.py:1186
+#: engine/core/docs/drf/viewsets.py:1261
msgid "list all stocks (simple view)"
msgstr "แสดงรายการหุ้นทั้งหมด (มุมมองแบบง่าย)"
-#: engine/core/docs/drf/viewsets.py:1193
+#: engine/core/docs/drf/viewsets.py:1268
msgid "retrieve a single stock (detailed view)"
msgstr "ดึงข้อมูลสินค้าคงคลังหนึ่งรายการ (มุมมองรายละเอียด)"
-#: engine/core/docs/drf/viewsets.py:1200
+#: engine/core/docs/drf/viewsets.py:1275
msgid "create a stock record"
msgstr "สร้างบันทึกสินค้าคงคลัง"
-#: engine/core/docs/drf/viewsets.py:1207
+#: engine/core/docs/drf/viewsets.py:1282
msgid "delete a stock record"
msgstr "ลบข้อมูลสินค้าคงคลัง"
-#: engine/core/docs/drf/viewsets.py:1214
+#: engine/core/docs/drf/viewsets.py:1289
msgid "rewrite an existing stock record saving non-editables"
msgstr "เขียนบันทึกสต็อกที่มีอยู่ใหม่โดยบันทึกข้อมูลที่ไม่สามารถแก้ไขได้"
-#: engine/core/docs/drf/viewsets.py:1221
+#: engine/core/docs/drf/viewsets.py:1297
msgid "rewrite some fields of an existing stock record saving non-editables"
-msgstr ""
-"เขียนฟิลด์บางส่วนของบันทึกสต็อกที่มีอยู่ใหม่ "
-"โดยบันทึกข้อมูลที่ไม่สามารถแก้ไขได้"
+msgstr "เขียนฟิลด์บางส่วนของบันทึกสต็อกที่มีอยู่ใหม่ โดยบันทึกข้อมูลที่ไม่สามารถแก้ไขได้"
-#: engine/core/docs/drf/viewsets.py:1231
+#: engine/core/docs/drf/viewsets.py:1308
msgid "list all product tags (simple view)"
msgstr "แสดงแท็กสินค้าทั้งหมด (มุมมองแบบง่าย)"
-#: engine/core/docs/drf/viewsets.py:1238
+#: engine/core/docs/drf/viewsets.py:1318
msgid "retrieve a single product tag (detailed view)"
msgstr "ดึงแท็กสินค้าหนึ่งรายการ (มุมมองรายละเอียด)"
-#: engine/core/docs/drf/viewsets.py:1245
+#: engine/core/docs/drf/viewsets.py:1325
msgid "create a product tag"
msgstr "สร้างแท็กสินค้า"
-#: engine/core/docs/drf/viewsets.py:1252
+#: engine/core/docs/drf/viewsets.py:1335
msgid "delete a product tag"
msgstr "ลบแท็กสินค้า"
-#: engine/core/docs/drf/viewsets.py:1259
+#: engine/core/docs/drf/viewsets.py:1342
msgid "rewrite an existing product tag saving non-editables"
msgstr "เขียนแท็กสินค้าที่มีอยู่ใหม่โดยเก็บส่วนที่ไม่สามารถแก้ไขได้"
-#: engine/core/docs/drf/viewsets.py:1266
+#: engine/core/docs/drf/viewsets.py:1350
msgid "rewrite some fields of an existing product tag saving non-editables"
-msgstr ""
-"เขียนข้อมูลบางส่วนของแท็กสินค้าที่มีอยู่แล้วใหม่ "
-"โดยบันทึกข้อมูลที่ไม่สามารถแก้ไขได้"
+msgstr "เขียนข้อมูลบางส่วนของแท็กสินค้าที่มีอยู่แล้วใหม่ โดยบันทึกข้อมูลที่ไม่สามารถแก้ไขได้"
-#: engine/core/elasticsearch/__init__.py:122
-#: engine/core/elasticsearch/__init__.py:570
+#: engine/core/elasticsearch/__init__.py:127
+#: engine/core/elasticsearch/__init__.py:627
msgid "no search term provided."
msgstr "ไม่พบคำค้นหา"
-#: engine/core/filters.py:69 engine/core/filters.py:426
-#: engine/core/filters.py:553
+#: engine/core/filters.py:78 engine/core/filters.py:484
+#: engine/core/filters.py:625
msgid "Search"
msgstr "ค้นหา"
-#: engine/core/filters.py:70 engine/core/filters.py:583
-#: engine/core/filters.py:612
+#: engine/core/filters.py:79 engine/core/filters.py:662
+#: engine/core/filters.py:691
msgid "UUID"
msgstr "ยูไอไอดี"
-#: engine/core/filters.py:71 engine/core/filters.py:428
-#: engine/core/filters.py:555
+#: engine/core/filters.py:80 engine/core/filters.py:487
+#: engine/core/filters.py:627
msgid "Name"
msgstr "ชื่อ"
-#: engine/core/filters.py:72 engine/core/filters.py:557
+#: engine/core/filters.py:82 engine/core/filters.py:630
msgid "Categories"
msgstr "หมวดหมู่"
-#: engine/core/filters.py:74
+#: engine/core/filters.py:86
msgid "Categories Slugs"
msgstr "หมวดหมู่ slug"
-#: engine/core/filters.py:75 engine/core/filters.py:436
+#: engine/core/filters.py:88 engine/core/filters.py:495
msgid "Tags"
msgstr "แท็ก"
-#: engine/core/filters.py:76
+#: engine/core/filters.py:90
msgid "Min Price"
msgstr "ราคาต่ำสุด"
-#: engine/core/filters.py:77
+#: engine/core/filters.py:93
msgid "Max Price"
msgstr "ราคาสูงสุด"
-#: engine/core/filters.py:78
+#: engine/core/filters.py:95
msgid "Is Active"
msgstr "กำลังใช้งานอยู่"
-#: engine/core/filters.py:79
+#: engine/core/filters.py:96
msgid "Brand"
msgstr "แบรนด์"
-#: engine/core/filters.py:80
+#: engine/core/filters.py:97
msgid "Attributes"
msgstr "คุณลักษณะ"
-#: engine/core/filters.py:81
+#: engine/core/filters.py:99
msgid "Quantity"
msgstr "ปริมาณ"
-#: engine/core/filters.py:82 engine/core/filters.py:430
-#: engine/core/filters.py:556 engine/core/models.py:321
-#: engine/core/models.py:489 engine/core/models.py:644
+#: engine/core/filters.py:101 engine/core/filters.py:489
+#: engine/core/filters.py:628 engine/core/models.py:327
+#: engine/core/models.py:508 engine/core/models.py:665
msgid "Slug"
msgstr "ทาก"
-#: engine/core/filters.py:83
+#: engine/core/filters.py:102
msgid "Is Digital"
msgstr "คือ ดิจิทัล"
-#: engine/core/filters.py:84
+#: engine/core/filters.py:104
msgid "Include sub-categories"
msgstr "รวมหมวดหมู่ย่อย"
-#: engine/core/filters.py:87
+#: engine/core/filters.py:108
msgid "Include personal ordered"
msgstr "รวมสินค้าสั่งทำส่วนตัว"
-#: engine/core/filters.py:89 engine/core/models.py:648
+#: engine/core/filters.py:110 engine/core/models.py:669
msgid "SKU"
msgstr "SKU"
-#: engine/core/filters.py:184
+#: engine/core/filters.py:212
msgid "there must be a category_uuid to use include_subcategories flag"
msgstr "ต้องมี category_uuid เพื่อใช้แฟล็ก include_subcategories"
-#: engine/core/filters.py:353
+#: engine/core/filters.py:398
msgid "Search (ID, product name or part number)"
msgstr "ค้นหา (รหัส, ชื่อผลิตภัณฑ์ หรือหมายเลขชิ้นส่วน)"
-#: engine/core/filters.py:356
+#: engine/core/filters.py:402
msgid "Bought after (inclusive)"
msgstr "ซื้อหลังจาก (รวมแล้ว)"
-#: engine/core/filters.py:357
+#: engine/core/filters.py:405
msgid "Bought before (inclusive)"
msgstr "ซื้อมาก่อน (รวมแล้ว)"
-#: engine/core/filters.py:360 engine/core/filters.py:407
-#: engine/core/filters.py:614
+#: engine/core/filters.py:410 engine/core/filters.py:461
+#: engine/core/filters.py:696
msgid "User email"
msgstr "อีเมลผู้ใช้"
-#: engine/core/filters.py:361 engine/core/filters.py:408
-#: engine/core/filters.py:592 engine/core/filters.py:613
+#: engine/core/filters.py:413 engine/core/filters.py:464
+#: engine/core/filters.py:671 engine/core/filters.py:693
msgid "User UUID"
msgstr "รหัสผู้ใช้ UUID"
-#: engine/core/filters.py:362
+#: engine/core/filters.py:415
msgid "Status"
msgstr "สถานะ"
-#: engine/core/filters.py:366
+#: engine/core/filters.py:419
msgid "Human Readable ID"
msgstr "รหัสที่มนุษย์อ่านได้"
-#: engine/core/filters.py:429
+#: engine/core/filters.py:488
msgid "Parent"
msgstr "ผู้ปกครอง"
-#: engine/core/filters.py:433
+#: engine/core/filters.py:492
msgid "Whole category(has at least 1 product or not)"
msgstr "หมวดหมู่ทั้งหมด (มีอย่างน้อย 1 ผลิตภัณฑ์หรือไม่)"
-#: engine/core/filters.py:437
+#: engine/core/filters.py:496
msgid "Level"
msgstr "ระดับ"
-#: engine/core/filters.py:587
+#: engine/core/filters.py:666
msgid "Product UUID"
msgstr "รหัส UUID ของผลิตภัณฑ์"
-#: engine/core/graphene/mutations.py:40
+#: engine/core/graphene/mutations.py:41
msgid "key to look for in or set into the cache"
msgstr "กุญแจที่ต้องค้นหาหรือติดตั้งไว้ในแคช"
-#: engine/core/graphene/mutations.py:41
+#: engine/core/graphene/mutations.py:43
msgid "data to store in cache"
msgstr "ข้อมูลที่จะเก็บไว้ในแคช"
-#: engine/core/graphene/mutations.py:44
+#: engine/core/graphene/mutations.py:46
msgid "timeout in seconds to set the data for into the cache"
msgstr "เวลาหมดในวินาทีเพื่อตั้งค่าข้อมูลสำหรับเก็บในแคช"
-#: engine/core/graphene/mutations.py:47
+#: engine/core/graphene/mutations.py:49
msgid "cached data"
msgstr "ข้อมูลที่เก็บไว้ในแคช"
-#: engine/core/graphene/mutations.py:62
+#: engine/core/graphene/mutations.py:64
msgid "camelized JSON data from the requested URL"
msgstr "ข้อมูล JSON ที่ผ่านการคาราเมลไลซ์จาก URL ที่ร้องขอ"
-#: engine/core/graphene/mutations.py:67 engine/core/views.py:257
+#: engine/core/graphene/mutations.py:69 engine/core/views.py:249
msgid "only URLs starting with http(s):// are allowed"
msgstr "อนุญาตเฉพาะ URL ที่ขึ้นต้นด้วย http(s):// เท่านั้น"
-#: engine/core/graphene/mutations.py:83
+#: engine/core/graphene/mutations.py:87
msgid "add a product to the order"
msgstr "เพิ่มสินค้าในคำสั่งซื้อ"
-#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131
-#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287
+#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139
+#: engine/core/graphene/mutations.py:255 engine/core/graphene/mutations.py:307
#, python-brace-format
msgid "order {order_uuid} not found"
msgstr "ไม่พบคำสั่งซื้อ {order_uuid}!"
-#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159
+#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167
msgid "remove a product from the order"
msgstr "ลบสินค้าออกจากคำสั่งซื้อ"
-#: engine/core/graphene/mutations.py:137
+#: engine/core/graphene/mutations.py:145
msgid "remove all products from the order"
msgstr "นำสินค้าทั้งหมดออกจากคำสั่งซื้อ"
-#: engine/core/graphene/mutations.py:182
+#: engine/core/graphene/mutations.py:190
msgid "buy an order"
msgstr "ซื้อคำสั่ง"
-#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265
+#: engine/core/graphene/mutations.py:221 engine/core/graphene/mutations.py:283
msgid "please provide either order_uuid or order_hr_id - mutually exclusive"
-msgstr ""
-"กรุณาให้ order_uuid หรือ order_hr_id - ต้องเลือกอย่างใดอย่างหนึ่งเท่านั้น!"
+msgstr "กรุณาให้ order_uuid หรือ order_hr_id - ต้องเลือกอย่างใดอย่างหนึ่งเท่านั้น!"
-#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501
-#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712
+#: engine/core/graphene/mutations.py:250 engine/core/graphene/mutations.py:525
+#: engine/core/graphene/mutations.py:574 engine/core/viewsets.py:753
msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr "ประเภทไม่ถูกต้องมาจากเมธอด order.buy(): {type(instance)!s}"
-#: engine/core/graphene/mutations.py:245
+#: engine/core/graphene/mutations.py:261
msgid "perform an action on a list of products in the order"
msgstr "ดำเนินการกับรายการสินค้าในลำดับ"
-#: engine/core/graphene/mutations.py:250
+#: engine/core/graphene/mutations.py:266
msgid "remove/add"
msgstr "ลบ/เพิ่ม"
-#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323
+#: engine/core/graphene/mutations.py:302 engine/core/graphene/mutations.py:343
msgid "action must be either add or remove"
msgstr "การกระทำต้องเป็น \"เพิ่ม\" หรือ \"ลบ\"!"
-#: engine/core/graphene/mutations.py:293
+#: engine/core/graphene/mutations.py:313
msgid "perform an action on a list of products in the wishlist"
msgstr "ดำเนินการกับรายการสินค้าในรายการสินค้าที่ต้องการ"
-#: engine/core/graphene/mutations.py:311
+#: engine/core/graphene/mutations.py:331
msgid "please provide wishlist_uuid value"
msgstr "กรุณาให้ค่า `wishlist_uuid`"
-#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404
-#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460
-#: engine/core/graphene/mutations.py:504
+#: engine/core/graphene/mutations.py:348 engine/core/graphene/mutations.py:424
+#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480
+#: engine/core/graphene/mutations.py:530
#, python-brace-format
msgid "wishlist {wishlist_uuid} not found"
msgstr "รายการที่อยากได้ {wishlist_uuid} ไม่พบ!"
-#: engine/core/graphene/mutations.py:382
+#: engine/core/graphene/mutations.py:402
msgid "add a product to the wishlist"
msgstr "เพิ่มสินค้าในคำสั่งซื้อ"
-#: engine/core/graphene/mutations.py:410
+#: engine/core/graphene/mutations.py:430
msgid "remove a product from the wishlist"
msgstr "ลบสินค้าออกจากคำสั่งซื้อ"
-#: engine/core/graphene/mutations.py:438
+#: engine/core/graphene/mutations.py:458
msgid "remove all products from the wishlist"
msgstr "ลบสินค้าออกจากคำสั่งซื้อ"
-#: engine/core/graphene/mutations.py:466
+#: engine/core/graphene/mutations.py:486
msgid "buy all products from the wishlist"
msgstr "ลบสินค้าออกจากคำสั่งซื้อ"
-#: engine/core/graphene/mutations.py:510
+#: engine/core/graphene/mutations.py:536
msgid "buy a product"
msgstr "ซื้อคำสั่ง"
-#: engine/core/graphene/mutations.py:516
+#: engine/core/graphene/mutations.py:543
msgid ""
-"please send the attributes as the string formatted like "
-"attr1=value1,attr2=value2"
-msgstr ""
-"กรุณาส่งแอตทริบิวต์ในรูปแบบสตริงที่จัดรูปแบบดังนี้ attr1=value1,attr2=value2"
+"please send the attributes as the string formatted like attr1=value1,"
+"attr2=value2"
+msgstr "กรุณาส่งแอตทริบิวต์ในรูปแบบสตริงที่จัดรูปแบบดังนี้ attr1=value1,attr2=value2"
-#: engine/core/graphene/mutations.py:549
+#: engine/core/graphene/mutations.py:581
msgid "add or delete a feedback for orderproduct"
msgstr "เพิ่มหรือลบความคิดเห็นสำหรับสินค้าที่สั่งซื้อ"
-#: engine/core/graphene/mutations.py:573
+#: engine/core/graphene/mutations.py:607
msgid "action must be either `add` or `remove`"
msgstr "การกระทำต้องเป็น `add` หรือ `remove` เท่านั้น!"
-#: engine/core/graphene/mutations.py:576
+#: engine/core/graphene/mutations.py:610
#, python-brace-format
msgid "order product {order_product_uuid} not found"
msgstr "ไม่พบคำสั่งซื้อสินค้า {order_product_uuid}!"
-#: engine/core/graphene/mutations.py:582
+#: engine/core/graphene/mutations.py:617
msgid "original address string provided by the user"
msgstr "สตริงที่อยู่ต้นฉบับที่ผู้ใช้ให้มา"
-#: engine/core/graphene/mutations.py:618 engine/core/models.py:955
-#: engine/core/models.py:968 engine/core/models.py:1383
-#: engine/core/models.py:1412 engine/core/models.py:1437
-#: engine/core/viewsets.py:715
+#: engine/core/graphene/mutations.py:654 engine/core/models.py:978
+#: engine/core/models.py:991 engine/core/models.py:1435
+#: engine/core/models.py:1466 engine/core/models.py:1497
+#: engine/core/viewsets.py:760
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr "{name} ไม่พบ: {uuid}!"
-#: engine/core/graphene/mutations.py:632
+#: engine/core/graphene/mutations.py:668
msgid "limit must be between 1 and 10"
msgstr "ต้องอยู่ระหว่าง 1 ถึง 10"
-#: engine/core/graphene/mutations.py:681
+#: engine/core/graphene/mutations.py:717
msgid "elasticsearch - works like a charm"
msgstr "ElasticSearch - ทำงานได้อย่างยอดเยี่ยม"
#: engine/core/graphene/object_types.py:82
-#: engine/core/graphene/object_types.py:370
-#: engine/core/graphene/object_types.py:417 engine/core/models.py:772
-#: engine/core/models.py:1250 engine/core/models.py:1897
+#: engine/core/graphene/object_types.py:417
+#: engine/core/graphene/object_types.py:468 engine/core/models.py:795
+#: engine/core/models.py:1289 engine/core/models.py:2021
msgid "attributes"
msgstr "คุณลักษณะ"
@@ -1251,88 +1209,87 @@ msgid "groups of attributes"
msgstr "กลุ่มของลักษณะ"
#: engine/core/graphene/object_types.py:116
-#: engine/core/graphene/object_types.py:193
-#: engine/core/graphene/object_types.py:223 engine/core/models.py:432
+#: engine/core/graphene/object_types.py:214
+#: engine/core/graphene/object_types.py:252 engine/core/models.py:451
msgid "categories"
msgstr "หมวดหมู่"
-#: engine/core/graphene/object_types.py:124 engine/core/models.py:503
+#: engine/core/graphene/object_types.py:132 engine/core/models.py:522
msgid "brands"
msgstr "แบรนด์"
-#: engine/core/graphene/object_types.py:195
+#: engine/core/graphene/object_types.py:216
msgid "category image url"
msgstr "หมวดหมู่"
-#: engine/core/graphene/object_types.py:196
-#: engine/core/graphene/object_types.py:317 engine/core/models.py:283
+#: engine/core/graphene/object_types.py:217
+#: engine/core/graphene/object_types.py:362 engine/core/models.py:289
msgid "markup percentage"
msgstr "เปอร์เซ็นต์มาร์กอัป"
-#: engine/core/graphene/object_types.py:199
+#: engine/core/graphene/object_types.py:221
msgid "which attributes and values can be used for filtering this category."
msgstr "คุณลักษณะและคุณค่าใดที่สามารถใช้สำหรับกรองหมวดหมู่นี้ได้"
-#: engine/core/graphene/object_types.py:203
-msgid ""
-"minimum and maximum prices for products in this category, if available."
+#: engine/core/graphene/object_types.py:227
+msgid "minimum and maximum prices for products in this category, if available."
msgstr "ราคาต่ำสุดและราคาสูงสุดสำหรับสินค้าในหมวดนี้ (หากมี)"
-#: engine/core/graphene/object_types.py:205
+#: engine/core/graphene/object_types.py:231
msgid "tags for this category"
msgstr "แท็กสำหรับหมวดหมู่นี้"
-#: engine/core/graphene/object_types.py:206
+#: engine/core/graphene/object_types.py:234
msgid "products in this category"
msgstr "สินค้าในหมวดหมู่"
-#: engine/core/graphene/object_types.py:324 engine/core/models.py:188
+#: engine/core/graphene/object_types.py:369 engine/core/models.py:194
msgid "vendors"
msgstr "ผู้ขาย"
-#: engine/core/graphene/object_types.py:328
+#: engine/core/graphene/object_types.py:373
msgid "Latitude (Y coordinate)"
msgstr "ละติจูด (พิกัด Y)"
-#: engine/core/graphene/object_types.py:329
+#: engine/core/graphene/object_types.py:374
msgid "Longitude (X coordinate)"
msgstr "ลองจิจูด (พิกัด X)"
-#: engine/core/graphene/object_types.py:358
+#: engine/core/graphene/object_types.py:403
msgid "comment"
msgstr "อย่างไร"
-#: engine/core/graphene/object_types.py:359
-#: engine/core/graphene/object_types.py:483
+#: engine/core/graphene/object_types.py:405
+#: engine/core/graphene/object_types.py:539
msgid "rating value from 1 to 10, inclusive, or 0 if not set."
msgstr "ให้คะแนนตั้งแต่ 1 ถึง 10 รวมทั้งสองค่า หรือ 0 หากไม่ได้กำหนด"
-#: engine/core/graphene/object_types.py:366
+#: engine/core/graphene/object_types.py:413
msgid "represents feedback from a user."
msgstr "แสดงความคิดเห็นจากผู้ใช้"
-#: engine/core/graphene/object_types.py:371
-#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244
+#: engine/core/graphene/object_types.py:418
+#: engine/core/graphene/object_types.py:469 engine/core/models.py:1283
msgid "notifications"
msgstr "การแจ้งเตือน"
-#: engine/core/graphene/object_types.py:372
+#: engine/core/graphene/object_types.py:420
msgid "download url for this order product if applicable"
msgstr "ดาวน์โหลด url สำหรับคำสั่งซื้อสินค้านี้ หากมี"
-#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736
+#: engine/core/graphene/object_types.py:422 engine/core/models.py:1848
msgid "feedback"
msgstr "ข้อเสนอแนะ"
-#: engine/core/graphene/object_types.py:407
+#: engine/core/graphene/object_types.py:456
msgid "a list of order products in this order"
msgstr "รายการสินค้าที่สั่งซื้อในคำสั่งซื้อนี้"
-#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214
+#: engine/core/graphene/object_types.py:458 engine/core/models.py:1253
msgid "billing address"
msgstr "ที่อยู่สำหรับออกใบแจ้งหนี้"
-#: engine/core/graphene/object_types.py:412
+#: engine/core/graphene/object_types.py:462
msgid ""
"shipping address for this order, leave blank if same as billing address or "
"if not applicable"
@@ -1340,53 +1297,53 @@ msgstr ""
"ที่อยู่สำหรับจัดส่งสำหรับคำสั่งซื้อนี้, "
"ปล่อยว่างไว้หากเป็นที่อยู่เดียวกับที่อยู่สำหรับเรียกเก็บเงินหรือหากไม่เกี่ยวข้อง"
-#: engine/core/graphene/object_types.py:414
+#: engine/core/graphene/object_types.py:465
msgid "total price of this order"
msgstr "ราคาทั้งหมดของคำสั่งซื้อนี้"
-#: engine/core/graphene/object_types.py:415
+#: engine/core/graphene/object_types.py:466
msgid "total quantity of products in order"
msgstr "จำนวนรวมของผลิตภัณฑ์ในคำสั่งซื้อ"
-#: engine/core/graphene/object_types.py:416
+#: engine/core/graphene/object_types.py:467
msgid "are all products in the order digital"
msgstr "สินค้าทั้งหมดในคำสั่งซื้อนี้เป็นสินค้าดิจิทัลหรือไม่"
-#: engine/core/graphene/object_types.py:419
+#: engine/core/graphene/object_types.py:471
msgid "transactions for this order"
msgstr "รายการธุรกรรมสำหรับคำสั่งนี้"
-#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278
+#: engine/core/graphene/object_types.py:491 engine/core/models.py:1317
msgid "orders"
msgstr "คำสั่ง"
-#: engine/core/graphene/object_types.py:459
+#: engine/core/graphene/object_types.py:512
msgid "image url"
msgstr "URL ของรูปภาพ"
-#: engine/core/graphene/object_types.py:466
+#: engine/core/graphene/object_types.py:519
msgid "product's images"
msgstr "รูปภาพของสินค้า"
-#: engine/core/graphene/object_types.py:473 engine/core/models.py:431
-#: engine/core/models.py:586
+#: engine/core/graphene/object_types.py:526 engine/core/models.py:450
+#: engine/core/models.py:607
msgid "category"
msgstr "หมวดหมู่"
-#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737
+#: engine/core/graphene/object_types.py:528 engine/core/models.py:1849
msgid "feedbacks"
msgstr "ข้อเสนอแนะ"
-#: engine/core/graphene/object_types.py:476 engine/core/models.py:502
-#: engine/core/models.py:595
+#: engine/core/graphene/object_types.py:529 engine/core/models.py:521
+#: engine/core/models.py:616
msgid "brand"
msgstr "แบรนด์"
-#: engine/core/graphene/object_types.py:477 engine/core/models.py:106
+#: engine/core/graphene/object_types.py:531 engine/core/models.py:106
msgid "attribute groups"
msgstr "กลุ่มคุณลักษณะ"
-#: engine/core/graphene/object_types.py:478
+#: engine/core/graphene/object_types.py:533
#: engine/core/templates/digital_order_created_email.html:111
#: engine/core/templates/digital_order_delivered_email.html:109
#: engine/core/templates/shipped_order_created_email.html:109
@@ -1394,7 +1351,7 @@ msgstr "กลุ่มคุณลักษณะ"
msgid "price"
msgstr "ราคา"
-#: engine/core/graphene/object_types.py:479
+#: engine/core/graphene/object_types.py:534
#: engine/core/templates/digital_order_created_email.html:110
#: engine/core/templates/digital_order_delivered_email.html:108
#: engine/core/templates/shipped_order_created_email.html:108
@@ -1402,39 +1359,39 @@ msgstr "ราคา"
msgid "quantity"
msgstr "ปริมาณ"
-#: engine/core/graphene/object_types.py:480
+#: engine/core/graphene/object_types.py:535
msgid "number of feedbacks"
msgstr "จำนวนความคิดเห็น"
-#: engine/core/graphene/object_types.py:481
+#: engine/core/graphene/object_types.py:536
msgid "only available for personal orders"
msgstr "สินค้าที่มีจำหน่ายเฉพาะการสั่งซื้อส่วนบุคคลเท่านั้น"
-#: engine/core/graphene/object_types.py:484
+#: engine/core/graphene/object_types.py:541
msgid "discount price"
msgstr "ราคาลดพิเศษ"
-#: engine/core/graphene/object_types.py:508 engine/core/models.py:658
+#: engine/core/graphene/object_types.py:565 engine/core/models.py:679
msgid "products"
msgstr "ผลิตภัณฑ์"
-#: engine/core/graphene/object_types.py:611
+#: engine/core/graphene/object_types.py:675
msgid "promocodes"
msgstr "รหัสส่งเสริมการขาย"
-#: engine/core/graphene/object_types.py:621
+#: engine/core/graphene/object_types.py:690
msgid "products on sale"
msgstr "สินค้าลดราคา"
-#: engine/core/graphene/object_types.py:628 engine/core/models.py:904
+#: engine/core/graphene/object_types.py:698 engine/core/models.py:927
msgid "promotions"
msgstr "โปรโมชั่น"
-#: engine/core/graphene/object_types.py:632 engine/core/models.py:187
+#: engine/core/graphene/object_types.py:702 engine/core/models.py:193
msgid "vendor"
msgstr "ผู้ขาย"
-#: engine/core/graphene/object_types.py:633 engine/core/models.py:657
+#: engine/core/graphene/object_types.py:703 engine/core/models.py:678
#: engine/core/templates/digital_order_created_email.html:109
#: engine/core/templates/digital_order_delivered_email.html:107
#: engine/core/templates/shipped_order_created_email.html:107
@@ -1442,98 +1399,98 @@ msgstr "ผู้ขาย"
msgid "product"
msgstr "สินค้า"
-#: engine/core/graphene/object_types.py:644 engine/core/models.py:927
+#: engine/core/graphene/object_types.py:715 engine/core/models.py:950
msgid "wishlisted products"
msgstr "สินค้าที่อยู่ในรายการต้องการ"
-#: engine/core/graphene/object_types.py:650 engine/core/models.py:944
+#: engine/core/graphene/object_types.py:722 engine/core/models.py:967
msgid "wishlists"
msgstr "รายการสิ่งที่ต้องการ"
-#: engine/core/graphene/object_types.py:654
+#: engine/core/graphene/object_types.py:727
msgid "tagged products"
msgstr "สินค้าที่ติดแท็ก"
-#: engine/core/graphene/object_types.py:661 engine/core/models.py:224
-#: engine/core/models.py:601
+#: engine/core/graphene/object_types.py:735 engine/core/models.py:230
+#: engine/core/models.py:622
msgid "product tags"
msgstr "แท็กสินค้า"
-#: engine/core/graphene/object_types.py:665
+#: engine/core/graphene/object_types.py:740
msgid "tagged categories"
msgstr "หมวดหมู่ที่ถูกติดแท็ก"
-#: engine/core/graphene/object_types.py:672
+#: engine/core/graphene/object_types.py:748
msgid "categories tags"
msgstr "หมวดหมู่' แท็ก"
-#: engine/core/graphene/object_types.py:676
+#: engine/core/graphene/object_types.py:752
msgid "project name"
msgstr "ชื่อโครงการ"
-#: engine/core/graphene/object_types.py:677
+#: engine/core/graphene/object_types.py:753
msgid "company name"
msgstr "ชื่อบริษัท"
-#: engine/core/graphene/object_types.py:678
+#: engine/core/graphene/object_types.py:754
msgid "company address"
msgstr "ที่อยู่บริษัท"
-#: engine/core/graphene/object_types.py:679
+#: engine/core/graphene/object_types.py:755
msgid "company phone number"
msgstr "หมายเลขโทรศัพท์บริษัท"
-#: engine/core/graphene/object_types.py:680
+#: engine/core/graphene/object_types.py:758
msgid "email from, sometimes it must be used instead of host user value"
msgstr "'อีเมลจาก', บางครั้งจำเป็นต้องใช้แทนค่าผู้ใช้โฮสต์"
-#: engine/core/graphene/object_types.py:681
+#: engine/core/graphene/object_types.py:761
msgid "email host user"
msgstr "ผู้ใช้โฮสต์อีเมล"
-#: engine/core/graphene/object_types.py:682
+#: engine/core/graphene/object_types.py:762
msgid "maximum amount for payment"
msgstr "จำนวนเงินสูงสุดสำหรับการชำระเงิน"
-#: engine/core/graphene/object_types.py:683
+#: engine/core/graphene/object_types.py:763
msgid "minimum amount for payment"
msgstr "จำนวนเงินขั้นต่ำสำหรับการชำระเงิน"
-#: engine/core/graphene/object_types.py:684
+#: engine/core/graphene/object_types.py:764
msgid "analytics data"
msgstr "ข้อมูลการวิเคราะห์"
-#: engine/core/graphene/object_types.py:685
+#: engine/core/graphene/object_types.py:765
msgid "advertisement data"
msgstr "ข้อมูลโฆษณา"
-#: engine/core/graphene/object_types.py:688
+#: engine/core/graphene/object_types.py:768
msgid "company configuration"
msgstr "การกำหนดค่า"
-#: engine/core/graphene/object_types.py:692
+#: engine/core/graphene/object_types.py:772
msgid "language code"
msgstr "รหัสภาษา"
-#: engine/core/graphene/object_types.py:693
+#: engine/core/graphene/object_types.py:773
msgid "language name"
msgstr "ชื่อภาษา"
-#: engine/core/graphene/object_types.py:694
+#: engine/core/graphene/object_types.py:774
msgid "language flag, if exists :)"
msgstr "ธงภาษา, หากมีอยู่ :)"
-#: engine/core/graphene/object_types.py:697
+#: engine/core/graphene/object_types.py:777
msgid "supported languages"
msgstr "รับรายการภาษาที่รองรับ"
-#: engine/core/graphene/object_types.py:728
-#: engine/core/graphene/object_types.py:729
-#: engine/core/graphene/object_types.py:730
+#: engine/core/graphene/object_types.py:809
+#: engine/core/graphene/object_types.py:812
+#: engine/core/graphene/object_types.py:815
msgid "products search results"
msgstr "ผลการค้นหาสินค้า"
-#: engine/core/graphene/object_types.py:731
+#: engine/core/graphene/object_types.py:817
msgid "posts search results"
msgstr "ผลการค้นหาสินค้า"
@@ -1544,8 +1501,7 @@ msgid ""
"parent group, forming a hierarchical structure. This can be useful for "
"categorizing and managing attributes more effectively in acomplex system."
msgstr ""
-"แทนกลุ่มของแอตทริบิวต์ ซึ่งสามารถมีลำดับชั้นได้ "
-"คลาสนี้ใช้เพื่อจัดการและจัดระเบียบกลุ่มแอตทริบิวต์ "
+"แทนกลุ่มของแอตทริบิวต์ ซึ่งสามารถมีลำดับชั้นได้ คลาสนี้ใช้เพื่อจัดการและจัดระเบียบกลุ่มแอตทริบิวต์ "
"กลุ่มแอตทริบิวต์สามารถมีกลุ่มแม่ได้ ทำให้เกิดโครงสร้างลำดับชั้น "
"ซึ่งสามารถมีประโยชน์ในการจัดหมวดหมู่และจัดการแอตทริบิวต์ได้อย่างมีประสิทธิภาพมากขึ้นในระบบที่ซับซ้อน"
@@ -1561,7 +1517,7 @@ msgstr "กลุ่มแอตทริบิวต์ของพ่อแม
msgid "attribute group's name"
msgstr "ชื่อกลุ่มคุณสมบัติ"
-#: engine/core/models.py:105 engine/core/models.py:734
+#: engine/core/models.py:105 engine/core/models.py:755
msgid "attribute group"
msgstr "กลุ่มคุณลักษณะ"
@@ -1575,55 +1531,54 @@ msgid ""
"also maintains additional metadata and constraints, making it suitable for "
"use in systems that interact with third-party vendors."
msgstr ""
-"แทนหน่วยงานผู้ขายที่สามารถจัดเก็บข้อมูลเกี่ยวกับผู้ขายภายนอกและข้อกำหนดในการโต้ตอบของพวกเขาได้"
-" คลาสผู้ขายถูกใช้เพื่อกำหนดและจัดการข้อมูลที่เกี่ยวข้องกับผู้ขายภายนอก "
-"มันจัดเก็บชื่อผู้ขาย รายละเอียดการตรวจสอบสิทธิ์ที่จำเป็นสำหรับการสื่อสาร "
+"แทนหน่วยงานผู้ขายที่สามารถจัดเก็บข้อมูลเกี่ยวกับผู้ขายภายนอกและข้อกำหนดในการโต้ตอบของพวกเขาได้ "
+"คลาสผู้ขายถูกใช้เพื่อกำหนดและจัดการข้อมูลที่เกี่ยวข้องกับผู้ขายภายนอก มันจัดเก็บชื่อผู้ขาย "
+"รายละเอียดการตรวจสอบสิทธิ์ที่จำเป็นสำหรับการสื่อสาร "
"และเปอร์เซ็นต์การเพิ่มราคาที่นำไปใช้กับสินค้าที่นำมาจากผู้ขาย "
"โมเดลนี้ยังรักษาข้อมูลเมตาเพิ่มเติมและข้อจำกัด "
"ทำให้เหมาะสำหรับการใช้งานในระบบที่มีการโต้ตอบกับผู้ขายภายนอก"
-#: engine/core/models.py:124
-msgid "stores credentials and endpoints required for vendor communication"
-msgstr ""
-"เก็บรักษาข้อมูลประจำตัวและจุดสิ้นสุดที่จำเป็นสำหรับการสื่อสาร API ของผู้ขาย"
-
#: engine/core/models.py:125
+msgid "stores credentials and endpoints required for vendor communication"
+msgstr "เก็บรักษาข้อมูลประจำตัวและจุดสิ้นสุดที่จำเป็นสำหรับการสื่อสาร API ของผู้ขาย"
+
+#: engine/core/models.py:127
msgid "authentication info"
msgstr "ข้อมูลการยืนยันตัวตน"
-#: engine/core/models.py:130
+#: engine/core/models.py:132
msgid "define the markup for products retrieved from this vendor"
msgstr "กำหนดมาร์กอัปสำหรับสินค้าที่ดึงมาจากผู้ขายรายนี้"
-#: engine/core/models.py:131
+#: engine/core/models.py:133
msgid "vendor markup percentage"
msgstr "เปอร์เซ็นต์การบวกกำไรของผู้ขาย"
-#: engine/core/models.py:135
+#: engine/core/models.py:137
msgid "name of this vendor"
msgstr "ชื่อของผู้ขายนี้"
-#: engine/core/models.py:136
+#: engine/core/models.py:138
msgid "vendor name"
msgstr "ชื่อผู้ขาย"
-#: engine/core/models.py:147
+#: engine/core/models.py:153
msgid "response file"
msgstr "ไฟล์การตอบสนอง"
-#: engine/core/models.py:148
+#: engine/core/models.py:154
msgid "vendor's last processing response"
msgstr "การตอบกลับการประมวลผลครั้งสุดท้ายของผู้ขาย"
-#: engine/core/models.py:154
+#: engine/core/models.py:160
msgid "vendor's integration file path"
msgstr "เส้นทางไฟล์การรวมของผู้ขาย"
-#: engine/core/models.py:155
+#: engine/core/models.py:161
msgid "integration path"
msgstr "เส้นทางการบูรณาการ"
-#: engine/core/models.py:197
+#: engine/core/models.py:203
msgid ""
"Represents a product tag used for classifying or identifying products. The "
"ProductTag class is designed to uniquely identify and classify products "
@@ -1632,31 +1587,31 @@ msgid ""
"metadata customization for administrative purposes."
msgstr ""
"แทนแท็กผลิตภัณฑ์ที่ใช้ในการจัดประเภทหรือระบุผลิตภัณฑ์ คลาส ProductTag "
-"ถูกออกแบบมาเพื่อระบุและจัดประเภทผลิตภัณฑ์อย่างเป็นเอกลักษณ์ผ่านการรวมกันของตัวระบุแท็กภายในและชื่อแสดงผลที่ใช้งานง่าย"
-" รองรับการดำเนินการที่ส่งออกผ่าน mixins "
+"ถูกออกแบบมาเพื่อระบุและจัดประเภทผลิตภัณฑ์อย่างเป็นเอกลักษณ์ผ่านการรวมกันของตัวระบุแท็กภายในและชื่อแสดงผลที่ใช้งานง่าย "
+"รองรับการดำเนินการที่ส่งออกผ่าน mixins "
"และให้การปรับแต่งเมตาดาต้าสำหรับวัตถุประสงค์ในการบริหารจัดการ"
-#: engine/core/models.py:209 engine/core/models.py:240
+#: engine/core/models.py:215 engine/core/models.py:246
msgid "internal tag identifier for the product tag"
msgstr "ตัวระบุแท็กภายในสำหรับแท็กสินค้า"
-#: engine/core/models.py:210 engine/core/models.py:241
+#: engine/core/models.py:216 engine/core/models.py:247
msgid "tag name"
msgstr "ชื่อวัน"
-#: engine/core/models.py:214 engine/core/models.py:245
+#: engine/core/models.py:220 engine/core/models.py:251
msgid "user-friendly name for the product tag"
msgstr "ชื่อที่เป็นมิตรกับผู้ใช้สำหรับแท็กสินค้า"
-#: engine/core/models.py:215 engine/core/models.py:246
+#: engine/core/models.py:221 engine/core/models.py:252
msgid "tag display name"
msgstr "แสดงชื่อแท็ก"
-#: engine/core/models.py:223
+#: engine/core/models.py:229
msgid "product tag"
msgstr "แท็กสินค้า"
-#: engine/core/models.py:229
+#: engine/core/models.py:235
msgid ""
"Represents a category tag used for products. This class models a category "
"tag that can be used to associate and classify products. It includes "
@@ -1666,15 +1621,15 @@ msgstr ""
"คลาสนี้จำลองแท็กหมวดหมู่ที่สามารถใช้เพื่อเชื่อมโยงและจัดประเภทผลิตภัณฑ์ได้ "
"รวมถึงแอตทริบิวต์สำหรับตัวระบุแท็กภายในและชื่อแสดงผลที่เป็นมิตรกับผู้ใช้"
-#: engine/core/models.py:254
+#: engine/core/models.py:260
msgid "category tag"
msgstr "แท็กหมวดหมู่"
-#: engine/core/models.py:255 engine/core/models.py:327
+#: engine/core/models.py:261 engine/core/models.py:333
msgid "category tags"
msgstr "แท็กหมวดหมู่"
-#: engine/core/models.py:260
+#: engine/core/models.py:266
msgid ""
"Represents a category entity to organize and group related items in a "
"hierarchical structure. Categories may have hierarchical relationships with "
@@ -1686,192 +1641,190 @@ msgid ""
"hierarchy of categories, as well as assign attributes like images, tags, or "
"priority."
msgstr ""
-"แทนถึงเอนทิตีประเภทเพื่อจัดระเบียบและจัดกลุ่มรายการที่เกี่ยวข้องในโครงสร้างลำดับชั้น"
-" หมวดหมู่สามารถมีความสัมพันธ์ลำดับชั้นกับหมวดหมู่อื่น ๆ ได้ "
-"ซึ่งสนับสนุนความสัมพันธ์แบบพ่อแม่-ลูกคลาสนี้ประกอบด้วยฟิลด์สำหรับข้อมูลเมตาและตัวแทนภาพ"
-" ซึ่งทำหน้าที่เป็นพื้นฐานสำหรับคุณสมบัติที่เกี่ยวข้องกับหมวดหมู่ "
-"คลาสนี้มักใช้เพื่อกำหนดและจัดการหมวดหมู่สินค้าหรือการจัดกลุ่มที่คล้ายกันภายในแอปพลิเคชัน"
-" ช่วยให้ผู้ใช้หรือผู้ดูแลระบบสามารถระบุชื่อ คำอธิบาย และลำดับชั้นของหมวดหมู่"
-" รวมถึงกำหนดคุณลักษณะต่างๆ เช่น รูปภาพ แท็ก หรือความสำคัญ"
+"แทนถึงเอนทิตีประเภทเพื่อจัดระเบียบและจัดกลุ่มรายการที่เกี่ยวข้องในโครงสร้างลำดับชั้น "
+"หมวดหมู่สามารถมีความสัมพันธ์ลำดับชั้นกับหมวดหมู่อื่น ๆ ได้ ซึ่งสนับสนุนความสัมพันธ์แบบพ่อแม่-"
+"ลูกคลาสนี้ประกอบด้วยฟิลด์สำหรับข้อมูลเมตาและตัวแทนภาพ "
+"ซึ่งทำหน้าที่เป็นพื้นฐานสำหรับคุณสมบัติที่เกี่ยวข้องกับหมวดหมู่ "
+"คลาสนี้มักใช้เพื่อกำหนดและจัดการหมวดหมู่สินค้าหรือการจัดกลุ่มที่คล้ายกันภายในแอปพลิเคชัน "
+"ช่วยให้ผู้ใช้หรือผู้ดูแลระบบสามารถระบุชื่อ คำอธิบาย และลำดับชั้นของหมวดหมู่ "
+"รวมถึงกำหนดคุณลักษณะต่างๆ เช่น รูปภาพ แท็ก หรือความสำคัญ"
-#: engine/core/models.py:274
+#: engine/core/models.py:280
msgid "upload an image representing this category"
msgstr "อัปโหลดรูปภาพที่แสดงถึงหมวดหมู่นี้"
-#: engine/core/models.py:277
+#: engine/core/models.py:283
msgid "category image"
msgstr "ภาพหมวดหมู่"
-#: engine/core/models.py:282
+#: engine/core/models.py:288
msgid "define a markup percentage for products in this category"
msgstr "กำหนดเปอร์เซ็นต์มาร์กอัปสำหรับสินค้าในหมวดหมู่นี้"
-#: engine/core/models.py:291
+#: engine/core/models.py:297
msgid "parent of this category to form a hierarchical structure"
msgstr "ผู้ปกครองของหมวดหมู่นี้เพื่อสร้างโครงสร้างลำดับชั้น"
-#: engine/core/models.py:292
+#: engine/core/models.py:298
msgid "parent category"
msgstr "หมวดหมู่หลัก"
-#: engine/core/models.py:297
+#: engine/core/models.py:303
msgid "category name"
msgstr "ชื่อหมวดหมู่"
-#: engine/core/models.py:298
+#: engine/core/models.py:304
msgid "provide a name for this category"
msgstr "กรุณาตั้งชื่อสำหรับหมวดหมู่นี้"
-#: engine/core/models.py:305
+#: engine/core/models.py:311
msgid "add a detailed description for this category"
msgstr "เพิ่มคำอธิบายโดยละเอียดสำหรับหมวดหมู่นี้"
-#: engine/core/models.py:306
+#: engine/core/models.py:312
msgid "category description"
msgstr "หมวดหมู่คำอธิบาย"
-#: engine/core/models.py:326
+#: engine/core/models.py:332
msgid "tags that help describe or group this category"
msgstr "แท็กที่ช่วยอธิบายหรือจัดกลุ่มหมวดหมู่นี้"
-#: engine/core/models.py:333 engine/core/models.py:495
+#: engine/core/models.py:339 engine/core/models.py:514
msgid "priority"
msgstr "ลำดับความสำคัญ"
-#: engine/core/models.py:438
+#: engine/core/models.py:457
msgid ""
"Represents a Brand object in the system. This class handles information and "
"attributes related to a brand, including its name, logos, description, "
"associated categories, a unique slug, and priority order. It allows for the "
-"organization and representation of brand-related data within the "
-"application."
+"organization and representation of brand-related data within the application."
msgstr ""
-"แทนวัตถุแบรนด์ในระบบ คลาสนี้จัดการข้อมูลและคุณลักษณะที่เกี่ยวข้องกับแบรนด์ "
-"รวมถึงชื่อ โลโก้ คำอธิบาย หมวดหมู่ที่เกี่ยวข้อง สลักเฉพาะ และลำดับความสำคัญ "
+"แทนวัตถุแบรนด์ในระบบ คลาสนี้จัดการข้อมูลและคุณลักษณะที่เกี่ยวข้องกับแบรนด์ รวมถึงชื่อ โลโก้ "
+"คำอธิบาย หมวดหมู่ที่เกี่ยวข้อง สลักเฉพาะ และลำดับความสำคัญ "
"ช่วยให้สามารถจัดระเบียบและแสดงข้อมูลที่เกี่ยวข้องกับแบรนด์ภายในแอปพลิเคชันได้"
-#: engine/core/models.py:448
+#: engine/core/models.py:467
msgid "name of this brand"
msgstr "ชื่อของแบรนด์นี้"
-#: engine/core/models.py:449
+#: engine/core/models.py:468
msgid "brand name"
msgstr "ชื่อแบรนด์"
-#: engine/core/models.py:456
+#: engine/core/models.py:475
msgid "upload a logo representing this brand"
msgstr "อัปโหลดโลโก้ที่เป็นตัวแทนของแบรนด์นี้"
-#: engine/core/models.py:458
+#: engine/core/models.py:477
msgid "brand small image"
msgstr "แบรนด์รูปภาพขนาดเล็ก"
-#: engine/core/models.py:464
+#: engine/core/models.py:483
msgid "upload a big logo representing this brand"
msgstr "อัปโหลดโลโก้ขนาดใหญ่ที่เป็นตัวแทนของแบรนด์นี้"
-#: engine/core/models.py:466
+#: engine/core/models.py:485
msgid "brand big image"
msgstr "แบรนด์ภาพใหญ่"
-#: engine/core/models.py:471
+#: engine/core/models.py:490
msgid "add a detailed description of the brand"
msgstr "เพิ่มคำอธิบายรายละเอียดของแบรนด์"
-#: engine/core/models.py:472
+#: engine/core/models.py:491
msgid "brand description"
msgstr "คำอธิบายแบรนด์"
-#: engine/core/models.py:477
+#: engine/core/models.py:496
msgid "optional categories that this brand is associated with"
msgstr "หมวดหมู่เพิ่มเติมที่แบรนด์นี้เกี่ยวข้อง"
-#: engine/core/models.py:478
+#: engine/core/models.py:497
msgid "associated categories"
msgstr "หมวดหมู่"
-#: engine/core/models.py:508
+#: engine/core/models.py:527
msgid ""
-"Represents the stock of a product managed in the system. This class provides"
-" details about the relationship between vendors, products, and their stock "
+"Represents the stock of a product managed in the system. This class provides "
+"details about the relationship between vendors, products, and their stock "
"information, as well as inventory-related properties like price, purchase "
"price, quantity, SKU, and digital assets. It is part of the inventory "
"management system to allow tracking and evaluation of products available "
"from various vendors."
msgstr ""
-"แสดงถึงสต็อกของสินค้าที่จัดการในระบบ "
-"คลาสนี้ให้รายละเอียดเกี่ยวกับความสัมพันธ์ระหว่างผู้จำหน่าย, สินค้า, "
-"และข้อมูลสต็อกของพวกเขา รวมถึงคุณสมบัติที่เกี่ยวข้องกับสินค้าคงคลัง เช่น "
-"ราคา, ราคาซื้อ, จำนวน, รหัสสินค้า (SKU), และสินทรัพย์ดิจิทัล "
-"เป็นส่วนหนึ่งของระบบการจัดการสินค้าคงคลังเพื่อให้สามารถติดตามและประเมินสินค้าที่มีจากผู้จำหน่ายต่างๆ"
-" ได้"
+"แสดงถึงสต็อกของสินค้าที่จัดการในระบบ คลาสนี้ให้รายละเอียดเกี่ยวกับความสัมพันธ์ระหว่างผู้จำหน่าย, "
+"สินค้า, และข้อมูลสต็อกของพวกเขา รวมถึงคุณสมบัติที่เกี่ยวข้องกับสินค้าคงคลัง เช่น ราคา, ราคาซื้อ, "
+"จำนวน, รหัสสินค้า (SKU), และสินทรัพย์ดิจิทัล "
+"เป็นส่วนหนึ่งของระบบการจัดการสินค้าคงคลังเพื่อให้สามารถติดตามและประเมินสินค้าที่มีจากผู้จำหน่ายต่างๆ "
+"ได้"
-#: engine/core/models.py:520
+#: engine/core/models.py:539
msgid "the vendor supplying this product stock"
msgstr "ผู้จัดจำหน่ายที่จัดหาสินค้าคงคลังนี้"
-#: engine/core/models.py:521
+#: engine/core/models.py:540
msgid "associated vendor"
msgstr "ผู้ขายที่เกี่ยวข้อง"
-#: engine/core/models.py:525
+#: engine/core/models.py:544
msgid "final price to the customer after markups"
msgstr "ราคาสุดท้ายที่ลูกค้าต้องชำระหลังจากการบวกกำไร"
-#: engine/core/models.py:526
+#: engine/core/models.py:545
msgid "selling price"
msgstr "ราคาขาย"
-#: engine/core/models.py:531
+#: engine/core/models.py:550
msgid "the product associated with this stock entry"
msgstr "สินค้าที่เกี่ยวข้องกับรายการสินค้าคงคลังนี้"
-#: engine/core/models.py:532 engine/core/models.py:797
-#: engine/core/models.py:843 engine/core/models.py:1792
+#: engine/core/models.py:551 engine/core/models.py:820
+#: engine/core/models.py:866 engine/core/models.py:1904
msgid "associated product"
msgstr "ผลิตภัณฑ์ที่เกี่ยวข้อง"
-#: engine/core/models.py:539
+#: engine/core/models.py:558
msgid "the price paid to the vendor for this product"
msgstr "ราคาที่จ่ายให้กับผู้ขายสำหรับสินค้านี้"
-#: engine/core/models.py:540
+#: engine/core/models.py:559
msgid "vendor purchase price"
msgstr "ราคาซื้อจากผู้ขาย"
-#: engine/core/models.py:544
+#: engine/core/models.py:563
msgid "available quantity of the product in stock"
msgstr "จำนวนสินค้าที่มีในสต็อก"
-#: engine/core/models.py:545
+#: engine/core/models.py:564
msgid "quantity in stock"
msgstr "จำนวนในสต็อก"
-#: engine/core/models.py:549
+#: engine/core/models.py:568
msgid "vendor-assigned SKU for identifying the product"
msgstr "รหัสสินค้าที่ผู้ขายกำหนดเพื่อระบุตัวผลิตภัณฑ์"
-#: engine/core/models.py:550
+#: engine/core/models.py:569
msgid "vendor sku"
msgstr "รหัสสินค้าของผู้ขาย"
-#: engine/core/models.py:556
+#: engine/core/models.py:575
msgid "digital file associated with this stock if applicable"
msgstr "ไฟล์ดิจิทัลที่เกี่ยวข้องกับสต็อกนี้ หากมี"
-#: engine/core/models.py:557
+#: engine/core/models.py:576
msgid "digital file"
msgstr "ไฟล์ดิจิทัล"
-#: engine/core/models.py:560
+#: engine/core/models.py:580
msgid "system attributes"
msgstr "คุณลักษณะของระบบ"
-#: engine/core/models.py:567
+#: engine/core/models.py:588
msgid "stock entries"
msgstr "รายการสินค้าคงคลัง"
-#: engine/core/models.py:572
+#: engine/core/models.py:593
msgid ""
"Represents a product with attributes such as category, brand, tags, digital "
"status, name, description, part number, and slug. Provides related utility "
@@ -1882,382 +1835,373 @@ msgid ""
"properties to improve performance. It is used to define and manipulate "
"product data and its associated information within an application."
msgstr ""
-"แสดงถึงผลิตภัณฑ์ที่มีคุณลักษณะต่างๆ เช่น หมวดหมู่, แบรนด์, แท็ก, "
-"สถานะดิจิทัล, ชื่อ, คำอธิบาย, หมายเลขชิ้นส่วน, และ slug "
-"ให้คุณสมบัติประโยชน์ที่เกี่ยวข้องเพื่อดึงคะแนน, จำนวนความคิดเห็น, ราคา, "
-"จำนวนสินค้า, และยอดสั่งซื้อทั้งหมด "
+"แสดงถึงผลิตภัณฑ์ที่มีคุณลักษณะต่างๆ เช่น หมวดหมู่, แบรนด์, แท็ก, สถานะดิจิทัล, ชื่อ, คำอธิบาย, "
+"หมายเลขชิ้นส่วน, และ slug ให้คุณสมบัติประโยชน์ที่เกี่ยวข้องเพื่อดึงคะแนน, จำนวนความคิดเห็น, "
+"ราคา, จำนวนสินค้า, และยอดสั่งซื้อทั้งหมด "
"ออกแบบมาเพื่อใช้ในระบบที่จัดการอีคอมเมิร์ซหรือการจัดการสินค้าคงคลัง "
-"คลาสนี้โต้ตอบกับโมเดลที่เกี่ยวข้อง (เช่น หมวดหมู่, แบรนด์, และแท็กผลิตภัณฑ์)"
-" "
+"คลาสนี้โต้ตอบกับโมเดลที่เกี่ยวข้อง (เช่น หมวดหมู่, แบรนด์, และแท็กผลิตภัณฑ์) "
"และจัดการการแคชสำหรับคุณสมบัติที่เข้าถึงบ่อยเพื่อปรับปรุงประสิทธิภาพใช้เพื่อกำหนดและจัดการข้อมูลผลิตภัณฑ์และข้อมูลที่เกี่ยวข้องภายในแอปพลิเคชัน"
-#: engine/core/models.py:585
+#: engine/core/models.py:606
msgid "category this product belongs to"
msgstr "หมวดหมู่ที่สินค้านี้จัดอยู่ใน"
-#: engine/core/models.py:594
+#: engine/core/models.py:615
msgid "optionally associate this product with a brand"
msgstr "เลือกเชื่อมโยงผลิตภัณฑ์นี้กับแบรนด์"
-#: engine/core/models.py:600
+#: engine/core/models.py:621
msgid "tags that help describe or group this product"
msgstr "แท็กที่ช่วยอธิบายหรือจัดกลุ่มผลิตภัณฑ์นี้"
-#: engine/core/models.py:605
+#: engine/core/models.py:626
msgid "indicates whether this product is digitally delivered"
msgstr "บ่งชี้ว่าสินค้านี้จัดส่งในรูปแบบดิจิทัลหรือไม่"
-#: engine/core/models.py:606
+#: engine/core/models.py:627
msgid "is product digital"
msgstr "สินค้าเป็นดิจิทัล"
-#: engine/core/models.py:612
+#: engine/core/models.py:633
msgid "provide a clear identifying name for the product"
msgstr "ระบุชื่อที่ชัดเจนสำหรับผลิตภัณฑ์"
-#: engine/core/models.py:613
+#: engine/core/models.py:634
msgid "product name"
msgstr "ชื่อสินค้า"
-#: engine/core/models.py:619 engine/core/models.py:892
+#: engine/core/models.py:640 engine/core/models.py:915
msgid "add a detailed description of the product"
msgstr "เพิ่มคำอธิบายรายละเอียดของสินค้า"
-#: engine/core/models.py:620
+#: engine/core/models.py:641
msgid "product description"
msgstr "รายละเอียดสินค้า"
-#: engine/core/models.py:627
+#: engine/core/models.py:648
msgid "part number for this product"
msgstr "หมายเลขชิ้นส่วนสำหรับสินค้านี้"
-#: engine/core/models.py:628
+#: engine/core/models.py:649
msgid "part number"
msgstr "หมายเลขชิ้นส่วน"
-#: engine/core/models.py:647
+#: engine/core/models.py:668
msgid "stock keeping unit for this product"
msgstr "หน่วยเก็บสินค้าสำหรับสินค้านี้"
-#: engine/core/models.py:720
+#: engine/core/models.py:741
msgid ""
"Represents an attribute in the system. This class is used to define and "
"manage attributes, which are customizable pieces of data that can be "
"associated with other entities. Attributes have associated categories, "
-"groups, value types, and names. The model supports multiple types of values,"
-" including string, integer, float, boolean, array, and object. This allows "
+"groups, value types, and names. The model supports multiple types of values, "
+"including string, integer, float, boolean, array, and object. This allows "
"for dynamic and flexible data structuring."
msgstr ""
"แทนคุณสมบัติในระบบ. คลาสนี้ใช้เพื่อกำหนดและจัดการคุณสมบัติ "
-"ซึ่งเป็นข้อมูลที่สามารถปรับแต่งได้ซึ่งสามารถเชื่อมโยงกับเอนทิตีอื่น ๆ ได้. "
-"คุณสมบัติมีหมวดหมู่, กลุ่ม, ประเภทค่า, และชื่อที่เกี่ยวข้อง. "
-"แบบจำลองรองรับหลายประเภทของค่า รวมถึงสตริง, จำนวนเต็ม, จำนวนทศนิยม, บูลีน, "
-"อาร์เรย์, และออบเจ็กต์. "
+"ซึ่งเป็นข้อมูลที่สามารถปรับแต่งได้ซึ่งสามารถเชื่อมโยงกับเอนทิตีอื่น ๆ ได้. คุณสมบัติมีหมวดหมู่, กลุ่ม, "
+"ประเภทค่า, และชื่อที่เกี่ยวข้อง. แบบจำลองรองรับหลายประเภทของค่า รวมถึงสตริง, จำนวนเต็ม, "
+"จำนวนทศนิยม, บูลีน, อาร์เรย์, และออบเจ็กต์. "
"ซึ่งช่วยให้สามารถจัดโครงสร้างข้อมูลได้ไดนามิกและยืดหยุ่น."
-#: engine/core/models.py:733
+#: engine/core/models.py:754
msgid "group of this attribute"
msgstr "กลุ่มของแอตทริบิวต์นี้"
-#: engine/core/models.py:739
+#: engine/core/models.py:760
msgid "string"
msgstr "สตริง"
-#: engine/core/models.py:740
+#: engine/core/models.py:761
msgid "integer"
msgstr "ความซื่อสัตย์"
-#: engine/core/models.py:741
+#: engine/core/models.py:762
msgid "float"
msgstr "ลอย"
-#: engine/core/models.py:742
+#: engine/core/models.py:763
msgid "boolean"
msgstr "บูลีน"
-#: engine/core/models.py:743
+#: engine/core/models.py:764
msgid "array"
msgstr "อาร์เรย์"
-#: engine/core/models.py:744
+#: engine/core/models.py:765
msgid "object"
msgstr "วัตถุ"
-#: engine/core/models.py:746
+#: engine/core/models.py:767
msgid "type of the attribute's value"
msgstr "ประเภทของค่าของแอตทริบิวต์"
-#: engine/core/models.py:747
+#: engine/core/models.py:768
msgid "value type"
msgstr "ประเภทของค่า"
-#: engine/core/models.py:752
+#: engine/core/models.py:773
msgid "name of this attribute"
msgstr "ชื่อของแอตทริบิวต์นี้"
-#: engine/core/models.py:753
+#: engine/core/models.py:774
msgid "attribute's name"
msgstr "ชื่อของแอตทริบิวต์"
-#: engine/core/models.py:758
+#: engine/core/models.py:779
msgid "is filterable"
msgstr "สามารถกรองได้"
-#: engine/core/models.py:759
+#: engine/core/models.py:781
msgid "designates whether this attribute can be used for filtering or not"
msgstr "กำหนดว่าแอตทริบิวต์นี้สามารถใช้สำหรับการกรองหรือไม่"
-#: engine/core/models.py:771 engine/core/models.py:789
+#: engine/core/models.py:794 engine/core/models.py:812
#: engine/core/templates/digital_order_delivered_email.html:134
msgid "attribute"
msgstr "คุณสมบัติ"
-#: engine/core/models.py:777
+#: engine/core/models.py:800
msgid ""
-"Represents a specific value for an attribute that is linked to a product. It"
-" links the 'attribute' to a unique 'value', allowing better organization and"
-" dynamic representation of product characteristics."
+"Represents a specific value for an attribute that is linked to a product. It "
+"links the 'attribute' to a unique 'value', allowing better organization and "
+"dynamic representation of product characteristics."
msgstr ""
-"แทนค่าเฉพาะสำหรับคุณลักษณะที่เชื่อมโยงกับผลิตภัณฑ์ มันเชื่อมโยง 'คุณลักษณะ' "
-"กับ 'ค่า' ที่ไม่ซ้ำกัน "
+"แทนค่าเฉพาะสำหรับคุณลักษณะที่เชื่อมโยงกับผลิตภัณฑ์ มันเชื่อมโยง 'คุณลักษณะ' กับ 'ค่า' ที่ไม่ซ้ำกัน "
"ทำให้การจัดระเบียบและการแสดงลักษณะของผลิตภัณฑ์เป็นไปอย่างมีประสิทธิภาพและยืดหยุ่นมากขึ้น"
-#: engine/core/models.py:788
+#: engine/core/models.py:811
msgid "attribute of this value"
msgstr "คุณลักษณะของค่านี้"
-#: engine/core/models.py:796
+#: engine/core/models.py:819
msgid "the specific product associated with this attribute's value"
msgstr "ผลิตภัณฑ์เฉพาะที่เกี่ยวข้องกับค่าของแอตทริบิวต์นี้"
-#: engine/core/models.py:802
+#: engine/core/models.py:825
msgid "the specific value for this attribute"
msgstr "ค่าเฉพาะสำหรับคุณสมบัตินี้"
-#: engine/core/models.py:815
+#: engine/core/models.py:838
msgid ""
"Represents a product image associated with a product in the system. This "
-"class is designed to manage images for products, including functionality for"
-" uploading image files, associating them with specific products, and "
+"class is designed to manage images for products, including functionality for "
+"uploading image files, associating them with specific products, and "
"determining their display order. It also includes an accessibility feature "
"with alternative text for the images."
msgstr ""
-"แสดงภาพสินค้าที่เกี่ยวข้องกับสินค้าในระบบ. "
-"คลาสนี้ออกแบบมาเพื่อจัดการภาพสำหรับสินค้า "
+"แสดงภาพสินค้าที่เกี่ยวข้องกับสินค้าในระบบ. คลาสนี้ออกแบบมาเพื่อจัดการภาพสำหรับสินค้า "
"รวมถึงฟังก์ชันสำหรับการอัปโหลดไฟล์ภาพ, การเชื่อมโยงกับสินค้าเฉพาะ, "
-"และการกำหนดลำดับการแสดงผล. "
-"นอกจากนี้ยังมีคุณสมบัติการเข้าถึงสำหรับผู้ใช้ที่มีความต้องการพิเศษ "
+"และการกำหนดลำดับการแสดงผล. นอกจากนี้ยังมีคุณสมบัติการเข้าถึงสำหรับผู้ใช้ที่มีความต้องการพิเศษ "
"โดยให้ข้อความทางเลือกสำหรับภาพ."
-#: engine/core/models.py:826
+#: engine/core/models.py:849
msgid "provide alternative text for the image for accessibility"
msgstr "ให้ข้อความทางเลือกสำหรับภาพเพื่อการเข้าถึง"
-#: engine/core/models.py:827
+#: engine/core/models.py:850
msgid "image alt text"
msgstr "ข้อความแสดงแทนภาพ"
-#: engine/core/models.py:830
+#: engine/core/models.py:853
msgid "upload the image file for this product"
msgstr "อัปโหลดไฟล์รูปภาพสำหรับสินค้านี้"
-#: engine/core/models.py:831 engine/core/models.py:862
+#: engine/core/models.py:854 engine/core/models.py:885
msgid "product image"
msgstr "รูปภาพสินค้า"
-#: engine/core/models.py:836
+#: engine/core/models.py:859
msgid "determines the order in which images are displayed"
msgstr "กำหนดลำดับการแสดงผลของภาพ"
-#: engine/core/models.py:837
+#: engine/core/models.py:860
msgid "display priority"
msgstr "ลำดับความสำคัญในการแสดงผล"
-#: engine/core/models.py:842
+#: engine/core/models.py:865
msgid "the product that this image represents"
msgstr "สินค้าที่ภาพนี้แทน"
-#: engine/core/models.py:863
+#: engine/core/models.py:886
msgid "product images"
msgstr "รูปภาพสินค้า"
-#: engine/core/models.py:868
+#: engine/core/models.py:891
msgid ""
"Represents a promotional campaign for products with a discount. This class "
"is used to define and manage promotional campaigns that offer a percentage-"
"based discount for products. The class includes attributes for setting the "
"discount rate, providing details about the promotion, and linking it to the "
-"applicable products. It integrates with the product catalog to determine the"
-" affected items in the campaign."
+"applicable products. It integrates with the product catalog to determine the "
+"affected items in the campaign."
msgstr ""
"แสดงถึงแคมเปญส่งเสริมการขายสำหรับสินค้าที่มีส่วนลด. "
-"คลาสนี้ใช้เพื่อกำหนดและจัดการแคมเปญส่งเสริมการขายที่มอบส่วนลดเป็นเปอร์เซ็นต์สำหรับสินค้า."
-" คลาสนี้ประกอบด้วยคุณสมบัติสำหรับการตั้งค่าอัตราส่วนลด, "
-"ให้รายละเอียดเกี่ยวกับโปรโมชั่น, และเชื่อมโยงกับสินค้าที่เกี่ยวข้อง. "
+"คลาสนี้ใช้เพื่อกำหนดและจัดการแคมเปญส่งเสริมการขายที่มอบส่วนลดเป็นเปอร์เซ็นต์สำหรับสินค้า. "
+"คลาสนี้ประกอบด้วยคุณสมบัติสำหรับการตั้งค่าอัตราส่วนลด, ให้รายละเอียดเกี่ยวกับโปรโมชั่น, "
+"และเชื่อมโยงกับสินค้าที่เกี่ยวข้อง. "
"คลาสนี้ผสานการทำงานกับแคตตาล็อกสินค้าเพื่อกำหนดสินค้าที่ได้รับผลกระทบในแคมเปญ."
-#: engine/core/models.py:880
+#: engine/core/models.py:903
msgid "percentage discount for the selected products"
msgstr "เปอร์เซ็นต์ส่วนลดสำหรับสินค้าที่เลือก"
-#: engine/core/models.py:881
+#: engine/core/models.py:904
msgid "discount percentage"
msgstr "เปอร์เซ็นต์ส่วนลด"
-#: engine/core/models.py:886
+#: engine/core/models.py:909
msgid "provide a unique name for this promotion"
msgstr "กรุณาตั้งชื่อที่ไม่ซ้ำกันสำหรับการส่งเสริมการขายนี้"
-#: engine/core/models.py:887
+#: engine/core/models.py:910
msgid "promotion name"
msgstr "ชื่อโปรโมชั่น"
-#: engine/core/models.py:893
+#: engine/core/models.py:916
msgid "promotion description"
msgstr "รายละเอียดโปรโมชั่น"
-#: engine/core/models.py:898
+#: engine/core/models.py:921
msgid "select which products are included in this promotion"
msgstr "เลือกผลิตภัณฑ์ที่รวมอยู่ในโปรโมชั่นนี้"
-#: engine/core/models.py:899
+#: engine/core/models.py:922
msgid "included products"
msgstr "สินค้าที่รวมอยู่"
-#: engine/core/models.py:903
+#: engine/core/models.py:926
msgid "promotion"
msgstr "โปรโมชั่น"
-#: engine/core/models.py:914
+#: engine/core/models.py:937
msgid ""
"Represents a user's wishlist for storing and managing desired products. The "
"class provides functionality to manage a collection of products, supporting "
"operations such as adding and removing products, as well as supporting "
"operations for adding and removing multiple products at once."
msgstr ""
-"แสดงรายการสินค้าที่ผู้ใช้ต้องการเก็บไว้เพื่อจัดการและค้นหาสินค้าที่ต้องการในอนาคต"
-" คลาสนี้ให้บริการฟังก์ชันสำหรับการจัดการคอลเลกชันของสินค้า "
-"ซึ่งรวมถึงการเพิ่มและลบสินค้าออกจากคอลเลกชัน "
-"ตลอดจนการเพิ่มและลบสินค้าหลายรายการพร้อมกัน"
+"แสดงรายการสินค้าที่ผู้ใช้ต้องการเก็บไว้เพื่อจัดการและค้นหาสินค้าที่ต้องการในอนาคต "
+"คลาสนี้ให้บริการฟังก์ชันสำหรับการจัดการคอลเลกชันของสินค้า "
+"ซึ่งรวมถึงการเพิ่มและลบสินค้าออกจากคอลเลกชัน ตลอดจนการเพิ่มและลบสินค้าหลายรายการพร้อมกัน"
-#: engine/core/models.py:926
+#: engine/core/models.py:949
msgid "products that the user has marked as wanted"
msgstr "สินค้าที่ผู้ใช้ได้ทำเครื่องหมายว่าต้องการ"
-#: engine/core/models.py:934
+#: engine/core/models.py:957
msgid "user who owns this wishlist"
msgstr "ผู้ใช้ที่เป็นเจ้าของรายการความปรารถนา"
-#: engine/core/models.py:935
+#: engine/core/models.py:958
msgid "wishlist owner"
msgstr "เจ้าของรายการที่อยากได้"
-#: engine/core/models.py:943
+#: engine/core/models.py:966
msgid "wishlist"
msgstr "รายการสิ่งที่ต้องการ"
-#: engine/core/models.py:985
+#: engine/core/models.py:1008
msgid ""
"Represents a documentary record tied to a product. This class is used to "
"store information about documentaries related to specific products, "
"including file uploads and their metadata. It contains methods and "
"properties to handle the file type and storage path for the documentary "
-"files. It extends functionality from specific mixins and provides additional"
-" custom features."
+"files. It extends functionality from specific mixins and provides additional "
+"custom features."
msgstr ""
"แทนเอกสารบันทึกที่เกี่ยวข้องกับผลิตภัณฑ์. "
"คลาสนี้ใช้เพื่อเก็บข้อมูลเกี่ยวกับเอกสารที่เกี่ยวข้องกับผลิตภัณฑ์เฉพาะ "
"รวมถึงการอัปโหลดไฟล์และข้อมูลเมตาของไฟล์. "
-"คลาสนี้มีเมธอดและคุณสมบัติเพื่อจัดการกับประเภทไฟล์และเส้นทางจัดเก็บสำหรับไฟล์เอกสาร."
-" คลาสนี้ขยายฟังก์ชันการทำงานจากมิกซ์อินเฉพาะ "
-"และให้คุณสมบัติเพิ่มเติมตามความต้องการ."
+"คลาสนี้มีเมธอดและคุณสมบัติเพื่อจัดการกับประเภทไฟล์และเส้นทางจัดเก็บสำหรับไฟล์เอกสาร. "
+"คลาสนี้ขยายฟังก์ชันการทำงานจากมิกซ์อินเฉพาะ และให้คุณสมบัติเพิ่มเติมตามความต้องการ."
-#: engine/core/models.py:998
+#: engine/core/models.py:1023
msgid "documentary"
msgstr "สารคดี"
-#: engine/core/models.py:999
+#: engine/core/models.py:1024
msgid "documentaries"
msgstr "สารคดี"
-#: engine/core/models.py:1009
+#: engine/core/models.py:1034
msgid "unresolved"
msgstr "ยังไม่ได้รับการแก้ไข"
-#: engine/core/models.py:1014
+#: engine/core/models.py:1039
msgid ""
-"Represents an address entity that includes location details and associations"
-" with a user. Provides functionality for geographic and address data "
-"storage, as well as integration with geocoding services. This class is "
-"designed to store detailed address information including components like "
-"street, city, region, country, and geolocation (longitude and latitude). It "
-"supports integration with geocoding APIs, enabling the storage of raw API "
-"responses for further processing or inspection. The class also allows "
-"associating an address with a user, facilitating personalized data handling."
+"Represents an address entity that includes location details and associations "
+"with a user. Provides functionality for geographic and address data storage, "
+"as well as integration with geocoding services. This class is designed to "
+"store detailed address information including components like street, city, "
+"region, country, and geolocation (longitude and latitude). It supports "
+"integration with geocoding APIs, enabling the storage of raw API responses "
+"for further processing or inspection. The class also allows associating an "
+"address with a user, facilitating personalized data handling."
msgstr ""
"แทนที่หน่วยงานที่อยู่ซึ่งรวมถึงรายละเอียดตำแหน่งและความสัมพันธ์กับผู้ใช้ "
"ให้ฟังก์ชันสำหรับการจัดเก็บข้อมูลทางภูมิศาสตร์และที่อยู่ "
"รวมถึงการผสานรวมกับบริการการเข้ารหัสทางภูมิศาสตร์ "
-"คลาสนี้ถูกออกแบบมาเพื่อจัดเก็บข้อมูลที่อยู่โดยละเอียด รวมถึงองค์ประกอบเช่น "
-"ถนน เมือง ภูมิภาค ประเทศ และตำแหน่งทางภูมิศาสตร์ (ลองจิจูดและละติจูด) "
-"รองรับการผสานรวมกับ API การเข้ารหัสทางภูมิศาสตร์ "
-"ทำให้สามารถจัดเก็บการตอบสนองของ API "
-"ดิบเพื่อการประมวลผลหรือตรวจสอบเพิ่มเติมได้คลาสนี้ยังอนุญาตให้เชื่อมโยงที่อยู่กับผู้ใช้ได้"
-" ซึ่งช่วยให้การจัดการข้อมูลส่วนบุคคลเป็นไปอย่างสะดวก"
+"คลาสนี้ถูกออกแบบมาเพื่อจัดเก็บข้อมูลที่อยู่โดยละเอียด รวมถึงองค์ประกอบเช่น ถนน เมือง ภูมิภาค "
+"ประเทศ และตำแหน่งทางภูมิศาสตร์ (ลองจิจูดและละติจูด) รองรับการผสานรวมกับ API "
+"การเข้ารหัสทางภูมิศาสตร์ ทำให้สามารถจัดเก็บการตอบสนองของ API "
+"ดิบเพื่อการประมวลผลหรือตรวจสอบเพิ่มเติมได้คลาสนี้ยังอนุญาตให้เชื่อมโยงที่อยู่กับผู้ใช้ได้ "
+"ซึ่งช่วยให้การจัดการข้อมูลส่วนบุคคลเป็นไปอย่างสะดวก"
-#: engine/core/models.py:1029
+#: engine/core/models.py:1054
msgid "address line for the customer"
msgstr "ที่อยู่สำหรับลูกค้า"
-#: engine/core/models.py:1030
+#: engine/core/models.py:1055
msgid "address line"
msgstr "บรรทัดที่อยู่"
-#: engine/core/models.py:1032
+#: engine/core/models.py:1057
msgid "street"
msgstr "ถนน"
-#: engine/core/models.py:1033
+#: engine/core/models.py:1058
msgid "district"
msgstr "เขต"
-#: engine/core/models.py:1034
+#: engine/core/models.py:1059
msgid "city"
msgstr "เมือง"
-#: engine/core/models.py:1035
+#: engine/core/models.py:1060
msgid "region"
msgstr "ภูมิภาค"
-#: engine/core/models.py:1036
+#: engine/core/models.py:1061
msgid "postal code"
msgstr "รหัสไปรษณีย์"
-#: engine/core/models.py:1037
+#: engine/core/models.py:1062
msgid "country"
msgstr "ประเทศ"
-#: engine/core/models.py:1044
+#: engine/core/models.py:1069
msgid "geolocation point: (longitude, latitude)"
msgstr "จุดพิกัดภูมิศาสตร์ (ลองจิจูด, ละติจูด)"
-#: engine/core/models.py:1047
+#: engine/core/models.py:1075
msgid "full JSON response from geocoder for this address"
msgstr "การตอบกลับ JSON แบบเต็มจากตัวแปลงที่อยู่ทางภูมิศาสตร์สำหรับที่อยู่นี้"
-#: engine/core/models.py:1052
+#: engine/core/models.py:1081
msgid "stored JSON response from the geocoding service"
msgstr "เก็บคำตอบ JSON จากบริการการแปลงที่อยู่ทางภูมิศาสตร์"
-#: engine/core/models.py:1060
+#: engine/core/models.py:1091
msgid "address"
msgstr "ที่อยู่"
-#: engine/core/models.py:1061
+#: engine/core/models.py:1092
msgid "addresses"
msgstr "ที่อยู่"
-#: engine/core/models.py:1073
+#: engine/core/models.py:1104
msgid ""
"Represents a promotional code that can be used for discounts, managing its "
"validity, type of discount, and application. The PromoCode class stores "
@@ -2266,79 +2210,78 @@ msgid ""
"any), and status of its usage. It includes functionality to validate and "
"apply the promo code to an order while ensuring constraints are met."
msgstr ""
-"แสดงรหัสโปรโมชั่นที่สามารถใช้เพื่อรับส่วนลด การจัดการความถูกต้อง "
-"ประเภทของส่วนลด และการใช้งาน คลาส PromoCode "
-"จัดเก็บรายละเอียดเกี่ยวกับรหัสโปรโมชั่น รวมถึงตัวระบุที่ไม่ซ้ำกัน "
-"คุณสมบัติของส่วนลด (จำนวนหรือเปอร์เซ็นต์) ระยะเวลาการใช้งาน "
-"ผู้ใช้ที่เกี่ยวข้อง (ถ้ามี) และสถานะการใช้งาน "
-"รวมถึงฟังก์ชันการทำงานเพื่อตรวจสอบและใช้รหัสโปรโมชั่นกับคำสั่งซื้อในขณะที่ตรวจสอบให้แน่ใจว่าข้อจำกัดต่างๆ"
-" ได้รับการปฏิบัติตาม"
+"แสดงรหัสโปรโมชั่นที่สามารถใช้เพื่อรับส่วนลด การจัดการความถูกต้อง ประเภทของส่วนลด "
+"และการใช้งาน คลาส PromoCode จัดเก็บรายละเอียดเกี่ยวกับรหัสโปรโมชั่น รวมถึงตัวระบุที่ไม่ซ้ำกัน "
+"คุณสมบัติของส่วนลด (จำนวนหรือเปอร์เซ็นต์) ระยะเวลาการใช้งาน ผู้ใช้ที่เกี่ยวข้อง (ถ้ามี) "
+"และสถานะการใช้งาน "
+"รวมถึงฟังก์ชันการทำงานเพื่อตรวจสอบและใช้รหัสโปรโมชั่นกับคำสั่งซื้อในขณะที่ตรวจสอบให้แน่ใจว่าข้อจำกัดต่างๆ "
+"ได้รับการปฏิบัติตาม"
-#: engine/core/models.py:1087
+#: engine/core/models.py:1118
msgid "unique code used by a user to redeem a discount"
msgstr "รหัสเฉพาะที่ผู้ใช้ใช้เพื่อแลกรับส่วนลด"
-#: engine/core/models.py:1088
+#: engine/core/models.py:1119
msgid "promo code identifier"
msgstr "รหัสโปรโมชั่น"
-#: engine/core/models.py:1095
+#: engine/core/models.py:1126
msgid "fixed discount amount applied if percent is not used"
msgstr "จำนวนส่วนลดคงที่ที่ใช้หากไม่ได้ใช้เปอร์เซ็นต์"
-#: engine/core/models.py:1096
+#: engine/core/models.py:1127
msgid "fixed discount amount"
msgstr "จำนวนส่วนลดคงที่"
-#: engine/core/models.py:1102
+#: engine/core/models.py:1133
msgid "percentage discount applied if fixed amount is not used"
msgstr "ส่วนลดเป็นเปอร์เซ็นต์ที่ใช้เมื่อไม่ได้ใช้จำนวนเงินคงที่"
-#: engine/core/models.py:1103
+#: engine/core/models.py:1134
msgid "percentage discount"
msgstr "เปอร์เซ็นต์ส่วนลด"
-#: engine/core/models.py:1108
+#: engine/core/models.py:1139
msgid "timestamp when the promocode expires"
msgstr "เวลาที่โค้ดโปรโมชั่นหมดอายุ"
-#: engine/core/models.py:1109
+#: engine/core/models.py:1140
msgid "end validity time"
msgstr "เวลาสิ้นสุดความถูกต้อง"
-#: engine/core/models.py:1114
+#: engine/core/models.py:1145
msgid "timestamp from which this promocode is valid"
msgstr "เวลาที่ตราไว้ซึ่งรหัสโปรโมชั่นนี้ใช้ได้"
-#: engine/core/models.py:1115
+#: engine/core/models.py:1146
msgid "start validity time"
msgstr "เวลาเริ่มต้นความถูกต้อง"
-#: engine/core/models.py:1120
+#: engine/core/models.py:1151
msgid "timestamp when the promocode was used, blank if not used yet"
msgstr "เวลาที่ตราประทับเมื่อใช้รหัสโปรโมชั่น, ว่างเปล่าหากยังไม่ได้ใช้"
-#: engine/core/models.py:1121
+#: engine/core/models.py:1152
msgid "usage timestamp"
msgstr "เวลาการใช้งาน"
-#: engine/core/models.py:1126
+#: engine/core/models.py:1157
msgid "user assigned to this promocode if applicable"
msgstr "ผู้ใช้ที่ได้รับมอบหมายให้ใช้รหัสโปรโมชั่นนี้ หากมี"
-#: engine/core/models.py:1127
+#: engine/core/models.py:1158
msgid "assigned user"
msgstr "ผู้ใช้ที่ได้รับมอบหมาย"
-#: engine/core/models.py:1134
+#: engine/core/models.py:1165
msgid "promo code"
msgstr "รหัสโปรโมชั่น"
-#: engine/core/models.py:1135
+#: engine/core/models.py:1166
msgid "promo codes"
msgstr "รหัสส่งเสริมการขาย"
-#: engine/core/models.py:1150
+#: engine/core/models.py:1182
msgid ""
"only one type of discount should be defined (amount or percent), but not "
"both or neither."
@@ -2346,181 +2289,173 @@ msgstr ""
"ควรกำหนดประเภทส่วนลดเพียงประเภทเดียว (จำนวนเงินหรือเปอร์เซ็นต์) เท่านั้น "
"ไม่ควรกำหนดทั้งสองประเภทหรือไม่ได้กำหนดเลย"
-#: engine/core/models.py:1171
+#: engine/core/models.py:1204
msgid "promocode already used"
msgstr "รหัสโปรโมชั่นถูกใช้ไปแล้ว"
-#: engine/core/models.py:1187
+#: engine/core/models.py:1226
#, python-brace-format
msgid "invalid discount type for promocode {self.uuid}"
msgstr "ประเภทส่วนลดไม่ถูกต้องสำหรับรหัสโปรโมชั่น {self.uuid}!"
-#: engine/core/models.py:1196
+#: engine/core/models.py:1235
msgid ""
"Represents an order placed by a user. This class models an order within the "
"application, including its various attributes such as billing and shipping "
-"information, status, associated user, notifications, and related operations."
-" Orders can have associated products, promotions can be applied, addresses "
+"information, status, associated user, notifications, and related operations. "
+"Orders can have associated products, promotions can be applied, addresses "
"set, and shipping or billing details updated. Equally, functionality "
"supports managing the products in the order lifecycle."
msgstr ""
-"แทนคำสั่งซื้อที่ผู้ใช้ได้ทำการสั่งซื้อไว้ "
-"คลาสนี้จำลองคำสั่งซื้อภายในแอปพลิเคชัน รวมถึงคุณสมบัติต่าง ๆ เช่น "
-"ข้อมูลการเรียกเก็บเงิน ข้อมูลการจัดส่ง สถานะ ผู้ใช้ที่เกี่ยวข้อง "
-"การแจ้งเตือน และการดำเนินการที่เกี่ยวข้อง "
-"คำสั่งซื้อสามารถมีสินค้าที่เกี่ยวข้องได้ โปรโมชั่นสามารถนำมาใช้ได้ "
-"ที่อยู่สามารถตั้งค่าได้ "
-"และรายละเอียดการจัดส่งหรือการเรียกเก็บเงินสามารถอัปเดตได้เช่นกัน นอกจากนี้ "
-"ฟังก์ชันการทำงานยังรองรับการจัดการสินค้าในวงจรชีวิตของคำสั่งซื้อ"
+"แทนคำสั่งซื้อที่ผู้ใช้ได้ทำการสั่งซื้อไว้ คลาสนี้จำลองคำสั่งซื้อภายในแอปพลิเคชัน รวมถึงคุณสมบัติต่าง ๆ "
+"เช่น ข้อมูลการเรียกเก็บเงิน ข้อมูลการจัดส่ง สถานะ ผู้ใช้ที่เกี่ยวข้อง การแจ้งเตือน "
+"และการดำเนินการที่เกี่ยวข้อง คำสั่งซื้อสามารถมีสินค้าที่เกี่ยวข้องได้ โปรโมชั่นสามารถนำมาใช้ได้ "
+"ที่อยู่สามารถตั้งค่าได้ และรายละเอียดการจัดส่งหรือการเรียกเก็บเงินสามารถอัปเดตได้เช่นกัน "
+"นอกจากนี้ ฟังก์ชันการทำงานยังรองรับการจัดการสินค้าในวงจรชีวิตของคำสั่งซื้อ"
-#: engine/core/models.py:1213
+#: engine/core/models.py:1252
msgid "the billing address used for this order"
msgstr "ที่อยู่สำหรับเรียกเก็บเงินที่ใช้สำหรับคำสั่งซื้อนี้"
-#: engine/core/models.py:1221
+#: engine/core/models.py:1260
msgid "optional promo code applied to this order"
msgstr "รหัสโปรโมชั่นเสริมใช้กับคำสั่งซื้อนี้แล้ว"
-#: engine/core/models.py:1222
+#: engine/core/models.py:1261
msgid "applied promo code"
msgstr "ใช้รหัสโปรโมชั่น"
-#: engine/core/models.py:1230
+#: engine/core/models.py:1269
msgid "the shipping address used for this order"
msgstr "ที่อยู่สำหรับจัดส่งที่ใช้สำหรับคำสั่งซื้อนี้"
-#: engine/core/models.py:1231
+#: engine/core/models.py:1270
msgid "shipping address"
msgstr "ที่อยู่สำหรับจัดส่ง"
-#: engine/core/models.py:1237
+#: engine/core/models.py:1276
msgid "current status of the order in its lifecycle"
msgstr "สถานะปัจจุบันของคำสั่งซื้อในวงจรชีวิต"
-#: engine/core/models.py:1238
+#: engine/core/models.py:1277
msgid "order status"
msgstr "สถานะการสั่งซื้อ"
-#: engine/core/models.py:1243 engine/core/models.py:1769
+#: engine/core/models.py:1282 engine/core/models.py:1881
msgid "json structure of notifications to display to users"
msgstr ""
"โครงสร้าง JSON ของการแจ้งเตือนที่จะแสดงให้ผู้ใช้เห็น ใน UI "
"ของผู้ดูแลระบบจะใช้การแสดงผลแบบตาราง"
-#: engine/core/models.py:1249
+#: engine/core/models.py:1288
msgid "json representation of order attributes for this order"
msgstr "การแสดงผล JSON ของคุณลักษณะคำสั่งซื้อสำหรับคำสั่งซื้อนี้"
-#: engine/core/models.py:1255
+#: engine/core/models.py:1294
msgid "the user who placed the order"
msgstr "ผู้ใช้ที่ทำการสั่งซื้อ"
-#: engine/core/models.py:1256
+#: engine/core/models.py:1295
msgid "user"
msgstr "ผู้ใช้"
-#: engine/core/models.py:1262
+#: engine/core/models.py:1301
msgid "the timestamp when the order was finalized"
msgstr "เวลาที่คำสั่งซื้อได้รับการยืนยัน"
-#: engine/core/models.py:1263
+#: engine/core/models.py:1302
msgid "buy time"
msgstr "ซื้อเวลา"
-#: engine/core/models.py:1270
+#: engine/core/models.py:1309
msgid "a human-readable identifier for the order"
msgstr "ตัวระบุที่มนุษย์อ่านได้สำหรับคำสั่ง"
-#: engine/core/models.py:1271
+#: engine/core/models.py:1310
msgid "human readable id"
msgstr "รหัสที่สามารถอ่านได้โดยมนุษย์"
-#: engine/core/models.py:1277
+#: engine/core/models.py:1316
msgid "order"
msgstr "คำสั่ง"
-#: engine/core/models.py:1319
+#: engine/core/models.py:1363
msgid "a user must have only one pending order at a time"
-msgstr ""
-"ผู้ใช้ต้องมีคำสั่งซื้อที่รอดำเนินการเพียงหนึ่งรายการเท่านั้นในแต่ละครั้ง!"
+msgstr "ผู้ใช้ต้องมีคำสั่งซื้อที่รอดำเนินการเพียงหนึ่งรายการเท่านั้นในแต่ละครั้ง!"
-#: engine/core/models.py:1351
+#: engine/core/models.py:1396
msgid "you cannot add products to an order that is not a pending one"
-msgstr ""
-"คุณไม่สามารถเพิ่มสินค้าในคำสั่งซื้อที่ไม่ใช่คำสั่งซื้อที่รอดำเนินการได้"
+msgstr "คุณไม่สามารถเพิ่มสินค้าในคำสั่งซื้อที่ไม่ใช่คำสั่งซื้อที่รอดำเนินการได้"
-#: engine/core/models.py:1356
+#: engine/core/models.py:1402
msgid "you cannot add inactive products to order"
msgstr "คุณไม่สามารถเพิ่มสินค้าที่ไม่ใช้งานในคำสั่งซื้อได้"
-#: engine/core/models.py:1373
+#: engine/core/models.py:1424
msgid "you cannot add more products than available in stock"
msgstr "คุณไม่สามารถเพิ่มสินค้าได้มากกว่าที่มีในสต็อก"
-#: engine/core/models.py:1395 engine/core/models.py:1420
-#: engine/core/models.py:1428
+#: engine/core/models.py:1448 engine/core/models.py:1477
+#: engine/core/models.py:1487
msgid "you cannot remove products from an order that is not a pending one"
-msgstr ""
-"คุณไม่สามารถลบสินค้าออกจากคำสั่งซื้อที่ไม่ใช่คำสั่งซื้อที่อยู่ในสถานะรอดำเนินการได้"
+msgstr "คุณไม่สามารถลบสินค้าออกจากคำสั่งซื้อที่ไม่ใช่คำสั่งซื้อที่อยู่ในสถานะรอดำเนินการได้"
-#: engine/core/models.py:1416
+#: engine/core/models.py:1472
#, python-brace-format
msgid "{name} does not exist with query <{query}>"
msgstr "{name} ไม่มีอยู่จริงกับคำค้นหา <{query}>!"
-#: engine/core/models.py:1448
+#: engine/core/models.py:1511
msgid "promocode does not exist"
msgstr "รหัสโปรโมชั่นไม่มีอยู่"
-#: engine/core/models.py:1454
+#: engine/core/models.py:1526
msgid "you can only buy physical products with shipping address specified"
-msgstr ""
-"คุณสามารถซื้อได้เฉพาะสินค้าทางกายภาพที่มีที่อยู่สำหรับจัดส่งระบุไว้เท่านั้น!"
+msgstr "คุณสามารถซื้อได้เฉพาะสินค้าทางกายภาพที่มีที่อยู่สำหรับจัดส่งระบุไว้เท่านั้น!"
-#: engine/core/models.py:1473
+#: engine/core/models.py:1547
msgid "address does not exist"
msgstr "ไม่มีที่อยู่"
-#: engine/core/models.py:1494 engine/core/models.py:1563
+#: engine/core/models.py:1569 engine/core/models.py:1648
msgid "you can not buy at this moment, please try again in a few minutes"
msgstr "ขณะนี้คุณไม่สามารถซื้อได้ กรุณาลองใหม่อีกครั้งในอีกไม่กี่นาที"
-#: engine/core/models.py:1497 engine/core/models.py:1559
+#: engine/core/models.py:1575 engine/core/models.py:1641
msgid "invalid force value"
msgstr "ค่าแรงบังคับไม่ถูกต้อง"
-#: engine/core/models.py:1503 engine/core/models.py:1566
+#: engine/core/models.py:1581 engine/core/models.py:1652
msgid "you cannot purchase an empty order!"
msgstr "คุณไม่สามารถซื้อคำสั่งซื้อที่ว่างเปล่าได้!"
-#: engine/core/models.py:1522
+#: engine/core/models.py:1602
msgid "you cannot buy an order without a user"
msgstr "คุณไม่สามารถซื้อคำสั่งซื้อได้หากไม่มีผู้ใช้!"
-#: engine/core/models.py:1536
+#: engine/core/models.py:1616
msgid "a user without a balance cannot buy with balance"
msgstr "ผู้ใช้ที่ไม่มียอดคงเหลือไม่สามารถซื้อด้วยยอดคงเหลือได้!"
-#: engine/core/models.py:1541
+#: engine/core/models.py:1622
msgid "insufficient funds to complete the order"
msgstr "เงินไม่เพียงพอในการทำรายการให้เสร็จสมบูรณ์"
-#: engine/core/models.py:1575
+#: engine/core/models.py:1663
msgid ""
"you cannot buy without registration, please provide the following "
"information: customer name, customer email, customer phone number"
msgstr ""
-"คุณไม่สามารถซื้อได้หากไม่มีการลงทะเบียน กรุณาให้ข้อมูลต่อไปนี้: ชื่อลูกค้า, "
-"อีเมลลูกค้า, หมายเลขโทรศัพท์ลูกค้า"
+"คุณไม่สามารถซื้อได้หากไม่มีการลงทะเบียน กรุณาให้ข้อมูลต่อไปนี้: ชื่อลูกค้า, อีเมลลูกค้า, "
+"หมายเลขโทรศัพท์ลูกค้า"
-#: engine/core/models.py:1584
+#: engine/core/models.py:1674
#, python-brace-format
msgid ""
"invalid payment method: {payment_method} from {available_payment_methods}"
-msgstr ""
-"วิธีการชำระเงินไม่ถูกต้อง: {payment_method} จาก {available_payment_methods}!"
+msgstr "วิธีการชำระเงินไม่ถูกต้อง: {payment_method} จาก {available_payment_methods}!"
-#: engine/core/models.py:1699
+#: engine/core/models.py:1805
msgid ""
"Manages user feedback for products. This class is designed to capture and "
"store user feedback for specific products that they have purchased. It "
@@ -2529,37 +2464,36 @@ msgid ""
"fields to effectively model and manage feedback data."
msgstr ""
"จัดการข้อเสนอแนะของผู้ใช้สำหรับผลิตภัณฑ์ "
-"คลาสนี้ถูกออกแบบมาเพื่อรวบรวมและจัดเก็บข้อมูลข้อเสนอแนะของผู้ใช้สำหรับผลิตภัณฑ์เฉพาะที่พวกเขาได้ซื้อ"
-" ประกอบด้วยแอตทริบิวต์สำหรับจัดเก็บความคิดเห็นของผู้ใช้ "
-"การอ้างอิงถึงผลิตภัณฑ์ที่เกี่ยวข้องในคำสั่งซื้อ และคะแนนที่ผู้ใช้กำหนด "
+"คลาสนี้ถูกออกแบบมาเพื่อรวบรวมและจัดเก็บข้อมูลข้อเสนอแนะของผู้ใช้สำหรับผลิตภัณฑ์เฉพาะที่พวกเขาได้ซื้อ "
+"ประกอบด้วยแอตทริบิวต์สำหรับจัดเก็บความคิดเห็นของผู้ใช้ การอ้างอิงถึงผลิตภัณฑ์ที่เกี่ยวข้องในคำสั่งซื้อ "
+"และคะแนนที่ผู้ใช้กำหนด "
"คลาสนี้ใช้ฟิลด์ในฐานข้อมูลเพื่อสร้างแบบจำลองและจัดการข้อมูลข้อเสนอแนะอย่างมีประสิทธิภาพ"
-#: engine/core/models.py:1711
+#: engine/core/models.py:1817
msgid "user-provided comments about their experience with the product"
msgstr "ความคิดเห็นที่ผู้ใช้ให้ไว้เกี่ยวกับประสบการณ์ของพวกเขาต่อผลิตภัณฑ์"
-#: engine/core/models.py:1712
+#: engine/core/models.py:1818
msgid "feedback comments"
msgstr "ความคิดเห็นจากผู้ตอบแบบสอบถาม"
-#: engine/core/models.py:1719
-msgid ""
-"references the specific product in an order that this feedback is about"
+#: engine/core/models.py:1826
+msgid "references the specific product in an order that this feedback is about"
msgstr "อ้างอิงถึงผลิตภัณฑ์เฉพาะในคำสั่งซื้อที่ความคิดเห็นนี้เกี่ยวข้อง"
-#: engine/core/models.py:1720
+#: engine/core/models.py:1828
msgid "related order product"
msgstr "สินค้าที่เกี่ยวข้อง"
-#: engine/core/models.py:1725
+#: engine/core/models.py:1833
msgid "user-assigned rating for the product"
msgstr "คะแนนที่ผู้ใช้กำหนดให้กับผลิตภัณฑ์"
-#: engine/core/models.py:1726
+#: engine/core/models.py:1834
msgid "product rating"
msgstr "การให้คะแนนสินค้า"
-#: engine/core/models.py:1742
+#: engine/core/models.py:1854
msgid ""
"Represents products associated with orders and their attributes. The "
"OrderProduct model maintains information about a product that is part of an "
@@ -2571,146 +2505,143 @@ msgid ""
"download URL for digital products. The model integrates with the Order and "
"Product models and stores a reference to them."
msgstr ""
-"แสดงผลิตภัณฑ์ที่เกี่ยวข้องกับคำสั่งซื้อและคุณลักษณะของผลิตภัณฑ์โมเดล "
-"OrderProduct ดูแลข้อมูลเกี่ยวกับสินค้าที่เป็นส่วนหนึ่งของคำสั่งซื้อ "
-"รวมถึงรายละเอียดเช่น ราคาซื้อ จำนวน คุณสมบัติของสินค้า และสถานะ "
-"โมเดลนี้จัดการการแจ้งเตือนสำหรับผู้ใช้และผู้ดูแลระบบ "
+"แสดงผลิตภัณฑ์ที่เกี่ยวข้องกับคำสั่งซื้อและคุณลักษณะของผลิตภัณฑ์โมเดล OrderProduct "
+"ดูแลข้อมูลเกี่ยวกับสินค้าที่เป็นส่วนหนึ่งของคำสั่งซื้อ รวมถึงรายละเอียดเช่น ราคาซื้อ จำนวน "
+"คุณสมบัติของสินค้า และสถานะ โมเดลนี้จัดการการแจ้งเตือนสำหรับผู้ใช้และผู้ดูแลระบบ "
"และจัดการการดำเนินการเช่น การคืนสินค้าคงเหลือหรือการเพิ่มความคิดเห็น "
-"โมเดลนี้ยังมีวิธีการและคุณสมบัติที่สนับสนุนตรรกะทางธุรกิจ เช่น "
-"การคำนวณราคารวมหรือการสร้าง URL สำหรับดาวน์โหลดสินค้าดิจิทัล "
-"โมเดลนี้ผสานรวมกับโมเดล Order และ Product "
+"โมเดลนี้ยังมีวิธีการและคุณสมบัติที่สนับสนุนตรรกะทางธุรกิจ เช่น การคำนวณราคารวมหรือการสร้าง URL "
+"สำหรับดาวน์โหลดสินค้าดิจิทัล โมเดลนี้ผสานรวมกับโมเดล Order และ Product "
"และเก็บการอ้างอิงถึงโมเดลเหล่านี้ไว้"
-#: engine/core/models.py:1757
+#: engine/core/models.py:1869
msgid "the price paid by the customer for this product at purchase time"
msgstr "ราคาที่ลูกค้าชำระสำหรับสินค้านี้ ณ เวลาที่ซื้อ"
-#: engine/core/models.py:1758
+#: engine/core/models.py:1870
msgid "purchase price at order time"
msgstr "ราคาซื้อ ณ เวลาที่สั่งซื้อ"
-#: engine/core/models.py:1763
+#: engine/core/models.py:1875
msgid "internal comments for admins about this ordered product"
msgstr "ความคิดเห็นภายในสำหรับผู้ดูแลระบบเกี่ยวกับสินค้าที่สั่งซื้อ"
-#: engine/core/models.py:1764
+#: engine/core/models.py:1876
msgid "internal comments"
msgstr "ความคิดเห็นภายใน"
-#: engine/core/models.py:1770
+#: engine/core/models.py:1882
msgid "user notifications"
msgstr "การแจ้งเตือนผู้ใช้"
-#: engine/core/models.py:1775
+#: engine/core/models.py:1887
msgid "json representation of this item's attributes"
msgstr "การแสดงผล JSON ของคุณลักษณะของรายการนี้"
-#: engine/core/models.py:1776
+#: engine/core/models.py:1888
msgid "ordered product attributes"
msgstr "จัดเรียงคุณลักษณะของสินค้า"
-#: engine/core/models.py:1781
+#: engine/core/models.py:1893
msgid "reference to the parent order that contains this product"
msgstr "การอ้างอิงถึงคำสั่งซื้อหลักที่มีสินค้านี้อยู่"
-#: engine/core/models.py:1782
+#: engine/core/models.py:1894
msgid "parent order"
msgstr "ลำดับของผู้ปกครอง"
-#: engine/core/models.py:1791
+#: engine/core/models.py:1903
msgid "the specific product associated with this order line"
msgstr "สินค้าเฉพาะที่เกี่ยวข้องกับรายการคำสั่งซื้อนี้"
-#: engine/core/models.py:1798
+#: engine/core/models.py:1910
msgid "quantity of this specific product in the order"
msgstr "ปริมาณของสินค้าชนิดนี้ในคำสั่งซื้อ"
-#: engine/core/models.py:1799
+#: engine/core/models.py:1911
msgid "product quantity"
msgstr "จำนวนสินค้า"
-#: engine/core/models.py:1806
+#: engine/core/models.py:1918
msgid "current status of this product in the order"
msgstr "สถานะปัจจุบันของสินค้านี้ในคำสั่งซื้อ"
-#: engine/core/models.py:1807
+#: engine/core/models.py:1919
msgid "product line status"
msgstr "สถานะสายผลิตภัณฑ์"
-#: engine/core/models.py:1872
+#: engine/core/models.py:1986
msgid "order product must have an order"
msgstr "Orderproduct ต้องมีการสั่งซื้อที่เกี่ยวข้อง!"
-#: engine/core/models.py:1874
+#: engine/core/models.py:1988
#, python-brace-format
msgid "wrong action specified for feedback: {action}"
msgstr "ระบุการกระทำที่ไม่ถูกต้องสำหรับข้อเสนอแนะ: {action}!"
-#: engine/core/models.py:1888
+#: engine/core/models.py:2005
msgid "you cannot feedback an order which is not received"
msgstr "คุณไม่สามารถให้ข้อเสนอแนะเกี่ยวกับคำสั่งซื้อที่ไม่ได้รับ"
-#: engine/core/models.py:1894
+#: engine/core/models.py:2014
msgid "name"
msgstr "ชื่อ"
-#: engine/core/models.py:1895
+#: engine/core/models.py:2016
msgid "URL of the integration"
msgstr "URL ของการผสานรวม"
-#: engine/core/models.py:1896
+#: engine/core/models.py:2019
msgid "authentication credentials"
msgstr "ข้อมูลประจำตัวสำหรับการยืนยันตัวตน"
-#: engine/core/models.py:1918
+#: engine/core/models.py:2042
msgid "you can only have one default CRM provider"
msgstr "คุณสามารถมีผู้ให้บริการ CRM เริ่มต้นได้เพียงรายเดียวเท่านั้น"
-#: engine/core/models.py:1928
+#: engine/core/models.py:2052
msgid "CRM"
msgstr "ระบบบริหารความสัมพันธ์ลูกค้า"
-#: engine/core/models.py:1929
+#: engine/core/models.py:2053
msgid "CRMs"
msgstr "ระบบบริหารความสัมพันธ์ลูกค้า"
-#: engine/core/models.py:1941
+#: engine/core/models.py:2069
msgid "order CRM link"
msgstr "ลิงก์ CRM ของคำสั่ง"
-#: engine/core/models.py:1942
+#: engine/core/models.py:2070
msgid "orders CRM links"
msgstr "ลิงก์ CRM ของคำสั่งซื้อ"
-#: engine/core/models.py:1947
+#: engine/core/models.py:2075
msgid ""
"Represents the downloading functionality for digital assets associated with "
"orders. The DigitalAssetDownload class provides the ability to manage and "
"access downloads related to order products. It maintains information about "
-"the associated order product, the number of downloads, and whether the asset"
-" is publicly visible. It includes a method to generate a URL for downloading"
-" the asset when the associated order is in a completed status."
+"the associated order product, the number of downloads, and whether the asset "
+"is publicly visible. It includes a method to generate a URL for downloading "
+"the asset when the associated order is in a completed status."
msgstr ""
-"แสดงถึงฟังก์ชันการดาวน์โหลดสำหรับสินทรัพย์ดิจิทัลที่เกี่ยวข้องกับคำสั่งซื้อ "
-"คลาส DigitalAssetDownload "
-"ให้ความสามารถในการจัดการและเข้าถึงการดาวน์โหลดที่เกี่ยวข้องกับผลิตภัณฑ์ในคำสั่งซื้อ"
-" มันเก็บข้อมูลเกี่ยวกับผลิตภัณฑ์ในคำสั่งซื้อที่เกี่ยวข้อง จำนวนการดาวน์โหลด "
+"แสดงถึงฟังก์ชันการดาวน์โหลดสำหรับสินทรัพย์ดิจิทัลที่เกี่ยวข้องกับคำสั่งซื้อ คลาส "
+"DigitalAssetDownload "
+"ให้ความสามารถในการจัดการและเข้าถึงการดาวน์โหลดที่เกี่ยวข้องกับผลิตภัณฑ์ในคำสั่งซื้อ "
+"มันเก็บข้อมูลเกี่ยวกับผลิตภัณฑ์ในคำสั่งซื้อที่เกี่ยวข้อง จำนวนการดาวน์โหลด "
"และว่าสินทรัพย์นั้นสามารถมองเห็นได้สาธารณะหรือไม่ รวมถึงวิธีการสร้าง URL "
"สำหรับการดาวน์โหลดสินทรัพย์เมื่อคำสั่งซื้อที่เกี่ยวข้องอยู่ในสถานะเสร็จสมบูรณ์"
-#: engine/core/models.py:1961
+#: engine/core/models.py:2091
msgid "download"
msgstr "ดาวน์โหลด"
-#: engine/core/models.py:1962
+#: engine/core/models.py:2092
msgid "downloads"
msgstr "ดาวน์โหลด"
-#: engine/core/serializers/utility.py:89
+#: engine/core/serializers/utility.py:91
msgid ""
"you must provide a comment, rating, and order product uuid to add feedback."
-msgstr ""
-"คุณต้องแสดงความคิดเห็น, ให้คะแนน, และระบุ uuid ของสินค้าเพื่อเพิ่มคำแนะนำ"
+msgstr "คุณต้องแสดงความคิดเห็น, ให้คะแนน, และระบุ uuid ของสินค้าเพื่อเพิ่มคำแนะนำ"
#: engine/core/sitemaps.py:25
msgid "Home"
@@ -2902,12 +2833,12 @@ msgstr "สวัสดีครับ/ค่ะ %(order.user.first_name)s,"
#, python-format
msgid ""
"thank you for your order #%(order.pk)s! we are pleased to inform you that\n"
-" we have taken your order into work. below are the details of your\n"
+" we have taken your order into work. below are "
+"the details of your\n"
" order:"
msgstr ""
"ขอบคุณสำหรับคำสั่งซื้อของคุณ #%(order.pk)s! "
-"เราขอแจ้งให้คุณทราบว่าเราได้ดำเนินการตามคำสั่งซื้อของคุณแล้ว "
-"รายละเอียดของคำสั่งซื้อของคุณมีดังนี้:"
+"เราขอแจ้งให้คุณทราบว่าเราได้ดำเนินการตามคำสั่งซื้อของคุณแล้ว รายละเอียดของคำสั่งซื้อของคุณมีดังนี้:"
#: engine/core/templates/digital_order_created_email.html:112
#: engine/core/templates/digital_order_delivered_email.html:110
@@ -2930,9 +2861,7 @@ msgstr "ราคาทั้งหมด"
msgid ""
"if you have any questions, feel free to contact our support at\n"
" %(config.EMAIL_HOST_USER)s."
-msgstr ""
-"หากคุณมีคำถามใด ๆ โปรดติดต่อทีมสนับสนุนของเราได้ที่ "
-"%(config.EMAIL_HOST_USER)s"
+msgstr "หากคุณมีคำถามใด ๆ โปรดติดต่อทีมสนับสนุนของเราได้ที่ %(config.EMAIL_HOST_USER)s"
#: engine/core/templates/digital_order_created_email.html:133
#, python-format
@@ -3011,11 +2940,12 @@ msgstr "ขอบคุณที่เข้าพักกับเรา! เ
#: engine/core/templates/shipped_order_created_email.html:101
#: engine/core/templates/shipped_order_delivered_email.html:101
msgid ""
-"thank you for your order! we are pleased to confirm your purchase. below are\n"
+"thank you for your order! we are pleased to confirm your purchase. below "
+"are\n"
" the details of your order:"
msgstr ""
-"ขอบคุณสำหรับการสั่งซื้อของคุณ! เราขอแจ้งยืนยันการสั่งซื้อของคุณเรียบร้อยแล้ว"
-" รายละเอียดการสั่งซื้อของคุณมีดังนี้:"
+"ขอบคุณสำหรับการสั่งซื้อของคุณ! เราขอแจ้งยืนยันการสั่งซื้อของคุณเรียบร้อยแล้ว "
+"รายละเอียดการสั่งซื้อของคุณมีดังนี้:"
#: engine/core/templates/shipped_order_created_email.html:123
#: engine/core/templates/shipped_order_delivered_email.html:123
@@ -3040,11 +2970,11 @@ msgid ""
" reserved"
msgstr "สงวนลิขสิทธิ์"
-#: engine/core/utils/caching.py:44
+#: engine/core/utils/caching.py:48
msgid "both data and timeout are required"
msgstr "จำเป็นต้องมีทั้งข้อมูลและเวลาหมดอายุ"
-#: engine/core/utils/caching.py:46
+#: engine/core/utils/caching.py:51
msgid "invalid timeout value, it must be between 0 and 216000 seconds"
msgstr "ค่าหมดเวลาไม่ถูกต้อง ต้องอยู่ระหว่าง 0 ถึง 216000 วินาที"
@@ -3053,17 +2983,17 @@ msgstr "ค่าหมดเวลาไม่ถูกต้อง ต้อ
msgid "{settings.PROJECT_NAME} | contact us initiated"
msgstr "{settings.PROJECT_NAME} | ติดต่อเรา เริ่มต้น"
-#: engine/core/utils/emailing.py:73
+#: engine/core/utils/emailing.py:81
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order confirmation"
msgstr "{settings.PROJECT_NAME} | ยืนยันการสั่งซื้อ"
-#: engine/core/utils/emailing.py:105
+#: engine/core/utils/emailing.py:115
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order delivered"
msgstr "{settings.PROJECT_NAME} | จัดส่งเรียบร้อย"
-#: engine/core/utils/emailing.py:188
+#: engine/core/utils/emailing.py:203
#, python-brace-format
msgid "{settings.PROJECT_NAME} | promocode granted"
msgstr "{settings.PROJECT_NAME} | รหัสโปรโมชั่นได้รับแล้ว"
@@ -3076,12 +3006,12 @@ msgstr "คุณไม่มีสิทธิ์ดำเนินการน
msgid "NOMINATIM_URL must be configured."
msgstr "ต้องกำหนดค่าพารามิเตอร์ NOMINATIM_URL!"
-#: engine/core/validators.py:19
+#: engine/core/validators.py:21
#, python-brace-format
msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels"
msgstr "ขนาดของภาพไม่ควรเกิน w{max_width} x h{max_height} พิกเซล!"
-#: engine/core/views.py:91
+#: engine/core/views.py:105
msgid ""
"Handles the request for the sitemap index and returns an XML response. It "
"ensures the response includes the appropriate content type header for XML."
@@ -3089,119 +3019,120 @@ msgstr ""
"จัดการคำขอสำหรับดัชนีแผนผังเว็บไซต์และส่งคืนการตอบสนองในรูปแบบ XML "
"โดยตรวจสอบให้แน่ใจว่าการตอบสนองมีหัวข้อประเภทเนื้อหาที่เหมาะสมสำหรับ XML"
-#: engine/core/views.py:106
+#: engine/core/views.py:120
msgid ""
"Handles the detailed view response for a sitemap. This function processes "
"the request, fetches the appropriate sitemap detail response, and sets the "
"Content-Type header for XML."
msgstr ""
-"จัดการการตอบสนองมุมมองรายละเอียดสำหรับแผนผังเว็บไซต์ ฟังก์ชันนี้ประมวลผลคำขอ"
-" ดึงการตอบสนองรายละเอียดแผนผังเว็บไซต์ที่เหมาะสม และตั้งค่าส่วนหัว Content-"
-"Type สำหรับ XML"
+"จัดการการตอบสนองมุมมองรายละเอียดสำหรับแผนผังเว็บไซต์ ฟังก์ชันนี้ประมวลผลคำขอ "
+"ดึงการตอบสนองรายละเอียดแผนผังเว็บไซต์ที่เหมาะสม และตั้งค่าส่วนหัว Content-Type สำหรับ XML"
-#: engine/core/views.py:141
+#: engine/core/views.py:156
msgid ""
"Returns a list of supported languages and their corresponding information."
msgstr "ส่งคืนรายการของภาษาที่รองรับและข้อมูลที่เกี่ยวข้อง"
-#: engine/core/views.py:173
+#: engine/core/views.py:183
msgid "Returns the parameters of the website as a JSON object."
msgstr "ส่งคืนพารามิเตอร์ของเว็บไซต์ในรูปแบบอ็อบเจ็กต์ JSON"
-#: engine/core/views.py:192
+#: engine/core/views.py:199
msgid ""
"Handles cache operations such as reading and setting cache data with a "
"specified key and timeout."
msgstr ""
-"จัดการการดำเนินการแคช เช่น "
-"การอ่านและการตั้งค่าข้อมูลแคชด้วยคีย์ที่กำหนดและเวลาหมดอายุ"
+"จัดการการดำเนินการแคช เช่น การอ่านและการตั้งค่าข้อมูลแคชด้วยคีย์ที่กำหนดและเวลาหมดอายุ"
-#: engine/core/views.py:219
+#: engine/core/views.py:221
msgid "Handles `contact us` form submissions."
msgstr "จัดการการส่งแบบฟอร์ม 'ติดต่อเรา'"
-#: engine/core/views.py:240
+#: engine/core/views.py:237
msgid ""
"Handles requests for processing and validating URLs from incoming POST "
"requests."
msgstr ""
-"จัดการคำขอสำหรับการประมวลผลและตรวจสอบความถูกต้องของ URL จากคำขอ POST "
-"ที่เข้ามา"
+"จัดการคำขอสำหรับการประมวลผลและตรวจสอบความถูกต้องของ URL จากคำขอ POST ที่เข้ามา"
-#: engine/core/views.py:280
+#: engine/core/views.py:274
msgid "Handles global search queries."
msgstr "จัดการคำค้นหาทั่วโลก"
-#: engine/core/views.py:295
+#: engine/core/views.py:290
msgid "Handles the logic of buying as a business without registration."
msgstr "จัดการตรรกะของการซื้อในฐานะธุรกิจโดยไม่ต้องจดทะเบียน"
-#: engine/core/views.py:332
+#: engine/core/views.py:338
msgid ""
"Handles the downloading of a digital asset associated with an order.\n"
-"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the digital asset file located in the "
+"storage directory of the project. If the file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
msgstr ""
"จัดการการดาวน์โหลดสินทรัพย์ดิจิทัลที่เกี่ยวข้องกับคำสั่งซื้อ "
-"ฟังก์ชันนี้พยายามให้บริการไฟล์สินทรัพย์ดิจิทัลที่อยู่ในไดเรกทอรีจัดเก็บของโครงการ"
-" หากไม่พบไฟล์ จะเกิดข้อผิดพลาด HTTP 404 เพื่อระบุว่าทรัพยากรไม่พร้อมใช้งาน"
+"ฟังก์ชันนี้พยายามให้บริการไฟล์สินทรัพย์ดิจิทัลที่อยู่ในไดเรกทอรีจัดเก็บของโครงการ หากไม่พบไฟล์ "
+"จะเกิดข้อผิดพลาด HTTP 404 เพื่อระบุว่าทรัพยากรไม่พร้อมใช้งาน"
-#: engine/core/views.py:343
+#: engine/core/views.py:349
msgid "order_product_uuid is required"
msgstr "order_product_uuid เป็นข้อมูลที่จำเป็น"
-#: engine/core/views.py:350
+#: engine/core/views.py:356
msgid "order product does not exist"
msgstr "คำสั่งซื้อสินค้าไม่มีอยู่"
-#: engine/core/views.py:353
+#: engine/core/views.py:359
msgid "you can only download the digital asset once"
msgstr "คุณสามารถดาวน์โหลดสินทรัพย์ดิจิทัลได้เพียงครั้งเดียวเท่านั้น"
-#: engine/core/views.py:356
+#: engine/core/views.py:363
msgid "the order must be paid before downloading the digital asset"
msgstr "คำสั่งซื้อจะต้องชำระเงินก่อนดาวน์โหลดสินทรัพย์ดิจิทัล"
-#: engine/core/views.py:362
+#: engine/core/views.py:370
msgid "the order product does not have a product"
msgstr "สินค้าตามคำสั่งซื้อไม่มีสินค้า"
-#: engine/core/views.py:399
+#: engine/core/views.py:414
msgid "favicon not found"
msgstr "ไม่พบไอคอนเว็บไซต์"
-#: engine/core/views.py:404
+#: engine/core/views.py:419
msgid ""
"Handles requests for the favicon of a website.\n"
-"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the favicon file located in the static "
+"directory of the project. If the favicon file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
msgstr ""
-"จัดการคำขอสำหรับไอคอนเว็บไซต์ (favicon) ฟังก์ชันนี้พยายามให้บริการไฟล์ "
-"favicon ที่อยู่ในไดเรกทอรีแบบคงที่ของโปรเจกต์ หากไม่พบไฟล์ favicon "
-"จะเกิดข้อผิดพลาด HTTP 404 เพื่อแสดงว่าทรัพยากรไม่พร้อมใช้งาน"
+"จัดการคำขอสำหรับไอคอนเว็บไซต์ (favicon) ฟังก์ชันนี้พยายามให้บริการไฟล์ favicon "
+"ที่อยู่ในไดเรกทอรีแบบคงที่ของโปรเจกต์ หากไม่พบไฟล์ favicon จะเกิดข้อผิดพลาด HTTP 404 "
+"เพื่อแสดงว่าทรัพยากรไม่พร้อมใช้งาน"
-#: engine/core/views.py:416
+#: engine/core/views.py:431
msgid ""
-"Redirects the request to the admin index page. The function handles incoming"
-" HTTP requests and redirects them to the Django admin interface index page. "
+"Redirects the request to the admin index page. The function handles incoming "
+"HTTP requests and redirects them to the Django admin interface index page. "
"It uses Django's `redirect` function for handling the HTTP redirection."
msgstr ""
"เปลี่ยนเส้นทางคำขอไปยังหน้าดัชนีของผู้ดูแลระบบ ฟังก์ชันนี้จัดการคำขอ HTTP "
-"ที่เข้ามาและเปลี่ยนเส้นทางไปยังหน้าดัชนีของอินเทอร์เฟซผู้ดูแลระบบ Django "
-"โดยใช้ฟังก์ชัน `redirect` ของ Django สำหรับการเปลี่ยนเส้นทาง HTTP"
+"ที่เข้ามาและเปลี่ยนเส้นทางไปยังหน้าดัชนีของอินเทอร์เฟซผู้ดูแลระบบ Django โดยใช้ฟังก์ชัน "
+"`redirect` ของ Django สำหรับการเปลี่ยนเส้นทาง HTTP"
-#: engine/core/views.py:429
+#: engine/core/views.py:443
msgid "Returns current version of the eVibes. "
msgstr "ส่งคืนเวอร์ชันปัจจุบันของ eVibes"
-#: engine/core/views.py:623 engine/core/views.py:636
+#: engine/core/views.py:672 engine/core/views.py:687
#, python-format
msgid "Revenue & Orders (last %(days)d)"
msgstr "รายได้และคำสั่งซื้อ (ล่าสุด %(days)d)"
-#: engine/core/views.py:793
+#: engine/core/views.py:868
msgid "Returns custom variables for Dashboard. "
msgstr "ส่งคืนตัวแปรที่กำหนดเองสำหรับแดชบอร์ด"
-#: engine/core/viewsets.py:136
+#: engine/core/viewsets.py:139
msgid ""
"Defines a viewset for managing Evibes-related operations. The EvibesViewSet "
"class inherits from ModelViewSet and provides functionality for handling "
@@ -3209,27 +3140,25 @@ msgid ""
"serializer classes based on the current action, customizable permissions, "
"and rendering formats."
msgstr ""
-"กำหนดชุดมุมมองสำหรับการจัดการการดำเนินการที่เกี่ยวข้องกับ Evibes คลาส "
-"EvibesViewSet สืบทอดมาจาก ModelViewSet "
-"และให้ฟังก์ชันการทำงานสำหรับการจัดการการกระทำและการดำเนินการบนเอนทิตีของ "
-"Evibes รวมถึงการรองรับคลาสตัวแปลงแบบไดนามิกตามการกระทำปัจจุบัน "
-"การอนุญาตที่ปรับแต่งได้ และรูปแบบการแสดงผล"
+"กำหนดชุดมุมมองสำหรับการจัดการการดำเนินการที่เกี่ยวข้องกับ Evibes คลาส EvibesViewSet "
+"สืบทอดมาจาก ModelViewSet "
+"และให้ฟังก์ชันการทำงานสำหรับการจัดการการกระทำและการดำเนินการบนเอนทิตีของ Evibes "
+"รวมถึงการรองรับคลาสตัวแปลงแบบไดนามิกตามการกระทำปัจจุบัน การอนุญาตที่ปรับแต่งได้ "
+"และรูปแบบการแสดงผล"
-#: engine/core/viewsets.py:156
+#: engine/core/viewsets.py:160
msgid ""
-"Represents a viewset for managing AttributeGroup objects. Handles operations"
-" related to AttributeGroup, including filtering, serialization, and "
-"retrieval of data. This class is part of the application's API layer and "
-"provides a standardized way to process requests and responses for "
-"AttributeGroup data."
+"Represents a viewset for managing AttributeGroup objects. Handles operations "
+"related to AttributeGroup, including filtering, serialization, and retrieval "
+"of data. This class is part of the application's API layer and provides a "
+"standardized way to process requests and responses for AttributeGroup data."
msgstr ""
-"แสดงชุดมุมมองสำหรับการจัดการวัตถุ AttributeGroup ดำเนินการที่เกี่ยวข้องกับ "
-"AttributeGroup รวมถึงการกรอง การแปลงข้อมูลเป็นรูปแบบที่ส่งผ่านได้ "
-"และการดึงข้อมูล คลาสนี้เป็นส่วนหนึ่งของชั้น API "
-"ของแอปพลิเคชันและให้วิธีการมาตรฐานในการประมวลผลคำขอและการตอบสนองสำหรับข้อมูล"
-" AttributeGroup"
+"แสดงชุดมุมมองสำหรับการจัดการวัตถุ AttributeGroup ดำเนินการที่เกี่ยวข้องกับ AttributeGroup "
+"รวมถึงการกรอง การแปลงข้อมูลเป็นรูปแบบที่ส่งผ่านได้ และการดึงข้อมูล คลาสนี้เป็นส่วนหนึ่งของชั้น "
+"API ของแอปพลิเคชันและให้วิธีการมาตรฐานในการประมวลผลคำขอและการตอบสนองสำหรับข้อมูล "
+"AttributeGroup"
-#: engine/core/viewsets.py:175
+#: engine/core/viewsets.py:179
msgid ""
"Handles operations related to Attribute objects within the application. "
"Provides a set of API endpoints to interact with Attribute data. This class "
@@ -3238,28 +3167,26 @@ msgid ""
"specific fields or retrieving detailed versus simplified information "
"depending on the request."
msgstr ""
-"จัดการการดำเนินการที่เกี่ยวข้องกับวัตถุ Attribute ภายในแอปพลิเคชัน "
-"ให้ชุดของจุดสิ้นสุด API สำหรับการโต้ตอบกับข้อมูล Attribute "
-"คลาสนี้จัดการการค้นหา การกรอง และการแปลงวัตถุ Attribute เป็นรูปแบบที่อ่านได้"
-" ช่วยให้สามารถควบคุมข้อมูลที่ส่งคืนได้อย่างยืดหยุ่น เช่น "
-"การกรองตามฟิลด์เฉพาะ หรือการดึงข้อมูลแบบละเอียดหรือแบบย่อ "
-"ขึ้นอยู่กับความต้องการของคำขอ"
+"จัดการการดำเนินการที่เกี่ยวข้องกับวัตถุ Attribute ภายในแอปพลิเคชัน ให้ชุดของจุดสิ้นสุด API "
+"สำหรับการโต้ตอบกับข้อมูล Attribute คลาสนี้จัดการการค้นหา การกรอง และการแปลงวัตถุ "
+"Attribute เป็นรูปแบบที่อ่านได้ ช่วยให้สามารถควบคุมข้อมูลที่ส่งคืนได้อย่างยืดหยุ่น เช่น "
+"การกรองตามฟิลด์เฉพาะ หรือการดึงข้อมูลแบบละเอียดหรือแบบย่อ ขึ้นอยู่กับความต้องการของคำขอ"
-#: engine/core/viewsets.py:194
+#: engine/core/viewsets.py:198
msgid ""
"A viewset for managing AttributeValue objects. This viewset provides "
"functionality for listing, retrieving, creating, updating, and deleting "
"AttributeValue objects. It integrates with Django REST Framework's viewset "
-"mechanisms and uses appropriate serializers for different actions. Filtering"
-" capabilities are provided through the DjangoFilterBackend."
+"mechanisms and uses appropriate serializers for different actions. Filtering "
+"capabilities are provided through the DjangoFilterBackend."
msgstr ""
"ชุดมุมมองสำหรับการจัดการวัตถุ AttributeValue "
-"ชุดมุมมองนี้ให้ฟังก์ชันการทำงานสำหรับการแสดงรายการ การดึงข้อมูล การสร้าง "
-"การอัปเดต และการลบวัตถุ AttributeValue มันผสานรวมกับกลไกชุดมุมมองของ Django "
-"REST Framework และใช้ตัวแปลงข้อมูลที่เหมาะสมสำหรับแต่ละการกระทำ "
-"ความสามารถในการกรองข้อมูลมีให้ผ่าน DjangoFilterBackend"
+"ชุดมุมมองนี้ให้ฟังก์ชันการทำงานสำหรับการแสดงรายการ การดึงข้อมูล การสร้าง การอัปเดต "
+"และการลบวัตถุ AttributeValue มันผสานรวมกับกลไกชุดมุมมองของ Django REST Framework "
+"และใช้ตัวแปลงข้อมูลที่เหมาะสมสำหรับแต่ละการกระทำ ความสามารถในการกรองข้อมูลมีให้ผ่าน "
+"DjangoFilterBackend"
-#: engine/core/viewsets.py:213
+#: engine/core/viewsets.py:217
msgid ""
"Manages views for Category-related operations. The CategoryViewSet class is "
"responsible for handling operations related to the Category model in the "
@@ -3268,25 +3195,22 @@ msgid ""
"can access specific data."
msgstr ""
"จัดการมุมมองสำหรับการดำเนินการที่เกี่ยวข้องกับหมวดหมู่ คลาส CategoryViewSet "
-"รับผิดชอบในการจัดการการดำเนินการที่เกี่ยวข้องกับโมเดลหมวดหมู่ในระบบ "
-"มันรองรับการดึงข้อมูล การกรอง และการแปลงข้อมูลหมวดหมู่เป็นรูปแบบที่ส่งต่อได้"
-" "
+"รับผิดชอบในการจัดการการดำเนินการที่เกี่ยวข้องกับโมเดลหมวดหมู่ในระบบ มันรองรับการดึงข้อมูล "
+"การกรอง และการแปลงข้อมูลหมวดหมู่เป็นรูปแบบที่ส่งต่อได้ "
"ชุดมุมมองนี้ยังบังคับใช้สิทธิ์การเข้าถึงเพื่อให้แน่ใจว่าเฉพาะผู้ใช้ที่ได้รับอนุญาตเท่านั้นที่สามารถเข้าถึงข้อมูลเฉพาะได้"
-#: engine/core/viewsets.py:326
+#: engine/core/viewsets.py:346
msgid ""
"Represents a viewset for managing Brand instances. This class provides "
"functionality for querying, filtering, and serializing Brand objects. It "
"uses Django's ViewSet framework to simplify the implementation of API "
"endpoints for Brand objects."
msgstr ""
-"แทนชุดมุมมองสำหรับการจัดการอินสแตนซ์ของแบรนด์ "
-"คลาสนี้ให้ฟังก์ชันการทำงานสำหรับการค้นหา การกรอง "
-"และการแปลงออบเจ็กต์แบรนด์เป็นรูปแบบที่ส่งผ่านได้ โดยใช้เฟรมเวิร์ก ViewSet "
-"ของ Django เพื่อทำให้การพัฒนาระบบจุดสิ้นสุด API "
-"สำหรับออบเจ็กต์แบรนด์เป็นเรื่องง่ายขึ้น"
+"แทนชุดมุมมองสำหรับการจัดการอินสแตนซ์ของแบรนด์ คลาสนี้ให้ฟังก์ชันการทำงานสำหรับการค้นหา "
+"การกรอง และการแปลงออบเจ็กต์แบรนด์เป็นรูปแบบที่ส่งผ่านได้ โดยใช้เฟรมเวิร์ก ViewSet ของ "
+"Django เพื่อทำให้การพัฒนาระบบจุดสิ้นสุด API สำหรับออบเจ็กต์แบรนด์เป็นเรื่องง่ายขึ้น"
-#: engine/core/viewsets.py:438
+#: engine/core/viewsets.py:458
msgid ""
"Manages operations related to the `Product` model in the system. This class "
"provides a viewset for managing products, including their filtering, "
@@ -3299,11 +3223,11 @@ msgstr ""
"จัดการการดำเนินงานที่เกี่ยวข้องกับโมเดล `Product` ในระบบ "
"คลาสนี้ให้ชุดมุมมองสำหรับการจัดการผลิตภัณฑ์ รวมถึงการกรอง การแปลงเป็นลำดับ "
"และปฏิบัติการบนอินสแตนซ์เฉพาะ มันขยายจาก `EvibesViewSet` "
-"เพื่อใช้ฟังก์ชันทั่วไปและผสานรวมกับเฟรมเวิร์ก Django REST สำหรับการดำเนินการ"
-" API แบบ RESTful รวมถึงวิธีการสำหรับการดึงรายละเอียดผลิตภัณฑ์ การใช้สิทธิ์ "
+"เพื่อใช้ฟังก์ชันทั่วไปและผสานรวมกับเฟรมเวิร์ก Django REST สำหรับการดำเนินการ API แบบ "
+"RESTful รวมถึงวิธีการสำหรับการดึงรายละเอียดผลิตภัณฑ์ การใช้สิทธิ์ "
"และการเข้าถึงข้อเสนอแนะที่เกี่ยวข้องของผลิตภัณฑ์"
-#: engine/core/viewsets.py:574
+#: engine/core/viewsets.py:605
msgid ""
"Represents a viewset for managing Vendor objects. This viewset allows "
"fetching, filtering, and serializing Vendor data. It defines the queryset, "
@@ -3311,99 +3235,93 @@ msgid ""
"actions. The purpose of this class is to provide streamlined access to "
"Vendor-related resources through the Django REST framework."
msgstr ""
-"แสดงชุดมุมมองสำหรับการจัดการวัตถุ Vendor ชุดมุมมองนี้อนุญาตให้ดึงข้อมูล กรอง"
-" และแปลงข้อมูล Vendor เป็นรูปแบบที่อ่านได้ ชุดมุมมองนี้กำหนด queryset "
-"การกำหนดค่าตัวกรอง และคลาส serializer ที่ใช้จัดการการดำเนินการต่างๆ "
+"แสดงชุดมุมมองสำหรับการจัดการวัตถุ Vendor ชุดมุมมองนี้อนุญาตให้ดึงข้อมูล กรอง และแปลงข้อมูล "
+"Vendor เป็นรูปแบบที่อ่านได้ ชุดมุมมองนี้กำหนด queryset การกำหนดค่าตัวกรอง และคลาส "
+"serializer ที่ใช้จัดการการดำเนินการต่างๆ "
"วัตถุประสงค์ของคลาสนี้คือการให้การเข้าถึงทรัพยากรที่เกี่ยวข้องกับ Vendor "
"อย่างมีประสิทธิภาพผ่านกรอบงาน Django REST"
-#: engine/core/viewsets.py:594
+#: engine/core/viewsets.py:625
msgid ""
"Representation of a view set handling Feedback objects. This class manages "
"operations related to Feedback objects, including listing, filtering, and "
"retrieving details. The purpose of this view set is to provide different "
-"serializers for different actions and implement permission-based handling of"
-" accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
+"serializers for different actions and implement permission-based handling of "
+"accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
"use of Django's filtering system for querying data."
msgstr ""
-"การแสดงชุดมุมมองที่จัดการวัตถุข้อเสนอแนะ "
-"คลาสนี้จัดการการดำเนินการที่เกี่ยวข้องกับวัตถุข้อเสนอแนะ รวมถึงการแสดงรายการ"
-" การกรอง และการดึงรายละเอียด "
-"วัตถุประสงค์ของชุดมุมมองนี้คือการจัดเตรียมตัวแปลงอนุกรมที่แตกต่างกันสำหรับการดำเนินการต่างๆ"
-" และจัดการวัตถุข้อเสนอแนะที่เข้าถึงได้บนพื้นฐานของสิทธิ์ มันขยายคลาสพื้นฐาน "
-"`EvibesViewSet` และใช้ระบบกรองของ Django สำหรับการสืบค้นข้อมูล"
+"การแสดงชุดมุมมองที่จัดการวัตถุข้อเสนอแนะ คลาสนี้จัดการการดำเนินการที่เกี่ยวข้องกับวัตถุข้อเสนอแนะ "
+"รวมถึงการแสดงรายการ การกรอง และการดึงรายละเอียด "
+"วัตถุประสงค์ของชุดมุมมองนี้คือการจัดเตรียมตัวแปลงอนุกรมที่แตกต่างกันสำหรับการดำเนินการต่างๆ "
+"และจัดการวัตถุข้อเสนอแนะที่เข้าถึงได้บนพื้นฐานของสิทธิ์ มันขยายคลาสพื้นฐาน `EvibesViewSet` "
+"และใช้ระบบกรองของ Django สำหรับการสืบค้นข้อมูล"
-#: engine/core/viewsets.py:621
+#: engine/core/viewsets.py:652
msgid ""
"ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes "
"various endpoints for handling order operations such as adding or removing "
-"products, performing purchases for registered as well as unregistered users,"
-" and retrieving the current authenticated user's pending orders. The ViewSet"
-" uses multiple serializers based on the specific action being performed and "
+"products, performing purchases for registered as well as unregistered users, "
+"and retrieving the current authenticated user's pending orders. The ViewSet "
+"uses multiple serializers based on the specific action being performed and "
"enforces permissions accordingly while interacting with order data."
msgstr ""
-"ViewSet สำหรับการจัดการคำสั่งซื้อและกิจกรรมที่เกี่ยวข้อง "
-"คลาสนี้ให้ฟังก์ชันการทำงานในการดึงข้อมูล แก้ไข และจัดการอ็อบเจ็กต์คำสั่งซื้อ"
-" รวมถึงจุดสิ้นสุดต่างๆ สำหรับการจัดการคำสั่งซื้อ เช่น "
-"การเพิ่มหรือลบผลิตภัณฑ์ "
-"การดำเนินการซื้อสำหรับผู้ใช้ที่ลงทะเบียนและไม่ได้ลงทะเบียน "
+"ViewSet สำหรับการจัดการคำสั่งซื้อและกิจกรรมที่เกี่ยวข้อง คลาสนี้ให้ฟังก์ชันการทำงานในการดึงข้อมูล "
+"แก้ไข และจัดการอ็อบเจ็กต์คำสั่งซื้อ รวมถึงจุดสิ้นสุดต่างๆ สำหรับการจัดการคำสั่งซื้อ เช่น "
+"การเพิ่มหรือลบผลิตภัณฑ์ การดำเนินการซื้อสำหรับผู้ใช้ที่ลงทะเบียนและไม่ได้ลงทะเบียน "
"และการดึงคำสั่งซื้อที่รอดำเนินการของผู้ใช้ที่เข้าสู่ระบบปัจจุบัน ViewSet "
"ใช้ตัวแปลงข้อมูลหลายแบบตามการกระทำที่เฉพาะเจาะจงและบังคับใช้สิทธิ์การเข้าถึงอย่างเหมาะสมขณะโต้ตอบกับข้อมูลคำสั่งซื้อ"
-#: engine/core/viewsets.py:825
+#: engine/core/viewsets.py:914
msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It "
-"includes filtering, permission checks, and serializer switching based on the"
-" requested action. Additionally, it provides a detailed action for handling "
+"includes filtering, permission checks, and serializer switching based on the "
+"requested action. Additionally, it provides a detailed action for handling "
"feedback on OrderProduct instances"
msgstr ""
-"ให้ชุดมุมมองสำหรับการจัดการเอนทิตี OrderProduct "
-"ชุดมุมมองนี้ช่วยให้สามารถดำเนินการ CRUD และดำเนินการเฉพาะที่เกี่ยวกับโมเดล "
-"OrderProduct รวมถึงการกรอง การตรวจสอบสิทธิ์ "
+"ให้ชุดมุมมองสำหรับการจัดการเอนทิตี OrderProduct ชุดมุมมองนี้ช่วยให้สามารถดำเนินการ CRUD "
+"และดำเนินการเฉพาะที่เกี่ยวกับโมเดล OrderProduct รวมถึงการกรอง การตรวจสอบสิทธิ์ "
"และการสลับตัวแปลงตามการดำเนินการที่ร้องขอ "
-"นอกจากนี้ยังมีรายละเอียดการดำเนินการสำหรับการจัดการข้อเสนอแนะเกี่ยวกับอินสแตนซ์ของ"
-" OrderProduct"
+"นอกจากนี้ยังมีรายละเอียดการดำเนินการสำหรับการจัดการข้อเสนอแนะเกี่ยวกับอินสแตนซ์ของ "
+"OrderProduct"
-#: engine/core/viewsets.py:879
+#: engine/core/viewsets.py:974
msgid "Manages operations related to Product images in the application. "
msgstr "จัดการการดำเนินงานที่เกี่ยวข้องกับภาพผลิตภัณฑ์ในแอปพลิเคชัน"
-#: engine/core/viewsets.py:892
+#: engine/core/viewsets.py:988
msgid ""
"Manages the retrieval and handling of PromoCode instances through various "
"API actions."
-msgstr ""
-"จัดการการดึงและการจัดการของตัวอย่าง PromoCode ผ่านการกระทำของ API ต่าง ๆ"
+msgstr "จัดการการดึงและการจัดการของตัวอย่าง PromoCode ผ่านการกระทำของ API ต่าง ๆ"
-#: engine/core/viewsets.py:914
+#: engine/core/viewsets.py:1019
msgid "Represents a view set for managing promotions. "
msgstr "แสดงมุมมองที่ตั้งค่าไว้สำหรับการจัดการโปรโมชั่น"
-#: engine/core/viewsets.py:927
+#: engine/core/viewsets.py:1032
msgid "Handles operations related to Stock data in the system."
msgstr "จัดการการดำเนินงานที่เกี่ยวข้องกับข้อมูลสต็อกในระบบ"
-#: engine/core/viewsets.py:941
+#: engine/core/viewsets.py:1046
msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the "
-"retrieval, modification, and customization of products within the wish list."
-" This ViewSet facilitates functionality such as adding, removing, and bulk "
+"retrieval, modification, and customization of products within the wish list. "
+"This ViewSet facilitates functionality such as adding, removing, and bulk "
"actions for wishlist products. Permission checks are integrated to ensure "
"that users can only manage their own wishlists unless explicit permissions "
"are granted."
msgstr ""
-"ViewSet สำหรับการจัดการการดำเนินการในรายการที่ต้องการ (Wishlist) "
-"WishlistViewSet ให้จุดเชื่อมต่อสำหรับการโต้ตอบกับรายการที่ต้องการของผู้ใช้ "
-"ซึ่งช่วยให้สามารถดึงข้อมูล แก้ไข และปรับแต่งผลิตภัณฑ์ในรายการที่ต้องการได้ "
-"ViewSet นี้อำนวยความสะดวกในการทำงาน เช่น การเพิ่ม การลบ "
-"และการดำเนินการแบบกลุ่มสำหรับผลิตภัณฑ์ในรายการที่ต้องการ "
-"มีการตรวจสอบสิทธิ์เพื่อรับรองว่าผู้ใช้สามารถจัดการรายการที่ต้องการของตนเองเท่านั้น"
-" เว้นแต่จะได้รับสิทธิ์อนุญาตอย่างชัดเจน"
+"ViewSet สำหรับการจัดการการดำเนินการในรายการที่ต้องการ (Wishlist) WishlistViewSet "
+"ให้จุดเชื่อมต่อสำหรับการโต้ตอบกับรายการที่ต้องการของผู้ใช้ ซึ่งช่วยให้สามารถดึงข้อมูล แก้ไข "
+"และปรับแต่งผลิตภัณฑ์ในรายการที่ต้องการได้ ViewSet นี้อำนวยความสะดวกในการทำงาน เช่น "
+"การเพิ่ม การลบ และการดำเนินการแบบกลุ่มสำหรับผลิตภัณฑ์ในรายการที่ต้องการ "
+"มีการตรวจสอบสิทธิ์เพื่อรับรองว่าผู้ใช้สามารถจัดการรายการที่ต้องการของตนเองเท่านั้น "
+"เว้นแต่จะได้รับสิทธิ์อนุญาตอย่างชัดเจน"
-#: engine/core/viewsets.py:1056
+#: engine/core/viewsets.py:1183
msgid ""
"This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom "
@@ -3413,16 +3331,15 @@ msgid ""
msgstr ""
"คลาสนี้ให้ฟังก์ชันการทำงานของ viewset สำหรับจัดการออบเจ็กต์ `Address` คลาส "
"AddressViewSet ช่วยให้สามารถดำเนินการ CRUD การกรอง "
-"และการดำเนินการที่กำหนดเองที่เกี่ยวข้องกับเอนทิตีที่อยู่ "
-"รวมถึงพฤติกรรมเฉพาะสำหรับวิธีการ HTTP ที่แตกต่างกัน การแทนที่ตัวแปลงข้อมูล "
-"และการจัดการสิทธิ์ตามบริบทของคำขอ"
+"และการดำเนินการที่กำหนดเองที่เกี่ยวข้องกับเอนทิตีที่อยู่ รวมถึงพฤติกรรมเฉพาะสำหรับวิธีการ HTTP "
+"ที่แตกต่างกัน การแทนที่ตัวแปลงข้อมูล และการจัดการสิทธิ์ตามบริบทของคำขอ"
-#: engine/core/viewsets.py:1123
+#: engine/core/viewsets.py:1254
#, python-brace-format
msgid "Geocoding error: {e}"
msgstr "ข้อผิดพลาดในการแปลงพิกัดภูมิศาสตร์: {e}"
-#: engine/core/viewsets.py:1131
+#: engine/core/viewsets.py:1262
msgid ""
"Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing "
diff --git a/engine/core/locale/tr_TR/LC_MESSAGES/django.po b/engine/core/locale/tr_TR/LC_MESSAGES/django.po
index a526655b..ecb7e01e 100644
--- a/engine/core/locale/tr_TR/LC_MESSAGES/django.po
+++ b/engine/core/locale/tr_TR/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 22:12+0300\n"
+"POT-Creation-Date: 2025-12-18 19:09+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -27,113 +27,112 @@ msgstr ""
msgid "is active"
msgstr "Aktif mi"
-#: engine/core/abstract.py:21
+#: engine/core/abstract.py:22
msgid ""
-"if set to false, this object can't be seen by users without needed "
-"permission"
+"if set to false, this object can't be seen by users without needed permission"
msgstr ""
"false olarak ayarlanırsa, bu nesne gerekli izne sahip olmayan kullanıcılar "
"tarafından görülemez"
-#: engine/core/abstract.py:23 engine/core/choices.py:18
+#: engine/core/abstract.py:26 engine/core/choices.py:18
msgid "created"
msgstr "Oluşturuldu"
-#: engine/core/abstract.py:23
+#: engine/core/abstract.py:26
msgid "when the object first appeared on the database"
msgstr "Nesne veritabanında ilk kez göründüğünde"
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "modified"
msgstr "Değiştirilmiş"
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "when the object was last modified"
msgstr "Nesne en son ne zaman düzenlendi"
-#: engine/core/admin.py:85
+#: engine/core/admin.py:94
msgid "translations"
msgstr "Çeviriler"
-#: engine/core/admin.py:89
+#: engine/core/admin.py:102
msgid "general"
msgstr "Genel"
-#: engine/core/admin.py:91
+#: engine/core/admin.py:106
msgid "relations"
msgstr "İlişkiler"
-#: engine/core/admin.py:93
+#: engine/core/admin.py:111
msgid "additional info"
msgstr "EK BİLGİ"
-#: engine/core/admin.py:111
+#: engine/core/admin.py:133
msgid "metadata"
msgstr "Metadata"
-#: engine/core/admin.py:118
+#: engine/core/admin.py:141
msgid "timestamps"
msgstr "Zaman Damgaları"
-#: engine/core/admin.py:133
+#: engine/core/admin.py:157
#, python-format
msgid "activate selected %(verbose_name_plural)s"
msgstr "Seçili %(verbose_name_plural)s'ı etkinleştirin"
-#: engine/core/admin.py:138
+#: engine/core/admin.py:165
msgid "selected items have been activated."
msgstr "Seçilen öğeler etkinleştirildi!"
-#: engine/core/admin.py:144
+#: engine/core/admin.py:173
#, python-format
msgid "deactivate selected %(verbose_name_plural)s"
msgstr "Seçili %(verbose_name_plural)s'ı devre dışı bırak"
-#: engine/core/admin.py:149
+#: engine/core/admin.py:183
msgid "selected items have been deactivated."
msgstr "Seçilen öğeler devre dışı bırakıldı!"
-#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586
-#: engine/core/graphene/object_types.py:593 engine/core/models.py:801
-#: engine/core/models.py:809
+#: engine/core/admin.py:195 engine/core/graphene/object_types.py:650
+#: engine/core/graphene/object_types.py:657 engine/core/models.py:824
+#: engine/core/models.py:832
msgid "attribute value"
msgstr "Öznitelik Değeri"
-#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75
-#: engine/core/models.py:810
+#: engine/core/admin.py:196 engine/core/graphene/object_types.py:75
+#: engine/core/models.py:833
msgid "attribute values"
msgstr "Öznitelik Değerleri"
-#: engine/core/admin.py:172
+#: engine/core/admin.py:207
msgid "image"
msgstr "Resim"
-#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474
+#: engine/core/admin.py:208 engine/core/graphene/object_types.py:527
msgid "images"
msgstr "Görüntüler"
-#: engine/core/admin.py:184 engine/core/models.py:566
+#: engine/core/admin.py:219 engine/core/models.py:587
msgid "stock"
msgstr "Stok"
-#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640
+#: engine/core/admin.py:220 engine/core/graphene/object_types.py:710
msgid "stocks"
msgstr "Stoklar"
-#: engine/core/admin.py:196 engine/core/models.py:1818
+#: engine/core/admin.py:231 engine/core/models.py:1930
msgid "order product"
msgstr "Ürün Siparişi"
-#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389
-#: engine/core/models.py:1819
+#: engine/core/admin.py:232 engine/core/graphene/object_types.py:438
+#: engine/core/models.py:1931
msgid "order products"
msgstr "Sipariş Ürünleri"
-#: engine/core/admin.py:210 engine/core/admin.py:211
+#: engine/core/admin.py:250 engine/core/admin.py:251
msgid "children"
msgstr "Çocuklar"
-#: engine/core/admin.py:977
+#: engine/core/admin.py:1059
msgid "Config"
msgstr "Konfigürasyon"
@@ -157,8 +156,7 @@ msgstr "Teslim edildi"
msgid "canceled"
msgstr "İptal edildi"
-#: engine/core/choices.py:8 engine/core/choices.py:16
-#: engine/core/choices.py:24
+#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24
msgid "failed"
msgstr "Başarısız"
@@ -186,11 +184,11 @@ msgstr "Momental"
msgid "successful"
msgstr "Başarılı"
-#: engine/core/docs/drf/views.py:31
+#: engine/core/docs/drf/views.py:30
msgid "OpenAPI schema in selected format with selected language"
msgstr "Seçilen dilde seçilen formatta OpenAPI şeması"
-#: engine/core/docs/drf/views.py:33
+#: engine/core/docs/drf/views.py:32
msgid ""
"OpenApi3 schema for this API. Format can be selected via content "
"negotiation. Language can be selected with Accept-Language and query "
@@ -199,48 +197,49 @@ msgstr ""
"Bu API için OpenApi3 şeması. Format, içerik anlaşması yoluyla seçilebilir. "
"Dil, hem Accept-Language hem de sorgu parametresi ile seçilebilir."
-#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37
+#: engine/core/docs/drf/views.py:43 engine/core/graphene/mutations.py:37
msgid "cache I/O"
msgstr "Önbellek I/O"
-#: engine/core/docs/drf/views.py:46
+#: engine/core/docs/drf/views.py:45
msgid ""
"apply only a key to read permitted data from cache.\n"
"apply key, data and timeout with authentication to write data to cache."
msgstr ""
-"Önbellekten izin verilen verileri okumak için yalnızca bir anahtar uygulayın.\n"
-"Önbelleğe veri yazmak için kimlik doğrulama ile anahtar, veri ve zaman aşımı uygulayın."
+"Önbellekten izin verilen verileri okumak için yalnızca bir anahtar "
+"uygulayın.\n"
+"Önbelleğe veri yazmak için kimlik doğrulama ile anahtar, veri ve zaman aşımı "
+"uygulayın."
-#: engine/core/docs/drf/views.py:62
+#: engine/core/docs/drf/views.py:63
msgid "get a list of supported languages"
msgstr "Desteklenen dillerin bir listesini alın"
-#: engine/core/docs/drf/views.py:74
+#: engine/core/docs/drf/views.py:75
msgid "get application's exposable parameters"
msgstr "Uygulamanın açığa çıkarılabilir parametrelerini alın"
-#: engine/core/docs/drf/views.py:84
+#: engine/core/docs/drf/views.py:89
msgid "send a message to the support team"
msgstr "Destek ekibine bir mesaj gönderin"
-#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57
+#: engine/core/docs/drf/views.py:103 engine/core/graphene/mutations.py:59
msgid "request a CORSed URL"
msgstr "CORS'lu bir URL isteyin. Yalnızca https'ye izin verilir."
-#: engine/core/docs/drf/views.py:112
+#: engine/core/docs/drf/views.py:119
msgid "Search between products, categories and brands"
msgstr "Ürünler, kategoriler ve markalar arasında arama"
-#: engine/core/docs/drf/views.py:130
+#: engine/core/docs/drf/views.py:141
msgid "global search endpoint to query across project's tables"
-msgstr ""
-"Proje tabloları arasında sorgulama yapmak için global arama uç noktası"
+msgstr "Proje tabloları arasında sorgulama yapmak için global arama uç noktası"
-#: engine/core/docs/drf/views.py:139
+#: engine/core/docs/drf/views.py:150
msgid "purchase an order as a business"
msgstr "İşletme olarak bir sipariş satın alın"
-#: engine/core/docs/drf/views.py:146
+#: engine/core/docs/drf/views.py:158
msgid ""
"purchase an order as a business, using the provided `products` with "
"`product_uuid` and `attributes`."
@@ -248,260 +247,257 @@ msgstr ""
"Sağlanan `products` ile `product_uuid` ve `attributes` öğelerini kullanarak "
"bir siparişi işletme olarak satın alın."
-#: engine/core/docs/drf/views.py:164
+#: engine/core/docs/drf/views.py:177
msgid "download a digital asset from purchased digital order"
msgstr "satın alınan dijital siparişten bir dijital varlık indirme"
-#: engine/core/docs/drf/viewsets.py:61
+#: engine/core/docs/drf/viewsets.py:65
msgid "list all attribute groups (simple view)"
msgstr "Tüm öznitelik gruplarını listeleme (basit görünüm)"
-#: engine/core/docs/drf/viewsets.py:68
+#: engine/core/docs/drf/viewsets.py:75
msgid "retrieve a single attribute group (detailed view)"
msgstr "Tek bir öznitelik grubunu alma (ayrıntılı görünüm)"
-#: engine/core/docs/drf/viewsets.py:75
+#: engine/core/docs/drf/viewsets.py:82
msgid "create an attribute group"
msgstr "Öznitelik grubu oluşturma"
-#: engine/core/docs/drf/viewsets.py:82
+#: engine/core/docs/drf/viewsets.py:92
msgid "delete an attribute group"
msgstr "Öznitelik grubunu silme"
-#: engine/core/docs/drf/viewsets.py:89
+#: engine/core/docs/drf/viewsets.py:99
msgid "rewrite an existing attribute group saving non-editables"
msgstr ""
"Düzenlenemeyenleri kaydederek mevcut bir öznitelik grubunu yeniden yazma"
-#: engine/core/docs/drf/viewsets.py:96
-msgid ""
-"rewrite some fields of an existing attribute group saving non-editables"
+#: engine/core/docs/drf/viewsets.py:107
+msgid "rewrite some fields of an existing attribute group saving non-editables"
msgstr ""
-"Mevcut bir öznitelik grubunun bazı alanlarını düzenlenemez olarak kaydederek"
-" yeniden yazın"
+"Mevcut bir öznitelik grubunun bazı alanlarını düzenlenemez olarak kaydederek "
+"yeniden yazın"
-#: engine/core/docs/drf/viewsets.py:106
+#: engine/core/docs/drf/viewsets.py:118
msgid "list all attributes (simple view)"
msgstr "Tüm öznitelikleri listele (basit görünüm)"
-#: engine/core/docs/drf/viewsets.py:113
+#: engine/core/docs/drf/viewsets.py:128
msgid "retrieve a single attribute (detailed view)"
msgstr "Tek bir özniteliği alma (ayrıntılı görünüm)"
-#: engine/core/docs/drf/viewsets.py:120
+#: engine/core/docs/drf/viewsets.py:135
msgid "create an attribute"
msgstr "Öznitelik oluşturma"
-#: engine/core/docs/drf/viewsets.py:127
+#: engine/core/docs/drf/viewsets.py:142
msgid "delete an attribute"
msgstr "Bir özniteliği silme"
-#: engine/core/docs/drf/viewsets.py:134
+#: engine/core/docs/drf/viewsets.py:149
msgid "rewrite an existing attribute saving non-editables"
msgstr "Düzenlenemeyenleri kaydederek mevcut bir niteliği yeniden yazma"
-#: engine/core/docs/drf/viewsets.py:141
+#: engine/core/docs/drf/viewsets.py:156
msgid "rewrite some fields of an existing attribute saving non-editables"
msgstr ""
"Mevcut bir özniteliğin bazı alanlarını düzenlenemez olarak kaydederek "
"yeniden yazın"
-#: engine/core/docs/drf/viewsets.py:151
+#: engine/core/docs/drf/viewsets.py:166
msgid "list all attribute values (simple view)"
msgstr "Tüm öznitelik değerlerini listeleme (basit görünüm)"
-#: engine/core/docs/drf/viewsets.py:158
+#: engine/core/docs/drf/viewsets.py:176
msgid "retrieve a single attribute value (detailed view)"
msgstr "Tek bir öznitelik değerini alma (ayrıntılı görünüm)"
-#: engine/core/docs/drf/viewsets.py:165
+#: engine/core/docs/drf/viewsets.py:183
msgid "create an attribute value"
msgstr "Öznitelik değeri oluşturma"
-#: engine/core/docs/drf/viewsets.py:172
+#: engine/core/docs/drf/viewsets.py:193
msgid "delete an attribute value"
msgstr "Öznitelik değerini silme"
-#: engine/core/docs/drf/viewsets.py:179
+#: engine/core/docs/drf/viewsets.py:200
msgid "rewrite an existing attribute value saving non-editables"
msgstr ""
"Düzenlenemeyenleri kaydederek mevcut bir öznitelik değerini yeniden yazma"
-#: engine/core/docs/drf/viewsets.py:186
-msgid ""
-"rewrite some fields of an existing attribute value saving non-editables"
+#: engine/core/docs/drf/viewsets.py:208
+msgid "rewrite some fields of an existing attribute value saving non-editables"
msgstr ""
-"Mevcut bir öznitelik değerinin bazı alanlarını düzenlenemeyenleri kaydederek"
-" yeniden yazın"
+"Mevcut bir öznitelik değerinin bazı alanlarını düzenlenemeyenleri kaydederek "
+"yeniden yazın"
-#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197
+#: engine/core/docs/drf/viewsets.py:219 engine/core/docs/drf/viewsets.py:220
msgid "list all categories (simple view)"
msgstr "Tüm kategorileri listele (basit görünüm)"
-#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205
+#: engine/core/docs/drf/viewsets.py:230 engine/core/docs/drf/viewsets.py:231
msgid "retrieve a single category (detailed view)"
msgstr "Tek bir kategoriyi alma (ayrıntılı görünüm)"
-#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258
+#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:286
msgid "Category UUID or slug"
msgstr "Kategori UUID'si veya slug"
-#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221
+#: engine/core/docs/drf/viewsets.py:246 engine/core/docs/drf/viewsets.py:247
msgid "create a category"
msgstr "Bir kategori oluşturun"
-#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229
+#: engine/core/docs/drf/viewsets.py:254 engine/core/docs/drf/viewsets.py:255
msgid "delete a category"
msgstr "Kategori silme"
-#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237
+#: engine/core/docs/drf/viewsets.py:262 engine/core/docs/drf/viewsets.py:263
msgid "rewrite an existing category saving non-editables"
msgstr "Düzenlenemeyenleri kaydederek mevcut bir kategoriyi yeniden yazın"
-#: engine/core/docs/drf/viewsets.py:244 engine/core/docs/drf/viewsets.py:245
+#: engine/core/docs/drf/viewsets.py:270 engine/core/docs/drf/viewsets.py:272
msgid "rewrite some fields of an existing category saving non-editables"
msgstr ""
"Mevcut bir kategorinin bazı alanlarını düzenlenemez olarak kaydederek "
"yeniden yazın"
-#: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704
-#: engine/core/docs/drf/viewsets.py:988
+#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:1046
#: engine/core/graphene/object_types.py:117
-#: engine/core/graphene/object_types.py:207
-#: engine/core/graphene/object_types.py:482
+#: engine/core/graphene/object_types.py:236
+#: engine/core/graphene/object_types.py:537
msgid "SEO Meta snapshot"
msgstr "SEO Meta anlık görüntüsü"
-#: engine/core/docs/drf/viewsets.py:253
+#: engine/core/docs/drf/viewsets.py:281
msgid "returns a snapshot of the category's SEO meta data"
msgstr "Kategorinin SEO meta verilerinin anlık görüntüsünü döndürür"
-#: engine/core/docs/drf/viewsets.py:274
+#: engine/core/docs/drf/viewsets.py:302
msgid "list all orders (simple view)"
msgstr "Tüm kategorileri listele (basit görünüm)"
-#: engine/core/docs/drf/viewsets.py:275
+#: engine/core/docs/drf/viewsets.py:303
msgid "for non-staff users, only their own orders are returned."
msgstr ""
"Personel olmayan kullanıcılar için sadece kendi siparişleri iade edilir."
-#: engine/core/docs/drf/viewsets.py:281
+#: engine/core/docs/drf/viewsets.py:309
msgid ""
-"Case-insensitive substring search across human_readable_id, "
-"order_products.product.name, and order_products.product.partnumber"
+"Case-insensitive substring search across human_readable_id, order_products."
+"product.name, and order_products.product.partnumber"
msgstr ""
-"human_readable_id, order_products.product.name ve "
-"order_products.product.partnumber arasında büyük/küçük harfe duyarlı olmayan"
-" alt dize araması"
+"human_readable_id, order_products.product.name ve order_products.product."
+"partnumber arasında büyük/küçük harfe duyarlı olmayan alt dize araması"
-#: engine/core/docs/drf/viewsets.py:288
+#: engine/core/docs/drf/viewsets.py:316
msgid "Filter orders with buy_time >= this ISO 8601 datetime"
msgstr "Buy_time >= this ISO 8601 datetime içeren siparişleri filtreleyin"
-#: engine/core/docs/drf/viewsets.py:293
+#: engine/core/docs/drf/viewsets.py:321
msgid "Filter orders with buy_time <= this ISO 8601 datetime"
msgstr "Buy_time <= this ISO 8601 datetime ile siparişleri filtreleyin"
-#: engine/core/docs/drf/viewsets.py:298
+#: engine/core/docs/drf/viewsets.py:326
msgid "Filter by exact order UUID"
msgstr "Tam sipariş UUID'sine göre filtreleme"
-#: engine/core/docs/drf/viewsets.py:303
+#: engine/core/docs/drf/viewsets.py:331
msgid "Filter by exact human-readable order ID"
msgstr ""
"Tam olarak insan tarafından okunabilir sipariş kimliğine göre filtreleme"
-#: engine/core/docs/drf/viewsets.py:308
+#: engine/core/docs/drf/viewsets.py:336
msgid "Filter by user's email (case-insensitive exact match)"
msgstr ""
"Kullanıcının e-postasına göre filtreleme (büyük/küçük harfe duyarlı olmayan "
"tam eşleşme)"
-#: engine/core/docs/drf/viewsets.py:313
+#: engine/core/docs/drf/viewsets.py:341
msgid "Filter by user's UUID"
msgstr "Kullanıcının UUID'sine göre filtreleme"
-#: engine/core/docs/drf/viewsets.py:318
+#: engine/core/docs/drf/viewsets.py:347
msgid "Filter by order status (case-insensitive substring match)"
msgstr ""
-"Sipariş durumuna göre filtreleme (büyük/küçük harfe duyarlı olmayan alt dize"
-" eşleşmesi)"
+"Sipariş durumuna göre filtreleme (büyük/küçük harfe duyarlı olmayan alt dize "
+"eşleşmesi)"
-#: engine/core/docs/drf/viewsets.py:324
+#: engine/core/docs/drf/viewsets.py:354
msgid ""
-"Order by one of: uuid, human_readable_id, user_email, user, status, created,"
-" modified, buy_time, random. Prefix with '-' for descending (e.g. "
-"'-buy_time')."
+"Order by one of: uuid, human_readable_id, user_email, user, status, created, "
+"modified, buy_time, random. Prefix with '-' for descending (e.g. '-"
+"buy_time')."
msgstr ""
"Şunlardan birine göre sıralayın: uuid, human_readable_id, user_email, user, "
"status, created, modified, buy_time, random. Azalan için '-' ile önekleyin "
"(örn. '-buy_time')."
-#: engine/core/docs/drf/viewsets.py:336
+#: engine/core/docs/drf/viewsets.py:366
msgid "retrieve a single order (detailed view)"
msgstr "Tek bir kategoriyi alma (ayrıntılı görünüm)"
-#: engine/core/docs/drf/viewsets.py:341
+#: engine/core/docs/drf/viewsets.py:371
msgid "Order UUID or human-readable id"
msgstr "Sipariş UUID'si veya insan tarafından okunabilir kimlik"
-#: engine/core/docs/drf/viewsets.py:351
+#: engine/core/docs/drf/viewsets.py:381
msgid "create an order"
msgstr "Öznitelik oluşturma"
-#: engine/core/docs/drf/viewsets.py:352
+#: engine/core/docs/drf/viewsets.py:382
msgid "doesn't work for non-staff users."
msgstr "Personel olmayan kullanıcılar için çalışmaz."
-#: engine/core/docs/drf/viewsets.py:359
+#: engine/core/docs/drf/viewsets.py:389
msgid "delete an order"
msgstr "Bir özniteliği silme"
-#: engine/core/docs/drf/viewsets.py:366
+#: engine/core/docs/drf/viewsets.py:396
msgid "rewrite an existing order saving non-editables"
msgstr "Düzenlenemeyenleri kaydederek mevcut bir kategoriyi yeniden yazın"
-#: engine/core/docs/drf/viewsets.py:373
+#: engine/core/docs/drf/viewsets.py:403
msgid "rewrite some fields of an existing order saving non-editables"
msgstr ""
"Mevcut bir kategorinin bazı alanlarını düzenlenemez olarak kaydederek "
"yeniden yazın"
-#: engine/core/docs/drf/viewsets.py:380
+#: engine/core/docs/drf/viewsets.py:410
msgid "purchase an order"
msgstr "Sipariş anındaki satın alma fiyatı"
-#: engine/core/docs/drf/viewsets.py:382
+#: engine/core/docs/drf/viewsets.py:412
msgid ""
"finalizes the order purchase. if `force_balance` is used, the purchase is "
"completed using the user's balance; if `force_payment` is used, a "
"transaction is initiated."
msgstr ""
-"Sipariş alımını sonuçlandırır. Eğer `force_balance` kullanılırsa, satın alma"
-" işlemi kullanıcının bakiyesi kullanılarak tamamlanır; Eğer `force_payment` "
+"Sipariş alımını sonuçlandırır. Eğer `force_balance` kullanılırsa, satın alma "
+"işlemi kullanıcının bakiyesi kullanılarak tamamlanır; Eğer `force_payment` "
"kullanılırsa, bir işlem başlatılır."
-#: engine/core/docs/drf/viewsets.py:397
+#: engine/core/docs/drf/viewsets.py:427
msgid "retrieve current pending order of a user"
msgstr "Bir kullanıcının mevcut bekleyen siparişini al"
-#: engine/core/docs/drf/viewsets.py:398
+#: engine/core/docs/drf/viewsets.py:428
msgid "retrieves a current pending order of an authenticated user"
msgstr "kimliği doğrulanmış bir kullanıcının mevcut bekleyen siparişini alır"
-#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334
+#: engine/core/docs/drf/viewsets.py:438 engine/core/graphene/mutations.py:354
msgid "purchase an order without account creation"
msgstr "hesap oluşturmadan sipariş satın alma"
-#: engine/core/docs/drf/viewsets.py:409
+#: engine/core/docs/drf/viewsets.py:439
msgid "finalizes the order purchase for a non-registered user."
msgstr "Kayıtlı olmayan bir kullanıcı için sipariş alımını sonuçlandırır."
-#: engine/core/docs/drf/viewsets.py:420
+#: engine/core/docs/drf/viewsets.py:450
msgid "add product to order"
msgstr "Siparişe ürün ekleme"
-#: engine/core/docs/drf/viewsets.py:421
+#: engine/core/docs/drf/viewsets.py:452
msgid ""
"adds a product to an order using the provided `product_uuid` and "
"`attributes`."
@@ -509,12 +505,12 @@ msgstr ""
"Verilen `product_uuid` ve `attributes` öğelerini kullanarak siparişe bir "
"ürün ekler."
-#: engine/core/docs/drf/viewsets.py:429
+#: engine/core/docs/drf/viewsets.py:461
msgid "add a list of products to order, quantities will not count"
msgstr ""
"Sipariş edilecek ürünlerin bir listesini ekleyin, miktarlar sayılmayacaktır"
-#: engine/core/docs/drf/viewsets.py:430
+#: engine/core/docs/drf/viewsets.py:463
msgid ""
"adds a list of products to an order using the provided `product_uuid` and "
"`attributes`."
@@ -522,11 +518,11 @@ msgstr ""
"Sağlanan `product_uuid` ve `attributes` öğelerini kullanarak bir siparişe "
"ürün listesi ekler."
-#: engine/core/docs/drf/viewsets.py:438
+#: engine/core/docs/drf/viewsets.py:472
msgid "remove product from order"
msgstr "Siparişten bir ürünü kaldırma"
-#: engine/core/docs/drf/viewsets.py:439
+#: engine/core/docs/drf/viewsets.py:474
msgid ""
"removes a product from an order using the provided `product_uuid` and "
"`attributes`."
@@ -534,11 +530,11 @@ msgstr ""
"Sağlanan `product_uuid` ve `attributes` öğelerini kullanarak bir ürünü "
"siparişten kaldırır."
-#: engine/core/docs/drf/viewsets.py:447
+#: engine/core/docs/drf/viewsets.py:483
msgid "remove product from order, quantities will not count"
msgstr "Siparişten bir ürünü kaldırın, miktarlar sayılmayacaktır"
-#: engine/core/docs/drf/viewsets.py:448
+#: engine/core/docs/drf/viewsets.py:485
msgid ""
"removes a list of products from an order using the provided `product_uuid` "
"and `attributes`"
@@ -546,723 +542,735 @@ msgstr ""
"Sağlanan `product_uuid` ve `attributes` öğelerini kullanarak bir siparişten "
"ürün listesini kaldırır."
-#: engine/core/docs/drf/viewsets.py:459
+#: engine/core/docs/drf/viewsets.py:497
msgid "list all wishlists (simple view)"
msgstr "Tüm öznitelikleri listele (basit görünüm)"
-#: engine/core/docs/drf/viewsets.py:460
+#: engine/core/docs/drf/viewsets.py:498
msgid "for non-staff users, only their own wishlists are returned."
msgstr ""
-"Personel olmayan kullanıcılar için yalnızca kendi istek listeleri "
-"döndürülür."
+"Personel olmayan kullanıcılar için yalnızca kendi istek listeleri döndürülür."
-#: engine/core/docs/drf/viewsets.py:467
+#: engine/core/docs/drf/viewsets.py:508
msgid "retrieve a single wishlist (detailed view)"
msgstr "Tek bir özniteliği alma (ayrıntılı görünüm)"
-#: engine/core/docs/drf/viewsets.py:474
+#: engine/core/docs/drf/viewsets.py:515
msgid "create an wishlist"
msgstr "Öznitelik oluşturma"
-#: engine/core/docs/drf/viewsets.py:475
+#: engine/core/docs/drf/viewsets.py:516
msgid "Doesn't work for non-staff users."
msgstr "Personel olmayan kullanıcılar için çalışmaz."
-#: engine/core/docs/drf/viewsets.py:482
+#: engine/core/docs/drf/viewsets.py:523
msgid "delete an wishlist"
msgstr "Bir özniteliği silme"
-#: engine/core/docs/drf/viewsets.py:489
+#: engine/core/docs/drf/viewsets.py:530
msgid "rewrite an existing wishlist saving non-editables"
msgstr "Düzenlenemeyenleri kaydederek mevcut bir niteliği yeniden yazma"
-#: engine/core/docs/drf/viewsets.py:496
+#: engine/core/docs/drf/viewsets.py:537
msgid "rewrite some fields of an existing wishlist saving non-editables"
msgstr ""
"Mevcut bir özniteliğin bazı alanlarını düzenlenemez olarak kaydederek "
"yeniden yazın"
-#: engine/core/docs/drf/viewsets.py:503
+#: engine/core/docs/drf/viewsets.py:544
msgid "retrieve current pending wishlist of a user"
msgstr "bir kullanıcının mevcut bekleyen istek listesini al"
-#: engine/core/docs/drf/viewsets.py:504
+#: engine/core/docs/drf/viewsets.py:545
msgid "retrieves a current pending wishlist of an authenticated user"
msgstr ""
"kimliği doğrulanmış bir kullanıcının geçerli bekleyen istek listesini alır"
-#: engine/core/docs/drf/viewsets.py:514
+#: engine/core/docs/drf/viewsets.py:555
msgid "add product to wishlist"
msgstr "Siparişe ürün ekleme"
-#: engine/core/docs/drf/viewsets.py:515
+#: engine/core/docs/drf/viewsets.py:557
msgid "adds a product to an wishlist using the provided `product_uuid`"
msgstr ""
"Sağlanan `product_uuid` öğesini kullanarak bir ürünü istek listesine ekler"
-#: engine/core/docs/drf/viewsets.py:523
+#: engine/core/docs/drf/viewsets.py:566
msgid "remove product from wishlist"
msgstr "İstek listesinden bir ürünü kaldırma"
-#: engine/core/docs/drf/viewsets.py:524
+#: engine/core/docs/drf/viewsets.py:568
msgid "removes a product from an wishlist using the provided `product_uuid`"
msgstr ""
"Sağlanan `product_uuid` öğesini kullanarak bir ürünü istek listesinden "
"kaldırır"
-#: engine/core/docs/drf/viewsets.py:532
+#: engine/core/docs/drf/viewsets.py:577
msgid "add many products to wishlist"
msgstr "İstek listesine birçok ürün ekleyin"
-#: engine/core/docs/drf/viewsets.py:533
+#: engine/core/docs/drf/viewsets.py:579
msgid "adds many products to an wishlist using the provided `product_uuids`"
msgstr ""
"Sağlanan `product_uuids` öğesini kullanarak bir istek listesine birçok ürün "
"ekler"
-#: engine/core/docs/drf/viewsets.py:541
+#: engine/core/docs/drf/viewsets.py:588
msgid "remove many products from wishlist"
msgstr "Siparişten bir ürünü kaldırma"
-#: engine/core/docs/drf/viewsets.py:542
+#: engine/core/docs/drf/viewsets.py:590
msgid ""
"removes many products from an wishlist using the provided `product_uuids`"
msgstr ""
"Sağlanan `product_uuids` öğesini kullanarak bir istek listesinden birçok "
"ürünü kaldırır"
-#: engine/core/docs/drf/viewsets.py:549
+#: engine/core/docs/drf/viewsets.py:598
msgid ""
"Filter by one or more attribute name/value pairs. \n"
"• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n"
-"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n"
-"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n"
+"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, "
+"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, "
+"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n"
+"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), "
+"`true`/`false` for booleans, integers, floats; otherwise treated as "
+"string. \n"
"• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n"
"Examples: \n"
-"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n"
+"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\","
+"\"bluetooth\"]`, \n"
"`b64-description=icontains-aGVhdC1jb2xk`"
msgstr ""
"Bir veya daha fazla öznitelik adı/değer çiftine göre filtreleyin. \n"
"- Sözdizimi**: `attr_name=method-value[;attr2=method2-value2]...`\n"
-"- **Metotlar** (atlanırsa varsayılan olarak `icontains` olur): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`\n"
-"- Değer tipleme**: JSON ilk olarak denenir (böylece listeleri/dicts'leri geçirebilirsiniz), booleanlar, tamsayılar, floatlar için `true`/`false`; aksi takdirde string olarak ele alınır. \n"
-"- **Base64**: ham değeri URL güvenli base64 kodlamak için `b64-` ile önekleyin. \n"
+"- **Metotlar** (atlanırsa varsayılan olarak `icontains` olur): `iexact`, "
+"`exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, "
+"`endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in`\n"
+"- Değer tipleme**: JSON ilk olarak denenir (böylece listeleri/dicts'leri "
+"geçirebilirsiniz), booleanlar, tamsayılar, floatlar için `true`/`false`; "
+"aksi takdirde string olarak ele alınır. \n"
+"- **Base64**: ham değeri URL güvenli base64 kodlamak için `b64-` ile "
+"önekleyin. \n"
"Örnekler: \n"
"color=exact-red`, `size=gt-10`, `features=in-[\"wifi\", \"bluetooth\"]`,\n"
"`b64-description=icontains-aGVhdC1jb2xk`"
-#: engine/core/docs/drf/viewsets.py:568 engine/core/docs/drf/viewsets.py:569
+#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
msgid "list all products (simple view)"
msgstr "Tüm ürünleri listele (basit görünüm)"
-#: engine/core/docs/drf/viewsets.py:574
+#: engine/core/docs/drf/viewsets.py:623
msgid "(exact) Product UUID"
msgstr "(tam) Ürün UUID'si"
-#: engine/core/docs/drf/viewsets.py:581
+#: engine/core/docs/drf/viewsets.py:630
msgid ""
-"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n"
+"Comma-separated list of fields to sort by. Prefix with `-` for "
+"descending. \n"
"**Allowed:** uuid, rating, name, slug, created, modified, price, random"
msgstr ""
-"Sıralanacak alanların virgülle ayrılmış listesi. Azalan için `-` ile ön ek. \n"
-"**İzin verilenler:** uuid, derecelendirme, ad, slug, oluşturuldu, değiştirildi, fiyat, rastgele"
+"Sıralanacak alanların virgülle ayrılmış listesi. Azalan için `-` ile ön "
+"ek. \n"
+"**İzin verilenler:** uuid, derecelendirme, ad, slug, oluşturuldu, "
+"değiştirildi, fiyat, rastgele"
-#: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599
+#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
msgid "retrieve a single product (detailed view)"
msgstr "Tek bir ürünü alma (ayrıntılı görünüm)"
-#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634
-#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672
-#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710
+#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683
+#: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725
+#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763
msgid "Product UUID or slug"
msgstr "Ürün UUID'si veya Slug"
-#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
+#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
#: engine/core/graphene/dashboard_mutations/product.py:80
#: engine/core/graphene/dashboard_mutations/product.py:118
#: engine/core/graphene/dashboard_mutations/product.py:166
msgid "create a product"
msgstr "Bir ürün oluşturun"
-#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629
+#: engine/core/docs/drf/viewsets.py:677 engine/core/docs/drf/viewsets.py:678
msgid "rewrite an existing product, preserving non-editable fields"
msgstr "Düzenlenemeyen alanları koruyarak mevcut bir ürünü yeniden yazın"
-#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
+#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:700
msgid ""
"update some fields of an existing product, preserving non-editable fields"
msgstr ""
"Düzenlenemeyen alanları koruyarak mevcut bir ürünün bazı alanlarını "
"güncelleme"
-#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
+#: engine/core/docs/drf/viewsets.py:719 engine/core/docs/drf/viewsets.py:720
msgid "delete a product"
msgstr "Ürün silme"
-#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686
+#: engine/core/docs/drf/viewsets.py:738 engine/core/docs/drf/viewsets.py:739
msgid "lists all permitted feedbacks for a product"
msgstr "bir ürün için izin verilen tüm geri bildirimleri listeler"
-#: engine/core/docs/drf/viewsets.py:705
+#: engine/core/docs/drf/viewsets.py:758
msgid "returns a snapshot of the product's SEO meta data"
msgstr "Ürünün SEO meta verilerinin anlık görüntüsünü döndürür"
-#: engine/core/docs/drf/viewsets.py:726
+#: engine/core/docs/drf/viewsets.py:779
msgid "list all addresses"
msgstr "Tüm adresleri listeleyin"
-#: engine/core/docs/drf/viewsets.py:736
+#: engine/core/docs/drf/viewsets.py:789
msgid "retrieve a single address"
msgstr "Tek bir adres alma"
-#: engine/core/docs/drf/viewsets.py:746
+#: engine/core/docs/drf/viewsets.py:799
msgid "create a new address"
msgstr "Yeni bir adres oluşturun"
-#: engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:810
msgid "delete an address"
msgstr "Adres silme"
-#: engine/core/docs/drf/viewsets.py:767
+#: engine/core/docs/drf/viewsets.py:820
msgid "update an entire address"
msgstr "Adresin tamamını güncelleme"
-#: engine/core/docs/drf/viewsets.py:778
+#: engine/core/docs/drf/viewsets.py:831
msgid "partially update an address"
msgstr "Bir adresi kısmen güncelleme"
-#: engine/core/docs/drf/viewsets.py:789
+#: engine/core/docs/drf/viewsets.py:842
msgid "autocomplete address suggestions"
msgstr "Otomatik tamamlanan adres girişi"
-#: engine/core/docs/drf/viewsets.py:794
+#: engine/core/docs/drf/viewsets.py:848
msgid "raw data query string, please append with data from geo-IP endpoint"
msgstr ""
"Ham veri sorgu dizesi, lütfen geo-IP uç noktasından gelen verilerle ekleyin"
-#: engine/core/docs/drf/viewsets.py:800
+#: engine/core/docs/drf/viewsets.py:855
msgid "limit the results amount, 1 < limit < 10, default: 5"
msgstr "sonuç miktarını sınırlar, 1 < limit < 10, varsayılan: 5"
-#: engine/core/docs/drf/viewsets.py:816
+#: engine/core/docs/drf/viewsets.py:871
msgid "list all feedbacks (simple view)"
msgstr "tüm geri bildirimleri listele (basit görünüm)"
-#: engine/core/docs/drf/viewsets.py:823
+#: engine/core/docs/drf/viewsets.py:881
msgid "retrieve a single feedback (detailed view)"
msgstr "tek bir geri bildirim alma (ayrıntılı görünüm)"
-#: engine/core/docs/drf/viewsets.py:830
+#: engine/core/docs/drf/viewsets.py:888
msgid "create a feedback"
msgstr "bir geri bildirim oluşturun"
-#: engine/core/docs/drf/viewsets.py:837
+#: engine/core/docs/drf/viewsets.py:895
msgid "delete a feedback"
msgstr "bir geri bildirimi silme"
-#: engine/core/docs/drf/viewsets.py:844
+#: engine/core/docs/drf/viewsets.py:902
msgid "rewrite an existing feedback saving non-editables"
msgstr "düzenlenemeyenleri kaydederek mevcut bir geri bildirimi yeniden yazın"
-#: engine/core/docs/drf/viewsets.py:851
+#: engine/core/docs/drf/viewsets.py:909
msgid "rewrite some fields of an existing feedback saving non-editables"
msgstr ""
"mevcut bir geri bildirimin bazı alanlarını yeniden yazarak düzenlenemezleri "
"kaydetme"
-#: engine/core/docs/drf/viewsets.py:861
+#: engine/core/docs/drf/viewsets.py:919
msgid "list all order–product relations (simple view)"
msgstr "tüm sipariş-ürün ilişkilerini listeler (basit görünüm)"
-#: engine/core/docs/drf/viewsets.py:871
+#: engine/core/docs/drf/viewsets.py:929
msgid "retrieve a single order–product relation (detailed view)"
msgstr "tek bir sipariş-ürün ilişkisi alma (ayrıntılı görünüm)"
-#: engine/core/docs/drf/viewsets.py:881
+#: engine/core/docs/drf/viewsets.py:939
msgid "create a new order–product relation"
msgstr "yeni bir sipariş-ürün ilişkisi oluşturun"
-#: engine/core/docs/drf/viewsets.py:891
+#: engine/core/docs/drf/viewsets.py:949
msgid "replace an existing order–product relation"
msgstr "mevcut bir sipariş-ürün ilişkisini değiştirir"
-#: engine/core/docs/drf/viewsets.py:901
+#: engine/core/docs/drf/viewsets.py:959
msgid "partially update an existing order–product relation"
msgstr "mevcut bir sipariş-ürün ilişkisini kısmen güncelleme"
-#: engine/core/docs/drf/viewsets.py:911
+#: engine/core/docs/drf/viewsets.py:969
msgid "delete an order–product relation"
msgstr "sipariş-ürün ilişkisini silme"
-#: engine/core/docs/drf/viewsets.py:921
+#: engine/core/docs/drf/viewsets.py:979
msgid "add or remove feedback on an order–product relation"
msgstr "sipariş-ürün ilişkisine geri bildirim ekleme veya kaldırma"
-#: engine/core/docs/drf/viewsets.py:938
+#: engine/core/docs/drf/viewsets.py:996
msgid "list all brands (simple view)"
msgstr "Tüm markaları listele (basit görünüm)"
-#: engine/core/docs/drf/viewsets.py:945
+#: engine/core/docs/drf/viewsets.py:1003
msgid "retrieve a single brand (detailed view)"
msgstr "Tek bir markayı alma (ayrıntılı görünüm)"
-#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993
+#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051
msgid "Brand UUID or slug"
msgstr "Marka UUID'si veya sümüklü böcek"
-#: engine/core/docs/drf/viewsets.py:960
+#: engine/core/docs/drf/viewsets.py:1018
msgid "create a brand"
msgstr "Bir marka yaratın"
-#: engine/core/docs/drf/viewsets.py:967
+#: engine/core/docs/drf/viewsets.py:1025
msgid "delete a brand"
msgstr "Bir markayı silme"
-#: engine/core/docs/drf/viewsets.py:974
+#: engine/core/docs/drf/viewsets.py:1032
msgid "rewrite an existing brand saving non-editables"
msgstr "Mevcut bir markayı yeniden yazarak düzenlenemeyenleri kaydedin"
-#: engine/core/docs/drf/viewsets.py:981
+#: engine/core/docs/drf/viewsets.py:1039
msgid "rewrite some fields of an existing brand saving non-editables"
msgstr ""
"Mevcut bir kategorinin bazı alanlarını düzenlenemez olarak kaydederek "
"yeniden yazın"
-#: engine/core/docs/drf/viewsets.py:1006
+#: engine/core/docs/drf/viewsets.py:1064
msgid "list all vendors (simple view)"
msgstr "Tüm satıcıları listeleyin (basit görünüm)"
-#: engine/core/docs/drf/viewsets.py:1013
+#: engine/core/docs/drf/viewsets.py:1074
msgid "retrieve a single vendor (detailed view)"
msgstr "Tek bir satıcıyı alma (ayrıntılı görünüm)"
-#: engine/core/docs/drf/viewsets.py:1020
+#: engine/core/docs/drf/viewsets.py:1081
msgid "create a vendor"
msgstr "Bir satıcı oluşturun"
-#: engine/core/docs/drf/viewsets.py:1027
+#: engine/core/docs/drf/viewsets.py:1088
msgid "delete a vendor"
msgstr "Satıcı silme"
-#: engine/core/docs/drf/viewsets.py:1034
+#: engine/core/docs/drf/viewsets.py:1095
msgid "rewrite an existing vendor saving non-editables"
msgstr "Düzenlenemeyenleri kaydederek mevcut bir satıcıyı yeniden yazın"
-#: engine/core/docs/drf/viewsets.py:1041
+#: engine/core/docs/drf/viewsets.py:1102
msgid "rewrite some fields of an existing vendor saving non-editables"
msgstr ""
"Mevcut bir kategorinin bazı alanlarını düzenlenemez olarak kaydederek "
"yeniden yazın"
-#: engine/core/docs/drf/viewsets.py:1051
+#: engine/core/docs/drf/viewsets.py:1112
msgid "list all product images (simple view)"
msgstr "Tüm ürün görsellerini listeleme (basit görünüm)"
-#: engine/core/docs/drf/viewsets.py:1058
+#: engine/core/docs/drf/viewsets.py:1122
msgid "retrieve a single product image (detailed view)"
msgstr "Tek bir ürün resmini alma (ayrıntılı görünüm)"
-#: engine/core/docs/drf/viewsets.py:1065
+#: engine/core/docs/drf/viewsets.py:1129
msgid "create a product image"
msgstr "Bir ürün görseli oluşturun"
-#: engine/core/docs/drf/viewsets.py:1072
+#: engine/core/docs/drf/viewsets.py:1139
msgid "delete a product image"
msgstr "Ürün görselini silme"
-#: engine/core/docs/drf/viewsets.py:1079
+#: engine/core/docs/drf/viewsets.py:1146
msgid "rewrite an existing product image saving non-editables"
msgstr "Düzenlenemeyenleri kaydederek mevcut bir ürün resmini yeniden yazın"
-#: engine/core/docs/drf/viewsets.py:1086
+#: engine/core/docs/drf/viewsets.py:1154
msgid "rewrite some fields of an existing product image saving non-editables"
msgstr ""
"Mevcut bir kategorinin bazı alanlarını düzenlenemez olarak kaydederek "
"yeniden yazın"
-#: engine/core/docs/drf/viewsets.py:1096
+#: engine/core/docs/drf/viewsets.py:1165
msgid "list all promo codes (simple view)"
msgstr "Tüm promosyon kodlarını listele (basit görünüm)"
-#: engine/core/docs/drf/viewsets.py:1103
+#: engine/core/docs/drf/viewsets.py:1175
msgid "retrieve a single promo code (detailed view)"
msgstr "Tek bir promosyon kodunu alma (ayrıntılı görünüm)"
-#: engine/core/docs/drf/viewsets.py:1110
+#: engine/core/docs/drf/viewsets.py:1182
msgid "create a promo code"
msgstr "Promosyon kodu oluşturun"
-#: engine/core/docs/drf/viewsets.py:1117
+#: engine/core/docs/drf/viewsets.py:1189
msgid "delete a promo code"
msgstr "Promosyon kodunu silme"
-#: engine/core/docs/drf/viewsets.py:1124
+#: engine/core/docs/drf/viewsets.py:1196
msgid "rewrite an existing promo code saving non-editables"
msgstr ""
"Düzenlenemeyenleri kaydederek mevcut bir promosyon kodunu yeniden yazın"
-#: engine/core/docs/drf/viewsets.py:1131
+#: engine/core/docs/drf/viewsets.py:1203
msgid "rewrite some fields of an existing promo code saving non-editables"
msgstr ""
"Mevcut bir kategorinin bazı alanlarını düzenlenemez olarak kaydederek "
"yeniden yazın"
-#: engine/core/docs/drf/viewsets.py:1141
+#: engine/core/docs/drf/viewsets.py:1213
msgid "list all promotions (simple view)"
msgstr "Tüm promosyonları listele (basit görünüm)"
-#: engine/core/docs/drf/viewsets.py:1148
+#: engine/core/docs/drf/viewsets.py:1223
msgid "retrieve a single promotion (detailed view)"
msgstr "Tek bir promosyonu alma (ayrıntılı görünüm)"
-#: engine/core/docs/drf/viewsets.py:1155
+#: engine/core/docs/drf/viewsets.py:1230
msgid "create a promotion"
msgstr "Bir promosyon oluşturun"
-#: engine/core/docs/drf/viewsets.py:1162
+#: engine/core/docs/drf/viewsets.py:1237
msgid "delete a promotion"
msgstr "Bir promosyonu silme"
-#: engine/core/docs/drf/viewsets.py:1169
+#: engine/core/docs/drf/viewsets.py:1244
msgid "rewrite an existing promotion saving non-editables"
msgstr "Düzenlenemeyenleri kaydederek mevcut bir promosyonu yeniden yazma"
-#: engine/core/docs/drf/viewsets.py:1176
+#: engine/core/docs/drf/viewsets.py:1251
msgid "rewrite some fields of an existing promotion saving non-editables"
msgstr ""
"Mevcut bir kategorinin bazı alanlarını düzenlenemez olarak kaydederek "
"yeniden yazın"
-#: engine/core/docs/drf/viewsets.py:1186
+#: engine/core/docs/drf/viewsets.py:1261
msgid "list all stocks (simple view)"
msgstr "Tüm hisse senetlerini listele (basit görünüm)"
-#: engine/core/docs/drf/viewsets.py:1193
+#: engine/core/docs/drf/viewsets.py:1268
msgid "retrieve a single stock (detailed view)"
msgstr "Tek bir stoku alma (ayrıntılı görünüm)"
-#: engine/core/docs/drf/viewsets.py:1200
+#: engine/core/docs/drf/viewsets.py:1275
msgid "create a stock record"
msgstr "Stok kaydı oluşturma"
-#: engine/core/docs/drf/viewsets.py:1207
+#: engine/core/docs/drf/viewsets.py:1282
msgid "delete a stock record"
msgstr "Stok kaydını silme"
-#: engine/core/docs/drf/viewsets.py:1214
+#: engine/core/docs/drf/viewsets.py:1289
msgid "rewrite an existing stock record saving non-editables"
msgstr "Düzenlenemeyenleri kaydederek mevcut bir stok kaydını yeniden yazma"
-#: engine/core/docs/drf/viewsets.py:1221
+#: engine/core/docs/drf/viewsets.py:1297
msgid "rewrite some fields of an existing stock record saving non-editables"
msgstr ""
"Mevcut bir kategorinin bazı alanlarını düzenlenemez olarak kaydederek "
"yeniden yazın"
-#: engine/core/docs/drf/viewsets.py:1231
+#: engine/core/docs/drf/viewsets.py:1308
msgid "list all product tags (simple view)"
msgstr "Tüm ürün etiketlerini listeleme (basit görünüm)"
-#: engine/core/docs/drf/viewsets.py:1238
+#: engine/core/docs/drf/viewsets.py:1318
msgid "retrieve a single product tag (detailed view)"
msgstr "Tek bir ürün etiketini alma (ayrıntılı görünüm)"
-#: engine/core/docs/drf/viewsets.py:1245
+#: engine/core/docs/drf/viewsets.py:1325
msgid "create a product tag"
msgstr "Ürün etiketi oluşturma"
-#: engine/core/docs/drf/viewsets.py:1252
+#: engine/core/docs/drf/viewsets.py:1335
msgid "delete a product tag"
msgstr "Ürün etiketini silme"
-#: engine/core/docs/drf/viewsets.py:1259
+#: engine/core/docs/drf/viewsets.py:1342
msgid "rewrite an existing product tag saving non-editables"
msgstr "Düzenlenemeyenleri kaydederek mevcut bir ürün etiketini yeniden yazma"
-#: engine/core/docs/drf/viewsets.py:1266
+#: engine/core/docs/drf/viewsets.py:1350
msgid "rewrite some fields of an existing product tag saving non-editables"
msgstr ""
"Mevcut bir kategorinin bazı alanlarını düzenlenemez olarak kaydederek "
"yeniden yazın"
-#: engine/core/elasticsearch/__init__.py:122
-#: engine/core/elasticsearch/__init__.py:570
+#: engine/core/elasticsearch/__init__.py:127
+#: engine/core/elasticsearch/__init__.py:627
msgid "no search term provided."
msgstr "Arama terimi belirtilmemiştir."
-#: engine/core/filters.py:69 engine/core/filters.py:426
-#: engine/core/filters.py:553
+#: engine/core/filters.py:78 engine/core/filters.py:484
+#: engine/core/filters.py:625
msgid "Search"
msgstr "Arama"
-#: engine/core/filters.py:70 engine/core/filters.py:583
-#: engine/core/filters.py:612
+#: engine/core/filters.py:79 engine/core/filters.py:662
+#: engine/core/filters.py:691
msgid "UUID"
msgstr "UUID"
-#: engine/core/filters.py:71 engine/core/filters.py:428
-#: engine/core/filters.py:555
+#: engine/core/filters.py:80 engine/core/filters.py:487
+#: engine/core/filters.py:627
msgid "Name"
msgstr "İsim"
-#: engine/core/filters.py:72 engine/core/filters.py:557
+#: engine/core/filters.py:82 engine/core/filters.py:630
msgid "Categories"
msgstr "Kategoriler"
-#: engine/core/filters.py:74
+#: engine/core/filters.py:86
msgid "Categories Slugs"
msgstr "Kategoriler Sümüklüböcekler"
-#: engine/core/filters.py:75 engine/core/filters.py:436
+#: engine/core/filters.py:88 engine/core/filters.py:495
msgid "Tags"
msgstr "Etiketler"
-#: engine/core/filters.py:76
+#: engine/core/filters.py:90
msgid "Min Price"
msgstr "Min Fiyat"
-#: engine/core/filters.py:77
+#: engine/core/filters.py:93
msgid "Max Price"
msgstr "Maksimum Fiyat"
-#: engine/core/filters.py:78
+#: engine/core/filters.py:95
msgid "Is Active"
msgstr "Aktif mi"
-#: engine/core/filters.py:79
+#: engine/core/filters.py:96
msgid "Brand"
msgstr "Marka"
-#: engine/core/filters.py:80
+#: engine/core/filters.py:97
msgid "Attributes"
msgstr "Nitelikler"
-#: engine/core/filters.py:81
+#: engine/core/filters.py:99
msgid "Quantity"
msgstr "Miktar"
-#: engine/core/filters.py:82 engine/core/filters.py:430
-#: engine/core/filters.py:556 engine/core/models.py:321
-#: engine/core/models.py:489 engine/core/models.py:644
+#: engine/core/filters.py:101 engine/core/filters.py:489
+#: engine/core/filters.py:628 engine/core/models.py:327
+#: engine/core/models.py:508 engine/core/models.py:665
msgid "Slug"
msgstr "Sümüklüböcek"
-#: engine/core/filters.py:83
+#: engine/core/filters.py:102
msgid "Is Digital"
msgstr "Dijital mi"
-#: engine/core/filters.py:84
+#: engine/core/filters.py:104
msgid "Include sub-categories"
msgstr "Alt kategorileri dahil edin"
-#: engine/core/filters.py:87
+#: engine/core/filters.py:108
msgid "Include personal ordered"
msgstr "Kişisel sipariş edilen ürünleri dahil edin"
-#: engine/core/filters.py:89 engine/core/models.py:648
+#: engine/core/filters.py:110 engine/core/models.py:669
msgid "SKU"
msgstr "SKU"
-#: engine/core/filters.py:184
+#: engine/core/filters.py:212
msgid "there must be a category_uuid to use include_subcategories flag"
msgstr ""
"include_subcategories bayrağını kullanmak için bir category_uuid olmalıdır"
-#: engine/core/filters.py:353
+#: engine/core/filters.py:398
msgid "Search (ID, product name or part number)"
msgstr "Arama (ID, ürün adı veya parça numarası)"
-#: engine/core/filters.py:356
+#: engine/core/filters.py:402
msgid "Bought after (inclusive)"
msgstr "Sonra satın alındı (dahil)"
-#: engine/core/filters.py:357
+#: engine/core/filters.py:405
msgid "Bought before (inclusive)"
msgstr "Daha önce satın alındı (dahil)"
-#: engine/core/filters.py:360 engine/core/filters.py:407
-#: engine/core/filters.py:614
+#: engine/core/filters.py:410 engine/core/filters.py:461
+#: engine/core/filters.py:696
msgid "User email"
msgstr "Kullanıcı e-postası"
-#: engine/core/filters.py:361 engine/core/filters.py:408
-#: engine/core/filters.py:592 engine/core/filters.py:613
+#: engine/core/filters.py:413 engine/core/filters.py:464
+#: engine/core/filters.py:671 engine/core/filters.py:693
msgid "User UUID"
msgstr "Kullanıcı UUID'si"
-#: engine/core/filters.py:362
+#: engine/core/filters.py:415
msgid "Status"
msgstr "Durum"
-#: engine/core/filters.py:366
+#: engine/core/filters.py:419
msgid "Human Readable ID"
msgstr "İnsan Tarafından Okunabilir Kimlik"
-#: engine/core/filters.py:429
+#: engine/core/filters.py:488
msgid "Parent"
msgstr "Ebeveyn"
-#: engine/core/filters.py:433
+#: engine/core/filters.py:492
msgid "Whole category(has at least 1 product or not)"
msgstr "Tüm kategori (en az 1 ürün var veya yok)"
-#: engine/core/filters.py:437
+#: engine/core/filters.py:496
msgid "Level"
msgstr "Seviye"
-#: engine/core/filters.py:587
+#: engine/core/filters.py:666
msgid "Product UUID"
msgstr "Ürün UUID'si"
-#: engine/core/graphene/mutations.py:40
+#: engine/core/graphene/mutations.py:41
msgid "key to look for in or set into the cache"
msgstr "Önbellekte aranacak veya önbelleğe yerleştirilecek anahtar"
-#: engine/core/graphene/mutations.py:41
+#: engine/core/graphene/mutations.py:43
msgid "data to store in cache"
msgstr "Önbellekte depolanacak veriler"
-#: engine/core/graphene/mutations.py:44
+#: engine/core/graphene/mutations.py:46
msgid "timeout in seconds to set the data for into the cache"
msgstr "Verileri önbelleğe almak için saniye cinsinden zaman aşımı"
-#: engine/core/graphene/mutations.py:47
+#: engine/core/graphene/mutations.py:49
msgid "cached data"
msgstr "Önbelleğe alınmış veriler"
-#: engine/core/graphene/mutations.py:62
+#: engine/core/graphene/mutations.py:64
msgid "camelized JSON data from the requested URL"
msgstr "İstenen URL'den kameleştirilmiş JSON verileri"
-#: engine/core/graphene/mutations.py:67 engine/core/views.py:257
+#: engine/core/graphene/mutations.py:69 engine/core/views.py:249
msgid "only URLs starting with http(s):// are allowed"
msgstr "Yalnızca http(s):// ile başlayan URL'lere izin verilir"
-#: engine/core/graphene/mutations.py:83
+#: engine/core/graphene/mutations.py:87
msgid "add a product to the order"
msgstr "Siparişe ürün ekleme"
-#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131
-#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287
+#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139
+#: engine/core/graphene/mutations.py:255 engine/core/graphene/mutations.py:307
#, python-brace-format
msgid "order {order_uuid} not found"
msgstr "Sipariş {order_uuid} bulunamadı!"
-#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159
+#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167
msgid "remove a product from the order"
msgstr "Siparişten bir ürünü kaldırma"
-#: engine/core/graphene/mutations.py:137
+#: engine/core/graphene/mutations.py:145
msgid "remove all products from the order"
msgstr "Siparişten tüm ürünleri kaldırın"
-#: engine/core/graphene/mutations.py:182
+#: engine/core/graphene/mutations.py:190
msgid "buy an order"
msgstr "Bir sipariş satın alın"
-#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265
+#: engine/core/graphene/mutations.py:221 engine/core/graphene/mutations.py:283
msgid "please provide either order_uuid or order_hr_id - mutually exclusive"
msgstr ""
-"Lütfen order_uuid veya order_hr_id bilgilerinden birini sağlayın - birbirini"
-" dışlayan bilgiler!"
+"Lütfen order_uuid veya order_hr_id bilgilerinden birini sağlayın - birbirini "
+"dışlayan bilgiler!"
-#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501
-#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712
+#: engine/core/graphene/mutations.py:250 engine/core/graphene/mutations.py:525
+#: engine/core/graphene/mutations.py:574 engine/core/viewsets.py:753
msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr "order.buy() metodundan yanlış tip geldi: {type(instance)!s}"
-#: engine/core/graphene/mutations.py:245
+#: engine/core/graphene/mutations.py:261
msgid "perform an action on a list of products in the order"
msgstr "Siparişteki ürünlerin listesi üzerinde bir eylem gerçekleştirin"
-#: engine/core/graphene/mutations.py:250
+#: engine/core/graphene/mutations.py:266
msgid "remove/add"
msgstr "Kaldır/Ekle"
-#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323
+#: engine/core/graphene/mutations.py:302 engine/core/graphene/mutations.py:343
msgid "action must be either add or remove"
msgstr "Eylem ya \"ekle\" ya da \"kaldır\" olmalıdır!"
-#: engine/core/graphene/mutations.py:293
+#: engine/core/graphene/mutations.py:313
msgid "perform an action on a list of products in the wishlist"
msgstr "İstek listesindeki bir ürün listesi üzerinde eylem gerçekleştirme"
-#: engine/core/graphene/mutations.py:311
+#: engine/core/graphene/mutations.py:331
msgid "please provide wishlist_uuid value"
msgstr "Lütfen `wishlist_uuid` değerini girin."
-#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404
-#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460
-#: engine/core/graphene/mutations.py:504
+#: engine/core/graphene/mutations.py:348 engine/core/graphene/mutations.py:424
+#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480
+#: engine/core/graphene/mutations.py:530
#, python-brace-format
msgid "wishlist {wishlist_uuid} not found"
msgstr "İstek listesi {wishlist_uuid} bulunamadı!"
-#: engine/core/graphene/mutations.py:382
+#: engine/core/graphene/mutations.py:402
msgid "add a product to the wishlist"
msgstr "Siparişe ürün ekleme"
-#: engine/core/graphene/mutations.py:410
+#: engine/core/graphene/mutations.py:430
msgid "remove a product from the wishlist"
msgstr "Siparişten bir ürünü kaldırma"
-#: engine/core/graphene/mutations.py:438
+#: engine/core/graphene/mutations.py:458
msgid "remove all products from the wishlist"
msgstr "Siparişten bir ürünü kaldırma"
-#: engine/core/graphene/mutations.py:466
+#: engine/core/graphene/mutations.py:486
msgid "buy all products from the wishlist"
msgstr "Siparişten bir ürünü kaldırma"
-#: engine/core/graphene/mutations.py:510
+#: engine/core/graphene/mutations.py:536
msgid "buy a product"
msgstr "Bir sipariş satın alın"
-#: engine/core/graphene/mutations.py:516
+#: engine/core/graphene/mutations.py:543
msgid ""
-"please send the attributes as the string formatted like "
-"attr1=value1,attr2=value2"
+"please send the attributes as the string formatted like attr1=value1,"
+"attr2=value2"
msgstr ""
"Lütfen öznitelikleri attr1=value1,attr2=value2 şeklinde biçimlendirilmiş "
"dize olarak gönderin"
-#: engine/core/graphene/mutations.py:549
+#: engine/core/graphene/mutations.py:581
msgid "add or delete a feedback for orderproduct"
msgstr "Orderproduct için bir geri bildirim ekleme veya silme"
-#: engine/core/graphene/mutations.py:573
+#: engine/core/graphene/mutations.py:607
msgid "action must be either `add` or `remove`"
msgstr "Eylem ya `ekle` ya da `kaldır` olmalıdır!"
-#: engine/core/graphene/mutations.py:576
+#: engine/core/graphene/mutations.py:610
#, python-brace-format
msgid "order product {order_product_uuid} not found"
msgstr "Orderproduct {order_product_uuid} bulunamadı!"
-#: engine/core/graphene/mutations.py:582
+#: engine/core/graphene/mutations.py:617
msgid "original address string provided by the user"
msgstr "Kullanıcı tarafından sağlanan orijinal adres dizesi"
-#: engine/core/graphene/mutations.py:618 engine/core/models.py:955
-#: engine/core/models.py:968 engine/core/models.py:1383
-#: engine/core/models.py:1412 engine/core/models.py:1437
-#: engine/core/viewsets.py:715
+#: engine/core/graphene/mutations.py:654 engine/core/models.py:978
+#: engine/core/models.py:991 engine/core/models.py:1435
+#: engine/core/models.py:1466 engine/core/models.py:1497
+#: engine/core/viewsets.py:760
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr "{name} mevcut değil: {uuid}!"
-#: engine/core/graphene/mutations.py:632
+#: engine/core/graphene/mutations.py:668
msgid "limit must be between 1 and 10"
msgstr "Limit 1 ile 10 arasında olmalıdır"
-#: engine/core/graphene/mutations.py:681
+#: engine/core/graphene/mutations.py:717
msgid "elasticsearch - works like a charm"
msgstr "ElasticSearch - bir cazibe gibi çalışır"
#: engine/core/graphene/object_types.py:82
-#: engine/core/graphene/object_types.py:370
-#: engine/core/graphene/object_types.py:417 engine/core/models.py:772
-#: engine/core/models.py:1250 engine/core/models.py:1897
+#: engine/core/graphene/object_types.py:417
+#: engine/core/graphene/object_types.py:468 engine/core/models.py:795
+#: engine/core/models.py:1289 engine/core/models.py:2021
msgid "attributes"
msgstr "Nitelikler"
@@ -1275,89 +1283,88 @@ msgid "groups of attributes"
msgstr "Nitelik grupları"
#: engine/core/graphene/object_types.py:116
-#: engine/core/graphene/object_types.py:193
-#: engine/core/graphene/object_types.py:223 engine/core/models.py:432
+#: engine/core/graphene/object_types.py:214
+#: engine/core/graphene/object_types.py:252 engine/core/models.py:451
msgid "categories"
msgstr "Kategoriler"
-#: engine/core/graphene/object_types.py:124 engine/core/models.py:503
+#: engine/core/graphene/object_types.py:132 engine/core/models.py:522
msgid "brands"
msgstr "Markalar"
-#: engine/core/graphene/object_types.py:195
+#: engine/core/graphene/object_types.py:216
msgid "category image url"
msgstr "Kategoriler"
-#: engine/core/graphene/object_types.py:196
-#: engine/core/graphene/object_types.py:317 engine/core/models.py:283
+#: engine/core/graphene/object_types.py:217
+#: engine/core/graphene/object_types.py:362 engine/core/models.py:289
msgid "markup percentage"
msgstr "İşaretleme Yüzdesi"
-#: engine/core/graphene/object_types.py:199
+#: engine/core/graphene/object_types.py:221
msgid "which attributes and values can be used for filtering this category."
msgstr ""
"Bu kategoriyi filtrelemek için hangi nitelikler ve değerler kullanılabilir."
-#: engine/core/graphene/object_types.py:203
-msgid ""
-"minimum and maximum prices for products in this category, if available."
+#: engine/core/graphene/object_types.py:227
+msgid "minimum and maximum prices for products in this category, if available."
msgstr "Varsa, bu kategorideki ürünler için minimum ve maksimum fiyatlar."
-#: engine/core/graphene/object_types.py:205
+#: engine/core/graphene/object_types.py:231
msgid "tags for this category"
msgstr "Bu kategori için etiketler"
-#: engine/core/graphene/object_types.py:206
+#: engine/core/graphene/object_types.py:234
msgid "products in this category"
msgstr "Bu kategorideki ürünler"
-#: engine/core/graphene/object_types.py:324 engine/core/models.py:188
+#: engine/core/graphene/object_types.py:369 engine/core/models.py:194
msgid "vendors"
msgstr "Satıcılar"
-#: engine/core/graphene/object_types.py:328
+#: engine/core/graphene/object_types.py:373
msgid "Latitude (Y coordinate)"
msgstr "Enlem (Y koordinatı)"
-#: engine/core/graphene/object_types.py:329
+#: engine/core/graphene/object_types.py:374
msgid "Longitude (X coordinate)"
msgstr "Boylam (X koordinatı)"
-#: engine/core/graphene/object_types.py:358
+#: engine/core/graphene/object_types.py:403
msgid "comment"
msgstr "Nasıl yapılır"
-#: engine/core/graphene/object_types.py:359
-#: engine/core/graphene/object_types.py:483
+#: engine/core/graphene/object_types.py:405
+#: engine/core/graphene/object_types.py:539
msgid "rating value from 1 to 10, inclusive, or 0 if not set."
msgstr "1'den 10'a kadar (dahil) derecelendirme değeri veya ayarlanmamışsa 0."
-#: engine/core/graphene/object_types.py:366
+#: engine/core/graphene/object_types.py:413
msgid "represents feedback from a user."
msgstr "Bir kullanıcıdan gelen geri bildirimi temsil eder."
-#: engine/core/graphene/object_types.py:371
-#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244
+#: engine/core/graphene/object_types.py:418
+#: engine/core/graphene/object_types.py:469 engine/core/models.py:1283
msgid "notifications"
msgstr "Bildirimler"
-#: engine/core/graphene/object_types.py:372
+#: engine/core/graphene/object_types.py:420
msgid "download url for this order product if applicable"
msgstr "Varsa, bu sipariş ürünü için URL'yi indirin"
-#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736
+#: engine/core/graphene/object_types.py:422 engine/core/models.py:1848
msgid "feedback"
msgstr "Geri bildirim"
-#: engine/core/graphene/object_types.py:407
+#: engine/core/graphene/object_types.py:456
msgid "a list of order products in this order"
msgstr "Bu siparişteki sipariş ürünlerinin bir listesi"
-#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214
+#: engine/core/graphene/object_types.py:458 engine/core/models.py:1253
msgid "billing address"
msgstr "Fatura adresi"
-#: engine/core/graphene/object_types.py:412
+#: engine/core/graphene/object_types.py:462
msgid ""
"shipping address for this order, leave blank if same as billing address or "
"if not applicable"
@@ -1365,53 +1372,53 @@ msgstr ""
"Bu sipariş için sevkiyat adresi, fatura adresi ile aynıysa veya geçerli "
"değilse boş bırakın"
-#: engine/core/graphene/object_types.py:414
+#: engine/core/graphene/object_types.py:465
msgid "total price of this order"
msgstr "Bu siparişin toplam fiyatı"
-#: engine/core/graphene/object_types.py:415
+#: engine/core/graphene/object_types.py:466
msgid "total quantity of products in order"
msgstr "Siparişteki toplam ürün miktarı"
-#: engine/core/graphene/object_types.py:416
+#: engine/core/graphene/object_types.py:467
msgid "are all products in the order digital"
msgstr "Siparişteki tüm ürünler dijital mi"
-#: engine/core/graphene/object_types.py:419
+#: engine/core/graphene/object_types.py:471
msgid "transactions for this order"
msgstr "Bu sipariş için işlemler"
-#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278
+#: engine/core/graphene/object_types.py:491 engine/core/models.py:1317
msgid "orders"
msgstr "Siparişler"
-#: engine/core/graphene/object_types.py:459
+#: engine/core/graphene/object_types.py:512
msgid "image url"
msgstr "Resim URL'si"
-#: engine/core/graphene/object_types.py:466
+#: engine/core/graphene/object_types.py:519
msgid "product's images"
msgstr "Ürün görselleri"
-#: engine/core/graphene/object_types.py:473 engine/core/models.py:431
-#: engine/core/models.py:586
+#: engine/core/graphene/object_types.py:526 engine/core/models.py:450
+#: engine/core/models.py:607
msgid "category"
msgstr "Kategori"
-#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737
+#: engine/core/graphene/object_types.py:528 engine/core/models.py:1849
msgid "feedbacks"
msgstr "Geri Bildirimler"
-#: engine/core/graphene/object_types.py:476 engine/core/models.py:502
-#: engine/core/models.py:595
+#: engine/core/graphene/object_types.py:529 engine/core/models.py:521
+#: engine/core/models.py:616
msgid "brand"
msgstr "Marka"
-#: engine/core/graphene/object_types.py:477 engine/core/models.py:106
+#: engine/core/graphene/object_types.py:531 engine/core/models.py:106
msgid "attribute groups"
msgstr "Öznitelik grupları"
-#: engine/core/graphene/object_types.py:478
+#: engine/core/graphene/object_types.py:533
#: engine/core/templates/digital_order_created_email.html:111
#: engine/core/templates/digital_order_delivered_email.html:109
#: engine/core/templates/shipped_order_created_email.html:109
@@ -1419,7 +1426,7 @@ msgstr "Öznitelik grupları"
msgid "price"
msgstr "Fiyat"
-#: engine/core/graphene/object_types.py:479
+#: engine/core/graphene/object_types.py:534
#: engine/core/templates/digital_order_created_email.html:110
#: engine/core/templates/digital_order_delivered_email.html:108
#: engine/core/templates/shipped_order_created_email.html:108
@@ -1427,39 +1434,39 @@ msgstr "Fiyat"
msgid "quantity"
msgstr "Miktar"
-#: engine/core/graphene/object_types.py:480
+#: engine/core/graphene/object_types.py:535
msgid "number of feedbacks"
msgstr "Geri bildirim sayısı"
-#: engine/core/graphene/object_types.py:481
+#: engine/core/graphene/object_types.py:536
msgid "only available for personal orders"
msgstr "Ürünler sadece kişisel siparişler için mevcuttur"
-#: engine/core/graphene/object_types.py:484
+#: engine/core/graphene/object_types.py:541
msgid "discount price"
msgstr "İndirimli fiyat"
-#: engine/core/graphene/object_types.py:508 engine/core/models.py:658
+#: engine/core/graphene/object_types.py:565 engine/core/models.py:679
msgid "products"
msgstr "Ürünler"
-#: engine/core/graphene/object_types.py:611
+#: engine/core/graphene/object_types.py:675
msgid "promocodes"
msgstr "Promosyon Kodları"
-#: engine/core/graphene/object_types.py:621
+#: engine/core/graphene/object_types.py:690
msgid "products on sale"
msgstr "Satıştaki ürünler"
-#: engine/core/graphene/object_types.py:628 engine/core/models.py:904
+#: engine/core/graphene/object_types.py:698 engine/core/models.py:927
msgid "promotions"
msgstr "Promosyonlar"
-#: engine/core/graphene/object_types.py:632 engine/core/models.py:187
+#: engine/core/graphene/object_types.py:702 engine/core/models.py:193
msgid "vendor"
msgstr "Satıcı"
-#: engine/core/graphene/object_types.py:633 engine/core/models.py:657
+#: engine/core/graphene/object_types.py:703 engine/core/models.py:678
#: engine/core/templates/digital_order_created_email.html:109
#: engine/core/templates/digital_order_delivered_email.html:107
#: engine/core/templates/shipped_order_created_email.html:107
@@ -1467,98 +1474,98 @@ msgstr "Satıcı"
msgid "product"
msgstr "Ürün"
-#: engine/core/graphene/object_types.py:644 engine/core/models.py:927
+#: engine/core/graphene/object_types.py:715 engine/core/models.py:950
msgid "wishlisted products"
msgstr "İstek listesindeki ürünler"
-#: engine/core/graphene/object_types.py:650 engine/core/models.py:944
+#: engine/core/graphene/object_types.py:722 engine/core/models.py:967
msgid "wishlists"
msgstr "Dilek Listeleri"
-#: engine/core/graphene/object_types.py:654
+#: engine/core/graphene/object_types.py:727
msgid "tagged products"
msgstr "Etiketlenmiş ürünler"
-#: engine/core/graphene/object_types.py:661 engine/core/models.py:224
-#: engine/core/models.py:601
+#: engine/core/graphene/object_types.py:735 engine/core/models.py:230
+#: engine/core/models.py:622
msgid "product tags"
msgstr "Ürün etiketleri"
-#: engine/core/graphene/object_types.py:665
+#: engine/core/graphene/object_types.py:740
msgid "tagged categories"
msgstr "Etiketlenmiş kategoriler"
-#: engine/core/graphene/object_types.py:672
+#: engine/core/graphene/object_types.py:748
msgid "categories tags"
msgstr "Kategoriler' etiketleri"
-#: engine/core/graphene/object_types.py:676
+#: engine/core/graphene/object_types.py:752
msgid "project name"
msgstr "Proje adı"
-#: engine/core/graphene/object_types.py:677
+#: engine/core/graphene/object_types.py:753
msgid "company name"
msgstr "Şirket Adı"
-#: engine/core/graphene/object_types.py:678
+#: engine/core/graphene/object_types.py:754
msgid "company address"
msgstr "Şirket Adresi"
-#: engine/core/graphene/object_types.py:679
+#: engine/core/graphene/object_types.py:755
msgid "company phone number"
msgstr "Şirket Telefon Numarası"
-#: engine/core/graphene/object_types.py:680
+#: engine/core/graphene/object_types.py:758
msgid "email from, sometimes it must be used instead of host user value"
msgstr "'email from', bazen ana kullanıcı değeri yerine kullanılmalıdır"
-#: engine/core/graphene/object_types.py:681
+#: engine/core/graphene/object_types.py:761
msgid "email host user"
msgstr "E-posta ana kullanıcısı"
-#: engine/core/graphene/object_types.py:682
+#: engine/core/graphene/object_types.py:762
msgid "maximum amount for payment"
msgstr "Ödeme için maksimum tutar"
-#: engine/core/graphene/object_types.py:683
+#: engine/core/graphene/object_types.py:763
msgid "minimum amount for payment"
msgstr "Ödeme için minimum tutar"
-#: engine/core/graphene/object_types.py:684
+#: engine/core/graphene/object_types.py:764
msgid "analytics data"
msgstr "Analitik veriler"
-#: engine/core/graphene/object_types.py:685
+#: engine/core/graphene/object_types.py:765
msgid "advertisement data"
msgstr "Reklam verileri"
-#: engine/core/graphene/object_types.py:688
+#: engine/core/graphene/object_types.py:768
msgid "company configuration"
msgstr "Konfigürasyon"
-#: engine/core/graphene/object_types.py:692
+#: engine/core/graphene/object_types.py:772
msgid "language code"
msgstr "Dil kodu"
-#: engine/core/graphene/object_types.py:693
+#: engine/core/graphene/object_types.py:773
msgid "language name"
msgstr "Dil adı"
-#: engine/core/graphene/object_types.py:694
+#: engine/core/graphene/object_types.py:774
msgid "language flag, if exists :)"
msgstr "Dil bayrağı, eğer varsa :)"
-#: engine/core/graphene/object_types.py:697
+#: engine/core/graphene/object_types.py:777
msgid "supported languages"
msgstr "Desteklenen dillerin bir listesini alın"
-#: engine/core/graphene/object_types.py:728
-#: engine/core/graphene/object_types.py:729
-#: engine/core/graphene/object_types.py:730
+#: engine/core/graphene/object_types.py:809
+#: engine/core/graphene/object_types.py:812
+#: engine/core/graphene/object_types.py:815
msgid "products search results"
msgstr "Ürünler arama sonuçları"
-#: engine/core/graphene/object_types.py:731
+#: engine/core/graphene/object_types.py:817
msgid "posts search results"
msgstr "Ürünler arama sonuçları"
@@ -1571,9 +1578,9 @@ msgid ""
msgstr ""
"Hiyerarşik olabilen bir öznitelik grubunu temsil eder. Bu sınıf, öznitelik "
"gruplarını yönetmek ve düzenlemek için kullanılır. Bir öznitelik grubu, "
-"hiyerarşik bir yapı oluşturan bir üst gruba sahip olabilir. Bu, karmaşık bir"
-" sistemde öznitelikleri daha etkili bir şekilde kategorize etmek ve yönetmek"
-" için yararlı olabilir."
+"hiyerarşik bir yapı oluşturan bir üst gruba sahip olabilir. Bu, karmaşık bir "
+"sistemde öznitelikleri daha etkili bir şekilde kategorize etmek ve yönetmek "
+"için yararlı olabilir."
#: engine/core/models.py:91
msgid "parent of this group"
@@ -1587,7 +1594,7 @@ msgstr "Üst öznitelik grubu"
msgid "attribute group's name"
msgstr "Öznitelik grubunun adı"
-#: engine/core/models.py:105 engine/core/models.py:734
+#: engine/core/models.py:105 engine/core/models.py:755
msgid "attribute group"
msgstr "Öznitelik grubu"
@@ -1603,55 +1610,55 @@ msgid ""
msgstr ""
"Harici satıcılar ve bunların etkileşim gereksinimleri hakkında bilgi "
"depolayabilen bir satıcı varlığını temsil eder. Satıcı sınıfı, harici bir "
-"satıcıyla ilgili bilgileri tanımlamak ve yönetmek için kullanılır. Satıcının"
-" adını, iletişim için gereken kimlik doğrulama ayrıntılarını ve satıcıdan "
+"satıcıyla ilgili bilgileri tanımlamak ve yönetmek için kullanılır. Satıcının "
+"adını, iletişim için gereken kimlik doğrulama ayrıntılarını ve satıcıdan "
"alınan ürünlere uygulanan yüzde işaretlemesini saklar. Bu model ayrıca ek "
"meta verileri ve kısıtlamaları da muhafaza ederek üçüncü taraf satıcılarla "
"etkileşime giren sistemlerde kullanıma uygun hale getirir."
-#: engine/core/models.py:124
+#: engine/core/models.py:125
msgid "stores credentials and endpoints required for vendor communication"
msgstr ""
"Satıcının API iletişimi için gerekli kimlik bilgilerini ve uç noktaları "
"depolar"
-#: engine/core/models.py:125
+#: engine/core/models.py:127
msgid "authentication info"
msgstr "Kimlik doğrulama bilgisi"
-#: engine/core/models.py:130
+#: engine/core/models.py:132
msgid "define the markup for products retrieved from this vendor"
msgstr "Bu satıcıdan alınan ürünler için işaretlemeyi tanımlayın"
-#: engine/core/models.py:131
+#: engine/core/models.py:133
msgid "vendor markup percentage"
msgstr "Satıcı kar payı yüzdesi"
-#: engine/core/models.py:135
+#: engine/core/models.py:137
msgid "name of this vendor"
msgstr "Bu satıcının adı"
-#: engine/core/models.py:136
+#: engine/core/models.py:138
msgid "vendor name"
msgstr "Satıcı adı"
-#: engine/core/models.py:147
+#: engine/core/models.py:153
msgid "response file"
msgstr "yanıt dosyası"
-#: engine/core/models.py:148
+#: engine/core/models.py:154
msgid "vendor's last processing response"
msgstr "satıcının son işlem yanıtı"
-#: engine/core/models.py:154
+#: engine/core/models.py:160
msgid "vendor's integration file path"
msgstr "Satıcının entegrasyon dosya yolu"
-#: engine/core/models.py:155
+#: engine/core/models.py:161
msgid "integration path"
msgstr "Entegrasyon yolu"
-#: engine/core/models.py:197
+#: engine/core/models.py:203
msgid ""
"Represents a product tag used for classifying or identifying products. The "
"ProductTag class is designed to uniquely identify and classify products "
@@ -1660,33 +1667,33 @@ msgid ""
"metadata customization for administrative purposes."
msgstr ""
"Ürünleri sınıflandırmak veya tanımlamak için kullanılan bir ürün etiketini "
-"temsil eder. ProductTag sınıfı, dahili bir etiket tanımlayıcısı ve kullanıcı"
-" dostu bir ekran adı kombinasyonu aracılığıyla ürünleri benzersiz bir "
-"şekilde tanımlamak ve sınıflandırmak için tasarlanmıştır. Mixin'ler "
-"aracılığıyla dışa aktarılan işlemleri destekler ve yönetimsel amaçlar için "
-"meta veri özelleştirmesi sağlar."
+"temsil eder. ProductTag sınıfı, dahili bir etiket tanımlayıcısı ve kullanıcı "
+"dostu bir ekran adı kombinasyonu aracılığıyla ürünleri benzersiz bir şekilde "
+"tanımlamak ve sınıflandırmak için tasarlanmıştır. Mixin'ler aracılığıyla "
+"dışa aktarılan işlemleri destekler ve yönetimsel amaçlar için meta veri "
+"özelleştirmesi sağlar."
-#: engine/core/models.py:209 engine/core/models.py:240
+#: engine/core/models.py:215 engine/core/models.py:246
msgid "internal tag identifier for the product tag"
msgstr "Ürün etiketi için dahili etiket tanımlayıcısı"
-#: engine/core/models.py:210 engine/core/models.py:241
+#: engine/core/models.py:216 engine/core/models.py:247
msgid "tag name"
msgstr "Etiket adı"
-#: engine/core/models.py:214 engine/core/models.py:245
+#: engine/core/models.py:220 engine/core/models.py:251
msgid "user-friendly name for the product tag"
msgstr "Ürün etiketi için kullanıcı dostu ad"
-#: engine/core/models.py:215 engine/core/models.py:246
+#: engine/core/models.py:221 engine/core/models.py:252
msgid "tag display name"
msgstr "Etiket görünen adı"
-#: engine/core/models.py:223
+#: engine/core/models.py:229
msgid "product tag"
msgstr "Ürün etiketi"
-#: engine/core/models.py:229
+#: engine/core/models.py:235
msgid ""
"Represents a category tag used for products. This class models a category "
"tag that can be used to associate and classify products. It includes "
@@ -1697,15 +1704,15 @@ msgstr ""
"kategori etiketini modeller. Dahili bir etiket tanımlayıcısı ve kullanıcı "
"dostu bir ekran adı için öznitelikler içerir."
-#: engine/core/models.py:254
+#: engine/core/models.py:260
msgid "category tag"
msgstr "kategori etiketi"
-#: engine/core/models.py:255 engine/core/models.py:327
+#: engine/core/models.py:261 engine/core/models.py:333
msgid "category tags"
msgstr "kategori etiketleri"
-#: engine/core/models.py:260
+#: engine/core/models.py:266
msgid ""
"Represents a category entity to organize and group related items in a "
"hierarchical structure. Categories may have hierarchical relationships with "
@@ -1719,65 +1726,64 @@ msgid ""
msgstr ""
"İlgili öğeleri hiyerarşik bir yapıda düzenlemek ve gruplamak için bir "
"kategori varlığını temsil eder. Kategoriler, ebeveyn-çocuk ilişkilerini "
-"destekleyen diğer kategorilerle hiyerarşik ilişkilere sahip olabilir. Sınıf,"
-" kategoriyle ilgili özellikler için bir temel görevi gören meta veri ve "
+"destekleyen diğer kategorilerle hiyerarşik ilişkilere sahip olabilir. Sınıf, "
+"kategoriyle ilgili özellikler için bir temel görevi gören meta veri ve "
"görsel temsil alanları içerir. Bu sınıf genellikle bir uygulama içinde ürün "
"kategorilerini veya diğer benzer gruplamaları tanımlamak ve yönetmek için "
"kullanılır ve kullanıcıların veya yöneticilerin kategorilerin adını, "
"açıklamasını ve hiyerarşisini belirlemesinin yanı sıra resimler, etiketler "
"veya öncelik gibi öznitelikler atamasına olanak tanır."
-#: engine/core/models.py:274
+#: engine/core/models.py:280
msgid "upload an image representing this category"
msgstr "Bu kategoriyi temsil eden bir resim yükleyin"
-#: engine/core/models.py:277
+#: engine/core/models.py:283
msgid "category image"
msgstr "Kategori görüntüsü"
-#: engine/core/models.py:282
+#: engine/core/models.py:288
msgid "define a markup percentage for products in this category"
msgstr "Bu kategorideki ürünler için bir fiyatlandırma yüzdesi tanımlayın"
-#: engine/core/models.py:291
+#: engine/core/models.py:297
msgid "parent of this category to form a hierarchical structure"
msgstr "Hiyerarşik bir yapı oluşturmak için bu kategorinin üst öğesi"
-#: engine/core/models.py:292
+#: engine/core/models.py:298
msgid "parent category"
msgstr "Ana kategori"
-#: engine/core/models.py:297
+#: engine/core/models.py:303
msgid "category name"
msgstr "Kategori adı"
-#: engine/core/models.py:298
+#: engine/core/models.py:304
msgid "provide a name for this category"
msgstr "Bu kategori için bir ad girin"
-#: engine/core/models.py:305
+#: engine/core/models.py:311
msgid "add a detailed description for this category"
msgstr "Bu kategori için ayrıntılı bir açıklama ekleyin"
-#: engine/core/models.py:306
+#: engine/core/models.py:312
msgid "category description"
msgstr "Kategori açıklaması"
-#: engine/core/models.py:326
+#: engine/core/models.py:332
msgid "tags that help describe or group this category"
msgstr "bu kategoriyi tanımlamaya veya gruplandırmaya yardımcı olan etiketler"
-#: engine/core/models.py:333 engine/core/models.py:495
+#: engine/core/models.py:339 engine/core/models.py:514
msgid "priority"
msgstr "Öncelik"
-#: engine/core/models.py:438
+#: engine/core/models.py:457
msgid ""
"Represents a Brand object in the system. This class handles information and "
"attributes related to a brand, including its name, logos, description, "
"associated categories, a unique slug, and priority order. It allows for the "
-"organization and representation of brand-related data within the "
-"application."
+"organization and representation of brand-related data within the application."
msgstr ""
"Sistemdeki bir Marka nesnesini temsil eder. Bu sınıf, adı, logoları, "
"açıklaması, ilişkili kategorileri, benzersiz bir slug ve öncelik sırası "
@@ -1785,50 +1791,50 @@ msgstr ""
"Uygulama içinde markayla ilgili verilerin düzenlenmesini ve temsil "
"edilmesini sağlar."
-#: engine/core/models.py:448
+#: engine/core/models.py:467
msgid "name of this brand"
msgstr "Bu markanın adı"
-#: engine/core/models.py:449
+#: engine/core/models.py:468
msgid "brand name"
msgstr "Marka adı"
-#: engine/core/models.py:456
+#: engine/core/models.py:475
msgid "upload a logo representing this brand"
msgstr "Bu markayı temsil eden bir logo yükleyin"
-#: engine/core/models.py:458
+#: engine/core/models.py:477
msgid "brand small image"
msgstr "Marka küçük imajı"
-#: engine/core/models.py:464
+#: engine/core/models.py:483
msgid "upload a big logo representing this brand"
msgstr "Bu markayı temsil eden büyük bir logo yükleyin"
-#: engine/core/models.py:466
+#: engine/core/models.py:485
msgid "brand big image"
msgstr "Marka büyük imaj"
-#: engine/core/models.py:471
+#: engine/core/models.py:490
msgid "add a detailed description of the brand"
msgstr "Markanın ayrıntılı bir açıklamasını ekleyin"
-#: engine/core/models.py:472
+#: engine/core/models.py:491
msgid "brand description"
msgstr "Marka açıklaması"
-#: engine/core/models.py:477
+#: engine/core/models.py:496
msgid "optional categories that this brand is associated with"
msgstr "Bu markanın ilişkili olduğu isteğe bağlı kategoriler"
-#: engine/core/models.py:478
+#: engine/core/models.py:497
msgid "associated categories"
msgstr "Kategoriler"
-#: engine/core/models.py:508
+#: engine/core/models.py:527
msgid ""
-"Represents the stock of a product managed in the system. This class provides"
-" details about the relationship between vendors, products, and their stock "
+"Represents the stock of a product managed in the system. This class provides "
+"details about the relationship between vendors, products, and their stock "
"information, as well as inventory-related properties like price, purchase "
"price, quantity, SKU, and digital assets. It is part of the inventory "
"management system to allow tracking and evaluation of products available "
@@ -1837,76 +1843,76 @@ msgstr ""
"Sistemde yönetilen bir ürünün stokunu temsil eder. Bu sınıf, satıcılar, "
"ürünler ve bunların stok bilgileri arasındaki ilişkinin yanı sıra fiyat, "
"satın alma fiyatı, miktar, SKU ve dijital varlıklar gibi envanterle ilgili "
-"özellikler hakkında ayrıntılar sağlar. Çeşitli satıcılardan temin edilebilen"
-" ürünlerin izlenmesine ve değerlendirilmesine olanak sağlamak için envanter "
+"özellikler hakkında ayrıntılar sağlar. Çeşitli satıcılardan temin edilebilen "
+"ürünlerin izlenmesine ve değerlendirilmesine olanak sağlamak için envanter "
"yönetim sisteminin bir parçasıdır."
-#: engine/core/models.py:520
+#: engine/core/models.py:539
msgid "the vendor supplying this product stock"
msgstr "Bu ürün stokunu tedarik eden satıcı"
-#: engine/core/models.py:521
+#: engine/core/models.py:540
msgid "associated vendor"
msgstr "İlişkili satıcı"
-#: engine/core/models.py:525
+#: engine/core/models.py:544
msgid "final price to the customer after markups"
msgstr "Fiyat artışlarından sonra müşteriye verilen nihai fiyat"
-#: engine/core/models.py:526
+#: engine/core/models.py:545
msgid "selling price"
msgstr "Satış fiyatı"
-#: engine/core/models.py:531
+#: engine/core/models.py:550
msgid "the product associated with this stock entry"
msgstr "Bu stok girişi ile ilişkili ürün"
-#: engine/core/models.py:532 engine/core/models.py:797
-#: engine/core/models.py:843 engine/core/models.py:1792
+#: engine/core/models.py:551 engine/core/models.py:820
+#: engine/core/models.py:866 engine/core/models.py:1904
msgid "associated product"
msgstr "İlişkili ürün"
-#: engine/core/models.py:539
+#: engine/core/models.py:558
msgid "the price paid to the vendor for this product"
msgstr "Bu ürün için satıcıya ödenen fiyat"
-#: engine/core/models.py:540
+#: engine/core/models.py:559
msgid "vendor purchase price"
msgstr "Satıcı satın alma fiyatı"
-#: engine/core/models.py:544
+#: engine/core/models.py:563
msgid "available quantity of the product in stock"
msgstr "Stoktaki mevcut ürün miktarı"
-#: engine/core/models.py:545
+#: engine/core/models.py:564
msgid "quantity in stock"
msgstr "Stoktaki miktar"
-#: engine/core/models.py:549
+#: engine/core/models.py:568
msgid "vendor-assigned SKU for identifying the product"
msgstr "Ürünü tanımlamak için satıcı tarafından atanan SKU"
-#: engine/core/models.py:550
+#: engine/core/models.py:569
msgid "vendor sku"
msgstr "Satıcının SKU'su"
-#: engine/core/models.py:556
+#: engine/core/models.py:575
msgid "digital file associated with this stock if applicable"
msgstr "Varsa bu stokla ilişkili dijital dosya"
-#: engine/core/models.py:557
+#: engine/core/models.py:576
msgid "digital file"
msgstr "Dijital dosya"
-#: engine/core/models.py:560
+#: engine/core/models.py:580
msgid "system attributes"
msgstr "Sistem nitelikleri"
-#: engine/core/models.py:567
+#: engine/core/models.py:588
msgid "stock entries"
msgstr "Stok girişleri"
-#: engine/core/models.py:572
+#: engine/core/models.py:593
msgid ""
"Represents a product with attributes such as category, brand, tags, digital "
"status, name, description, part number, and slug. Provides related utility "
@@ -1927,61 +1933,61 @@ msgstr ""
"yönetir. Bir uygulama içinde ürün verilerini ve ilişkili bilgileri "
"tanımlamak ve işlemek için kullanılır."
-#: engine/core/models.py:585
+#: engine/core/models.py:606
msgid "category this product belongs to"
msgstr "Bu ürünün ait olduğu kategori"
-#: engine/core/models.py:594
+#: engine/core/models.py:615
msgid "optionally associate this product with a brand"
msgstr "İsteğe bağlı olarak bu ürünü bir marka ile ilişkilendirin"
-#: engine/core/models.py:600
+#: engine/core/models.py:621
msgid "tags that help describe or group this product"
msgstr "Bu ürünü tanımlamaya veya gruplandırmaya yardımcı olan etiketler"
-#: engine/core/models.py:605
+#: engine/core/models.py:626
msgid "indicates whether this product is digitally delivered"
msgstr "Bu ürünün dijital olarak teslim edilip edilmediğini belirtir"
-#: engine/core/models.py:606
+#: engine/core/models.py:627
msgid "is product digital"
msgstr "Ürün dijital mi"
-#: engine/core/models.py:612
+#: engine/core/models.py:633
msgid "provide a clear identifying name for the product"
msgstr "Ürün için net bir tanımlayıcı isim sağlayın"
-#: engine/core/models.py:613
+#: engine/core/models.py:634
msgid "product name"
msgstr "Ürün adı"
-#: engine/core/models.py:619 engine/core/models.py:892
+#: engine/core/models.py:640 engine/core/models.py:915
msgid "add a detailed description of the product"
msgstr "Ürünün ayrıntılı bir açıklamasını ekleyin"
-#: engine/core/models.py:620
+#: engine/core/models.py:641
msgid "product description"
msgstr "Ürün Açıklaması"
-#: engine/core/models.py:627
+#: engine/core/models.py:648
msgid "part number for this product"
msgstr "Bu ürün için parça numarası"
-#: engine/core/models.py:628
+#: engine/core/models.py:649
msgid "part number"
msgstr "Parça numarası"
-#: engine/core/models.py:647
+#: engine/core/models.py:668
msgid "stock keeping unit for this product"
msgstr "Bu ürün için Stok Tutma Birimi"
-#: engine/core/models.py:720
+#: engine/core/models.py:741
msgid ""
"Represents an attribute in the system. This class is used to define and "
"manage attributes, which are customizable pieces of data that can be "
"associated with other entities. Attributes have associated categories, "
-"groups, value types, and names. The model supports multiple types of values,"
-" including string, integer, float, boolean, array, and object. This allows "
+"groups, value types, and names. The model supports multiple types of values, "
+"including string, integer, float, boolean, array, and object. This allows "
"for dynamic and flexible data structuring."
msgstr ""
"Sistemdeki bir özniteliği temsil eder. Bu sınıf, diğer varlıklarla "
@@ -1991,140 +1997,140 @@ msgstr ""
"tamsayı, float, boolean, dizi ve nesne dahil olmak üzere birden fazla değer "
"türünü destekler. Bu, dinamik ve esnek veri yapılandırmasına olanak tanır."
-#: engine/core/models.py:733
+#: engine/core/models.py:754
msgid "group of this attribute"
msgstr "Bu niteliğin grubu"
-#: engine/core/models.py:739
+#: engine/core/models.py:760
msgid "string"
msgstr "String"
-#: engine/core/models.py:740
+#: engine/core/models.py:761
msgid "integer"
msgstr "Tamsayı"
-#: engine/core/models.py:741
+#: engine/core/models.py:762
msgid "float"
msgstr "Yüzer"
-#: engine/core/models.py:742
+#: engine/core/models.py:763
msgid "boolean"
msgstr "Boolean"
-#: engine/core/models.py:743
+#: engine/core/models.py:764
msgid "array"
msgstr "Dizi"
-#: engine/core/models.py:744
+#: engine/core/models.py:765
msgid "object"
msgstr "Nesne"
-#: engine/core/models.py:746
+#: engine/core/models.py:767
msgid "type of the attribute's value"
msgstr "Özniteliğin değerinin türü"
-#: engine/core/models.py:747
+#: engine/core/models.py:768
msgid "value type"
msgstr "Değer türü"
-#: engine/core/models.py:752
+#: engine/core/models.py:773
msgid "name of this attribute"
msgstr "Bu niteliğin adı"
-#: engine/core/models.py:753
+#: engine/core/models.py:774
msgid "attribute's name"
msgstr "Özniteliğin adı"
-#: engine/core/models.py:758
+#: engine/core/models.py:779
msgid "is filterable"
msgstr "filtrelenebilir"
-#: engine/core/models.py:759
+#: engine/core/models.py:781
msgid "designates whether this attribute can be used for filtering or not"
msgstr ""
"Bu kategoriyi filtrelemek için hangi nitelikler ve değerler kullanılabilir."
-#: engine/core/models.py:771 engine/core/models.py:789
+#: engine/core/models.py:794 engine/core/models.py:812
#: engine/core/templates/digital_order_delivered_email.html:134
msgid "attribute"
msgstr "Öznitelik"
-#: engine/core/models.py:777
+#: engine/core/models.py:800
msgid ""
-"Represents a specific value for an attribute that is linked to a product. It"
-" links the 'attribute' to a unique 'value', allowing better organization and"
-" dynamic representation of product characteristics."
+"Represents a specific value for an attribute that is linked to a product. It "
+"links the 'attribute' to a unique 'value', allowing better organization and "
+"dynamic representation of product characteristics."
msgstr ""
"Bir ürünle bağlantılı bir nitelik için belirli bir değeri temsil eder. "
"'Niteliği' benzersiz bir 'değere' bağlayarak ürün özelliklerinin daha iyi "
"düzenlenmesine ve dinamik olarak temsil edilmesine olanak tanır."
-#: engine/core/models.py:788
+#: engine/core/models.py:811
msgid "attribute of this value"
msgstr "Bu değerin niteliği"
-#: engine/core/models.py:796
+#: engine/core/models.py:819
msgid "the specific product associated with this attribute's value"
msgstr "Bu özniteliğin değeriyle ilişkili belirli ürün"
-#: engine/core/models.py:802
+#: engine/core/models.py:825
msgid "the specific value for this attribute"
msgstr "Bu öznitelik için özel değer"
-#: engine/core/models.py:815
+#: engine/core/models.py:838
msgid ""
"Represents a product image associated with a product in the system. This "
-"class is designed to manage images for products, including functionality for"
-" uploading image files, associating them with specific products, and "
+"class is designed to manage images for products, including functionality for "
+"uploading image files, associating them with specific products, and "
"determining their display order. It also includes an accessibility feature "
"with alternative text for the images."
msgstr ""
"Sistemdeki bir ürünle ilişkilendirilmiş bir ürün resmini temsil eder. Bu "
-"sınıf, görüntü dosyalarını yükleme, bunları belirli ürünlerle ilişkilendirme"
-" ve görüntüleme sıralarını belirleme işlevleri dahil olmak üzere ürün "
+"sınıf, görüntü dosyalarını yükleme, bunları belirli ürünlerle ilişkilendirme "
+"ve görüntüleme sıralarını belirleme işlevleri dahil olmak üzere ürün "
"görüntülerini yönetmek için tasarlanmıştır. Ayrıca görüntüler için "
"alternatif metin içeren bir erişilebilirlik özelliği de içerir."
-#: engine/core/models.py:826
+#: engine/core/models.py:849
msgid "provide alternative text for the image for accessibility"
msgstr "Erişilebilirlik için görüntü için alternatif metin sağlayın"
-#: engine/core/models.py:827
+#: engine/core/models.py:850
msgid "image alt text"
msgstr "Resim alt metni"
-#: engine/core/models.py:830
+#: engine/core/models.py:853
msgid "upload the image file for this product"
msgstr "Bu ürün için resim dosyasını yükleyin"
-#: engine/core/models.py:831 engine/core/models.py:862
+#: engine/core/models.py:854 engine/core/models.py:885
msgid "product image"
msgstr "Ürün görseli"
-#: engine/core/models.py:836
+#: engine/core/models.py:859
msgid "determines the order in which images are displayed"
msgstr "Görüntülerin görüntülenme sırasını belirler"
-#: engine/core/models.py:837
+#: engine/core/models.py:860
msgid "display priority"
msgstr "Ekran önceliği"
-#: engine/core/models.py:842
+#: engine/core/models.py:865
msgid "the product that this image represents"
msgstr "Bu görselin temsil ettiği ürün"
-#: engine/core/models.py:863
+#: engine/core/models.py:886
msgid "product images"
msgstr "Ürün görselleri"
-#: engine/core/models.py:868
+#: engine/core/models.py:891
msgid ""
"Represents a promotional campaign for products with a discount. This class "
"is used to define and manage promotional campaigns that offer a percentage-"
"based discount for products. The class includes attributes for setting the "
"discount rate, providing details about the promotion, and linking it to the "
-"applicable products. It integrates with the product catalog to determine the"
-" affected items in the campaign."
+"applicable products. It integrates with the product catalog to determine the "
+"affected items in the campaign."
msgstr ""
"İndirimli ürünler için bir promosyon kampanyasını temsil eder. Bu sınıf, "
"ürünler için yüzdeye dayalı bir indirim sunan promosyon kampanyalarını "
@@ -2133,167 +2139,167 @@ msgstr ""
"öznitelikler içerir. Kampanyadaki etkilenen ürünleri belirlemek için ürün "
"kataloğu ile entegre olur."
-#: engine/core/models.py:880
+#: engine/core/models.py:903
msgid "percentage discount for the selected products"
msgstr "Seçilen ürünler için yüzde indirim"
-#: engine/core/models.py:881
+#: engine/core/models.py:904
msgid "discount percentage"
msgstr "İndirim yüzdesi"
-#: engine/core/models.py:886
+#: engine/core/models.py:909
msgid "provide a unique name for this promotion"
msgstr "Bu promosyon için benzersiz bir ad girin"
-#: engine/core/models.py:887
+#: engine/core/models.py:910
msgid "promotion name"
msgstr "Promosyon adı"
-#: engine/core/models.py:893
+#: engine/core/models.py:916
msgid "promotion description"
msgstr "Promosyon açıklaması"
-#: engine/core/models.py:898
+#: engine/core/models.py:921
msgid "select which products are included in this promotion"
msgstr "Bu promosyona hangi ürünlerin dahil olduğunu seçin"
-#: engine/core/models.py:899
+#: engine/core/models.py:922
msgid "included products"
msgstr "Dahil olan ürünler"
-#: engine/core/models.py:903
+#: engine/core/models.py:926
msgid "promotion"
msgstr "Promosyon"
-#: engine/core/models.py:914
+#: engine/core/models.py:937
msgid ""
"Represents a user's wishlist for storing and managing desired products. The "
"class provides functionality to manage a collection of products, supporting "
"operations such as adding and removing products, as well as supporting "
"operations for adding and removing multiple products at once."
msgstr ""
-"İstenen ürünleri depolamak ve yönetmek için bir kullanıcının istek listesini"
-" temsil eder. Sınıf, bir ürün koleksiyonunu yönetmek için işlevsellik "
-"sağlar, ürün ekleme ve kaldırma gibi işlemlerin yanı sıra aynı anda birden "
-"fazla ürün ekleme ve kaldırma işlemlerini destekler."
+"İstenen ürünleri depolamak ve yönetmek için bir kullanıcının istek listesini "
+"temsil eder. Sınıf, bir ürün koleksiyonunu yönetmek için işlevsellik sağlar, "
+"ürün ekleme ve kaldırma gibi işlemlerin yanı sıra aynı anda birden fazla "
+"ürün ekleme ve kaldırma işlemlerini destekler."
-#: engine/core/models.py:926
+#: engine/core/models.py:949
msgid "products that the user has marked as wanted"
msgstr "Kullanıcının aranıyor olarak işaretlediği ürünler"
-#: engine/core/models.py:934
+#: engine/core/models.py:957
msgid "user who owns this wishlist"
msgstr "Bu istek listesine sahip olan kullanıcı"
-#: engine/core/models.py:935
+#: engine/core/models.py:958
msgid "wishlist owner"
msgstr "Dilek Listesi Sahibi"
-#: engine/core/models.py:943
+#: engine/core/models.py:966
msgid "wishlist"
msgstr "İstek Listesi"
-#: engine/core/models.py:985
+#: engine/core/models.py:1008
msgid ""
"Represents a documentary record tied to a product. This class is used to "
"store information about documentaries related to specific products, "
"including file uploads and their metadata. It contains methods and "
"properties to handle the file type and storage path for the documentary "
-"files. It extends functionality from specific mixins and provides additional"
-" custom features."
+"files. It extends functionality from specific mixins and provides additional "
+"custom features."
msgstr ""
"Bir ürüne bağlı bir belgesel kaydını temsil eder. Bu sınıf, dosya "
"yüklemeleri ve meta verileri dahil olmak üzere belirli ürünlerle ilgili "
"belgeseller hakkında bilgi depolamak için kullanılır. Belgesel dosyalarının "
-"dosya türünü ve depolama yolunu işlemek için yöntemler ve özellikler içerir."
-" Belirli mixin'lerin işlevselliğini genişletir ve ek özel özellikler sağlar."
+"dosya türünü ve depolama yolunu işlemek için yöntemler ve özellikler içerir. "
+"Belirli mixin'lerin işlevselliğini genişletir ve ek özel özellikler sağlar."
-#: engine/core/models.py:998
+#: engine/core/models.py:1023
msgid "documentary"
msgstr "Belgesel"
-#: engine/core/models.py:999
+#: engine/core/models.py:1024
msgid "documentaries"
msgstr "Belgeseller"
-#: engine/core/models.py:1009
+#: engine/core/models.py:1034
msgid "unresolved"
msgstr "Çözümlenmemiş"
-#: engine/core/models.py:1014
+#: engine/core/models.py:1039
msgid ""
-"Represents an address entity that includes location details and associations"
-" with a user. Provides functionality for geographic and address data "
-"storage, as well as integration with geocoding services. This class is "
-"designed to store detailed address information including components like "
-"street, city, region, country, and geolocation (longitude and latitude). It "
-"supports integration with geocoding APIs, enabling the storage of raw API "
-"responses for further processing or inspection. The class also allows "
-"associating an address with a user, facilitating personalized data handling."
+"Represents an address entity that includes location details and associations "
+"with a user. Provides functionality for geographic and address data storage, "
+"as well as integration with geocoding services. This class is designed to "
+"store detailed address information including components like street, city, "
+"region, country, and geolocation (longitude and latitude). It supports "
+"integration with geocoding APIs, enabling the storage of raw API responses "
+"for further processing or inspection. The class also allows associating an "
+"address with a user, facilitating personalized data handling."
msgstr ""
"Konum ayrıntılarını ve bir kullanıcıyla ilişkileri içeren bir adres "
-"varlığını temsil eder. Coğrafi ve adres verilerinin depolanmasının yanı sıra"
-" coğrafi kodlama hizmetleriyle entegrasyon için işlevsellik sağlar. Bu "
-"sınıf, sokak, şehir, bölge, ülke ve coğrafi konum (enlem ve boylam) gibi "
+"varlığını temsil eder. Coğrafi ve adres verilerinin depolanmasının yanı sıra "
+"coğrafi kodlama hizmetleriyle entegrasyon için işlevsellik sağlar. Bu sınıf, "
+"sokak, şehir, bölge, ülke ve coğrafi konum (enlem ve boylam) gibi "
"bileşenleri içeren ayrıntılı adres bilgilerini depolamak için "
"tasarlanmıştır. Coğrafi kodlama API'leri ile entegrasyonu destekler ve daha "
"fazla işleme veya inceleme için ham API yanıtlarının depolanmasını sağlar. "
"Sınıf ayrıca bir adresin bir kullanıcıyla ilişkilendirilmesine olanak "
"tanıyarak kişiselleştirilmiş veri işlemeyi kolaylaştırır."
-#: engine/core/models.py:1029
+#: engine/core/models.py:1054
msgid "address line for the customer"
msgstr "Müşteri için adres satırı"
-#: engine/core/models.py:1030
+#: engine/core/models.py:1055
msgid "address line"
msgstr "Adres hattı"
-#: engine/core/models.py:1032
+#: engine/core/models.py:1057
msgid "street"
msgstr "Sokak"
-#: engine/core/models.py:1033
+#: engine/core/models.py:1058
msgid "district"
msgstr "Bölge"
-#: engine/core/models.py:1034
+#: engine/core/models.py:1059
msgid "city"
msgstr "Şehir"
-#: engine/core/models.py:1035
+#: engine/core/models.py:1060
msgid "region"
msgstr "Bölge"
-#: engine/core/models.py:1036
+#: engine/core/models.py:1061
msgid "postal code"
msgstr "Posta kodu"
-#: engine/core/models.py:1037
+#: engine/core/models.py:1062
msgid "country"
msgstr "Ülke"
-#: engine/core/models.py:1044
+#: engine/core/models.py:1069
msgid "geolocation point: (longitude, latitude)"
msgstr "Coğrafi Konum Noktası(Boylam, Enlem)"
-#: engine/core/models.py:1047
+#: engine/core/models.py:1075
msgid "full JSON response from geocoder for this address"
msgstr "Bu adres için geocoder'dan alınan tam JSON yanıtı"
-#: engine/core/models.py:1052
+#: engine/core/models.py:1081
msgid "stored JSON response from the geocoding service"
msgstr "Coğrafi kodlama hizmetinden depolanan JSON yanıtı"
-#: engine/core/models.py:1060
+#: engine/core/models.py:1091
msgid "address"
msgstr "Adres"
-#: engine/core/models.py:1061
+#: engine/core/models.py:1092
msgid "addresses"
msgstr "Adresler"
-#: engine/core/models.py:1073
+#: engine/core/models.py:1104
msgid ""
"Represents a promotional code that can be used for discounts, managing its "
"validity, type of discount, and application. The PromoCode class stores "
@@ -2310,74 +2316,73 @@ msgstr ""
"karşılandığından emin olurken promosyon kodunu doğrulamak ve siparişe "
"uygulamak için işlevsellik içerir."
-#: engine/core/models.py:1087
+#: engine/core/models.py:1118
msgid "unique code used by a user to redeem a discount"
msgstr ""
-"Bir kullanıcı tarafından indirimden yararlanmak için kullanılan benzersiz "
-"kod"
+"Bir kullanıcı tarafından indirimden yararlanmak için kullanılan benzersiz kod"
-#: engine/core/models.py:1088
+#: engine/core/models.py:1119
msgid "promo code identifier"
msgstr "Promosyon kodu tanımlayıcı"
-#: engine/core/models.py:1095
+#: engine/core/models.py:1126
msgid "fixed discount amount applied if percent is not used"
msgstr "Yüzde kullanılmazsa uygulanan sabit indirim tutarı"
-#: engine/core/models.py:1096
+#: engine/core/models.py:1127
msgid "fixed discount amount"
msgstr "Sabit iskonto tutarı"
-#: engine/core/models.py:1102
+#: engine/core/models.py:1133
msgid "percentage discount applied if fixed amount is not used"
msgstr "Sabit tutar kullanılmazsa uygulanan yüzde indirimi"
-#: engine/core/models.py:1103
+#: engine/core/models.py:1134
msgid "percentage discount"
msgstr "Yüzde indirim"
-#: engine/core/models.py:1108
+#: engine/core/models.py:1139
msgid "timestamp when the promocode expires"
msgstr "Promosyon kodunun sona erdiği zaman damgası"
-#: engine/core/models.py:1109
+#: engine/core/models.py:1140
msgid "end validity time"
msgstr "Geçerlilik süresi sonu"
-#: engine/core/models.py:1114
+#: engine/core/models.py:1145
msgid "timestamp from which this promocode is valid"
msgstr "Bu promosyon kodunun geçerli olduğu zaman damgası"
-#: engine/core/models.py:1115
+#: engine/core/models.py:1146
msgid "start validity time"
msgstr "Geçerlilik süresini başlat"
-#: engine/core/models.py:1120
+#: engine/core/models.py:1151
msgid "timestamp when the promocode was used, blank if not used yet"
msgstr ""
"Promosyon kodunun kullanıldığı zaman damgası, henüz kullanılmadıysa boş"
-#: engine/core/models.py:1121
+#: engine/core/models.py:1152
msgid "usage timestamp"
msgstr "Kullanım zaman damgası"
-#: engine/core/models.py:1126
+#: engine/core/models.py:1157
msgid "user assigned to this promocode if applicable"
msgstr "Varsa bu promosyon koduna atanan kullanıcı"
-#: engine/core/models.py:1127
+#: engine/core/models.py:1158
msgid "assigned user"
msgstr "Atanmış kullanıcı"
-#: engine/core/models.py:1134
+#: engine/core/models.py:1165
msgid "promo code"
msgstr "Promosyon kodu"
-#: engine/core/models.py:1135
+#: engine/core/models.py:1166
msgid "promo codes"
msgstr "Promosyon kodları"
-#: engine/core/models.py:1150
+#: engine/core/models.py:1182
msgid ""
"only one type of discount should be defined (amount or percent), but not "
"both or neither."
@@ -2385,163 +2390,162 @@ msgstr ""
"Sadece bir indirim türü (tutar veya yüzde) tanımlanmalı, ikisi birden veya "
"hiçbiri tanımlanmamalıdır."
-#: engine/core/models.py:1171
+#: engine/core/models.py:1204
msgid "promocode already used"
msgstr "Promosyon kodu zaten kullanılmış"
-#: engine/core/models.py:1187
+#: engine/core/models.py:1226
#, python-brace-format
msgid "invalid discount type for promocode {self.uuid}"
msgstr "Promosyon kodu {self.uuid} için geçersiz indirim türü!"
-#: engine/core/models.py:1196
+#: engine/core/models.py:1235
msgid ""
"Represents an order placed by a user. This class models an order within the "
"application, including its various attributes such as billing and shipping "
-"information, status, associated user, notifications, and related operations."
-" Orders can have associated products, promotions can be applied, addresses "
+"information, status, associated user, notifications, and related operations. "
+"Orders can have associated products, promotions can be applied, addresses "
"set, and shipping or billing details updated. Equally, functionality "
"supports managing the products in the order lifecycle."
msgstr ""
"Bir kullanıcı tarafından verilen bir siparişi temsil eder. Bu sınıf, fatura "
"ve kargo bilgileri, durum, ilişkili kullanıcı, bildirimler ve ilgili "
"işlemler gibi çeşitli öznitelikleri dahil olmak üzere uygulama içinde bir "
-"siparişi modeller. Siparişler ilişkili ürünlere sahip olabilir, promosyonlar"
-" uygulanabilir, adresler ayarlanabilir ve kargo veya fatura ayrıntıları "
+"siparişi modeller. Siparişler ilişkili ürünlere sahip olabilir, promosyonlar "
+"uygulanabilir, adresler ayarlanabilir ve kargo veya fatura ayrıntıları "
"güncellenebilir. Aynı şekilde işlevsellik, sipariş yaşam döngüsündeki "
"ürünlerin yönetilmesini de destekler."
-#: engine/core/models.py:1213
+#: engine/core/models.py:1252
msgid "the billing address used for this order"
msgstr "Bu sipariş için kullanılan fatura adresi"
-#: engine/core/models.py:1221
+#: engine/core/models.py:1260
msgid "optional promo code applied to this order"
msgstr "Bu siparişe isteğe bağlı promosyon kodu uygulanır"
-#: engine/core/models.py:1222
+#: engine/core/models.py:1261
msgid "applied promo code"
msgstr "Uygulanan promosyon kodu"
-#: engine/core/models.py:1230
+#: engine/core/models.py:1269
msgid "the shipping address used for this order"
msgstr "Bu sipariş için kullanılan gönderim adresi"
-#: engine/core/models.py:1231
+#: engine/core/models.py:1270
msgid "shipping address"
msgstr "Nakliye adresi"
-#: engine/core/models.py:1237
+#: engine/core/models.py:1276
msgid "current status of the order in its lifecycle"
msgstr "Siparişin yaşam döngüsündeki mevcut durumu"
-#: engine/core/models.py:1238
+#: engine/core/models.py:1277
msgid "order status"
msgstr "Sipariş durumu"
-#: engine/core/models.py:1243 engine/core/models.py:1769
+#: engine/core/models.py:1282 engine/core/models.py:1881
msgid "json structure of notifications to display to users"
msgstr ""
"Kullanıcılara gösterilecek bildirimlerin JSON yapısı, yönetici kullanıcı "
"arayüzünde tablo görünümü kullanılır"
-#: engine/core/models.py:1249
+#: engine/core/models.py:1288
msgid "json representation of order attributes for this order"
msgstr "Bu sipariş için sipariş özniteliklerinin JSON gösterimi"
-#: engine/core/models.py:1255
+#: engine/core/models.py:1294
msgid "the user who placed the order"
msgstr "Siparişi veren kullanıcı"
-#: engine/core/models.py:1256
+#: engine/core/models.py:1295
msgid "user"
msgstr "Kullanıcı"
-#: engine/core/models.py:1262
+#: engine/core/models.py:1301
msgid "the timestamp when the order was finalized"
msgstr "Siparişin sonlandırıldığı zaman damgası"
-#: engine/core/models.py:1263
+#: engine/core/models.py:1302
msgid "buy time"
msgstr "Zaman satın alın"
-#: engine/core/models.py:1270
+#: engine/core/models.py:1309
msgid "a human-readable identifier for the order"
msgstr "Sipariş için insan tarafından okunabilir bir tanımlayıcı"
-#: engine/core/models.py:1271
+#: engine/core/models.py:1310
msgid "human readable id"
msgstr "insan tarafından okunabilir kimlik"
-#: engine/core/models.py:1277
+#: engine/core/models.py:1316
msgid "order"
msgstr "Sipariş"
-#: engine/core/models.py:1319
+#: engine/core/models.py:1363
msgid "a user must have only one pending order at a time"
msgstr "Bir kullanıcı aynı anda yalnızca bir bekleyen emre sahip olmalıdır!"
-#: engine/core/models.py:1351
+#: engine/core/models.py:1396
msgid "you cannot add products to an order that is not a pending one"
msgstr "Beklemede olmayan bir siparişe ürün ekleyemezsiniz"
-#: engine/core/models.py:1356
+#: engine/core/models.py:1402
msgid "you cannot add inactive products to order"
msgstr "Aktif olmayan ürünleri siparişe ekleyemezsiniz"
-#: engine/core/models.py:1373
+#: engine/core/models.py:1424
msgid "you cannot add more products than available in stock"
msgstr "Stokta mevcut olandan daha fazla ürün ekleyemezsiniz"
-#: engine/core/models.py:1395 engine/core/models.py:1420
-#: engine/core/models.py:1428
+#: engine/core/models.py:1448 engine/core/models.py:1477
+#: engine/core/models.py:1487
msgid "you cannot remove products from an order that is not a pending one"
msgstr "Beklemede olmayan bir siparişten ürün kaldıramazsınız"
-#: engine/core/models.py:1416
+#: engine/core/models.py:1472
#, python-brace-format
msgid "{name} does not exist with query <{query}>"
msgstr "{name} <{query}> sorgusu ile mevcut değil!"
-#: engine/core/models.py:1448
+#: engine/core/models.py:1511
msgid "promocode does not exist"
msgstr "Promosyon kodu mevcut değil"
-#: engine/core/models.py:1454
+#: engine/core/models.py:1526
msgid "you can only buy physical products with shipping address specified"
msgstr ""
"Fiziksel ürünleri yalnızca gönderim adresi belirtilerek satın alabilirsiniz!"
-#: engine/core/models.py:1473
+#: engine/core/models.py:1547
msgid "address does not exist"
msgstr "Adres mevcut değil"
-#: engine/core/models.py:1494 engine/core/models.py:1563
+#: engine/core/models.py:1569 engine/core/models.py:1648
msgid "you can not buy at this moment, please try again in a few minutes"
-msgstr ""
-"Şu anda satın alamazsınız, lütfen birkaç dakika içinde tekrar deneyin."
+msgstr "Şu anda satın alamazsınız, lütfen birkaç dakika içinde tekrar deneyin."
-#: engine/core/models.py:1497 engine/core/models.py:1559
+#: engine/core/models.py:1575 engine/core/models.py:1641
msgid "invalid force value"
msgstr "Geçersiz kuvvet değeri"
-#: engine/core/models.py:1503 engine/core/models.py:1566
+#: engine/core/models.py:1581 engine/core/models.py:1652
msgid "you cannot purchase an empty order!"
msgstr "Boş bir sipariş satın alamazsınız!"
-#: engine/core/models.py:1522
+#: engine/core/models.py:1602
msgid "you cannot buy an order without a user"
msgstr "Kullanıcı olmadan sipariş alamazsınız!"
-#: engine/core/models.py:1536
+#: engine/core/models.py:1616
msgid "a user without a balance cannot buy with balance"
msgstr "Bakiyesi olmayan bir kullanıcı bakiye ile satın alamaz!"
-#: engine/core/models.py:1541
+#: engine/core/models.py:1622
msgid "insufficient funds to complete the order"
msgstr "Siparişi tamamlamak için yeterli fon yok"
-#: engine/core/models.py:1575
+#: engine/core/models.py:1663
msgid ""
"you cannot buy without registration, please provide the following "
"information: customer name, customer email, customer phone number"
@@ -2549,14 +2553,14 @@ msgstr ""
"kayıt olmadan satın alamazsınız, lütfen aşağıdaki bilgileri sağlayın: "
"müşteri adı, müşteri e-postası, müşteri telefon numarası"
-#: engine/core/models.py:1584
+#: engine/core/models.py:1674
#, python-brace-format
msgid ""
"invalid payment method: {payment_method} from {available_payment_methods}"
msgstr ""
"Geçersiz ödeme yöntemi: {available_payment_methods}'den {payment_method}!"
-#: engine/core/models.py:1699
+#: engine/core/models.py:1805
msgid ""
"Manages user feedback for products. This class is designed to capture and "
"store user feedback for specific products that they have purchased. It "
@@ -2568,38 +2572,36 @@ msgstr ""
"aldıkları belirli ürünler için kullanıcı geri bildirimlerini yakalamak ve "
"saklamak üzere tasarlanmıştır. Kullanıcı yorumlarını saklamak için "
"öznitelikler, siparişteki ilgili ürüne bir referans ve kullanıcı tarafından "
-"atanan bir derecelendirme içerir. Sınıf, geri bildirim verilerini etkili bir"
-" şekilde modellemek ve yönetmek için veritabanı alanlarını kullanır."
+"atanan bir derecelendirme içerir. Sınıf, geri bildirim verilerini etkili bir "
+"şekilde modellemek ve yönetmek için veritabanı alanlarını kullanır."
-#: engine/core/models.py:1711
+#: engine/core/models.py:1817
msgid "user-provided comments about their experience with the product"
msgstr ""
"Ürünle ilgili deneyimleri hakkında kullanıcı tarafından sağlanan yorumlar"
-#: engine/core/models.py:1712
+#: engine/core/models.py:1818
msgid "feedback comments"
msgstr "Geri bildirim yorumları"
-#: engine/core/models.py:1719
-msgid ""
-"references the specific product in an order that this feedback is about"
+#: engine/core/models.py:1826
+msgid "references the specific product in an order that this feedback is about"
msgstr ""
-"Bu geri bildirimin ilgili olduğu siparişteki belirli bir ürüne atıfta "
-"bulunur"
+"Bu geri bildirimin ilgili olduğu siparişteki belirli bir ürüne atıfta bulunur"
-#: engine/core/models.py:1720
+#: engine/core/models.py:1828
msgid "related order product"
msgstr "İlgili sipariş ürünü"
-#: engine/core/models.py:1725
+#: engine/core/models.py:1833
msgid "user-assigned rating for the product"
msgstr "Ürün için kullanıcı tarafından atanan derecelendirme"
-#: engine/core/models.py:1726
+#: engine/core/models.py:1834
msgid "product rating"
msgstr "Ürün değerlendirmesi"
-#: engine/core/models.py:1742
+#: engine/core/models.py:1854
msgid ""
"Represents products associated with orders and their attributes. The "
"OrderProduct model maintains information about a product that is part of an "
@@ -2621,137 +2623,137 @@ msgstr ""
"destekleyen yöntemler ve özellikler sağlar. Model, Sipariş ve Ürün "
"modelleriyle entegre olur ve bunlara referans depolar."
-#: engine/core/models.py:1757
+#: engine/core/models.py:1869
msgid "the price paid by the customer for this product at purchase time"
msgstr "Satın alma sırasında müşteri tarafından bu ürün için ödenen fiyat"
-#: engine/core/models.py:1758
+#: engine/core/models.py:1870
msgid "purchase price at order time"
msgstr "Sipariş anındaki satın alma fiyatı"
-#: engine/core/models.py:1763
+#: engine/core/models.py:1875
msgid "internal comments for admins about this ordered product"
msgstr "Sipariş edilen bu ürün hakkında yöneticiler için dahili yorumlar"
-#: engine/core/models.py:1764
+#: engine/core/models.py:1876
msgid "internal comments"
msgstr "Dahili yorumlar"
-#: engine/core/models.py:1770
+#: engine/core/models.py:1882
msgid "user notifications"
msgstr "Kullanıcı bildirimleri"
-#: engine/core/models.py:1775
+#: engine/core/models.py:1887
msgid "json representation of this item's attributes"
msgstr "Bu öğenin özniteliklerinin JSON gösterimi"
-#: engine/core/models.py:1776
+#: engine/core/models.py:1888
msgid "ordered product attributes"
msgstr "Sıralı ürün özellikleri"
-#: engine/core/models.py:1781
+#: engine/core/models.py:1893
msgid "reference to the parent order that contains this product"
msgstr "Bu ürünü içeren ana siparişe referans"
-#: engine/core/models.py:1782
+#: engine/core/models.py:1894
msgid "parent order"
msgstr "Ana sipariş"
-#: engine/core/models.py:1791
+#: engine/core/models.py:1903
msgid "the specific product associated with this order line"
msgstr "Bu sipariş satırıyla ilişkili belirli ürün"
-#: engine/core/models.py:1798
+#: engine/core/models.py:1910
msgid "quantity of this specific product in the order"
msgstr "Siparişteki bu belirli ürünün miktarı"
-#: engine/core/models.py:1799
+#: engine/core/models.py:1911
msgid "product quantity"
msgstr "Ürün miktarı"
-#: engine/core/models.py:1806
+#: engine/core/models.py:1918
msgid "current status of this product in the order"
msgstr "Bu ürünün siparişteki mevcut durumu"
-#: engine/core/models.py:1807
+#: engine/core/models.py:1919
msgid "product line status"
msgstr "Ürün hattı durumu"
-#: engine/core/models.py:1872
+#: engine/core/models.py:1986
msgid "order product must have an order"
msgstr "Orderproduct ilişkili bir siparişe sahip olmalıdır!"
-#: engine/core/models.py:1874
+#: engine/core/models.py:1988
#, python-brace-format
msgid "wrong action specified for feedback: {action}"
msgstr "Geri bildirim için yanlış eylem belirtildi: {action}!"
-#: engine/core/models.py:1888
+#: engine/core/models.py:2005
msgid "you cannot feedback an order which is not received"
msgstr "alınmamış bir siparişe geri bildirim yapamazsınız"
-#: engine/core/models.py:1894
+#: engine/core/models.py:2014
msgid "name"
msgstr "İsim"
-#: engine/core/models.py:1895
+#: engine/core/models.py:2016
msgid "URL of the integration"
msgstr "Entegrasyonun URL'si"
-#: engine/core/models.py:1896
+#: engine/core/models.py:2019
msgid "authentication credentials"
msgstr "Kimlik doğrulama bilgileri"
-#: engine/core/models.py:1918
+#: engine/core/models.py:2042
msgid "you can only have one default CRM provider"
msgstr "Yalnızca bir varsayılan CRM sağlayıcınız olabilir"
-#: engine/core/models.py:1928
+#: engine/core/models.py:2052
msgid "CRM"
msgstr "CRM"
-#: engine/core/models.py:1929
+#: engine/core/models.py:2053
msgid "CRMs"
msgstr "CRM'ler"
-#: engine/core/models.py:1941
+#: engine/core/models.py:2069
msgid "order CRM link"
msgstr "Siparişin CRM bağlantısı"
-#: engine/core/models.py:1942
+#: engine/core/models.py:2070
msgid "orders CRM links"
msgstr "Siparişlerin CRM bağlantıları"
-#: engine/core/models.py:1947
+#: engine/core/models.py:2075
msgid ""
"Represents the downloading functionality for digital assets associated with "
"orders. The DigitalAssetDownload class provides the ability to manage and "
"access downloads related to order products. It maintains information about "
-"the associated order product, the number of downloads, and whether the asset"
-" is publicly visible. It includes a method to generate a URL for downloading"
-" the asset when the associated order is in a completed status."
+"the associated order product, the number of downloads, and whether the asset "
+"is publicly visible. It includes a method to generate a URL for downloading "
+"the asset when the associated order is in a completed status."
msgstr ""
"Siparişlerle ilişkili dijital varlıklar için indirme işlevselliğini temsil "
"eder. DigitalAssetDownload sınıfı, sipariş ürünleriyle ilgili indirmeleri "
"yönetme ve bunlara erişme olanağı sağlar. İlişkili sipariş ürünü, indirme "
-"sayısı ve varlığın herkese açık olup olmadığı hakkında bilgi tutar. İlişkili"
-" sipariş tamamlandı durumundayken varlığın indirilmesi için bir URL "
+"sayısı ve varlığın herkese açık olup olmadığı hakkında bilgi tutar. İlişkili "
+"sipariş tamamlandı durumundayken varlığın indirilmesi için bir URL "
"oluşturmaya yönelik bir yöntem içerir."
-#: engine/core/models.py:1961
+#: engine/core/models.py:2091
msgid "download"
msgstr "İndir"
-#: engine/core/models.py:1962
+#: engine/core/models.py:2092
msgid "downloads"
msgstr "İndirmeler"
-#: engine/core/serializers/utility.py:89
+#: engine/core/serializers/utility.py:91
msgid ""
"you must provide a comment, rating, and order product uuid to add feedback."
msgstr ""
-"geri̇ bi̇ldi̇ri̇m eklemek i̇çi̇n bi̇r yorum, puan ve si̇pari̇ş ürün uuid'si̇"
-" sağlamalisiniz."
+"geri̇ bi̇ldi̇ri̇m eklemek i̇çi̇n bi̇r yorum, puan ve si̇pari̇ş ürün uuid'si̇ "
+"sağlamalisiniz."
#: engine/core/sitemaps.py:25
msgid "Home"
@@ -2943,7 +2945,8 @@ msgstr "Merhaba %(order.user.first_name)s,"
#, python-format
msgid ""
"thank you for your order #%(order.pk)s! we are pleased to inform you that\n"
-" we have taken your order into work. below are the details of your\n"
+" we have taken your order into work. below are "
+"the details of your\n"
" order:"
msgstr ""
"Siparişiniz için teşekkür ederiz #%(order.pk)s! Siparişinizi işleme "
@@ -3002,8 +3005,8 @@ msgid ""
"we have successfully processed your order №%(order_uuid)s! below are the\n"
" details of your order:"
msgstr ""
-"Siparişinizi başarıyla işleme aldık №%(order_uuid)s! Siparişinizin detayları"
-" aşağıdadır:"
+"Siparişinizi başarıyla işleme aldık №%(order_uuid)s! Siparişinizin detayları "
+"aşağıdadır:"
#: engine/core/templates/digital_order_delivered_email.html:128
msgid ""
@@ -3058,7 +3061,8 @@ msgstr ""
#: engine/core/templates/shipped_order_created_email.html:101
#: engine/core/templates/shipped_order_delivered_email.html:101
msgid ""
-"thank you for your order! we are pleased to confirm your purchase. below are\n"
+"thank you for your order! we are pleased to confirm your purchase. below "
+"are\n"
" the details of your order:"
msgstr ""
"Siparişiniz için teşekkür ederiz! Satın alma işleminizi onaylamaktan "
@@ -3089,11 +3093,11 @@ msgstr ""
"Tüm hakları\n"
" ayrılmış"
-#: engine/core/utils/caching.py:44
+#: engine/core/utils/caching.py:48
msgid "both data and timeout are required"
msgstr "Hem veri hem de zaman aşımı gereklidir"
-#: engine/core/utils/caching.py:46
+#: engine/core/utils/caching.py:51
msgid "invalid timeout value, it must be between 0 and 216000 seconds"
msgstr "Geçersiz zaman aşımı değeri, 0 ile 216000 saniye arasında olmalıdır"
@@ -3102,17 +3106,17 @@ msgstr "Geçersiz zaman aşımı değeri, 0 ile 216000 saniye arasında olmalıd
msgid "{settings.PROJECT_NAME} | contact us initiated"
msgstr "{settings.PROJECT_NAME} | bi̇zi̇mle i̇leti̇şi̇me geçi̇n"
-#: engine/core/utils/emailing.py:73
+#: engine/core/utils/emailing.py:81
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order confirmation"
msgstr "{settings.PROJECT_NAME} | si̇pari̇ş onayi"
-#: engine/core/utils/emailing.py:105
+#: engine/core/utils/emailing.py:115
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order delivered"
msgstr "{settings.PROJECT_NAME} | sipariş teslim edildi"
-#: engine/core/utils/emailing.py:188
+#: engine/core/utils/emailing.py:203
#, python-brace-format
msgid "{settings.PROJECT_NAME} | promocode granted"
msgstr "{settings.PROJECT_NAME} | verilen promosyon kodu"
@@ -3125,12 +3129,12 @@ msgstr "Bu eylemi gerçekleştirmek için izniniz yok."
msgid "NOMINATIM_URL must be configured."
msgstr "NOMINATIM_URL parametresi yapılandırılmalıdır!"
-#: engine/core/validators.py:19
+#: engine/core/validators.py:21
#, python-brace-format
msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels"
msgstr "Resim boyutları w{max_width} x h{max_height} pikseli geçmemelidir!"
-#: engine/core/views.py:91
+#: engine/core/views.py:105
msgid ""
"Handles the request for the sitemap index and returns an XML response. It "
"ensures the response includes the appropriate content type header for XML."
@@ -3138,40 +3142,40 @@ msgstr ""
"Site haritası dizini için isteği işler ve bir XML yanıtı döndürür. Yanıtın "
"XML için uygun içerik türü başlığını içermesini sağlar."
-#: engine/core/views.py:106
+#: engine/core/views.py:120
msgid ""
"Handles the detailed view response for a sitemap. This function processes "
"the request, fetches the appropriate sitemap detail response, and sets the "
"Content-Type header for XML."
msgstr ""
-"Bir site haritası için ayrıntılı görünüm yanıtını işler. Bu fonksiyon isteği"
-" işler, uygun site haritası ayrıntı yanıtını getirir ve XML için Content-"
-"Type başlığını ayarlar."
+"Bir site haritası için ayrıntılı görünüm yanıtını işler. Bu fonksiyon isteği "
+"işler, uygun site haritası ayrıntı yanıtını getirir ve XML için Content-Type "
+"başlığını ayarlar."
-#: engine/core/views.py:141
+#: engine/core/views.py:156
msgid ""
"Returns a list of supported languages and their corresponding information."
msgstr ""
"Desteklenen dillerin bir listesini ve bunlara karşılık gelen bilgileri "
"döndürür."
-#: engine/core/views.py:173
+#: engine/core/views.py:183
msgid "Returns the parameters of the website as a JSON object."
msgstr "Web sitesinin parametrelerini bir JSON nesnesi olarak döndürür."
-#: engine/core/views.py:192
+#: engine/core/views.py:199
msgid ""
"Handles cache operations such as reading and setting cache data with a "
"specified key and timeout."
msgstr ""
-"Belirli bir anahtar ve zaman aşımı ile önbellek verilerini okuma ve ayarlama"
-" gibi önbellek işlemlerini gerçekleştirir."
+"Belirli bir anahtar ve zaman aşımı ile önbellek verilerini okuma ve ayarlama "
+"gibi önbellek işlemlerini gerçekleştirir."
-#: engine/core/views.py:219
+#: engine/core/views.py:221
msgid "Handles `contact us` form submissions."
msgstr "Bize ulaşın` form gönderimlerini işler."
-#: engine/core/views.py:240
+#: engine/core/views.py:237
msgid ""
"Handles requests for processing and validating URLs from incoming POST "
"requests."
@@ -3179,58 +3183,66 @@ msgstr ""
"Gelen POST isteklerinden gelen URL'leri işleme ve doğrulama isteklerini "
"işler."
-#: engine/core/views.py:280
+#: engine/core/views.py:274
msgid "Handles global search queries."
msgstr "Küresel arama sorgularını işler."
-#: engine/core/views.py:295
+#: engine/core/views.py:290
msgid "Handles the logic of buying as a business without registration."
msgstr "Kayıt olmadan bir işletme olarak satın alma mantığını ele alır."
-#: engine/core/views.py:332
+#: engine/core/views.py:338
msgid ""
"Handles the downloading of a digital asset associated with an order.\n"
-"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the digital asset file located in the "
+"storage directory of the project. If the file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
msgstr ""
"Bir siparişle ilişkili bir dijital varlığın indirilmesini yönetir.\n"
-"Bu fonksiyon, projenin depolama dizininde bulunan dijital varlık dosyasını sunmaya çalışır. Dosya bulunamazsa, kaynağın kullanılamadığını belirtmek için bir HTTP 404 hatası verilir."
+"Bu fonksiyon, projenin depolama dizininde bulunan dijital varlık dosyasını "
+"sunmaya çalışır. Dosya bulunamazsa, kaynağın kullanılamadığını belirtmek "
+"için bir HTTP 404 hatası verilir."
-#: engine/core/views.py:343
+#: engine/core/views.py:349
msgid "order_product_uuid is required"
msgstr "order_product_uuid gereklidir"
-#: engine/core/views.py:350
+#: engine/core/views.py:356
msgid "order product does not exist"
msgstr "sipariş ürünü mevcut değil"
-#: engine/core/views.py:353
+#: engine/core/views.py:359
msgid "you can only download the digital asset once"
msgstr "Dijital varlığı yalnızca bir kez indirebilirsiniz"
-#: engine/core/views.py:356
+#: engine/core/views.py:363
msgid "the order must be paid before downloading the digital asset"
msgstr "dijital varlık indirilmeden önce siparişin ödenmesi gerekir"
-#: engine/core/views.py:362
+#: engine/core/views.py:370
msgid "the order product does not have a product"
msgstr "Sipariş ürününün bir ürünü yok"
-#: engine/core/views.py:399
+#: engine/core/views.py:414
msgid "favicon not found"
msgstr "favicon bulunamadı"
-#: engine/core/views.py:404
+#: engine/core/views.py:419
msgid ""
"Handles requests for the favicon of a website.\n"
-"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the favicon file located in the static "
+"directory of the project. If the favicon file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
msgstr ""
"Bir web sitesinin favicon'u için istekleri işler.\n"
-"Bu fonksiyon, projenin statik dizininde bulunan favicon dosyasını sunmaya çalışır. Favicon dosyası bulunamazsa, kaynağın kullanılamadığını belirtmek için bir HTTP 404 hatası verilir."
+"Bu fonksiyon, projenin statik dizininde bulunan favicon dosyasını sunmaya "
+"çalışır. Favicon dosyası bulunamazsa, kaynağın kullanılamadığını belirtmek "
+"için bir HTTP 404 hatası verilir."
-#: engine/core/views.py:416
+#: engine/core/views.py:431
msgid ""
-"Redirects the request to the admin index page. The function handles incoming"
-" HTTP requests and redirects them to the Django admin interface index page. "
+"Redirects the request to the admin index page. The function handles incoming "
+"HTTP requests and redirects them to the Django admin interface index page. "
"It uses Django's `redirect` function for handling the HTTP redirection."
msgstr ""
"İsteği yönetici dizin sayfasına yönlendirir. Bu fonksiyon gelen HTTP "
@@ -3238,20 +3250,20 @@ msgstr ""
"yönlendirir. HTTP yönlendirmesini işlemek için Django'nun `redirect` "
"fonksiyonunu kullanır."
-#: engine/core/views.py:429
+#: engine/core/views.py:443
msgid "Returns current version of the eVibes. "
msgstr "eVibes'in geçerli sürümünü döndürür."
-#: engine/core/views.py:623 engine/core/views.py:636
+#: engine/core/views.py:672 engine/core/views.py:687
#, python-format
msgid "Revenue & Orders (last %(days)d)"
msgstr "Gelir ve Siparişler (son %(days)d)"
-#: engine/core/views.py:793
+#: engine/core/views.py:868
msgid "Returns custom variables for Dashboard. "
msgstr "Gösterge Tablosu için özel değişkenleri döndürür."
-#: engine/core/viewsets.py:136
+#: engine/core/viewsets.py:139
msgid ""
"Defines a viewset for managing Evibes-related operations. The EvibesViewSet "
"class inherits from ModelViewSet and provides functionality for handling "
@@ -3262,16 +3274,15 @@ msgstr ""
"Evibes ile ilgili işlemleri yönetmek için bir görünüm kümesi tanımlar. "
"EvibesViewSet sınıfı ModelViewSet'ten miras alınır ve Evibes varlıkları "
"üzerindeki eylemleri ve işlemleri yönetmek için işlevsellik sağlar. Geçerli "
-"eyleme dayalı dinamik serileştirici sınıfları, özelleştirilebilir izinler ve"
-" işleme biçimleri için destek içerir."
+"eyleme dayalı dinamik serileştirici sınıfları, özelleştirilebilir izinler ve "
+"işleme biçimleri için destek içerir."
-#: engine/core/viewsets.py:156
+#: engine/core/viewsets.py:160
msgid ""
-"Represents a viewset for managing AttributeGroup objects. Handles operations"
-" related to AttributeGroup, including filtering, serialization, and "
-"retrieval of data. This class is part of the application's API layer and "
-"provides a standardized way to process requests and responses for "
-"AttributeGroup data."
+"Represents a viewset for managing AttributeGroup objects. Handles operations "
+"related to AttributeGroup, including filtering, serialization, and retrieval "
+"of data. This class is part of the application's API layer and provides a "
+"standardized way to process requests and responses for AttributeGroup data."
msgstr ""
"AttributeGroup nesnelerini yönetmek için bir görünüm kümesini temsil eder. "
"Filtreleme, serileştirme ve veri alma dahil olmak üzere AttributeGroup ile "
@@ -3279,7 +3290,7 @@ msgstr ""
"parçasıdır ve AttributeGroup verilerine yönelik istekleri ve yanıtları "
"işlemek için standartlaştırılmış bir yol sağlar."
-#: engine/core/viewsets.py:175
+#: engine/core/viewsets.py:179
msgid ""
"Handles operations related to Attribute objects within the application. "
"Provides a set of API endpoints to interact with Attribute data. This class "
@@ -3295,13 +3306,13 @@ msgstr ""
"bağlı olarak ayrıntılı ve basitleştirilmiş bilgilerin alınması gibi "
"döndürülen veriler üzerinde dinamik kontrol sağlar."
-#: engine/core/viewsets.py:194
+#: engine/core/viewsets.py:198
msgid ""
"A viewset for managing AttributeValue objects. This viewset provides "
"functionality for listing, retrieving, creating, updating, and deleting "
"AttributeValue objects. It integrates with Django REST Framework's viewset "
-"mechanisms and uses appropriate serializers for different actions. Filtering"
-" capabilities are provided through the DjangoFilterBackend."
+"mechanisms and uses appropriate serializers for different actions. Filtering "
+"capabilities are provided through the DjangoFilterBackend."
msgstr ""
"AttributeValue nesnelerini yönetmek için bir görünüm kümesi. Bu görünüm "
"kümesi, AttributeValue nesnelerini listelemek, almak, oluşturmak, "
@@ -3310,7 +3321,7 @@ msgstr ""
"serileştiriciler kullanır. Filtreleme yetenekleri DjangoFilterBackend "
"aracılığıyla sağlanır."
-#: engine/core/viewsets.py:213
+#: engine/core/viewsets.py:217
msgid ""
"Manages views for Category-related operations. The CategoryViewSet class is "
"responsible for handling operations related to the Category model in the "
@@ -3325,7 +3336,7 @@ msgstr ""
"kullanıcıların belirli verilere erişebilmesini sağlamak için izinleri de "
"zorlar."
-#: engine/core/viewsets.py:326
+#: engine/core/viewsets.py:346
msgid ""
"Represents a viewset for managing Brand instances. This class provides "
"functionality for querying, filtering, and serializing Brand objects. It "
@@ -3337,7 +3348,7 @@ msgstr ""
"sağlar. Brand nesneleri için API uç noktalarının uygulanmasını "
"basitleştirmek için Django'nun ViewSet çerçevesini kullanır."
-#: engine/core/viewsets.py:438
+#: engine/core/viewsets.py:458
msgid ""
"Manages operations related to the `Product` model in the system. This class "
"provides a viewset for managing products, including their filtering, "
@@ -3348,14 +3359,14 @@ msgid ""
"product."
msgstr ""
"Sistemdeki `Product` modeliyle ilgili işlemleri yönetir. Bu sınıf, "
-"filtreleme, serileştirme ve belirli örnekler üzerindeki işlemler dahil olmak"
-" üzere ürünleri yönetmek için bir görünüm kümesi sağlar. Ortak işlevselliği "
-"kullanmak için `EvibesViewSet`ten genişletilir ve RESTful API işlemleri için"
-" Django REST çerçevesi ile entegre olur. Ürün ayrıntılarını almak, izinleri "
+"filtreleme, serileştirme ve belirli örnekler üzerindeki işlemler dahil olmak "
+"üzere ürünleri yönetmek için bir görünüm kümesi sağlar. Ortak işlevselliği "
+"kullanmak için `EvibesViewSet`ten genişletilir ve RESTful API işlemleri için "
+"Django REST çerçevesi ile entegre olur. Ürün ayrıntılarını almak, izinleri "
"uygulamak ve bir ürünün ilgili geri bildirimlerine erişmek için yöntemler "
"içerir."
-#: engine/core/viewsets.py:574
+#: engine/core/viewsets.py:605
msgid ""
"Represents a viewset for managing Vendor objects. This viewset allows "
"fetching, filtering, and serializing Vendor data. It defines the queryset, "
@@ -3370,61 +3381,61 @@ msgstr ""
"tanımlar. Bu sınıfın amacı, Django REST çerçevesi aracılığıyla Vendor ile "
"ilgili kaynaklara kolaylaştırılmış erişim sağlamaktır."
-#: engine/core/viewsets.py:594
+#: engine/core/viewsets.py:625
msgid ""
"Representation of a view set handling Feedback objects. This class manages "
"operations related to Feedback objects, including listing, filtering, and "
"retrieving details. The purpose of this view set is to provide different "
-"serializers for different actions and implement permission-based handling of"
-" accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
+"serializers for different actions and implement permission-based handling of "
+"accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
"use of Django's filtering system for querying data."
msgstr ""
"Geri Bildirim nesnelerini işleyen bir görünüm kümesinin temsili. Bu sınıf, "
"listeleme, filtreleme ve ayrıntıları alma dahil olmak üzere Geri Bildirim "
"nesneleriyle ilgili işlemleri yönetir. Bu görünüm kümesinin amacı, farklı "
-"eylemler için farklı serileştiriciler sağlamak ve erişilebilir Geri Bildirim"
-" nesnelerinin izin tabanlı kullanımını uygulamaktır. Temel `EvibesViewSet`i "
+"eylemler için farklı serileştiriciler sağlamak ve erişilebilir Geri Bildirim "
+"nesnelerinin izin tabanlı kullanımını uygulamaktır. Temel `EvibesViewSet`i "
"genişletir ve verileri sorgulamak için Django'nun filtreleme sistemini "
"kullanır."
-#: engine/core/viewsets.py:621
+#: engine/core/viewsets.py:652
msgid ""
"ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes "
"various endpoints for handling order operations such as adding or removing "
-"products, performing purchases for registered as well as unregistered users,"
-" and retrieving the current authenticated user's pending orders. The ViewSet"
-" uses multiple serializers based on the specific action being performed and "
+"products, performing purchases for registered as well as unregistered users, "
+"and retrieving the current authenticated user's pending orders. The ViewSet "
+"uses multiple serializers based on the specific action being performed and "
"enforces permissions accordingly while interacting with order data."
msgstr ""
"Siparişleri ve ilgili işlemleri yönetmek için ViewSet. Bu sınıf, sipariş "
"nesnelerini almak, değiştirmek ve yönetmek için işlevsellik sağlar. Ürün "
"ekleme veya kaldırma, kayıtlı ve kayıtsız kullanıcılar için satın alma "
-"işlemleri gerçekleştirme ve mevcut kimliği doğrulanmış kullanıcının bekleyen"
-" siparişlerini alma gibi sipariş işlemlerini gerçekleştirmek için çeşitli uç"
-" noktalar içerir. ViewSet, gerçekleştirilen belirli eyleme bağlı olarak "
+"işlemleri gerçekleştirme ve mevcut kimliği doğrulanmış kullanıcının bekleyen "
+"siparişlerini alma gibi sipariş işlemlerini gerçekleştirmek için çeşitli uç "
+"noktalar içerir. ViewSet, gerçekleştirilen belirli eyleme bağlı olarak "
"birden fazla serileştirici kullanır ve sipariş verileriyle etkileşime "
"girerken izinleri buna göre zorlar."
-#: engine/core/viewsets.py:825
+#: engine/core/viewsets.py:914
msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It "
-"includes filtering, permission checks, and serializer switching based on the"
-" requested action. Additionally, it provides a detailed action for handling "
+"includes filtering, permission checks, and serializer switching based on the "
+"requested action. Additionally, it provides a detailed action for handling "
"feedback on OrderProduct instances"
msgstr ""
"OrderProduct varlıklarını yönetmek için bir görünüm kümesi sağlar. Bu "
"görünüm kümesi, CRUD işlemlerini ve OrderProduct modeline özgü özel "
-"eylemleri etkinleştirir. Filtreleme, izin kontrolleri ve istenen eyleme göre"
-" serileştirici değiştirme içerir. Ayrıca, OrderProduct örnekleriyle ilgili "
+"eylemleri etkinleştirir. Filtreleme, izin kontrolleri ve istenen eyleme göre "
+"serileştirici değiştirme içerir. Ayrıca, OrderProduct örnekleriyle ilgili "
"geri bildirimleri işlemek için ayrıntılı bir eylem sağlar"
-#: engine/core/viewsets.py:879
+#: engine/core/viewsets.py:974
msgid "Manages operations related to Product images in the application. "
msgstr "Uygulamadaki Ürün görselleri ile ilgili işlemleri yönetir."
-#: engine/core/viewsets.py:892
+#: engine/core/viewsets.py:988
msgid ""
"Manages the retrieval and handling of PromoCode instances through various "
"API actions."
@@ -3432,20 +3443,20 @@ msgstr ""
"Çeşitli API eylemleri aracılığıyla PromoCode örneklerinin alınmasını ve "
"işlenmesini yönetir."
-#: engine/core/viewsets.py:914
+#: engine/core/viewsets.py:1019
msgid "Represents a view set for managing promotions. "
msgstr "Promosyonları yönetmek için bir görünüm kümesini temsil eder."
-#: engine/core/viewsets.py:927
+#: engine/core/viewsets.py:1032
msgid "Handles operations related to Stock data in the system."
msgstr "Sistemdeki Stok verileri ile ilgili işlemleri yürütür."
-#: engine/core/viewsets.py:941
+#: engine/core/viewsets.py:1046
msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the "
-"retrieval, modification, and customization of products within the wish list."
-" This ViewSet facilitates functionality such as adding, removing, and bulk "
+"retrieval, modification, and customization of products within the wish list. "
+"This ViewSet facilitates functionality such as adding, removing, and bulk "
"actions for wishlist products. Permission checks are integrated to ensure "
"that users can only manage their own wishlists unless explicit permissions "
"are granted."
@@ -3458,7 +3469,7 @@ msgstr ""
"verilmediği sürece kullanıcıların yalnızca kendi istek listelerini "
"yönetebilmelerini sağlamak için entegre edilmiştir."
-#: engine/core/viewsets.py:1056
+#: engine/core/viewsets.py:1183
msgid ""
"This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom "
@@ -3472,12 +3483,12 @@ msgstr ""
"serileştirici geçersiz kılmaları ve istek bağlamına dayalı izin işleme için "
"özel davranışlar içerir."
-#: engine/core/viewsets.py:1123
+#: engine/core/viewsets.py:1254
#, python-brace-format
msgid "Geocoding error: {e}"
msgstr "Coğrafi kodlama hatası: {e}"
-#: engine/core/viewsets.py:1131
+#: engine/core/viewsets.py:1262
msgid ""
"Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing "
@@ -3486,7 +3497,7 @@ msgid ""
"serializers based on the action being performed."
msgstr ""
"Uygulama içinde Ürün Etiketleri ile ilgili işlemleri gerçekleştirir. Bu "
-"sınıf, Ürün Etiketi nesnelerinin alınması, filtrelenmesi ve serileştirilmesi"
-" için işlevsellik sağlar. Belirtilen filtre arka ucunu kullanarak belirli "
+"sınıf, Ürün Etiketi nesnelerinin alınması, filtrelenmesi ve serileştirilmesi "
+"için işlevsellik sağlar. Belirtilen filtre arka ucunu kullanarak belirli "
"nitelikler üzerinde esnek filtrelemeyi destekler ve gerçekleştirilen eyleme "
"göre dinamik olarak farklı serileştiriciler kullanır."
diff --git a/engine/core/locale/vi_VN/LC_MESSAGES/django.po b/engine/core/locale/vi_VN/LC_MESSAGES/django.po
index 9700baac..33c2a554 100644
--- a/engine/core/locale/vi_VN/LC_MESSAGES/django.po
+++ b/engine/core/locale/vi_VN/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 22:12+0300\n"
+"POT-Creation-Date: 2025-12-18 19:09+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -27,113 +27,112 @@ msgstr ""
msgid "is active"
msgstr "Đang hoạt động"
-#: engine/core/abstract.py:21
+#: engine/core/abstract.py:22
msgid ""
-"if set to false, this object can't be seen by users without needed "
-"permission"
+"if set to false, this object can't be seen by users without needed permission"
msgstr ""
"Nếu được đặt thành false, đối tượng này sẽ không hiển thị cho người dùng "
"không có quyền truy cập cần thiết."
-#: engine/core/abstract.py:23 engine/core/choices.py:18
+#: engine/core/abstract.py:26 engine/core/choices.py:18
msgid "created"
msgstr "Được tạo ra"
-#: engine/core/abstract.py:23
+#: engine/core/abstract.py:26
msgid "when the object first appeared on the database"
msgstr "Khi đối tượng lần đầu tiên xuất hiện trong cơ sở dữ liệu"
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "modified"
msgstr "Đã sửa đổi"
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "when the object was last modified"
msgstr "Khi đối tượng được chỉnh sửa lần cuối"
-#: engine/core/admin.py:85
+#: engine/core/admin.py:94
msgid "translations"
msgstr "Dịch thuật"
-#: engine/core/admin.py:89
+#: engine/core/admin.py:102
msgid "general"
msgstr "Tổng quát"
-#: engine/core/admin.py:91
+#: engine/core/admin.py:106
msgid "relations"
msgstr "Quan hệ"
-#: engine/core/admin.py:93
+#: engine/core/admin.py:111
msgid "additional info"
msgstr "Thông tin bổ sung"
-#: engine/core/admin.py:111
+#: engine/core/admin.py:133
msgid "metadata"
msgstr "Siêu dữ liệu"
-#: engine/core/admin.py:118
+#: engine/core/admin.py:141
msgid "timestamps"
msgstr "Dấu thời gian"
-#: engine/core/admin.py:133
+#: engine/core/admin.py:157
#, python-format
msgid "activate selected %(verbose_name_plural)s"
msgstr "Kích hoạt %(verbose_name_plural)s đã chọn"
-#: engine/core/admin.py:138
+#: engine/core/admin.py:165
msgid "selected items have been activated."
msgstr "Các mục đã được chọn đã được kích hoạt!"
-#: engine/core/admin.py:144
+#: engine/core/admin.py:173
#, python-format
msgid "deactivate selected %(verbose_name_plural)s"
msgstr "Vô hiệu hóa các mục đã chọn %(verbose_name_plural)s"
-#: engine/core/admin.py:149
+#: engine/core/admin.py:183
msgid "selected items have been deactivated."
msgstr "Các mục đã chọn đã bị vô hiệu hóa!"
-#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586
-#: engine/core/graphene/object_types.py:593 engine/core/models.py:801
-#: engine/core/models.py:809
+#: engine/core/admin.py:195 engine/core/graphene/object_types.py:650
+#: engine/core/graphene/object_types.py:657 engine/core/models.py:824
+#: engine/core/models.py:832
msgid "attribute value"
msgstr "Giá trị thuộc tính"
-#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75
-#: engine/core/models.py:810
+#: engine/core/admin.py:196 engine/core/graphene/object_types.py:75
+#: engine/core/models.py:833
msgid "attribute values"
msgstr "Giá trị thuộc tính"
-#: engine/core/admin.py:172
+#: engine/core/admin.py:207
msgid "image"
msgstr "Hình ảnh"
-#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474
+#: engine/core/admin.py:208 engine/core/graphene/object_types.py:527
msgid "images"
msgstr "Hình ảnh"
-#: engine/core/admin.py:184 engine/core/models.py:566
+#: engine/core/admin.py:219 engine/core/models.py:587
msgid "stock"
msgstr "Cổ phiếu"
-#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640
+#: engine/core/admin.py:220 engine/core/graphene/object_types.py:710
msgid "stocks"
msgstr "Cổ phiếu"
-#: engine/core/admin.py:196 engine/core/models.py:1818
+#: engine/core/admin.py:231 engine/core/models.py:1930
msgid "order product"
msgstr "Đặt hàng sản phẩm"
-#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389
-#: engine/core/models.py:1819
+#: engine/core/admin.py:232 engine/core/graphene/object_types.py:438
+#: engine/core/models.py:1931
msgid "order products"
msgstr "Đặt hàng sản phẩm"
-#: engine/core/admin.py:210 engine/core/admin.py:211
+#: engine/core/admin.py:250 engine/core/admin.py:251
msgid "children"
msgstr "Trẻ em"
-#: engine/core/admin.py:977
+#: engine/core/admin.py:1059
msgid "Config"
msgstr "Cấu hình"
@@ -157,8 +156,7 @@ msgstr "Đã giao"
msgid "canceled"
msgstr "Đã hủy"
-#: engine/core/choices.py:8 engine/core/choices.py:16
-#: engine/core/choices.py:24
+#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24
msgid "failed"
msgstr "Thất bại"
@@ -186,11 +184,11 @@ msgstr "Momental"
msgid "successful"
msgstr "Thành công"
-#: engine/core/docs/drf/views.py:31
+#: engine/core/docs/drf/views.py:30
msgid "OpenAPI schema in selected format with selected language"
msgstr "Sơ đồ OpenAPI ở định dạng đã chọn với ngôn ngữ đã chọn"
-#: engine/core/docs/drf/views.py:33
+#: engine/core/docs/drf/views.py:32
msgid ""
"OpenApi3 schema for this API. Format can be selected via content "
"negotiation. Language can be selected with Accept-Language and query "
@@ -200,11 +198,11 @@ msgstr ""
"nội dung. Ngôn ngữ có thể được chọn bằng cả tiêu đề Accept-Language và tham "
"số truy vấn."
-#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37
+#: engine/core/docs/drf/views.py:43 engine/core/graphene/mutations.py:37
msgid "cache I/O"
msgstr "Bộ nhớ đệm I/O"
-#: engine/core/docs/drf/views.py:46
+#: engine/core/docs/drf/views.py:45
msgid ""
"apply only a key to read permitted data from cache.\n"
"apply key, data and timeout with authentication to write data to cache."
@@ -212,273 +210,271 @@ msgstr ""
"Chỉ sử dụng khóa để đọc dữ liệu được phép từ bộ nhớ đệm. Sử dụng khóa, dữ "
"liệu và thời gian chờ kèm theo xác thực để ghi dữ liệu vào bộ nhớ đệm."
-#: engine/core/docs/drf/views.py:62
+#: engine/core/docs/drf/views.py:63
msgid "get a list of supported languages"
msgstr "Xem danh sách các ngôn ngữ được hỗ trợ"
-#: engine/core/docs/drf/views.py:74
+#: engine/core/docs/drf/views.py:75
msgid "get application's exposable parameters"
msgstr "Lấy các tham số có thể truy cập của ứng dụng"
-#: engine/core/docs/drf/views.py:84
+#: engine/core/docs/drf/views.py:89
msgid "send a message to the support team"
msgstr "Gửi tin nhắn cho đội ngũ hỗ trợ"
-#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57
+#: engine/core/docs/drf/views.py:103 engine/core/graphene/mutations.py:59
msgid "request a CORSed URL"
msgstr "Yêu cầu URL CORSed. Chỉ cho phép https."
-#: engine/core/docs/drf/views.py:112
+#: engine/core/docs/drf/views.py:119
msgid "Search between products, categories and brands"
msgstr "Tìm kiếm giữa các sản phẩm, danh mục và thương hiệu"
-#: engine/core/docs/drf/views.py:130
+#: engine/core/docs/drf/views.py:141
msgid "global search endpoint to query across project's tables"
msgstr "Điểm cuối tìm kiếm toàn cầu để tra cứu qua các bảng của dự án"
-#: engine/core/docs/drf/views.py:139
+#: engine/core/docs/drf/views.py:150
msgid "purchase an order as a business"
msgstr "Mua hàng với tư cách là doanh nghiệp"
-#: engine/core/docs/drf/views.py:146
+#: engine/core/docs/drf/views.py:158
msgid ""
"purchase an order as a business, using the provided `products` with "
"`product_uuid` and `attributes`."
msgstr ""
-"Mua hàng với tư cách là doanh nghiệp, sử dụng các sản phẩm được cung cấp với"
-" `product_uuid` và `attributes`."
+"Mua hàng với tư cách là doanh nghiệp, sử dụng các sản phẩm được cung cấp với "
+"`product_uuid` và `attributes`."
-#: engine/core/docs/drf/views.py:164
+#: engine/core/docs/drf/views.py:177
msgid "download a digital asset from purchased digital order"
msgstr "Tải xuống tài sản kỹ thuật số từ đơn hàng kỹ thuật số đã mua."
-#: engine/core/docs/drf/viewsets.py:61
+#: engine/core/docs/drf/viewsets.py:65
msgid "list all attribute groups (simple view)"
msgstr "Danh sách tất cả các nhóm thuộc tính (chế độ xem đơn giản)"
-#: engine/core/docs/drf/viewsets.py:68
+#: engine/core/docs/drf/viewsets.py:75
msgid "retrieve a single attribute group (detailed view)"
msgstr "Lấy một nhóm thuộc tính duy nhất (chế độ xem chi tiết)"
-#: engine/core/docs/drf/viewsets.py:75
+#: engine/core/docs/drf/viewsets.py:82
msgid "create an attribute group"
msgstr "Tạo nhóm thuộc tính"
-#: engine/core/docs/drf/viewsets.py:82
+#: engine/core/docs/drf/viewsets.py:92
msgid "delete an attribute group"
msgstr "Xóa nhóm thuộc tính"
-#: engine/core/docs/drf/viewsets.py:89
+#: engine/core/docs/drf/viewsets.py:99
msgid "rewrite an existing attribute group saving non-editables"
msgstr ""
"Viết lại nhóm thuộc tính hiện có và giữ nguyên các thuộc tính không thể "
"chỉnh sửa."
-#: engine/core/docs/drf/viewsets.py:96
-msgid ""
-"rewrite some fields of an existing attribute group saving non-editables"
+#: engine/core/docs/drf/viewsets.py:107
+msgid "rewrite some fields of an existing attribute group saving non-editables"
msgstr ""
"Cập nhật một số trường trong nhóm thuộc tính hiện có, giữ nguyên các trường "
"không thể chỉnh sửa."
-#: engine/core/docs/drf/viewsets.py:106
+#: engine/core/docs/drf/viewsets.py:118
msgid "list all attributes (simple view)"
msgstr "Danh sách tất cả các thuộc tính (chế độ xem đơn giản)"
-#: engine/core/docs/drf/viewsets.py:113
+#: engine/core/docs/drf/viewsets.py:128
msgid "retrieve a single attribute (detailed view)"
msgstr "Lấy một thuộc tính duy nhất (chế độ xem chi tiết)"
-#: engine/core/docs/drf/viewsets.py:120
+#: engine/core/docs/drf/viewsets.py:135
msgid "create an attribute"
msgstr "Tạo một thuộc tính"
-#: engine/core/docs/drf/viewsets.py:127
+#: engine/core/docs/drf/viewsets.py:142
msgid "delete an attribute"
msgstr "Xóa một thuộc tính"
-#: engine/core/docs/drf/viewsets.py:134
+#: engine/core/docs/drf/viewsets.py:149
msgid "rewrite an existing attribute saving non-editables"
msgstr ""
"Viết lại một thuộc tính hiện có để lưu trữ các trường không thể chỉnh sửa."
-#: engine/core/docs/drf/viewsets.py:141
+#: engine/core/docs/drf/viewsets.py:156
msgid "rewrite some fields of an existing attribute saving non-editables"
msgstr ""
"Cập nhật một số trường của một thuộc tính hiện có, giữ nguyên các trường "
"không thể chỉnh sửa."
-#: engine/core/docs/drf/viewsets.py:151
+#: engine/core/docs/drf/viewsets.py:166
msgid "list all attribute values (simple view)"
msgstr "Danh sách tất cả các giá trị thuộc tính (chế độ xem đơn giản)"
-#: engine/core/docs/drf/viewsets.py:158
+#: engine/core/docs/drf/viewsets.py:176
msgid "retrieve a single attribute value (detailed view)"
msgstr "Lấy giá trị của một thuộc tính duy nhất (chế độ xem chi tiết)"
-#: engine/core/docs/drf/viewsets.py:165
+#: engine/core/docs/drf/viewsets.py:183
msgid "create an attribute value"
msgstr "Tạo giá trị thuộc tính"
-#: engine/core/docs/drf/viewsets.py:172
+#: engine/core/docs/drf/viewsets.py:193
msgid "delete an attribute value"
msgstr "Xóa giá trị của một thuộc tính"
-#: engine/core/docs/drf/viewsets.py:179
+#: engine/core/docs/drf/viewsets.py:200
msgid "rewrite an existing attribute value saving non-editables"
msgstr ""
"Cập nhật giá trị của một thuộc tính hiện có mà không thay đổi các trường "
"không thể chỉnh sửa."
-#: engine/core/docs/drf/viewsets.py:186
-msgid ""
-"rewrite some fields of an existing attribute value saving non-editables"
+#: engine/core/docs/drf/viewsets.py:208
+msgid "rewrite some fields of an existing attribute value saving non-editables"
msgstr ""
-"Cập nhật một số trường của giá trị thuộc tính hiện có, giữ nguyên các trường"
-" không thể chỉnh sửa."
+"Cập nhật một số trường của giá trị thuộc tính hiện có, giữ nguyên các trường "
+"không thể chỉnh sửa."
-#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197
+#: engine/core/docs/drf/viewsets.py:219 engine/core/docs/drf/viewsets.py:220
msgid "list all categories (simple view)"
msgstr "Danh sách tất cả các danh mục (chế độ xem đơn giản)"
-#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205
+#: engine/core/docs/drf/viewsets.py:230 engine/core/docs/drf/viewsets.py:231
msgid "retrieve a single category (detailed view)"
msgstr "Lấy một danh mục duy nhất (chế độ xem chi tiết)"
-#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258
+#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:286
msgid "Category UUID or slug"
msgstr "Mã định danh duy nhất (UUID) hoặc tên gọi (slug) của danh mục"
-#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221
+#: engine/core/docs/drf/viewsets.py:246 engine/core/docs/drf/viewsets.py:247
msgid "create a category"
msgstr "Tạo một danh mục"
-#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229
+#: engine/core/docs/drf/viewsets.py:254 engine/core/docs/drf/viewsets.py:255
msgid "delete a category"
msgstr "Xóa một danh mục"
-#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237
+#: engine/core/docs/drf/viewsets.py:262 engine/core/docs/drf/viewsets.py:263
msgid "rewrite an existing category saving non-editables"
msgstr ""
"Viết lại một danh mục hiện có mà không thay đổi các trường không thể chỉnh "
"sửa."
-#: engine/core/docs/drf/viewsets.py:244 engine/core/docs/drf/viewsets.py:245
+#: engine/core/docs/drf/viewsets.py:270 engine/core/docs/drf/viewsets.py:272
msgid "rewrite some fields of an existing category saving non-editables"
msgstr ""
-"Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không"
-" thể chỉnh sửa."
+"Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không "
+"thể chỉnh sửa."
-#: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704
-#: engine/core/docs/drf/viewsets.py:988
+#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:1046
#: engine/core/graphene/object_types.py:117
-#: engine/core/graphene/object_types.py:207
-#: engine/core/graphene/object_types.py:482
+#: engine/core/graphene/object_types.py:236
+#: engine/core/graphene/object_types.py:537
msgid "SEO Meta snapshot"
msgstr "SEO Meta snapshot"
-#: engine/core/docs/drf/viewsets.py:253
+#: engine/core/docs/drf/viewsets.py:281
msgid "returns a snapshot of the category's SEO meta data"
msgstr "Trả về bản sao dữ liệu meta SEO của danh mục."
-#: engine/core/docs/drf/viewsets.py:274
+#: engine/core/docs/drf/viewsets.py:302
msgid "list all orders (simple view)"
msgstr "Danh sách tất cả các danh mục (chế độ xem đơn giản)"
-#: engine/core/docs/drf/viewsets.py:275
+#: engine/core/docs/drf/viewsets.py:303
msgid "for non-staff users, only their own orders are returned."
msgstr ""
"Đối với người dùng không phải nhân viên, chỉ các đơn hàng của chính họ được "
"hiển thị."
-#: engine/core/docs/drf/viewsets.py:281
+#: engine/core/docs/drf/viewsets.py:309
msgid ""
-"Case-insensitive substring search across human_readable_id, "
-"order_products.product.name, and order_products.product.partnumber"
+"Case-insensitive substring search across human_readable_id, order_products."
+"product.name, and order_products.product.partnumber"
msgstr ""
"Tìm kiếm chuỗi con không phân biệt chữ hoa chữ thường trên các trường "
-"human_readable_id, order_products.product.name và "
-"order_products.product.partnumber."
+"human_readable_id, order_products.product.name và order_products.product."
+"partnumber."
-#: engine/core/docs/drf/viewsets.py:288
+#: engine/core/docs/drf/viewsets.py:316
msgid "Filter orders with buy_time >= this ISO 8601 datetime"
msgstr "Lọc các đơn hàng có thời gian mua >= thời gian ISO 8601 này"
-#: engine/core/docs/drf/viewsets.py:293
+#: engine/core/docs/drf/viewsets.py:321
msgid "Filter orders with buy_time <= this ISO 8601 datetime"
msgstr "Lọc các đơn hàng có thời gian mua <= thời gian ISO 8601 này"
-#: engine/core/docs/drf/viewsets.py:298
+#: engine/core/docs/drf/viewsets.py:326
msgid "Filter by exact order UUID"
msgstr "Lọc theo UUID chính xác"
-#: engine/core/docs/drf/viewsets.py:303
+#: engine/core/docs/drf/viewsets.py:331
msgid "Filter by exact human-readable order ID"
msgstr "Lọc theo ID đơn hàng chính xác có thể đọc được bởi con người"
-#: engine/core/docs/drf/viewsets.py:308
+#: engine/core/docs/drf/viewsets.py:336
msgid "Filter by user's email (case-insensitive exact match)"
msgstr ""
"Lọc theo địa chỉ email của người dùng (khớp chính xác không phân biệt chữ "
"hoa chữ thường)"
-#: engine/core/docs/drf/viewsets.py:313
+#: engine/core/docs/drf/viewsets.py:341
msgid "Filter by user's UUID"
msgstr "Lọc theo UUID của người dùng"
-#: engine/core/docs/drf/viewsets.py:318
+#: engine/core/docs/drf/viewsets.py:347
msgid "Filter by order status (case-insensitive substring match)"
msgstr ""
"Lọc theo trạng thái đơn hàng (so khớp chuỗi con không phân biệt chữ hoa chữ "
"thường)"
-#: engine/core/docs/drf/viewsets.py:324
+#: engine/core/docs/drf/viewsets.py:354
msgid ""
-"Order by one of: uuid, human_readable_id, user_email, user, status, created,"
-" modified, buy_time, random. Prefix with '-' for descending (e.g. "
-"'-buy_time')."
+"Order by one of: uuid, human_readable_id, user_email, user, status, created, "
+"modified, buy_time, random. Prefix with '-' for descending (e.g. '-"
+"buy_time')."
msgstr ""
"Sắp xếp theo một trong các trường sau: uuid, human_readable_id, user_email, "
"user, status, created, modified, buy_time, random. Thêm tiền tố '-' để sắp "
"xếp theo thứ tự giảm dần (ví dụ: '-buy_time')."
-#: engine/core/docs/drf/viewsets.py:336
+#: engine/core/docs/drf/viewsets.py:366
msgid "retrieve a single order (detailed view)"
msgstr "Lấy một danh mục duy nhất (chế độ xem chi tiết)"
-#: engine/core/docs/drf/viewsets.py:341
+#: engine/core/docs/drf/viewsets.py:371
msgid "Order UUID or human-readable id"
msgstr "Đặt hàng UUID hoặc ID dễ đọc cho con người"
-#: engine/core/docs/drf/viewsets.py:351
+#: engine/core/docs/drf/viewsets.py:381
msgid "create an order"
msgstr "Tạo một thuộc tính"
-#: engine/core/docs/drf/viewsets.py:352
+#: engine/core/docs/drf/viewsets.py:382
msgid "doesn't work for non-staff users."
msgstr "Không áp dụng cho người dùng không phải nhân viên."
-#: engine/core/docs/drf/viewsets.py:359
+#: engine/core/docs/drf/viewsets.py:389
msgid "delete an order"
msgstr "Xóa một thuộc tính"
-#: engine/core/docs/drf/viewsets.py:366
+#: engine/core/docs/drf/viewsets.py:396
msgid "rewrite an existing order saving non-editables"
msgstr ""
"Viết lại một danh mục hiện có mà không thay đổi các trường không thể chỉnh "
"sửa."
-#: engine/core/docs/drf/viewsets.py:373
+#: engine/core/docs/drf/viewsets.py:403
msgid "rewrite some fields of an existing order saving non-editables"
msgstr ""
-"Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không"
-" thể chỉnh sửa."
+"Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không "
+"thể chỉnh sửa."
-#: engine/core/docs/drf/viewsets.py:380
+#: engine/core/docs/drf/viewsets.py:410
msgid "purchase an order"
msgstr "Giá mua tại thời điểm đặt hàng"
-#: engine/core/docs/drf/viewsets.py:382
+#: engine/core/docs/drf/viewsets.py:412
msgid ""
"finalizes the order purchase. if `force_balance` is used, the purchase is "
"completed using the user's balance; if `force_payment` is used, a "
@@ -488,27 +484,27 @@ msgstr ""
"hoàn tất bằng số dư của người dùng; nếu sử dụng `force_payment`, một giao "
"dịch sẽ được khởi tạo."
-#: engine/core/docs/drf/viewsets.py:397
+#: engine/core/docs/drf/viewsets.py:427
msgid "retrieve current pending order of a user"
msgstr "Lấy đơn hàng đang chờ xử lý hiện tại của người dùng"
-#: engine/core/docs/drf/viewsets.py:398
+#: engine/core/docs/drf/viewsets.py:428
msgid "retrieves a current pending order of an authenticated user"
msgstr "Lấy lệnh đặt hàng đang chờ xử lý hiện tại của người dùng đã xác thực."
-#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334
+#: engine/core/docs/drf/viewsets.py:438 engine/core/graphene/mutations.py:354
msgid "purchase an order without account creation"
msgstr "Đặt hàng mà không cần tạo tài khoản"
-#: engine/core/docs/drf/viewsets.py:409
+#: engine/core/docs/drf/viewsets.py:439
msgid "finalizes the order purchase for a non-registered user."
msgstr "Hoàn tất đơn đặt hàng cho người dùng chưa đăng ký."
-#: engine/core/docs/drf/viewsets.py:420
+#: engine/core/docs/drf/viewsets.py:450
msgid "add product to order"
msgstr "Thêm sản phẩm vào đơn hàng"
-#: engine/core/docs/drf/viewsets.py:421
+#: engine/core/docs/drf/viewsets.py:452
msgid ""
"adds a product to an order using the provided `product_uuid` and "
"`attributes`."
@@ -516,11 +512,11 @@ msgstr ""
"Thêm sản phẩm vào đơn hàng bằng cách sử dụng `product_uuid` và `attributes` "
"được cung cấp."
-#: engine/core/docs/drf/viewsets.py:429
+#: engine/core/docs/drf/viewsets.py:461
msgid "add a list of products to order, quantities will not count"
msgstr "Thêm danh sách sản phẩm vào đơn hàng, số lượng sẽ không được tính."
-#: engine/core/docs/drf/viewsets.py:430
+#: engine/core/docs/drf/viewsets.py:463
msgid ""
"adds a list of products to an order using the provided `product_uuid` and "
"`attributes`."
@@ -528,11 +524,11 @@ msgstr ""
"Thêm danh sách sản phẩm vào đơn hàng bằng cách sử dụng `product_uuid` và "
"`attributes` được cung cấp."
-#: engine/core/docs/drf/viewsets.py:438
+#: engine/core/docs/drf/viewsets.py:472
msgid "remove product from order"
msgstr "Xóa sản phẩm khỏi đơn hàng"
-#: engine/core/docs/drf/viewsets.py:439
+#: engine/core/docs/drf/viewsets.py:474
msgid ""
"removes a product from an order using the provided `product_uuid` and "
"`attributes`."
@@ -540,11 +536,11 @@ msgstr ""
"Xóa một sản phẩm khỏi đơn hàng bằng cách sử dụng `product_uuid` và "
"`attributes` được cung cấp."
-#: engine/core/docs/drf/viewsets.py:447
+#: engine/core/docs/drf/viewsets.py:483
msgid "remove product from order, quantities will not count"
msgstr "Xóa sản phẩm khỏi đơn hàng, số lượng sẽ không được tính."
-#: engine/core/docs/drf/viewsets.py:448
+#: engine/core/docs/drf/viewsets.py:485
msgid ""
"removes a list of products from an order using the provided `product_uuid` "
"and `attributes`"
@@ -552,741 +548,755 @@ msgstr ""
"Xóa danh sách sản phẩm khỏi đơn hàng bằng cách sử dụng `product_uuid` và "
"`attributes` được cung cấp."
-#: engine/core/docs/drf/viewsets.py:459
+#: engine/core/docs/drf/viewsets.py:497
msgid "list all wishlists (simple view)"
msgstr "Danh sách tất cả các thuộc tính (chế độ xem đơn giản)"
-#: engine/core/docs/drf/viewsets.py:460
+#: engine/core/docs/drf/viewsets.py:498
msgid "for non-staff users, only their own wishlists are returned."
msgstr ""
"Đối với người dùng không phải nhân viên, chỉ danh sách mong muốn của chính "
"họ được hiển thị."
-#: engine/core/docs/drf/viewsets.py:467
+#: engine/core/docs/drf/viewsets.py:508
msgid "retrieve a single wishlist (detailed view)"
msgstr "Lấy một thuộc tính duy nhất (chế độ xem chi tiết)"
-#: engine/core/docs/drf/viewsets.py:474
+#: engine/core/docs/drf/viewsets.py:515
msgid "create an wishlist"
msgstr "Tạo một thuộc tính"
-#: engine/core/docs/drf/viewsets.py:475
+#: engine/core/docs/drf/viewsets.py:516
msgid "Doesn't work for non-staff users."
msgstr "Không áp dụng cho người dùng không phải nhân viên."
-#: engine/core/docs/drf/viewsets.py:482
+#: engine/core/docs/drf/viewsets.py:523
msgid "delete an wishlist"
msgstr "Xóa một thuộc tính"
-#: engine/core/docs/drf/viewsets.py:489
+#: engine/core/docs/drf/viewsets.py:530
msgid "rewrite an existing wishlist saving non-editables"
msgstr ""
"Viết lại một thuộc tính hiện có để lưu trữ các trường không thể chỉnh sửa."
-#: engine/core/docs/drf/viewsets.py:496
+#: engine/core/docs/drf/viewsets.py:537
msgid "rewrite some fields of an existing wishlist saving non-editables"
msgstr ""
"Cập nhật một số trường của một thuộc tính hiện có, giữ nguyên các trường "
"không thể chỉnh sửa."
-#: engine/core/docs/drf/viewsets.py:503
+#: engine/core/docs/drf/viewsets.py:544
msgid "retrieve current pending wishlist of a user"
msgstr "Lấy danh sách mong muốn đang chờ xử lý hiện tại của người dùng."
-#: engine/core/docs/drf/viewsets.py:504
+#: engine/core/docs/drf/viewsets.py:545
msgid "retrieves a current pending wishlist of an authenticated user"
msgstr ""
"Lấy danh sách mong muốn đang chờ xử lý hiện tại của người dùng đã đăng nhập."
-#: engine/core/docs/drf/viewsets.py:514
+#: engine/core/docs/drf/viewsets.py:555
msgid "add product to wishlist"
msgstr "Thêm sản phẩm vào đơn hàng"
-#: engine/core/docs/drf/viewsets.py:515
+#: engine/core/docs/drf/viewsets.py:557
msgid "adds a product to an wishlist using the provided `product_uuid`"
msgstr ""
"Thêm sản phẩm vào danh sách mong muốn bằng cách sử dụng `product_uuid` được "
"cung cấp."
-#: engine/core/docs/drf/viewsets.py:523
+#: engine/core/docs/drf/viewsets.py:566
msgid "remove product from wishlist"
msgstr "Xóa sản phẩm khỏi danh sách mong muốn"
-#: engine/core/docs/drf/viewsets.py:524
+#: engine/core/docs/drf/viewsets.py:568
msgid "removes a product from an wishlist using the provided `product_uuid`"
msgstr ""
"Xóa một sản phẩm khỏi danh sách mong muốn bằng cách sử dụng `product_uuid` "
"được cung cấp."
-#: engine/core/docs/drf/viewsets.py:532
+#: engine/core/docs/drf/viewsets.py:577
msgid "add many products to wishlist"
msgstr "Thêm nhiều sản phẩm vào danh sách mong muốn"
-#: engine/core/docs/drf/viewsets.py:533
+#: engine/core/docs/drf/viewsets.py:579
msgid "adds many products to an wishlist using the provided `product_uuids`"
msgstr ""
"Thêm nhiều sản phẩm vào danh sách mong muốn bằng cách sử dụng các "
"`product_uuids` được cung cấp."
-#: engine/core/docs/drf/viewsets.py:541
+#: engine/core/docs/drf/viewsets.py:588
msgid "remove many products from wishlist"
msgstr "Xóa sản phẩm khỏi đơn hàng"
-#: engine/core/docs/drf/viewsets.py:542
+#: engine/core/docs/drf/viewsets.py:590
msgid ""
"removes many products from an wishlist using the provided `product_uuids`"
msgstr ""
"Xóa nhiều sản phẩm khỏi danh sách mong muốn bằng cách sử dụng các "
"`product_uuids` được cung cấp."
-#: engine/core/docs/drf/viewsets.py:549
+#: engine/core/docs/drf/viewsets.py:598
msgid ""
"Filter by one or more attribute name/value pairs. \n"
"• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n"
-"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n"
-"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), `true`/`false` for booleans, integers, floats; otherwise treated as string. \n"
+"• **Methods** (defaults to `icontains` if omitted): `iexact`, `exact`, "
+"`icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, "
+"`iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` \n"
+"• **Value typing**: JSON is attempted first (so you can pass lists/dicts), "
+"`true`/`false` for booleans, integers, floats; otherwise treated as "
+"string. \n"
"• **Base64**: prefix with `b64-` to URL-safe base64-encode the raw value. \n"
"Examples: \n"
-"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n"
+"`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\","
+"\"bluetooth\"]`, \n"
"`b64-description=icontains-aGVhdC1jb2xk`"
msgstr ""
-"Lọc theo một hoặc nhiều cặp tên/giá trị thuộc tính. • **Cú pháp**: `attr_name=method-value[;attr2=method2-value2]…` • **Phương thức** (mặc định là `icontains` nếu không được chỉ định): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` • **Kiểu giá trị**: JSON được ưu tiên (nên bạn có thể truyền danh sách/đối tượng), `true`/`false` cho boolean, số nguyên, số thực; nếu không sẽ được xử lý như chuỗi. • **Base64**: thêm tiền tố `b64-` để mã hóa Base64 an toàn cho URL giá trị thô. \n"
-"Ví dụ: `color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, `b64-description=icontains-aGVhdC1jb2xk`"
+"Lọc theo một hoặc nhiều cặp tên/giá trị thuộc tính. • **Cú pháp**: "
+"`attr_name=method-value[;attr2=method2-value2]…` • **Phương thức** (mặc định "
+"là `icontains` nếu không được chỉ định): `iexact`, `exact`, `icontains`, "
+"`contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, "
+"`regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` • **Kiểu giá trị**: JSON "
+"được ưu tiên (nên bạn có thể truyền danh sách/đối tượng), `true`/`false` cho "
+"boolean, số nguyên, số thực; nếu không sẽ được xử lý như chuỗi. • "
+"**Base64**: thêm tiền tố `b64-` để mã hóa Base64 an toàn cho URL giá trị "
+"thô. \n"
+"Ví dụ: `color=exact-red`, `size=gt-10`, `features=in-[\"wifi\","
+"\"bluetooth\"]`, `b64-description=icontains-aGVhdC1jb2xk`"
-#: engine/core/docs/drf/viewsets.py:568 engine/core/docs/drf/viewsets.py:569
+#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
msgid "list all products (simple view)"
msgstr "Danh sách tất cả sản phẩm (chế độ xem đơn giản)"
-#: engine/core/docs/drf/viewsets.py:574
+#: engine/core/docs/drf/viewsets.py:623
msgid "(exact) Product UUID"
msgstr "(chính xác) Mã định danh duy nhất của sản phẩm (UUID)"
-#: engine/core/docs/drf/viewsets.py:581
+#: engine/core/docs/drf/viewsets.py:630
msgid ""
-"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n"
+"Comma-separated list of fields to sort by. Prefix with `-` for "
+"descending. \n"
"**Allowed:** uuid, rating, name, slug, created, modified, price, random"
msgstr ""
-"Danh sách các trường được phân tách bằng dấu phẩy để sắp xếp. Thêm tiền tố "
-"`-` để sắp xếp theo thứ tự giảm dần. **Được phép:** uuid, rating, name, "
-"slug, created, modified, price, random"
+"Danh sách các trường được phân tách bằng dấu phẩy để sắp xếp. Thêm tiền tố `-"
+"` để sắp xếp theo thứ tự giảm dần. **Được phép:** uuid, rating, name, slug, "
+"created, modified, price, random"
-#: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599
+#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
msgid "retrieve a single product (detailed view)"
msgstr "Lấy thông tin chi tiết của một sản phẩm (xem chi tiết)"
-#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634
-#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672
-#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710
+#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683
+#: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725
+#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763
msgid "Product UUID or slug"
msgstr "Mã định danh duy nhất (UUID) hoặc Slug của sản phẩm"
-#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
+#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
#: engine/core/graphene/dashboard_mutations/product.py:80
#: engine/core/graphene/dashboard_mutations/product.py:118
#: engine/core/graphene/dashboard_mutations/product.py:166
msgid "create a product"
msgstr "Tạo sản phẩm"
-#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629
+#: engine/core/docs/drf/viewsets.py:677 engine/core/docs/drf/viewsets.py:678
msgid "rewrite an existing product, preserving non-editable fields"
msgstr ""
"Viết lại một sản phẩm hiện có, giữ nguyên các trường không thể chỉnh sửa."
-#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
+#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:700
msgid ""
"update some fields of an existing product, preserving non-editable fields"
msgstr ""
-"Cập nhật một số trường của sản phẩm hiện có, giữ nguyên các trường không thể"
-" chỉnh sửa."
+"Cập nhật một số trường của sản phẩm hiện có, giữ nguyên các trường không thể "
+"chỉnh sửa."
-#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
+#: engine/core/docs/drf/viewsets.py:719 engine/core/docs/drf/viewsets.py:720
msgid "delete a product"
msgstr "Xóa sản phẩm"
-#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686
+#: engine/core/docs/drf/viewsets.py:738 engine/core/docs/drf/viewsets.py:739
msgid "lists all permitted feedbacks for a product"
msgstr "Danh sách tất cả các phản hồi được phép cho một sản phẩm"
-#: engine/core/docs/drf/viewsets.py:705
+#: engine/core/docs/drf/viewsets.py:758
msgid "returns a snapshot of the product's SEO meta data"
msgstr "Trả về bản sao lưu dữ liệu meta SEO của sản phẩm."
-#: engine/core/docs/drf/viewsets.py:726
+#: engine/core/docs/drf/viewsets.py:779
msgid "list all addresses"
msgstr "Danh sách tất cả các địa chỉ"
-#: engine/core/docs/drf/viewsets.py:736
+#: engine/core/docs/drf/viewsets.py:789
msgid "retrieve a single address"
msgstr "Lấy một địa chỉ duy nhất"
-#: engine/core/docs/drf/viewsets.py:746
+#: engine/core/docs/drf/viewsets.py:799
msgid "create a new address"
msgstr "Tạo một địa chỉ mới"
-#: engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:810
msgid "delete an address"
msgstr "Xóa địa chỉ"
-#: engine/core/docs/drf/viewsets.py:767
+#: engine/core/docs/drf/viewsets.py:820
msgid "update an entire address"
msgstr "Cập nhật toàn bộ địa chỉ"
-#: engine/core/docs/drf/viewsets.py:778
+#: engine/core/docs/drf/viewsets.py:831
msgid "partially update an address"
msgstr "Cập nhật một phần địa chỉ"
-#: engine/core/docs/drf/viewsets.py:789
+#: engine/core/docs/drf/viewsets.py:842
msgid "autocomplete address suggestions"
msgstr "Tự động hoàn thành địa chỉ nhập liệu"
-#: engine/core/docs/drf/viewsets.py:794
+#: engine/core/docs/drf/viewsets.py:848
msgid "raw data query string, please append with data from geo-IP endpoint"
msgstr ""
"Dãy truy vấn dữ liệu thô, vui lòng bổ sung dữ liệu từ điểm cuối geo-IP."
-#: engine/core/docs/drf/viewsets.py:800
+#: engine/core/docs/drf/viewsets.py:855
msgid "limit the results amount, 1 < limit < 10, default: 5"
msgstr "Giới hạn số lượng kết quả, 1 < giới hạn < 10, mặc định: 5"
-#: engine/core/docs/drf/viewsets.py:816
+#: engine/core/docs/drf/viewsets.py:871
msgid "list all feedbacks (simple view)"
msgstr "Danh sách tất cả phản hồi (chế độ xem đơn giản)"
-#: engine/core/docs/drf/viewsets.py:823
+#: engine/core/docs/drf/viewsets.py:881
msgid "retrieve a single feedback (detailed view)"
msgstr "Lấy một phản hồi duy nhất (chế độ xem chi tiết)"
-#: engine/core/docs/drf/viewsets.py:830
+#: engine/core/docs/drf/viewsets.py:888
msgid "create a feedback"
msgstr "Tạo phản hồi"
-#: engine/core/docs/drf/viewsets.py:837
+#: engine/core/docs/drf/viewsets.py:895
msgid "delete a feedback"
msgstr "Xóa phản hồi"
-#: engine/core/docs/drf/viewsets.py:844
+#: engine/core/docs/drf/viewsets.py:902
msgid "rewrite an existing feedback saving non-editables"
msgstr "Viết lại phản hồi hiện có để lưu các trường không thể chỉnh sửa."
-#: engine/core/docs/drf/viewsets.py:851
+#: engine/core/docs/drf/viewsets.py:909
msgid "rewrite some fields of an existing feedback saving non-editables"
msgstr ""
-"Cập nhật một số trường của một phản hồi hiện có, giữ nguyên các trường không"
-" thể chỉnh sửa."
+"Cập nhật một số trường của một phản hồi hiện có, giữ nguyên các trường không "
+"thể chỉnh sửa."
-#: engine/core/docs/drf/viewsets.py:861
+#: engine/core/docs/drf/viewsets.py:919
msgid "list all order–product relations (simple view)"
msgstr ""
"Danh sách tất cả các mối quan hệ giữa đơn hàng và sản phẩm (cách xem đơn "
"giản)"
-#: engine/core/docs/drf/viewsets.py:871
+#: engine/core/docs/drf/viewsets.py:929
msgid "retrieve a single order–product relation (detailed view)"
msgstr ""
"Lấy thông tin về mối quan hệ giữa đơn hàng và sản phẩm (chế độ xem chi tiết)"
-#: engine/core/docs/drf/viewsets.py:881
+#: engine/core/docs/drf/viewsets.py:939
msgid "create a new order–product relation"
msgstr "Tạo mối quan hệ mới giữa đơn hàng và sản phẩm"
-#: engine/core/docs/drf/viewsets.py:891
+#: engine/core/docs/drf/viewsets.py:949
msgid "replace an existing order–product relation"
msgstr "Thay thế mối quan hệ giữa đơn hàng và sản phẩm hiện có"
-#: engine/core/docs/drf/viewsets.py:901
+#: engine/core/docs/drf/viewsets.py:959
msgid "partially update an existing order–product relation"
msgstr "Cập nhật một phần mối quan hệ giữa đơn hàng và sản phẩm hiện có"
-#: engine/core/docs/drf/viewsets.py:911
+#: engine/core/docs/drf/viewsets.py:969
msgid "delete an order–product relation"
msgstr "Xóa mối quan hệ giữa đơn hàng và sản phẩm"
-#: engine/core/docs/drf/viewsets.py:921
+#: engine/core/docs/drf/viewsets.py:979
msgid "add or remove feedback on an order–product relation"
msgstr "Thêm hoặc xóa phản hồi về mối quan hệ giữa đơn hàng và sản phẩm"
-#: engine/core/docs/drf/viewsets.py:938
+#: engine/core/docs/drf/viewsets.py:996
msgid "list all brands (simple view)"
msgstr "Danh sách tất cả các thương hiệu (chế độ xem đơn giản)"
-#: engine/core/docs/drf/viewsets.py:945
+#: engine/core/docs/drf/viewsets.py:1003
msgid "retrieve a single brand (detailed view)"
msgstr ""
"Trích xuất thông tin chi tiết về một thương hiệu duy nhất (chế độ xem chi "
"tiết)"
-#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993
+#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051
msgid "Brand UUID or slug"
msgstr "Mã định danh thương hiệu (UUID) hoặc tên gọi tắt"
-#: engine/core/docs/drf/viewsets.py:960
+#: engine/core/docs/drf/viewsets.py:1018
msgid "create a brand"
msgstr "Xây dựng thương hiệu"
-#: engine/core/docs/drf/viewsets.py:967
+#: engine/core/docs/drf/viewsets.py:1025
msgid "delete a brand"
msgstr "Xóa thương hiệu"
-#: engine/core/docs/drf/viewsets.py:974
+#: engine/core/docs/drf/viewsets.py:1032
msgid "rewrite an existing brand saving non-editables"
msgstr ""
"Viết lại một danh mục hiện có mà không thay đổi các trường không thể chỉnh "
"sửa."
-#: engine/core/docs/drf/viewsets.py:981
+#: engine/core/docs/drf/viewsets.py:1039
msgid "rewrite some fields of an existing brand saving non-editables"
msgstr ""
-"Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không"
-" thể chỉnh sửa."
+"Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không "
+"thể chỉnh sửa."
-#: engine/core/docs/drf/viewsets.py:1006
+#: engine/core/docs/drf/viewsets.py:1064
msgid "list all vendors (simple view)"
msgstr "Danh sách tất cả nhà cung cấp (chế độ xem đơn giản)"
-#: engine/core/docs/drf/viewsets.py:1013
+#: engine/core/docs/drf/viewsets.py:1074
msgid "retrieve a single vendor (detailed view)"
msgstr "Tra cứu thông tin chi tiết về một nhà cung cấp duy nhất"
-#: engine/core/docs/drf/viewsets.py:1020
+#: engine/core/docs/drf/viewsets.py:1081
msgid "create a vendor"
msgstr "Tạo nhà cung cấp"
-#: engine/core/docs/drf/viewsets.py:1027
+#: engine/core/docs/drf/viewsets.py:1088
msgid "delete a vendor"
msgstr "Xóa nhà cung cấp"
-#: engine/core/docs/drf/viewsets.py:1034
+#: engine/core/docs/drf/viewsets.py:1095
msgid "rewrite an existing vendor saving non-editables"
msgstr ""
"Viết lại một danh mục hiện có mà không thay đổi các trường không thể chỉnh "
"sửa."
-#: engine/core/docs/drf/viewsets.py:1041
+#: engine/core/docs/drf/viewsets.py:1102
msgid "rewrite some fields of an existing vendor saving non-editables"
msgstr ""
-"Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không"
-" thể chỉnh sửa."
+"Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không "
+"thể chỉnh sửa."
-#: engine/core/docs/drf/viewsets.py:1051
+#: engine/core/docs/drf/viewsets.py:1112
msgid "list all product images (simple view)"
msgstr "Danh sách tất cả hình ảnh sản phẩm (chế độ xem đơn giản)"
-#: engine/core/docs/drf/viewsets.py:1058
+#: engine/core/docs/drf/viewsets.py:1122
msgid "retrieve a single product image (detailed view)"
msgstr "Lấy một hình ảnh sản phẩm (chế độ xem chi tiết)"
-#: engine/core/docs/drf/viewsets.py:1065
+#: engine/core/docs/drf/viewsets.py:1129
msgid "create a product image"
msgstr "Tạo hình ảnh sản phẩm"
-#: engine/core/docs/drf/viewsets.py:1072
+#: engine/core/docs/drf/viewsets.py:1139
msgid "delete a product image"
msgstr "Xóa hình ảnh sản phẩm"
-#: engine/core/docs/drf/viewsets.py:1079
+#: engine/core/docs/drf/viewsets.py:1146
msgid "rewrite an existing product image saving non-editables"
msgstr ""
"Viết lại một danh mục hiện có mà không thay đổi các trường không thể chỉnh "
"sửa."
-#: engine/core/docs/drf/viewsets.py:1086
+#: engine/core/docs/drf/viewsets.py:1154
msgid "rewrite some fields of an existing product image saving non-editables"
msgstr ""
-"Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không"
-" thể chỉnh sửa."
+"Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không "
+"thể chỉnh sửa."
-#: engine/core/docs/drf/viewsets.py:1096
+#: engine/core/docs/drf/viewsets.py:1165
msgid "list all promo codes (simple view)"
msgstr "Danh sách tất cả mã khuyến mãi (chế độ xem đơn giản)"
-#: engine/core/docs/drf/viewsets.py:1103
+#: engine/core/docs/drf/viewsets.py:1175
msgid "retrieve a single promo code (detailed view)"
msgstr "Lấy một mã khuyến mãi duy nhất (xem chi tiết)"
-#: engine/core/docs/drf/viewsets.py:1110
+#: engine/core/docs/drf/viewsets.py:1182
msgid "create a promo code"
msgstr "Tạo mã khuyến mãi"
-#: engine/core/docs/drf/viewsets.py:1117
+#: engine/core/docs/drf/viewsets.py:1189
msgid "delete a promo code"
msgstr "Xóa mã khuyến mãi"
-#: engine/core/docs/drf/viewsets.py:1124
+#: engine/core/docs/drf/viewsets.py:1196
msgid "rewrite an existing promo code saving non-editables"
msgstr ""
"Viết lại một danh mục hiện có mà không thay đổi các trường không thể chỉnh "
"sửa."
-#: engine/core/docs/drf/viewsets.py:1131
+#: engine/core/docs/drf/viewsets.py:1203
msgid "rewrite some fields of an existing promo code saving non-editables"
msgstr ""
-"Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không"
-" thể chỉnh sửa."
+"Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không "
+"thể chỉnh sửa."
-#: engine/core/docs/drf/viewsets.py:1141
+#: engine/core/docs/drf/viewsets.py:1213
msgid "list all promotions (simple view)"
msgstr "Danh sách tất cả các chương trình khuyến mãi (chế độ xem đơn giản)"
-#: engine/core/docs/drf/viewsets.py:1148
+#: engine/core/docs/drf/viewsets.py:1223
msgid "retrieve a single promotion (detailed view)"
msgstr "Tra cứu một chương trình khuyến mãi (xem chi tiết)"
-#: engine/core/docs/drf/viewsets.py:1155
+#: engine/core/docs/drf/viewsets.py:1230
msgid "create a promotion"
msgstr "Tạo chương trình khuyến mãi"
-#: engine/core/docs/drf/viewsets.py:1162
+#: engine/core/docs/drf/viewsets.py:1237
msgid "delete a promotion"
msgstr "Xóa một chương trình khuyến mãi"
-#: engine/core/docs/drf/viewsets.py:1169
+#: engine/core/docs/drf/viewsets.py:1244
msgid "rewrite an existing promotion saving non-editables"
msgstr ""
"Viết lại một danh mục hiện có mà không thay đổi các trường không thể chỉnh "
"sửa."
-#: engine/core/docs/drf/viewsets.py:1176
+#: engine/core/docs/drf/viewsets.py:1251
msgid "rewrite some fields of an existing promotion saving non-editables"
msgstr ""
-"Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không"
-" thể chỉnh sửa."
+"Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không "
+"thể chỉnh sửa."
-#: engine/core/docs/drf/viewsets.py:1186
+#: engine/core/docs/drf/viewsets.py:1261
msgid "list all stocks (simple view)"
msgstr "Danh sách tất cả các cổ phiếu (chế độ xem đơn giản)"
-#: engine/core/docs/drf/viewsets.py:1193
+#: engine/core/docs/drf/viewsets.py:1268
msgid "retrieve a single stock (detailed view)"
msgstr "Tra cứu một cổ phiếu (chế độ xem chi tiết)"
-#: engine/core/docs/drf/viewsets.py:1200
+#: engine/core/docs/drf/viewsets.py:1275
msgid "create a stock record"
msgstr "Tạo hồ sơ kho hàng"
-#: engine/core/docs/drf/viewsets.py:1207
+#: engine/core/docs/drf/viewsets.py:1282
msgid "delete a stock record"
msgstr "Xóa một bản ghi kho"
-#: engine/core/docs/drf/viewsets.py:1214
+#: engine/core/docs/drf/viewsets.py:1289
msgid "rewrite an existing stock record saving non-editables"
msgstr ""
"Viết lại một danh mục hiện có mà không thay đổi các trường không thể chỉnh "
"sửa."
-#: engine/core/docs/drf/viewsets.py:1221
+#: engine/core/docs/drf/viewsets.py:1297
msgid "rewrite some fields of an existing stock record saving non-editables"
msgstr ""
-"Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không"
-" thể chỉnh sửa."
+"Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không "
+"thể chỉnh sửa."
-#: engine/core/docs/drf/viewsets.py:1231
+#: engine/core/docs/drf/viewsets.py:1308
msgid "list all product tags (simple view)"
msgstr "Danh sách tất cả thẻ sản phẩm (chế độ xem đơn giản)"
-#: engine/core/docs/drf/viewsets.py:1238
+#: engine/core/docs/drf/viewsets.py:1318
msgid "retrieve a single product tag (detailed view)"
msgstr "Lấy thông tin thẻ sản phẩm đơn lẻ (chế độ xem chi tiết)"
-#: engine/core/docs/drf/viewsets.py:1245
+#: engine/core/docs/drf/viewsets.py:1325
msgid "create a product tag"
msgstr "Tạo thẻ sản phẩm"
-#: engine/core/docs/drf/viewsets.py:1252
+#: engine/core/docs/drf/viewsets.py:1335
msgid "delete a product tag"
msgstr "Xóa thẻ sản phẩm"
-#: engine/core/docs/drf/viewsets.py:1259
+#: engine/core/docs/drf/viewsets.py:1342
msgid "rewrite an existing product tag saving non-editables"
msgstr ""
"Viết lại một danh mục hiện có mà không thay đổi các trường không thể chỉnh "
"sửa."
-#: engine/core/docs/drf/viewsets.py:1266
+#: engine/core/docs/drf/viewsets.py:1350
msgid "rewrite some fields of an existing product tag saving non-editables"
msgstr ""
-"Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không"
-" thể chỉnh sửa."
+"Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không "
+"thể chỉnh sửa."
-#: engine/core/elasticsearch/__init__.py:122
-#: engine/core/elasticsearch/__init__.py:570
+#: engine/core/elasticsearch/__init__.py:127
+#: engine/core/elasticsearch/__init__.py:627
msgid "no search term provided."
msgstr "Không có từ khóa tìm kiếm được cung cấp."
-#: engine/core/filters.py:69 engine/core/filters.py:426
-#: engine/core/filters.py:553
+#: engine/core/filters.py:78 engine/core/filters.py:484
+#: engine/core/filters.py:625
msgid "Search"
msgstr "Tìm kiếm"
-#: engine/core/filters.py:70 engine/core/filters.py:583
-#: engine/core/filters.py:612
+#: engine/core/filters.py:79 engine/core/filters.py:662
+#: engine/core/filters.py:691
msgid "UUID"
msgstr "UUID"
-#: engine/core/filters.py:71 engine/core/filters.py:428
-#: engine/core/filters.py:555
+#: engine/core/filters.py:80 engine/core/filters.py:487
+#: engine/core/filters.py:627
msgid "Name"
msgstr "Tên"
-#: engine/core/filters.py:72 engine/core/filters.py:557
+#: engine/core/filters.py:82 engine/core/filters.py:630
msgid "Categories"
msgstr "Các danh mục"
-#: engine/core/filters.py:74
+#: engine/core/filters.py:86
msgid "Categories Slugs"
msgstr "Thể loại Tiêu đề"
-#: engine/core/filters.py:75 engine/core/filters.py:436
+#: engine/core/filters.py:88 engine/core/filters.py:495
msgid "Tags"
msgstr "Thẻ"
-#: engine/core/filters.py:76
+#: engine/core/filters.py:90
msgid "Min Price"
msgstr "Giá tối thiểu"
-#: engine/core/filters.py:77
+#: engine/core/filters.py:93
msgid "Max Price"
msgstr "Giá tối đa"
-#: engine/core/filters.py:78
+#: engine/core/filters.py:95
msgid "Is Active"
msgstr "Đang hoạt động"
-#: engine/core/filters.py:79
+#: engine/core/filters.py:96
msgid "Brand"
msgstr "Thương hiệu"
-#: engine/core/filters.py:80
+#: engine/core/filters.py:97
msgid "Attributes"
msgstr "Thuộc tính"
-#: engine/core/filters.py:81
+#: engine/core/filters.py:99
msgid "Quantity"
msgstr "Số lượng"
-#: engine/core/filters.py:82 engine/core/filters.py:430
-#: engine/core/filters.py:556 engine/core/models.py:321
-#: engine/core/models.py:489 engine/core/models.py:644
+#: engine/core/filters.py:101 engine/core/filters.py:489
+#: engine/core/filters.py:628 engine/core/models.py:327
+#: engine/core/models.py:508 engine/core/models.py:665
msgid "Slug"
msgstr "Sên"
-#: engine/core/filters.py:83
+#: engine/core/filters.py:102
msgid "Is Digital"
msgstr "Is Digital"
-#: engine/core/filters.py:84
+#: engine/core/filters.py:104
msgid "Include sub-categories"
msgstr "Bao gồm các danh mục con"
-#: engine/core/filters.py:87
+#: engine/core/filters.py:108
msgid "Include personal ordered"
msgstr "Gồm các sản phẩm đặt hàng cá nhân"
-#: engine/core/filters.py:89 engine/core/models.py:648
+#: engine/core/filters.py:110 engine/core/models.py:669
msgid "SKU"
msgstr "Mã sản phẩm"
-#: engine/core/filters.py:184
+#: engine/core/filters.py:212
msgid "there must be a category_uuid to use include_subcategories flag"
msgstr "Phải có trường category_uuid để sử dụng cờ include_subcategories."
-#: engine/core/filters.py:353
+#: engine/core/filters.py:398
msgid "Search (ID, product name or part number)"
msgstr "Tìm kiếm (ID, tên sản phẩm hoặc số hiệu linh kiện)"
-#: engine/core/filters.py:356
+#: engine/core/filters.py:402
msgid "Bought after (inclusive)"
msgstr "Được mua sau (bao gồm)"
-#: engine/core/filters.py:357
+#: engine/core/filters.py:405
msgid "Bought before (inclusive)"
msgstr "Đã mua trước đó (bao gồm)"
-#: engine/core/filters.py:360 engine/core/filters.py:407
-#: engine/core/filters.py:614
+#: engine/core/filters.py:410 engine/core/filters.py:461
+#: engine/core/filters.py:696
msgid "User email"
msgstr "Địa chỉ email của người dùng"
-#: engine/core/filters.py:361 engine/core/filters.py:408
-#: engine/core/filters.py:592 engine/core/filters.py:613
+#: engine/core/filters.py:413 engine/core/filters.py:464
+#: engine/core/filters.py:671 engine/core/filters.py:693
msgid "User UUID"
msgstr "UUID người dùng"
-#: engine/core/filters.py:362
+#: engine/core/filters.py:415
msgid "Status"
msgstr "Trạng thái"
-#: engine/core/filters.py:366
+#: engine/core/filters.py:419
msgid "Human Readable ID"
msgstr "Mã định danh dễ đọc cho con người"
-#: engine/core/filters.py:429
+#: engine/core/filters.py:488
msgid "Parent"
msgstr "Cha mẹ"
-#: engine/core/filters.py:433
+#: engine/core/filters.py:492
msgid "Whole category(has at least 1 product or not)"
msgstr "Toàn bộ danh mục (có ít nhất 1 sản phẩm hoặc không)"
-#: engine/core/filters.py:437
+#: engine/core/filters.py:496
msgid "Level"
msgstr "Cấp độ"
-#: engine/core/filters.py:587
+#: engine/core/filters.py:666
msgid "Product UUID"
msgstr "Mã định danh duy nhất của sản phẩm (UUID)"
-#: engine/core/graphene/mutations.py:40
+#: engine/core/graphene/mutations.py:41
msgid "key to look for in or set into the cache"
msgstr "Khóa để tìm kiếm trong hoặc đặt vào bộ nhớ đệm"
-#: engine/core/graphene/mutations.py:41
+#: engine/core/graphene/mutations.py:43
msgid "data to store in cache"
msgstr "Dữ liệu cần lưu trữ trong bộ nhớ cache"
-#: engine/core/graphene/mutations.py:44
+#: engine/core/graphene/mutations.py:46
msgid "timeout in seconds to set the data for into the cache"
msgstr "Thời gian chờ (timeout) tính bằng giây để lưu dữ liệu vào bộ nhớ đệm."
-#: engine/core/graphene/mutations.py:47
+#: engine/core/graphene/mutations.py:49
msgid "cached data"
msgstr "Dữ liệu được lưu trữ trong bộ nhớ đệm"
-#: engine/core/graphene/mutations.py:62
+#: engine/core/graphene/mutations.py:64
msgid "camelized JSON data from the requested URL"
msgstr ""
"Dữ liệu JSON đã được chuyển đổi sang định dạng JSON từ URL được yêu cầu."
-#: engine/core/graphene/mutations.py:67 engine/core/views.py:257
+#: engine/core/graphene/mutations.py:69 engine/core/views.py:249
msgid "only URLs starting with http(s):// are allowed"
msgstr "Chỉ các URL bắt đầu bằng http(s):// mới được phép."
-#: engine/core/graphene/mutations.py:83
+#: engine/core/graphene/mutations.py:87
msgid "add a product to the order"
msgstr "Thêm sản phẩm vào đơn hàng"
-#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131
-#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287
+#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139
+#: engine/core/graphene/mutations.py:255 engine/core/graphene/mutations.py:307
#, python-brace-format
msgid "order {order_uuid} not found"
msgstr "Lệnh {order_uuid} không tìm thấy!"
-#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159
+#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167
msgid "remove a product from the order"
msgstr "Xóa sản phẩm khỏi đơn hàng"
-#: engine/core/graphene/mutations.py:137
+#: engine/core/graphene/mutations.py:145
msgid "remove all products from the order"
msgstr "Xóa tất cả sản phẩm khỏi đơn hàng."
-#: engine/core/graphene/mutations.py:182
+#: engine/core/graphene/mutations.py:190
msgid "buy an order"
msgstr "Đặt hàng"
-#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265
+#: engine/core/graphene/mutations.py:221 engine/core/graphene/mutations.py:283
msgid "please provide either order_uuid or order_hr_id - mutually exclusive"
msgstr ""
"Vui lòng cung cấp một trong hai trường order_uuid hoặc order_hr_id - hai "
"trường này là tương hỗ!"
-#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501
-#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712
+#: engine/core/graphene/mutations.py:250 engine/core/graphene/mutations.py:525
+#: engine/core/graphene/mutations.py:574 engine/core/viewsets.py:753
msgid "wrong type came from order.buy() method: {type(instance)!s}"
-msgstr ""
-"Loại sai đã được trả về từ phương thức order.buy(): {type(instance)!s}"
+msgstr "Loại sai đã được trả về từ phương thức order.buy(): {type(instance)!s}"
-#: engine/core/graphene/mutations.py:245
+#: engine/core/graphene/mutations.py:261
msgid "perform an action on a list of products in the order"
msgstr "Thực hiện một hành động trên danh sách sản phẩm theo thứ tự."
-#: engine/core/graphene/mutations.py:250
+#: engine/core/graphene/mutations.py:266
msgid "remove/add"
msgstr "Xóa/Thêm"
-#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323
+#: engine/core/graphene/mutations.py:302 engine/core/graphene/mutations.py:343
msgid "action must be either add or remove"
msgstr "Hành động phải là \"thêm\" hoặc \"xóa\"!"
-#: engine/core/graphene/mutations.py:293
+#: engine/core/graphene/mutations.py:313
msgid "perform an action on a list of products in the wishlist"
msgstr ""
"Thực hiện một hành động trên danh sách sản phẩm trong danh sách mong muốn."
-#: engine/core/graphene/mutations.py:311
+#: engine/core/graphene/mutations.py:331
msgid "please provide wishlist_uuid value"
msgstr "Vui lòng cung cấp giá trị `wishlist_uuid`."
-#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404
-#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460
-#: engine/core/graphene/mutations.py:504
+#: engine/core/graphene/mutations.py:348 engine/core/graphene/mutations.py:424
+#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480
+#: engine/core/graphene/mutations.py:530
#, python-brace-format
msgid "wishlist {wishlist_uuid} not found"
msgstr "Danh sách mong muốn {wishlist_uuid} không tìm thấy!"
-#: engine/core/graphene/mutations.py:382
+#: engine/core/graphene/mutations.py:402
msgid "add a product to the wishlist"
msgstr "Thêm sản phẩm vào đơn hàng"
-#: engine/core/graphene/mutations.py:410
+#: engine/core/graphene/mutations.py:430
msgid "remove a product from the wishlist"
msgstr "Xóa sản phẩm khỏi đơn hàng"
-#: engine/core/graphene/mutations.py:438
+#: engine/core/graphene/mutations.py:458
msgid "remove all products from the wishlist"
msgstr "Xóa sản phẩm khỏi đơn hàng"
-#: engine/core/graphene/mutations.py:466
+#: engine/core/graphene/mutations.py:486
msgid "buy all products from the wishlist"
msgstr "Xóa sản phẩm khỏi đơn hàng"
-#: engine/core/graphene/mutations.py:510
+#: engine/core/graphene/mutations.py:536
msgid "buy a product"
msgstr "Đặt hàng"
-#: engine/core/graphene/mutations.py:516
+#: engine/core/graphene/mutations.py:543
msgid ""
-"please send the attributes as the string formatted like "
-"attr1=value1,attr2=value2"
+"please send the attributes as the string formatted like attr1=value1,"
+"attr2=value2"
msgstr ""
"Vui lòng gửi các thuộc tính dưới dạng chuỗi được định dạng như sau: "
"attr1=value1,attr2=value2"
-#: engine/core/graphene/mutations.py:549
+#: engine/core/graphene/mutations.py:581
msgid "add or delete a feedback for orderproduct"
msgstr "Thêm hoặc xóa phản hồi cho sản phẩm đặt hàng"
-#: engine/core/graphene/mutations.py:573
+#: engine/core/graphene/mutations.py:607
msgid "action must be either `add` or `remove`"
msgstr "Hành động phải là `thêm` hoặc `xóa`!"
-#: engine/core/graphene/mutations.py:576
+#: engine/core/graphene/mutations.py:610
#, python-brace-format
msgid "order product {order_product_uuid} not found"
msgstr "Sản phẩm {order_product_uuid} không tìm thấy!"
-#: engine/core/graphene/mutations.py:582
+#: engine/core/graphene/mutations.py:617
msgid "original address string provided by the user"
msgstr "Dòng địa chỉ gốc do người dùng cung cấp"
-#: engine/core/graphene/mutations.py:618 engine/core/models.py:955
-#: engine/core/models.py:968 engine/core/models.py:1383
-#: engine/core/models.py:1412 engine/core/models.py:1437
-#: engine/core/viewsets.py:715
+#: engine/core/graphene/mutations.py:654 engine/core/models.py:978
+#: engine/core/models.py:991 engine/core/models.py:1435
+#: engine/core/models.py:1466 engine/core/models.py:1497
+#: engine/core/viewsets.py:760
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr "{name} không tồn tại: {uuid}!"
-#: engine/core/graphene/mutations.py:632
+#: engine/core/graphene/mutations.py:668
msgid "limit must be between 1 and 10"
msgstr "Giới hạn phải nằm trong khoảng từ 1 đến 10."
-#: engine/core/graphene/mutations.py:681
+#: engine/core/graphene/mutations.py:717
msgid "elasticsearch - works like a charm"
msgstr "ElasticSearch - hoạt động rất tốt."
#: engine/core/graphene/object_types.py:82
-#: engine/core/graphene/object_types.py:370
-#: engine/core/graphene/object_types.py:417 engine/core/models.py:772
-#: engine/core/models.py:1250 engine/core/models.py:1897
+#: engine/core/graphene/object_types.py:417
+#: engine/core/graphene/object_types.py:468 engine/core/models.py:795
+#: engine/core/models.py:1289 engine/core/models.py:2021
msgid "attributes"
msgstr "Thuộc tính"
@@ -1299,92 +1309,90 @@ msgid "groups of attributes"
msgstr "Nhóm thuộc tính"
#: engine/core/graphene/object_types.py:116
-#: engine/core/graphene/object_types.py:193
-#: engine/core/graphene/object_types.py:223 engine/core/models.py:432
+#: engine/core/graphene/object_types.py:214
+#: engine/core/graphene/object_types.py:252 engine/core/models.py:451
msgid "categories"
msgstr "Các danh mục"
-#: engine/core/graphene/object_types.py:124 engine/core/models.py:503
+#: engine/core/graphene/object_types.py:132 engine/core/models.py:522
msgid "brands"
msgstr "Thương hiệu"
-#: engine/core/graphene/object_types.py:195
+#: engine/core/graphene/object_types.py:216
msgid "category image url"
msgstr "Các danh mục"
-#: engine/core/graphene/object_types.py:196
-#: engine/core/graphene/object_types.py:317 engine/core/models.py:283
+#: engine/core/graphene/object_types.py:217
+#: engine/core/graphene/object_types.py:362 engine/core/models.py:289
msgid "markup percentage"
msgstr "Tỷ lệ phần trăm đánh dấu"
-#: engine/core/graphene/object_types.py:199
+#: engine/core/graphene/object_types.py:221
msgid "which attributes and values can be used for filtering this category."
-msgstr ""
-"Các thuộc tính và giá trị nào có thể được sử dụng để lọc danh mục này."
+msgstr "Các thuộc tính và giá trị nào có thể được sử dụng để lọc danh mục này."
-#: engine/core/graphene/object_types.py:203
-msgid ""
-"minimum and maximum prices for products in this category, if available."
+#: engine/core/graphene/object_types.py:227
+msgid "minimum and maximum prices for products in this category, if available."
msgstr ""
"Giá tối thiểu và tối đa cho các sản phẩm trong danh mục này, nếu có sẵn."
-#: engine/core/graphene/object_types.py:205
+#: engine/core/graphene/object_types.py:231
msgid "tags for this category"
msgstr "Thẻ cho danh mục này"
-#: engine/core/graphene/object_types.py:206
+#: engine/core/graphene/object_types.py:234
msgid "products in this category"
msgstr "Sản phẩm trong danh mục này"
-#: engine/core/graphene/object_types.py:324 engine/core/models.py:188
+#: engine/core/graphene/object_types.py:369 engine/core/models.py:194
msgid "vendors"
msgstr "Nhà cung cấp"
-#: engine/core/graphene/object_types.py:328
+#: engine/core/graphene/object_types.py:373
msgid "Latitude (Y coordinate)"
msgstr "Vĩ độ (tọa độ Y)"
-#: engine/core/graphene/object_types.py:329
+#: engine/core/graphene/object_types.py:374
msgid "Longitude (X coordinate)"
msgstr "Kinh độ (tọa độ X)"
-#: engine/core/graphene/object_types.py:358
+#: engine/core/graphene/object_types.py:403
msgid "comment"
msgstr "Làm thế nào"
-#: engine/core/graphene/object_types.py:359
-#: engine/core/graphene/object_types.py:483
+#: engine/core/graphene/object_types.py:405
+#: engine/core/graphene/object_types.py:539
msgid "rating value from 1 to 10, inclusive, or 0 if not set."
msgstr ""
"Giá trị đánh giá từ 1 đến 10, bao gồm cả 1 và 10, hoặc 0 nếu không được "
"thiết lập."
-#: engine/core/graphene/object_types.py:366
+#: engine/core/graphene/object_types.py:413
msgid "represents feedback from a user."
msgstr "Đại diện cho phản hồi từ người dùng."
-#: engine/core/graphene/object_types.py:371
-#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244
+#: engine/core/graphene/object_types.py:418
+#: engine/core/graphene/object_types.py:469 engine/core/models.py:1283
msgid "notifications"
msgstr "Thông báo"
-#: engine/core/graphene/object_types.py:372
+#: engine/core/graphene/object_types.py:420
msgid "download url for this order product if applicable"
msgstr "Tải xuống liên kết URL cho sản phẩm của đơn hàng này (nếu có)."
-#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736
+#: engine/core/graphene/object_types.py:422 engine/core/models.py:1848
msgid "feedback"
msgstr "Phản hồi"
-#: engine/core/graphene/object_types.py:407
+#: engine/core/graphene/object_types.py:456
msgid "a list of order products in this order"
msgstr "Danh sách các sản phẩm trong đơn hàng này"
-#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214
+#: engine/core/graphene/object_types.py:458 engine/core/models.py:1253
msgid "billing address"
msgstr "Địa chỉ thanh toán"
-#: engine/core/graphene/object_types.py:412
+#: engine/core/graphene/object_types.py:462
msgid ""
"shipping address for this order, leave blank if same as billing address or "
"if not applicable"
@@ -1392,54 +1400,54 @@ msgstr ""
"Địa chỉ giao hàng cho đơn hàng này, để trống nếu trùng với địa chỉ thanh "
"toán hoặc nếu không áp dụng."
-#: engine/core/graphene/object_types.py:414
+#: engine/core/graphene/object_types.py:465
msgid "total price of this order"
msgstr "Tổng giá trị của đơn hàng này"
-#: engine/core/graphene/object_types.py:415
+#: engine/core/graphene/object_types.py:466
msgid "total quantity of products in order"
msgstr "Tổng số lượng sản phẩm trong đơn hàng"
-#: engine/core/graphene/object_types.py:416
+#: engine/core/graphene/object_types.py:467
msgid "are all products in the order digital"
msgstr ""
"Tất cả các sản phẩm trong đơn hàng có phải là sản phẩm kỹ thuật số không?"
-#: engine/core/graphene/object_types.py:419
+#: engine/core/graphene/object_types.py:471
msgid "transactions for this order"
msgstr "Giao dịch cho đơn hàng này"
-#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278
+#: engine/core/graphene/object_types.py:491 engine/core/models.py:1317
msgid "orders"
msgstr "Đơn hàng"
-#: engine/core/graphene/object_types.py:459
+#: engine/core/graphene/object_types.py:512
msgid "image url"
msgstr "URL hình ảnh"
-#: engine/core/graphene/object_types.py:466
+#: engine/core/graphene/object_types.py:519
msgid "product's images"
msgstr "Hình ảnh sản phẩm"
-#: engine/core/graphene/object_types.py:473 engine/core/models.py:431
-#: engine/core/models.py:586
+#: engine/core/graphene/object_types.py:526 engine/core/models.py:450
+#: engine/core/models.py:607
msgid "category"
msgstr "Thể loại"
-#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737
+#: engine/core/graphene/object_types.py:528 engine/core/models.py:1849
msgid "feedbacks"
msgstr "Phản hồi"
-#: engine/core/graphene/object_types.py:476 engine/core/models.py:502
-#: engine/core/models.py:595
+#: engine/core/graphene/object_types.py:529 engine/core/models.py:521
+#: engine/core/models.py:616
msgid "brand"
msgstr "Thương hiệu"
-#: engine/core/graphene/object_types.py:477 engine/core/models.py:106
+#: engine/core/graphene/object_types.py:531 engine/core/models.py:106
msgid "attribute groups"
msgstr "Nhóm thuộc tính"
-#: engine/core/graphene/object_types.py:478
+#: engine/core/graphene/object_types.py:533
#: engine/core/templates/digital_order_created_email.html:111
#: engine/core/templates/digital_order_delivered_email.html:109
#: engine/core/templates/shipped_order_created_email.html:109
@@ -1447,7 +1455,7 @@ msgstr "Nhóm thuộc tính"
msgid "price"
msgstr "Giá"
-#: engine/core/graphene/object_types.py:479
+#: engine/core/graphene/object_types.py:534
#: engine/core/templates/digital_order_created_email.html:110
#: engine/core/templates/digital_order_delivered_email.html:108
#: engine/core/templates/shipped_order_created_email.html:108
@@ -1455,39 +1463,39 @@ msgstr "Giá"
msgid "quantity"
msgstr "Số lượng"
-#: engine/core/graphene/object_types.py:480
+#: engine/core/graphene/object_types.py:535
msgid "number of feedbacks"
msgstr "Số lượng phản hồi"
-#: engine/core/graphene/object_types.py:481
+#: engine/core/graphene/object_types.py:536
msgid "only available for personal orders"
msgstr "Sản phẩm chỉ dành cho đơn đặt hàng cá nhân."
-#: engine/core/graphene/object_types.py:484
+#: engine/core/graphene/object_types.py:541
msgid "discount price"
msgstr "Giá khuyến mãi"
-#: engine/core/graphene/object_types.py:508 engine/core/models.py:658
+#: engine/core/graphene/object_types.py:565 engine/core/models.py:679
msgid "products"
msgstr "Sản phẩm"
-#: engine/core/graphene/object_types.py:611
+#: engine/core/graphene/object_types.py:675
msgid "promocodes"
msgstr "Mã khuyến mãi"
-#: engine/core/graphene/object_types.py:621
+#: engine/core/graphene/object_types.py:690
msgid "products on sale"
msgstr "Sản phẩm đang khuyến mãi"
-#: engine/core/graphene/object_types.py:628 engine/core/models.py:904
+#: engine/core/graphene/object_types.py:698 engine/core/models.py:927
msgid "promotions"
msgstr "Khuyến mãi"
-#: engine/core/graphene/object_types.py:632 engine/core/models.py:187
+#: engine/core/graphene/object_types.py:702 engine/core/models.py:193
msgid "vendor"
msgstr "Nhà cung cấp"
-#: engine/core/graphene/object_types.py:633 engine/core/models.py:657
+#: engine/core/graphene/object_types.py:703 engine/core/models.py:678
#: engine/core/templates/digital_order_created_email.html:109
#: engine/core/templates/digital_order_delivered_email.html:107
#: engine/core/templates/shipped_order_created_email.html:107
@@ -1495,99 +1503,99 @@ msgstr "Nhà cung cấp"
msgid "product"
msgstr "Sản phẩm"
-#: engine/core/graphene/object_types.py:644 engine/core/models.py:927
+#: engine/core/graphene/object_types.py:715 engine/core/models.py:950
msgid "wishlisted products"
msgstr "Sản phẩm đã thêm vào danh sách mong muốn"
-#: engine/core/graphene/object_types.py:650 engine/core/models.py:944
+#: engine/core/graphene/object_types.py:722 engine/core/models.py:967
msgid "wishlists"
msgstr "Danh sách mong muốn"
-#: engine/core/graphene/object_types.py:654
+#: engine/core/graphene/object_types.py:727
msgid "tagged products"
msgstr "Sản phẩm được gắn thẻ"
-#: engine/core/graphene/object_types.py:661 engine/core/models.py:224
-#: engine/core/models.py:601
+#: engine/core/graphene/object_types.py:735 engine/core/models.py:230
+#: engine/core/models.py:622
msgid "product tags"
msgstr "Thẻ sản phẩm"
-#: engine/core/graphene/object_types.py:665
+#: engine/core/graphene/object_types.py:740
msgid "tagged categories"
msgstr "Các danh mục được gắn thẻ"
-#: engine/core/graphene/object_types.py:672
+#: engine/core/graphene/object_types.py:748
msgid "categories tags"
msgstr "Thẻ của các danh mục"
-#: engine/core/graphene/object_types.py:676
+#: engine/core/graphene/object_types.py:752
msgid "project name"
msgstr "Tên dự án"
-#: engine/core/graphene/object_types.py:677
+#: engine/core/graphene/object_types.py:753
msgid "company name"
msgstr "Tên công ty"
-#: engine/core/graphene/object_types.py:678
+#: engine/core/graphene/object_types.py:754
msgid "company address"
msgstr "Địa chỉ công ty"
-#: engine/core/graphene/object_types.py:679
+#: engine/core/graphene/object_types.py:755
msgid "company phone number"
msgstr "Số điện thoại của công ty"
-#: engine/core/graphene/object_types.py:680
+#: engine/core/graphene/object_types.py:758
msgid "email from, sometimes it must be used instead of host user value"
msgstr ""
"'email from', đôi khi phải sử dụng thay cho giá trị người dùng máy chủ."
-#: engine/core/graphene/object_types.py:681
+#: engine/core/graphene/object_types.py:761
msgid "email host user"
msgstr "Người dùng máy chủ email"
-#: engine/core/graphene/object_types.py:682
+#: engine/core/graphene/object_types.py:762
msgid "maximum amount for payment"
msgstr "Số tiền tối đa cho thanh toán"
-#: engine/core/graphene/object_types.py:683
+#: engine/core/graphene/object_types.py:763
msgid "minimum amount for payment"
msgstr "Số tiền tối thiểu để thanh toán"
-#: engine/core/graphene/object_types.py:684
+#: engine/core/graphene/object_types.py:764
msgid "analytics data"
msgstr "Dữ liệu phân tích"
-#: engine/core/graphene/object_types.py:685
+#: engine/core/graphene/object_types.py:765
msgid "advertisement data"
msgstr "Dữ liệu quảng cáo"
-#: engine/core/graphene/object_types.py:688
+#: engine/core/graphene/object_types.py:768
msgid "company configuration"
msgstr "Cấu hình"
-#: engine/core/graphene/object_types.py:692
+#: engine/core/graphene/object_types.py:772
msgid "language code"
msgstr "Mã ngôn ngữ"
-#: engine/core/graphene/object_types.py:693
+#: engine/core/graphene/object_types.py:773
msgid "language name"
msgstr "Tên ngôn ngữ"
-#: engine/core/graphene/object_types.py:694
+#: engine/core/graphene/object_types.py:774
msgid "language flag, if exists :)"
msgstr "Cờ ngôn ngữ, nếu có :)"
-#: engine/core/graphene/object_types.py:697
+#: engine/core/graphene/object_types.py:777
msgid "supported languages"
msgstr "Xem danh sách các ngôn ngữ được hỗ trợ"
-#: engine/core/graphene/object_types.py:728
-#: engine/core/graphene/object_types.py:729
-#: engine/core/graphene/object_types.py:730
+#: engine/core/graphene/object_types.py:809
+#: engine/core/graphene/object_types.py:812
+#: engine/core/graphene/object_types.py:815
msgid "products search results"
msgstr "Kết quả tìm kiếm sản phẩm"
-#: engine/core/graphene/object_types.py:731
+#: engine/core/graphene/object_types.py:817
msgid "posts search results"
msgstr "Kết quả tìm kiếm sản phẩm"
@@ -1600,9 +1608,9 @@ msgid ""
msgstr ""
"Đại diện cho một nhóm các thuộc tính, có thể có cấu trúc phân cấp. Lớp này "
"được sử dụng để quản lý và tổ chức các nhóm thuộc tính. Một nhóm thuộc tính "
-"có thể có nhóm cha, tạo thành cấu trúc phân cấp. Điều này có thể hữu ích cho"
-" việc phân loại và quản lý các thuộc tính một cách hiệu quả hơn trong một hệ"
-" thống phức tạp."
+"có thể có nhóm cha, tạo thành cấu trúc phân cấp. Điều này có thể hữu ích cho "
+"việc phân loại và quản lý các thuộc tính một cách hiệu quả hơn trong một hệ "
+"thống phức tạp."
#: engine/core/models.py:91
msgid "parent of this group"
@@ -1616,7 +1624,7 @@ msgstr "Nhóm thuộc tính cha"
msgid "attribute group's name"
msgstr "Tên nhóm thuộc tính"
-#: engine/core/models.py:105 engine/core/models.py:734
+#: engine/core/models.py:105 engine/core/models.py:755
msgid "attribute group"
msgstr "Nhóm thuộc tính"
@@ -1635,54 +1643,54 @@ msgstr ""
"dụng để định nghĩa và quản lý thông tin liên quan đến một nhà cung cấp bên "
"ngoài. Nó lưu trữ tên của nhà cung cấp, thông tin xác thực cần thiết cho "
"việc giao tiếp và tỷ lệ phần trăm chênh lệch giá áp dụng cho các sản phẩm "
-"được lấy từ nhà cung cấp. Mô hình này cũng duy trì các metadata và ràng buộc"
-" bổ sung, khiến nó phù hợp để sử dụng trong các hệ thống tương tác với các "
+"được lấy từ nhà cung cấp. Mô hình này cũng duy trì các metadata và ràng buộc "
+"bổ sung, khiến nó phù hợp để sử dụng trong các hệ thống tương tác với các "
"nhà cung cấp bên thứ ba."
-#: engine/core/models.py:124
+#: engine/core/models.py:125
msgid "stores credentials and endpoints required for vendor communication"
msgstr ""
"Lưu trữ thông tin đăng nhập và các điểm cuối cần thiết cho việc giao tiếp "
"API của nhà cung cấp."
-#: engine/core/models.py:125
+#: engine/core/models.py:127
msgid "authentication info"
msgstr "Thông tin xác thực"
-#: engine/core/models.py:130
+#: engine/core/models.py:132
msgid "define the markup for products retrieved from this vendor"
msgstr ""
"Xác định định dạng đánh dấu cho các sản phẩm được lấy từ nhà cung cấp này."
-#: engine/core/models.py:131
+#: engine/core/models.py:133
msgid "vendor markup percentage"
msgstr "Tỷ lệ chiết khấu của nhà cung cấp"
-#: engine/core/models.py:135
+#: engine/core/models.py:137
msgid "name of this vendor"
msgstr "Tên của nhà cung cấp này"
-#: engine/core/models.py:136
+#: engine/core/models.py:138
msgid "vendor name"
msgstr "Tên nhà cung cấp"
-#: engine/core/models.py:147
+#: engine/core/models.py:153
msgid "response file"
msgstr "Tệp phản hồi"
-#: engine/core/models.py:148
+#: engine/core/models.py:154
msgid "vendor's last processing response"
msgstr "Phản hồi xử lý cuối cùng của nhà cung cấp"
-#: engine/core/models.py:154
+#: engine/core/models.py:160
msgid "vendor's integration file path"
msgstr "Đường dẫn tệp tích hợp của nhà cung cấp"
-#: engine/core/models.py:155
+#: engine/core/models.py:161
msgid "integration path"
msgstr "Đường dẫn tích hợp"
-#: engine/core/models.py:197
+#: engine/core/models.py:203
msgid ""
"Represents a product tag used for classifying or identifying products. The "
"ProductTag class is designed to uniquely identify and classify products "
@@ -1690,52 +1698,52 @@ msgid ""
"display name. It supports operations exported through mixins and provides "
"metadata customization for administrative purposes."
msgstr ""
-"Đại diện cho thẻ sản phẩm được sử dụng để phân loại hoặc nhận dạng sản phẩm."
-" Lớp ProductTag được thiết kế để nhận dạng và phân loại sản phẩm một cách "
-"duy nhất thông qua sự kết hợp giữa mã định danh thẻ nội bộ và tên hiển thị "
-"thân thiện với người dùng. Nó hỗ trợ các thao tác được xuất qua mixins và "
-"cung cấp tùy chỉnh metadata cho mục đích quản trị."
+"Đại diện cho thẻ sản phẩm được sử dụng để phân loại hoặc nhận dạng sản phẩm. "
+"Lớp ProductTag được thiết kế để nhận dạng và phân loại sản phẩm một cách duy "
+"nhất thông qua sự kết hợp giữa mã định danh thẻ nội bộ và tên hiển thị thân "
+"thiện với người dùng. Nó hỗ trợ các thao tác được xuất qua mixins và cung "
+"cấp tùy chỉnh metadata cho mục đích quản trị."
-#: engine/core/models.py:209 engine/core/models.py:240
+#: engine/core/models.py:215 engine/core/models.py:246
msgid "internal tag identifier for the product tag"
msgstr "Mã định danh thẻ nội bộ cho thẻ sản phẩm"
-#: engine/core/models.py:210 engine/core/models.py:241
+#: engine/core/models.py:216 engine/core/models.py:247
msgid "tag name"
msgstr "Tên ngày"
-#: engine/core/models.py:214 engine/core/models.py:245
+#: engine/core/models.py:220 engine/core/models.py:251
msgid "user-friendly name for the product tag"
msgstr "Tên thân thiện với người dùng cho thẻ sản phẩm"
-#: engine/core/models.py:215 engine/core/models.py:246
+#: engine/core/models.py:221 engine/core/models.py:252
msgid "tag display name"
msgstr "Hiển thị tên thẻ"
-#: engine/core/models.py:223
+#: engine/core/models.py:229
msgid "product tag"
msgstr "Thẻ sản phẩm"
-#: engine/core/models.py:229
+#: engine/core/models.py:235
msgid ""
"Represents a category tag used for products. This class models a category "
"tag that can be used to associate and classify products. It includes "
"attributes for an internal tag identifier and a user-friendly display name."
msgstr ""
-"Đại diện cho thẻ danh mục được sử dụng cho sản phẩm. Lớp này mô hình hóa một"
-" thẻ danh mục có thể được sử dụng để liên kết và phân loại sản phẩm. Nó bao "
+"Đại diện cho thẻ danh mục được sử dụng cho sản phẩm. Lớp này mô hình hóa một "
+"thẻ danh mục có thể được sử dụng để liên kết và phân loại sản phẩm. Nó bao "
"gồm các thuộc tính cho mã định danh thẻ nội bộ và tên hiển thị thân thiện "
"với người dùng."
-#: engine/core/models.py:254
+#: engine/core/models.py:260
msgid "category tag"
msgstr "Thẻ danh mục"
-#: engine/core/models.py:255 engine/core/models.py:327
+#: engine/core/models.py:261 engine/core/models.py:333
msgid "category tags"
msgstr "Thẻ danh mục"
-#: engine/core/models.py:260
+#: engine/core/models.py:266
msgid ""
"Represents a category entity to organize and group related items in a "
"hierarchical structure. Categories may have hierarchical relationships with "
@@ -1747,117 +1755,116 @@ msgid ""
"hierarchy of categories, as well as assign attributes like images, tags, or "
"priority."
msgstr ""
-"Đại diện cho một thực thể danh mục để tổ chức và nhóm các mục liên quan theo"
-" cấu trúc phân cấp. Các danh mục có thể có mối quan hệ phân cấp với các danh"
-" mục khác, hỗ trợ mối quan hệ cha-con. Lớp này bao gồm các trường cho "
+"Đại diện cho một thực thể danh mục để tổ chức và nhóm các mục liên quan theo "
+"cấu trúc phân cấp. Các danh mục có thể có mối quan hệ phân cấp với các danh "
+"mục khác, hỗ trợ mối quan hệ cha-con. Lớp này bao gồm các trường cho "
"metadata và biểu diễn trực quan, làm nền tảng cho các tính năng liên quan "
"đến danh mục. Lớp này thường được sử dụng để định nghĩa và quản lý các danh "
-"mục sản phẩm hoặc các nhóm tương tự khác trong ứng dụng, cho phép người dùng"
-" hoặc quản trị viên xác định tên, mô tả và cấu trúc phân cấp của các danh "
+"mục sản phẩm hoặc các nhóm tương tự khác trong ứng dụng, cho phép người dùng "
+"hoặc quản trị viên xác định tên, mô tả và cấu trúc phân cấp của các danh "
"mục, cũng như gán các thuộc tính như hình ảnh, thẻ hoặc ưu tiên."
-#: engine/core/models.py:274
+#: engine/core/models.py:280
msgid "upload an image representing this category"
msgstr "Tải lên một hình ảnh đại diện cho danh mục này."
-#: engine/core/models.py:277
+#: engine/core/models.py:283
msgid "category image"
msgstr "Hình ảnh danh mục"
-#: engine/core/models.py:282
+#: engine/core/models.py:288
msgid "define a markup percentage for products in this category"
msgstr ""
"Xác định tỷ lệ phần trăm chiết khấu cho các sản phẩm trong danh mục này."
-#: engine/core/models.py:291
+#: engine/core/models.py:297
msgid "parent of this category to form a hierarchical structure"
msgstr "Cha của danh mục này để tạo cấu trúc phân cấp."
-#: engine/core/models.py:292
+#: engine/core/models.py:298
msgid "parent category"
msgstr "Danh mục cha"
-#: engine/core/models.py:297
+#: engine/core/models.py:303
msgid "category name"
msgstr "Tên danh mục"
-#: engine/core/models.py:298
+#: engine/core/models.py:304
msgid "provide a name for this category"
msgstr "Đặt tên cho danh mục này."
-#: engine/core/models.py:305
+#: engine/core/models.py:311
msgid "add a detailed description for this category"
msgstr "Thêm mô tả chi tiết cho danh mục này."
-#: engine/core/models.py:306
+#: engine/core/models.py:312
msgid "category description"
msgstr "Mô tả danh mục"
-#: engine/core/models.py:326
+#: engine/core/models.py:332
msgid "tags that help describe or group this category"
msgstr "Thẻ giúp mô tả hoặc phân loại danh mục này"
-#: engine/core/models.py:333 engine/core/models.py:495
+#: engine/core/models.py:339 engine/core/models.py:514
msgid "priority"
msgstr "Ưu tiên"
-#: engine/core/models.py:438
+#: engine/core/models.py:457
msgid ""
"Represents a Brand object in the system. This class handles information and "
"attributes related to a brand, including its name, logos, description, "
"associated categories, a unique slug, and priority order. It allows for the "
-"organization and representation of brand-related data within the "
-"application."
+"organization and representation of brand-related data within the application."
msgstr ""
-"Đại diện cho một đối tượng Thương hiệu trong hệ thống. Lớp này quản lý thông"
-" tin và thuộc tính liên quan đến một thương hiệu, bao gồm tên, logo, mô tả, "
+"Đại diện cho một đối tượng Thương hiệu trong hệ thống. Lớp này quản lý thông "
+"tin và thuộc tính liên quan đến một thương hiệu, bao gồm tên, logo, mô tả, "
"các danh mục liên quan, một slug duy nhất và thứ tự ưu tiên. Nó cho phép tổ "
"chức và hiển thị dữ liệu liên quan đến thương hiệu trong ứng dụng."
-#: engine/core/models.py:448
+#: engine/core/models.py:467
msgid "name of this brand"
msgstr "Tên của thương hiệu này"
-#: engine/core/models.py:449
+#: engine/core/models.py:468
msgid "brand name"
msgstr "Tên thương hiệu"
-#: engine/core/models.py:456
+#: engine/core/models.py:475
msgid "upload a logo representing this brand"
msgstr "Tải lên logo đại diện cho thương hiệu này."
-#: engine/core/models.py:458
+#: engine/core/models.py:477
msgid "brand small image"
msgstr "Hình ảnh nhỏ của thương hiệu"
-#: engine/core/models.py:464
+#: engine/core/models.py:483
msgid "upload a big logo representing this brand"
msgstr "Tải lên một logo lớn đại diện cho thương hiệu này."
-#: engine/core/models.py:466
+#: engine/core/models.py:485
msgid "brand big image"
msgstr "Hình ảnh thương hiệu lớn"
-#: engine/core/models.py:471
+#: engine/core/models.py:490
msgid "add a detailed description of the brand"
msgstr "Thêm mô tả chi tiết về thương hiệu"
-#: engine/core/models.py:472
+#: engine/core/models.py:491
msgid "brand description"
msgstr "Mô tả thương hiệu"
-#: engine/core/models.py:477
+#: engine/core/models.py:496
msgid "optional categories that this brand is associated with"
msgstr "Các danh mục tùy chọn mà thương hiệu này liên kết với"
-#: engine/core/models.py:478
+#: engine/core/models.py:497
msgid "associated categories"
msgstr "Các danh mục"
-#: engine/core/models.py:508
+#: engine/core/models.py:527
msgid ""
-"Represents the stock of a product managed in the system. This class provides"
-" details about the relationship between vendors, products, and their stock "
+"Represents the stock of a product managed in the system. This class provides "
+"details about the relationship between vendors, products, and their stock "
"information, as well as inventory-related properties like price, purchase "
"price, quantity, SKU, and digital assets. It is part of the inventory "
"management system to allow tracking and evaluation of products available "
@@ -1870,72 +1877,72 @@ msgstr ""
"phần của hệ thống quản lý hàng tồn kho để cho phép theo dõi và đánh giá các "
"sản phẩm có sẵn từ các nhà cung cấp khác nhau."
-#: engine/core/models.py:520
+#: engine/core/models.py:539
msgid "the vendor supplying this product stock"
msgstr "Nhà cung cấp cung cấp hàng tồn kho cho sản phẩm này."
-#: engine/core/models.py:521
+#: engine/core/models.py:540
msgid "associated vendor"
msgstr "Nhà cung cấp liên kết"
-#: engine/core/models.py:525
+#: engine/core/models.py:544
msgid "final price to the customer after markups"
msgstr "Giá cuối cùng cho khách hàng sau khi cộng thêm chi phí."
-#: engine/core/models.py:526
+#: engine/core/models.py:545
msgid "selling price"
msgstr "Giá bán"
-#: engine/core/models.py:531
+#: engine/core/models.py:550
msgid "the product associated with this stock entry"
msgstr "Sản phẩm liên quan đến mục hàng tồn kho này"
-#: engine/core/models.py:532 engine/core/models.py:797
-#: engine/core/models.py:843 engine/core/models.py:1792
+#: engine/core/models.py:551 engine/core/models.py:820
+#: engine/core/models.py:866 engine/core/models.py:1904
msgid "associated product"
msgstr "Sản phẩm liên quan"
-#: engine/core/models.py:539
+#: engine/core/models.py:558
msgid "the price paid to the vendor for this product"
msgstr "Giá thanh toán cho nhà cung cấp cho sản phẩm này"
-#: engine/core/models.py:540
+#: engine/core/models.py:559
msgid "vendor purchase price"
msgstr "Giá mua của nhà cung cấp"
-#: engine/core/models.py:544
+#: engine/core/models.py:563
msgid "available quantity of the product in stock"
msgstr "Số lượng sản phẩm hiện có trong kho"
-#: engine/core/models.py:545
+#: engine/core/models.py:564
msgid "quantity in stock"
msgstr "Số lượng hàng tồn kho"
-#: engine/core/models.py:549
+#: engine/core/models.py:568
msgid "vendor-assigned SKU for identifying the product"
msgstr "Mã SKU do nhà cung cấp gán để nhận dạng sản phẩm"
-#: engine/core/models.py:550
+#: engine/core/models.py:569
msgid "vendor sku"
msgstr "Mã SKU của nhà cung cấp"
-#: engine/core/models.py:556
+#: engine/core/models.py:575
msgid "digital file associated with this stock if applicable"
msgstr "Tệp tin kỹ thuật số liên quan đến cổ phiếu này (nếu có)"
-#: engine/core/models.py:557
+#: engine/core/models.py:576
msgid "digital file"
msgstr "Tệp tin kỹ thuật số"
-#: engine/core/models.py:560
+#: engine/core/models.py:580
msgid "system attributes"
msgstr "Thuộc tính hệ thống"
-#: engine/core/models.py:567
+#: engine/core/models.py:588
msgid "stock entries"
msgstr "Nhập kho"
-#: engine/core/models.py:572
+#: engine/core/models.py:593
msgid ""
"Represents a product with attributes such as category, brand, tags, digital "
"status, name, description, part number, and slug. Provides related utility "
@@ -1947,164 +1954,164 @@ msgid ""
"product data and its associated information within an application."
msgstr ""
"Đại diện cho một sản phẩm có các thuộc tính như danh mục, thương hiệu, thẻ, "
-"trạng thái kỹ thuật số, tên, mô tả, số phần và slug. Cung cấp các thuộc tính"
-" tiện ích liên quan để truy xuất đánh giá, số lượng phản hồi, giá, số lượng "
+"trạng thái kỹ thuật số, tên, mô tả, số phần và slug. Cung cấp các thuộc tính "
+"tiện ích liên quan để truy xuất đánh giá, số lượng phản hồi, giá, số lượng "
"và tổng số đơn hàng. Được thiết kế để sử dụng trong hệ thống quản lý thương "
"mại điện tử hoặc quản lý kho hàng. Lớp này tương tác với các mô hình liên "
"quan (như Danh mục, Thương hiệu và Thẻ Sản phẩm) và quản lý bộ nhớ đệm cho "
-"các thuộc tính được truy cập thường xuyên để cải thiện hiệu suất. Nó được sử"
-" dụng để định nghĩa và thao tác dữ liệu sản phẩm và thông tin liên quan "
-"trong ứng dụng."
+"các thuộc tính được truy cập thường xuyên để cải thiện hiệu suất. Nó được sử "
+"dụng để định nghĩa và thao tác dữ liệu sản phẩm và thông tin liên quan trong "
+"ứng dụng."
-#: engine/core/models.py:585
+#: engine/core/models.py:606
msgid "category this product belongs to"
msgstr "Danh mục mà sản phẩm này thuộc về"
-#: engine/core/models.py:594
+#: engine/core/models.py:615
msgid "optionally associate this product with a brand"
msgstr "Tùy chọn: Kết hợp sản phẩm này với một thương hiệu"
-#: engine/core/models.py:600
+#: engine/core/models.py:621
msgid "tags that help describe or group this product"
msgstr "Thẻ giúp mô tả hoặc phân loại sản phẩm này"
-#: engine/core/models.py:605
+#: engine/core/models.py:626
msgid "indicates whether this product is digitally delivered"
msgstr ""
"Cho biết sản phẩm này có được phân phối dưới dạng kỹ thuật số hay không."
-#: engine/core/models.py:606
+#: engine/core/models.py:627
msgid "is product digital"
msgstr "Sản phẩm có phải là sản phẩm số không?"
-#: engine/core/models.py:612
+#: engine/core/models.py:633
msgid "provide a clear identifying name for the product"
msgstr "Cung cấp một tên gọi rõ ràng để nhận diện sản phẩm."
-#: engine/core/models.py:613
+#: engine/core/models.py:634
msgid "product name"
msgstr "Tên sản phẩm"
-#: engine/core/models.py:619 engine/core/models.py:892
+#: engine/core/models.py:640 engine/core/models.py:915
msgid "add a detailed description of the product"
msgstr "Thêm mô tả chi tiết về sản phẩm"
-#: engine/core/models.py:620
+#: engine/core/models.py:641
msgid "product description"
msgstr "Mô tả sản phẩm"
-#: engine/core/models.py:627
+#: engine/core/models.py:648
msgid "part number for this product"
msgstr "Số hiệu sản phẩm cho sản phẩm này"
-#: engine/core/models.py:628
+#: engine/core/models.py:649
msgid "part number"
msgstr "Số hiệu linh kiện"
-#: engine/core/models.py:647
+#: engine/core/models.py:668
msgid "stock keeping unit for this product"
msgstr "Đơn vị quản lý hàng tồn kho cho sản phẩm này"
-#: engine/core/models.py:720
+#: engine/core/models.py:741
msgid ""
"Represents an attribute in the system. This class is used to define and "
"manage attributes, which are customizable pieces of data that can be "
"associated with other entities. Attributes have associated categories, "
-"groups, value types, and names. The model supports multiple types of values,"
-" including string, integer, float, boolean, array, and object. This allows "
+"groups, value types, and names. The model supports multiple types of values, "
+"including string, integer, float, boolean, array, and object. This allows "
"for dynamic and flexible data structuring."
msgstr ""
"Đại diện cho một thuộc tính trong hệ thống. Lớp này được sử dụng để định "
-"nghĩa và quản lý các thuộc tính, là các phần dữ liệu có thể tùy chỉnh có thể"
-" được liên kết với các thực thể khác. Các thuộc tính có các danh mục, nhóm, "
+"nghĩa và quản lý các thuộc tính, là các phần dữ liệu có thể tùy chỉnh có thể "
+"được liên kết với các thực thể khác. Các thuộc tính có các danh mục, nhóm, "
"loại giá trị và tên liên quan. Mô hình hỗ trợ nhiều loại giá trị, bao gồm "
-"chuỗi, số nguyên, số thực, boolean, mảng và đối tượng. Điều này cho phép cấu"
-" trúc dữ liệu động và linh hoạt."
+"chuỗi, số nguyên, số thực, boolean, mảng và đối tượng. Điều này cho phép cấu "
+"trúc dữ liệu động và linh hoạt."
-#: engine/core/models.py:733
+#: engine/core/models.py:754
msgid "group of this attribute"
msgstr "Nhóm có thuộc tính này"
-#: engine/core/models.py:739
+#: engine/core/models.py:760
msgid "string"
msgstr "Dây"
-#: engine/core/models.py:740
+#: engine/core/models.py:761
msgid "integer"
msgstr "Chính trực"
-#: engine/core/models.py:741
+#: engine/core/models.py:762
msgid "float"
msgstr "Nổi"
-#: engine/core/models.py:742
+#: engine/core/models.py:763
msgid "boolean"
msgstr "Boolean"
-#: engine/core/models.py:743
+#: engine/core/models.py:764
msgid "array"
msgstr "Mảng"
-#: engine/core/models.py:744
+#: engine/core/models.py:765
msgid "object"
msgstr "Đối tượng"
-#: engine/core/models.py:746
+#: engine/core/models.py:767
msgid "type of the attribute's value"
msgstr "Loại giá trị của thuộc tính"
-#: engine/core/models.py:747
+#: engine/core/models.py:768
msgid "value type"
msgstr "Kiểu giá trị"
-#: engine/core/models.py:752
+#: engine/core/models.py:773
msgid "name of this attribute"
msgstr "Tên của thuộc tính này"
-#: engine/core/models.py:753
+#: engine/core/models.py:774
msgid "attribute's name"
msgstr "Tên thuộc tính"
-#: engine/core/models.py:758
+#: engine/core/models.py:779
msgid "is filterable"
msgstr "có thể lọc được"
-#: engine/core/models.py:759
+#: engine/core/models.py:781
msgid "designates whether this attribute can be used for filtering or not"
msgstr "Xác định xem thuộc tính này có thể được sử dụng để lọc hay không."
-#: engine/core/models.py:771 engine/core/models.py:789
+#: engine/core/models.py:794 engine/core/models.py:812
#: engine/core/templates/digital_order_delivered_email.html:134
msgid "attribute"
msgstr "Thuộc tính"
-#: engine/core/models.py:777
+#: engine/core/models.py:800
msgid ""
-"Represents a specific value for an attribute that is linked to a product. It"
-" links the 'attribute' to a unique 'value', allowing better organization and"
-" dynamic representation of product characteristics."
+"Represents a specific value for an attribute that is linked to a product. It "
+"links the 'attribute' to a unique 'value', allowing better organization and "
+"dynamic representation of product characteristics."
msgstr ""
-"Đại diện cho một giá trị cụ thể của một thuộc tính được liên kết với một sản"
-" phẩm. Nó liên kết 'thuộc tính' với một 'giá trị' duy nhất, cho phép tổ chức"
-" tốt hơn và thể hiện động các đặc điểm của sản phẩm."
+"Đại diện cho một giá trị cụ thể của một thuộc tính được liên kết với một sản "
+"phẩm. Nó liên kết 'thuộc tính' với một 'giá trị' duy nhất, cho phép tổ chức "
+"tốt hơn và thể hiện động các đặc điểm của sản phẩm."
-#: engine/core/models.py:788
+#: engine/core/models.py:811
msgid "attribute of this value"
msgstr "Thuộc tính của giá trị này"
-#: engine/core/models.py:796
+#: engine/core/models.py:819
msgid "the specific product associated with this attribute's value"
msgstr "Sản phẩm cụ thể liên quan đến giá trị của thuộc tính này"
-#: engine/core/models.py:802
+#: engine/core/models.py:825
msgid "the specific value for this attribute"
msgstr "Giá trị cụ thể cho thuộc tính này"
-#: engine/core/models.py:815
+#: engine/core/models.py:838
msgid ""
"Represents a product image associated with a product in the system. This "
-"class is designed to manage images for products, including functionality for"
-" uploading image files, associating them with specific products, and "
+"class is designed to manage images for products, including functionality for "
+"uploading image files, associating them with specific products, and "
"determining their display order. It also includes an accessibility feature "
"with alternative text for the images."
msgstr ""
@@ -2114,87 +2121,87 @@ msgstr ""
"định thứ tự hiển thị của chúng. Nó cũng bao gồm tính năng truy cập với văn "
"bản thay thế cho hình ảnh."
-#: engine/core/models.py:826
+#: engine/core/models.py:849
msgid "provide alternative text for the image for accessibility"
msgstr "Cung cấp văn bản thay thế cho hình ảnh để đảm bảo tính khả dụng."
-#: engine/core/models.py:827
+#: engine/core/models.py:850
msgid "image alt text"
msgstr "Nội dung thay thế cho hình ảnh"
-#: engine/core/models.py:830
+#: engine/core/models.py:853
msgid "upload the image file for this product"
msgstr "Tải lên tệp hình ảnh cho sản phẩm này."
-#: engine/core/models.py:831 engine/core/models.py:862
+#: engine/core/models.py:854 engine/core/models.py:885
msgid "product image"
msgstr "Hình ảnh sản phẩm"
-#: engine/core/models.py:836
+#: engine/core/models.py:859
msgid "determines the order in which images are displayed"
msgstr "Xác định thứ tự hiển thị của các hình ảnh."
-#: engine/core/models.py:837
+#: engine/core/models.py:860
msgid "display priority"
msgstr "Ưu tiên hiển thị"
-#: engine/core/models.py:842
+#: engine/core/models.py:865
msgid "the product that this image represents"
msgstr "Sản phẩm mà hình ảnh này đại diện"
-#: engine/core/models.py:863
+#: engine/core/models.py:886
msgid "product images"
msgstr "Hình ảnh sản phẩm"
-#: engine/core/models.py:868
+#: engine/core/models.py:891
msgid ""
"Represents a promotional campaign for products with a discount. This class "
"is used to define and manage promotional campaigns that offer a percentage-"
"based discount for products. The class includes attributes for setting the "
"discount rate, providing details about the promotion, and linking it to the "
-"applicable products. It integrates with the product catalog to determine the"
-" affected items in the campaign."
+"applicable products. It integrates with the product catalog to determine the "
+"affected items in the campaign."
msgstr ""
-"Đại diện cho một chiến dịch khuyến mãi cho các sản phẩm có giảm giá. Lớp này"
-" được sử dụng để định nghĩa và quản lý các chiến dịch khuyến mãi cung cấp "
+"Đại diện cho một chiến dịch khuyến mãi cho các sản phẩm có giảm giá. Lớp này "
+"được sử dụng để định nghĩa và quản lý các chiến dịch khuyến mãi cung cấp "
"giảm giá theo tỷ lệ phần trăm cho các sản phẩm. Lớp này bao gồm các thuộc "
"tính để thiết lập tỷ lệ giảm giá, cung cấp chi tiết về chương trình khuyến "
"mãi và liên kết nó với các sản phẩm áp dụng. Nó tích hợp với danh mục sản "
"phẩm để xác định các mặt hàng bị ảnh hưởng trong chiến dịch."
-#: engine/core/models.py:880
+#: engine/core/models.py:903
msgid "percentage discount for the selected products"
msgstr "Giảm giá theo phần trăm cho các sản phẩm đã chọn"
-#: engine/core/models.py:881
+#: engine/core/models.py:904
msgid "discount percentage"
msgstr "Tỷ lệ giảm giá"
-#: engine/core/models.py:886
+#: engine/core/models.py:909
msgid "provide a unique name for this promotion"
msgstr "Hãy đặt một tên duy nhất cho chương trình khuyến mãi này."
-#: engine/core/models.py:887
+#: engine/core/models.py:910
msgid "promotion name"
msgstr "Tên chương trình khuyến mãi"
-#: engine/core/models.py:893
+#: engine/core/models.py:916
msgid "promotion description"
msgstr "Mô tả chương trình khuyến mãi"
-#: engine/core/models.py:898
+#: engine/core/models.py:921
msgid "select which products are included in this promotion"
msgstr "Chọn các sản phẩm được bao gồm trong chương trình khuyến mãi này."
-#: engine/core/models.py:899
+#: engine/core/models.py:922
msgid "included products"
msgstr "Các sản phẩm được bao gồm"
-#: engine/core/models.py:903
+#: engine/core/models.py:926
msgid "promotion"
msgstr "Khuyến mãi"
-#: engine/core/models.py:914
+#: engine/core/models.py:937
msgid ""
"Represents a user's wishlist for storing and managing desired products. The "
"class provides functionality to manage a collection of products, supporting "
@@ -2202,64 +2209,64 @@ msgid ""
"operations for adding and removing multiple products at once."
msgstr ""
"Đại diện cho danh sách mong muốn của người dùng để lưu trữ và quản lý các "
-"sản phẩm mong muốn. Lớp này cung cấp các chức năng để quản lý bộ sưu tập sản"
-" phẩm, hỗ trợ các thao tác như thêm và xóa sản phẩm, cũng như hỗ trợ các "
-"thao tác thêm và xóa nhiều sản phẩm cùng lúc."
+"sản phẩm mong muốn. Lớp này cung cấp các chức năng để quản lý bộ sưu tập sản "
+"phẩm, hỗ trợ các thao tác như thêm và xóa sản phẩm, cũng như hỗ trợ các thao "
+"tác thêm và xóa nhiều sản phẩm cùng lúc."
-#: engine/core/models.py:926
+#: engine/core/models.py:949
msgid "products that the user has marked as wanted"
msgstr "Các sản phẩm mà người dùng đã đánh dấu là mong muốn"
-#: engine/core/models.py:934
+#: engine/core/models.py:957
msgid "user who owns this wishlist"
msgstr "Người dùng sở hữu danh sách mong muốn này"
-#: engine/core/models.py:935
+#: engine/core/models.py:958
msgid "wishlist owner"
msgstr "Chủ sở hữu Danh sách mong muốn"
-#: engine/core/models.py:943
+#: engine/core/models.py:966
msgid "wishlist"
msgstr "Danh sách mong muốn"
-#: engine/core/models.py:985
+#: engine/core/models.py:1008
msgid ""
"Represents a documentary record tied to a product. This class is used to "
"store information about documentaries related to specific products, "
"including file uploads and their metadata. It contains methods and "
"properties to handle the file type and storage path for the documentary "
-"files. It extends functionality from specific mixins and provides additional"
-" custom features."
+"files. It extends functionality from specific mixins and provides additional "
+"custom features."
msgstr ""
"Đại diện cho một bản ghi tài liệu liên quan đến một sản phẩm. Lớp này được "
"sử dụng để lưu trữ thông tin về các tài liệu liên quan đến các sản phẩm cụ "
-"thể, bao gồm việc tải lên tệp và metadata của chúng. Nó chứa các phương thức"
-" và thuộc tính để xử lý loại tệp và đường dẫn lưu trữ cho các tệp tài liệu. "
-"Nó mở rộng chức năng từ các mixin cụ thể và cung cấp các tính năng tùy chỉnh"
-" bổ sung."
+"thể, bao gồm việc tải lên tệp và metadata của chúng. Nó chứa các phương thức "
+"và thuộc tính để xử lý loại tệp và đường dẫn lưu trữ cho các tệp tài liệu. "
+"Nó mở rộng chức năng từ các mixin cụ thể và cung cấp các tính năng tùy chỉnh "
+"bổ sung."
-#: engine/core/models.py:998
+#: engine/core/models.py:1023
msgid "documentary"
msgstr "Phim tài liệu"
-#: engine/core/models.py:999
+#: engine/core/models.py:1024
msgid "documentaries"
msgstr "Phim tài liệu"
-#: engine/core/models.py:1009
+#: engine/core/models.py:1034
msgid "unresolved"
msgstr "Chưa được giải quyết"
-#: engine/core/models.py:1014
+#: engine/core/models.py:1039
msgid ""
-"Represents an address entity that includes location details and associations"
-" with a user. Provides functionality for geographic and address data "
-"storage, as well as integration with geocoding services. This class is "
-"designed to store detailed address information including components like "
-"street, city, region, country, and geolocation (longitude and latitude). It "
-"supports integration with geocoding APIs, enabling the storage of raw API "
-"responses for further processing or inspection. The class also allows "
-"associating an address with a user, facilitating personalized data handling."
+"Represents an address entity that includes location details and associations "
+"with a user. Provides functionality for geographic and address data storage, "
+"as well as integration with geocoding services. This class is designed to "
+"store detailed address information including components like street, city, "
+"region, country, and geolocation (longitude and latitude). It supports "
+"integration with geocoding APIs, enabling the storage of raw API responses "
+"for further processing or inspection. The class also allows associating an "
+"address with a user, facilitating personalized data handling."
msgstr ""
"Đại diện cho một thực thể địa chỉ bao gồm thông tin vị trí và mối quan hệ "
"với người dùng. Cung cấp chức năng lưu trữ dữ liệu địa lý và địa chỉ, cũng "
@@ -2270,59 +2277,59 @@ msgstr ""
"lý hoặc kiểm tra thêm. Lớp này cũng cho phép liên kết địa chỉ với người "
"dùng, giúp quản lý dữ liệu cá nhân hóa."
-#: engine/core/models.py:1029
+#: engine/core/models.py:1054
msgid "address line for the customer"
msgstr "Địa chỉ của khách hàng"
-#: engine/core/models.py:1030
+#: engine/core/models.py:1055
msgid "address line"
msgstr "Dòng địa chỉ"
-#: engine/core/models.py:1032
+#: engine/core/models.py:1057
msgid "street"
msgstr "Phố"
-#: engine/core/models.py:1033
+#: engine/core/models.py:1058
msgid "district"
msgstr "Quận"
-#: engine/core/models.py:1034
+#: engine/core/models.py:1059
msgid "city"
msgstr "Thành phố"
-#: engine/core/models.py:1035
+#: engine/core/models.py:1060
msgid "region"
msgstr "Khu vực"
-#: engine/core/models.py:1036
+#: engine/core/models.py:1061
msgid "postal code"
msgstr "Mã bưu chính"
-#: engine/core/models.py:1037
+#: engine/core/models.py:1062
msgid "country"
msgstr "Quốc gia"
-#: engine/core/models.py:1044
+#: engine/core/models.py:1069
msgid "geolocation point: (longitude, latitude)"
msgstr "Điểm định vị địa lý (Kinh độ, Vĩ độ)"
-#: engine/core/models.py:1047
+#: engine/core/models.py:1075
msgid "full JSON response from geocoder for this address"
msgstr "Phản hồi JSON đầy đủ từ dịch vụ định vị địa lý cho địa chỉ này"
-#: engine/core/models.py:1052
+#: engine/core/models.py:1081
msgid "stored JSON response from the geocoding service"
msgstr "Phản hồi JSON được lưu trữ từ dịch vụ định vị địa lý"
-#: engine/core/models.py:1060
+#: engine/core/models.py:1091
msgid "address"
msgstr "Địa chỉ"
-#: engine/core/models.py:1061
+#: engine/core/models.py:1092
msgid "addresses"
msgstr "Địa chỉ"
-#: engine/core/models.py:1073
+#: engine/core/models.py:1104
msgid ""
"Represents a promotional code that can be used for discounts, managing its "
"validity, type of discount, and application. The PromoCode class stores "
@@ -2331,79 +2338,79 @@ msgid ""
"any), and status of its usage. It includes functionality to validate and "
"apply the promo code to an order while ensuring constraints are met."
msgstr ""
-"Đại diện cho một mã khuyến mãi có thể được sử dụng để giảm giá, quản lý thời"
-" hạn hiệu lực, loại giảm giá và cách áp dụng. Lớp PromoCode lưu trữ thông "
-"tin chi tiết về mã khuyến mãi, bao gồm mã định danh duy nhất, thuộc tính "
-"giảm giá (số tiền hoặc phần trăm), thời hạn hiệu lực, người dùng liên kết "
-"(nếu có) và trạng thái sử dụng. Nó bao gồm chức năng để xác thực và áp dụng "
-"mã khuyến mãi vào đơn hàng đồng thời đảm bảo các điều kiện được đáp ứng."
+"Đại diện cho một mã khuyến mãi có thể được sử dụng để giảm giá, quản lý thời "
+"hạn hiệu lực, loại giảm giá và cách áp dụng. Lớp PromoCode lưu trữ thông tin "
+"chi tiết về mã khuyến mãi, bao gồm mã định danh duy nhất, thuộc tính giảm "
+"giá (số tiền hoặc phần trăm), thời hạn hiệu lực, người dùng liên kết (nếu "
+"có) và trạng thái sử dụng. Nó bao gồm chức năng để xác thực và áp dụng mã "
+"khuyến mãi vào đơn hàng đồng thời đảm bảo các điều kiện được đáp ứng."
-#: engine/core/models.py:1087
+#: engine/core/models.py:1118
msgid "unique code used by a user to redeem a discount"
msgstr "Mã duy nhất mà người dùng sử dụng để đổi lấy ưu đãi giảm giá."
-#: engine/core/models.py:1088
+#: engine/core/models.py:1119
msgid "promo code identifier"
msgstr "Mã khuyến mãi"
-#: engine/core/models.py:1095
+#: engine/core/models.py:1126
msgid "fixed discount amount applied if percent is not used"
msgstr "Số tiền giảm giá cố định được áp dụng nếu không sử dụng phần trăm."
-#: engine/core/models.py:1096
+#: engine/core/models.py:1127
msgid "fixed discount amount"
msgstr "Số tiền giảm giá cố định"
-#: engine/core/models.py:1102
+#: engine/core/models.py:1133
msgid "percentage discount applied if fixed amount is not used"
msgstr ""
"Giảm giá theo phần trăm sẽ được áp dụng nếu không sử dụng số tiền cố định."
-#: engine/core/models.py:1103
+#: engine/core/models.py:1134
msgid "percentage discount"
msgstr "Giảm giá theo phần trăm"
-#: engine/core/models.py:1108
+#: engine/core/models.py:1139
msgid "timestamp when the promocode expires"
msgstr "Thời gian hết hạn của mã khuyến mãi"
-#: engine/core/models.py:1109
+#: engine/core/models.py:1140
msgid "end validity time"
msgstr "Thời hạn hiệu lực kết thúc"
-#: engine/core/models.py:1114
+#: engine/core/models.py:1145
msgid "timestamp from which this promocode is valid"
msgstr "Thời gian bắt đầu hiệu lực của mã khuyến mãi này"
-#: engine/core/models.py:1115
+#: engine/core/models.py:1146
msgid "start validity time"
msgstr "Thời gian bắt đầu có hiệu lực"
-#: engine/core/models.py:1120
+#: engine/core/models.py:1151
msgid "timestamp when the promocode was used, blank if not used yet"
msgstr "Thời gian sử dụng mã khuyến mãi, để trống nếu chưa được sử dụng."
-#: engine/core/models.py:1121
+#: engine/core/models.py:1152
msgid "usage timestamp"
msgstr "Dấu thời gian sử dụng"
-#: engine/core/models.py:1126
+#: engine/core/models.py:1157
msgid "user assigned to this promocode if applicable"
msgstr "Người dùng được gán mã khuyến mãi này (nếu có)."
-#: engine/core/models.py:1127
+#: engine/core/models.py:1158
msgid "assigned user"
msgstr "Người dùng được chỉ định"
-#: engine/core/models.py:1134
+#: engine/core/models.py:1165
msgid "promo code"
msgstr "Mã khuyến mãi"
-#: engine/core/models.py:1135
+#: engine/core/models.py:1166
msgid "promo codes"
msgstr "Mã khuyến mãi"
-#: engine/core/models.py:1150
+#: engine/core/models.py:1182
msgid ""
"only one type of discount should be defined (amount or percent), but not "
"both or neither."
@@ -2411,167 +2418,167 @@ msgstr ""
"Chỉ nên định nghĩa một loại giảm giá (theo số tiền hoặc theo phần trăm), "
"nhưng không nên định nghĩa cả hai hoặc không định nghĩa cả hai."
-#: engine/core/models.py:1171
+#: engine/core/models.py:1204
msgid "promocode already used"
msgstr "Mã khuyến mãi đã được sử dụng."
-#: engine/core/models.py:1187
+#: engine/core/models.py:1226
#, python-brace-format
msgid "invalid discount type for promocode {self.uuid}"
msgstr "Loại giảm giá không hợp lệ cho mã khuyến mãi {self.uuid}!"
-#: engine/core/models.py:1196
+#: engine/core/models.py:1235
msgid ""
"Represents an order placed by a user. This class models an order within the "
"application, including its various attributes such as billing and shipping "
-"information, status, associated user, notifications, and related operations."
-" Orders can have associated products, promotions can be applied, addresses "
+"information, status, associated user, notifications, and related operations. "
+"Orders can have associated products, promotions can be applied, addresses "
"set, and shipping or billing details updated. Equally, functionality "
"supports managing the products in the order lifecycle."
msgstr ""
"Đại diện cho một đơn hàng được đặt bởi người dùng. Lớp này mô hình hóa một "
"đơn hàng trong ứng dụng, bao gồm các thuộc tính khác nhau như thông tin "
-"thanh toán và vận chuyển, trạng thái, người dùng liên quan, thông báo và các"
-" thao tác liên quan. Đơn hàng có thể có các sản phẩm liên quan, áp dụng "
+"thanh toán và vận chuyển, trạng thái, người dùng liên quan, thông báo và các "
+"thao tác liên quan. Đơn hàng có thể có các sản phẩm liên quan, áp dụng "
"khuyến mãi, thiết lập địa chỉ và cập nhật chi tiết vận chuyển hoặc thanh "
"toán. Đồng thời, chức năng hỗ trợ quản lý các sản phẩm trong chu kỳ đời của "
"đơn hàng."
-#: engine/core/models.py:1213
+#: engine/core/models.py:1252
msgid "the billing address used for this order"
msgstr "Địa chỉ thanh toán được sử dụng cho đơn hàng này"
-#: engine/core/models.py:1221
+#: engine/core/models.py:1260
msgid "optional promo code applied to this order"
msgstr "Mã khuyến mãi tùy chọn đã được áp dụng cho đơn hàng này."
-#: engine/core/models.py:1222
+#: engine/core/models.py:1261
msgid "applied promo code"
msgstr "Đã áp dụng mã khuyến mãi"
-#: engine/core/models.py:1230
+#: engine/core/models.py:1269
msgid "the shipping address used for this order"
msgstr "Địa chỉ giao hàng được sử dụng cho đơn hàng này"
-#: engine/core/models.py:1231
+#: engine/core/models.py:1270
msgid "shipping address"
msgstr "Địa chỉ giao hàng"
-#: engine/core/models.py:1237
+#: engine/core/models.py:1276
msgid "current status of the order in its lifecycle"
msgstr "Tình trạng hiện tại của đơn hàng trong chu kỳ đời sống của nó"
-#: engine/core/models.py:1238
+#: engine/core/models.py:1277
msgid "order status"
msgstr "Tình trạng đơn hàng"
-#: engine/core/models.py:1243 engine/core/models.py:1769
+#: engine/core/models.py:1282 engine/core/models.py:1881
msgid "json structure of notifications to display to users"
msgstr ""
"Cấu trúc JSON của thông báo hiển thị cho người dùng, trong giao diện quản "
"trị (admin UI), chế độ xem bảng (table-view) được sử dụng."
-#: engine/core/models.py:1249
+#: engine/core/models.py:1288
msgid "json representation of order attributes for this order"
msgstr "Đại diện JSON của các thuộc tính đơn hàng cho đơn hàng này"
-#: engine/core/models.py:1255
+#: engine/core/models.py:1294
msgid "the user who placed the order"
msgstr "Người dùng đã đặt đơn hàng"
-#: engine/core/models.py:1256
+#: engine/core/models.py:1295
msgid "user"
msgstr "Người dùng"
-#: engine/core/models.py:1262
+#: engine/core/models.py:1301
msgid "the timestamp when the order was finalized"
msgstr "Thời gian ghi nhận khi đơn hàng được hoàn tất"
-#: engine/core/models.py:1263
+#: engine/core/models.py:1302
msgid "buy time"
msgstr "Mua thời gian"
-#: engine/core/models.py:1270
+#: engine/core/models.py:1309
msgid "a human-readable identifier for the order"
msgstr "Một định danh dễ đọc cho đơn hàng"
-#: engine/core/models.py:1271
+#: engine/core/models.py:1310
msgid "human readable id"
msgstr "ID dễ đọc cho con người"
-#: engine/core/models.py:1277
+#: engine/core/models.py:1316
msgid "order"
msgstr "Đặt hàng"
-#: engine/core/models.py:1319
+#: engine/core/models.py:1363
msgid "a user must have only one pending order at a time"
msgstr ""
"Một người dùng chỉ được phép có một lệnh chờ duy nhất tại một thời điểm!"
-#: engine/core/models.py:1351
+#: engine/core/models.py:1396
msgid "you cannot add products to an order that is not a pending one"
msgstr ""
"Bạn không thể thêm sản phẩm vào đơn hàng không phải là đơn hàng đang chờ xử "
"lý."
-#: engine/core/models.py:1356
+#: engine/core/models.py:1402
msgid "you cannot add inactive products to order"
msgstr "Bạn không thể thêm các sản phẩm không hoạt động vào đơn hàng."
-#: engine/core/models.py:1373
+#: engine/core/models.py:1424
msgid "you cannot add more products than available in stock"
msgstr "Bạn không thể thêm nhiều sản phẩm hơn số lượng hiện có trong kho."
-#: engine/core/models.py:1395 engine/core/models.py:1420
-#: engine/core/models.py:1428
+#: engine/core/models.py:1448 engine/core/models.py:1477
+#: engine/core/models.py:1487
msgid "you cannot remove products from an order that is not a pending one"
msgstr ""
-"Bạn không thể xóa sản phẩm khỏi một đơn hàng không phải là đơn hàng đang chờ"
-" xử lý."
+"Bạn không thể xóa sản phẩm khỏi một đơn hàng không phải là đơn hàng đang chờ "
+"xử lý."
-#: engine/core/models.py:1416
+#: engine/core/models.py:1472
#, python-brace-format
msgid "{name} does not exist with query <{query}>"
msgstr "{name} không tồn tại với truy vấn <{query}>!"
-#: engine/core/models.py:1448
+#: engine/core/models.py:1511
msgid "promocode does not exist"
msgstr "Mã khuyến mãi không tồn tại"
-#: engine/core/models.py:1454
+#: engine/core/models.py:1526
msgid "you can only buy physical products with shipping address specified"
msgstr ""
"Bạn chỉ có thể mua các sản phẩm vật lý có địa chỉ giao hàng được chỉ định!"
-#: engine/core/models.py:1473
+#: engine/core/models.py:1547
msgid "address does not exist"
msgstr "Địa chỉ không tồn tại"
-#: engine/core/models.py:1494 engine/core/models.py:1563
+#: engine/core/models.py:1569 engine/core/models.py:1648
msgid "you can not buy at this moment, please try again in a few minutes"
msgstr "Bạn không thể mua hàng vào lúc này, vui lòng thử lại sau vài phút."
-#: engine/core/models.py:1497 engine/core/models.py:1559
+#: engine/core/models.py:1575 engine/core/models.py:1641
msgid "invalid force value"
msgstr "Giá trị lực không hợp lệ"
-#: engine/core/models.py:1503 engine/core/models.py:1566
+#: engine/core/models.py:1581 engine/core/models.py:1652
msgid "you cannot purchase an empty order!"
msgstr "Bạn không thể đặt hàng trống!"
-#: engine/core/models.py:1522
+#: engine/core/models.py:1602
msgid "you cannot buy an order without a user"
msgstr "Bạn không thể đặt hàng mà không có tài khoản người dùng!"
-#: engine/core/models.py:1536
+#: engine/core/models.py:1616
msgid "a user without a balance cannot buy with balance"
msgstr "Người dùng không có số dư không thể mua bằng số dư!"
-#: engine/core/models.py:1541
+#: engine/core/models.py:1622
msgid "insufficient funds to complete the order"
msgstr "Không đủ số tiền để hoàn tất đơn hàng."
-#: engine/core/models.py:1575
+#: engine/core/models.py:1663
msgid ""
"you cannot buy without registration, please provide the following "
"information: customer name, customer email, customer phone number"
@@ -2580,7 +2587,7 @@ msgstr ""
"sau: tên khách hàng, địa chỉ email của khách hàng, số điện thoại của khách "
"hàng."
-#: engine/core/models.py:1584
+#: engine/core/models.py:1674
#, python-brace-format
msgid ""
"invalid payment method: {payment_method} from {available_payment_methods}"
@@ -2588,7 +2595,7 @@ msgstr ""
"Phương thức thanh toán không hợp lệ: {payment_method} từ "
"{available_payment_methods}!"
-#: engine/core/models.py:1699
+#: engine/core/models.py:1805
msgid ""
"Manages user feedback for products. This class is designed to capture and "
"store user feedback for specific products that they have purchased. It "
@@ -2597,40 +2604,39 @@ msgid ""
"fields to effectively model and manage feedback data."
msgstr ""
"Quản lý phản hồi của người dùng về sản phẩm. Lớp này được thiết kế để thu "
-"thập và lưu trữ phản hồi của người dùng về các sản phẩm cụ thể mà họ đã mua."
-" Nó bao gồm các thuộc tính để lưu trữ bình luận của người dùng, tham chiếu "
-"đến sản phẩm liên quan trong đơn hàng và đánh giá do người dùng gán. Lớp này"
-" sử dụng các trường cơ sở dữ liệu để mô hình hóa và quản lý dữ liệu phản hồi"
-" một cách hiệu quả."
+"thập và lưu trữ phản hồi của người dùng về các sản phẩm cụ thể mà họ đã mua. "
+"Nó bao gồm các thuộc tính để lưu trữ bình luận của người dùng, tham chiếu "
+"đến sản phẩm liên quan trong đơn hàng và đánh giá do người dùng gán. Lớp này "
+"sử dụng các trường cơ sở dữ liệu để mô hình hóa và quản lý dữ liệu phản hồi "
+"một cách hiệu quả."
-#: engine/core/models.py:1711
+#: engine/core/models.py:1817
msgid "user-provided comments about their experience with the product"
msgstr ""
"Những bình luận do người dùng cung cấp về trải nghiệm của họ với sản phẩm"
-#: engine/core/models.py:1712
+#: engine/core/models.py:1818
msgid "feedback comments"
msgstr "Phản hồi"
-#: engine/core/models.py:1719
-msgid ""
-"references the specific product in an order that this feedback is about"
+#: engine/core/models.py:1826
+msgid "references the specific product in an order that this feedback is about"
msgstr ""
"Tham chiếu đến sản phẩm cụ thể trong đơn hàng mà phản hồi này đề cập đến."
-#: engine/core/models.py:1720
+#: engine/core/models.py:1828
msgid "related order product"
msgstr "Sản phẩm liên quan đến đơn hàng"
-#: engine/core/models.py:1725
+#: engine/core/models.py:1833
msgid "user-assigned rating for the product"
msgstr "Đánh giá do người dùng gán cho sản phẩm"
-#: engine/core/models.py:1726
+#: engine/core/models.py:1834
msgid "product rating"
msgstr "Đánh giá sản phẩm"
-#: engine/core/models.py:1742
+#: engine/core/models.py:1854
msgid ""
"Represents products associated with orders and their attributes. The "
"OrderProduct model maintains information about a product that is part of an "
@@ -2652,132 +2658,132 @@ msgstr ""
"kỹ thuật số. Mô hình này tích hợp với các mô hình Order và Product và lưu "
"trữ tham chiếu đến chúng."
-#: engine/core/models.py:1757
+#: engine/core/models.py:1869
msgid "the price paid by the customer for this product at purchase time"
msgstr "Giá mà khách hàng phải trả cho sản phẩm này tại thời điểm mua hàng."
-#: engine/core/models.py:1758
+#: engine/core/models.py:1870
msgid "purchase price at order time"
msgstr "Giá mua tại thời điểm đặt hàng"
-#: engine/core/models.py:1763
+#: engine/core/models.py:1875
msgid "internal comments for admins about this ordered product"
msgstr "Nhận xét nội bộ dành cho quản trị viên về sản phẩm đã đặt hàng này"
-#: engine/core/models.py:1764
+#: engine/core/models.py:1876
msgid "internal comments"
msgstr "Nhận xét nội bộ"
-#: engine/core/models.py:1770
+#: engine/core/models.py:1882
msgid "user notifications"
msgstr "Thông báo cho người dùng"
-#: engine/core/models.py:1775
+#: engine/core/models.py:1887
msgid "json representation of this item's attributes"
msgstr "Đại diện JSON của các thuộc tính của mục này"
-#: engine/core/models.py:1776
+#: engine/core/models.py:1888
msgid "ordered product attributes"
msgstr "Thuộc tính sản phẩm đã đặt hàng"
-#: engine/core/models.py:1781
+#: engine/core/models.py:1893
msgid "reference to the parent order that contains this product"
msgstr "Tham chiếu đến đơn hàng chính chứa sản phẩm này."
-#: engine/core/models.py:1782
+#: engine/core/models.py:1894
msgid "parent order"
msgstr "Đơn đặt hàng của phụ huynh"
-#: engine/core/models.py:1791
+#: engine/core/models.py:1903
msgid "the specific product associated with this order line"
msgstr "Sản phẩm cụ thể liên quan đến dòng đơn hàng này"
-#: engine/core/models.py:1798
+#: engine/core/models.py:1910
msgid "quantity of this specific product in the order"
msgstr "Số lượng sản phẩm cụ thể này trong đơn hàng"
-#: engine/core/models.py:1799
+#: engine/core/models.py:1911
msgid "product quantity"
msgstr "Số lượng sản phẩm"
-#: engine/core/models.py:1806
+#: engine/core/models.py:1918
msgid "current status of this product in the order"
msgstr "Tình trạng hiện tại của sản phẩm này trong đơn hàng"
-#: engine/core/models.py:1807
+#: engine/core/models.py:1919
msgid "product line status"
msgstr "Tình trạng dòng sản phẩm"
-#: engine/core/models.py:1872
+#: engine/core/models.py:1986
msgid "order product must have an order"
msgstr "Sản phẩm đặt hàng phải có đơn hàng liên quan!"
-#: engine/core/models.py:1874
+#: engine/core/models.py:1988
#, python-brace-format
msgid "wrong action specified for feedback: {action}"
msgstr "Hành động sai được chỉ định cho phản hồi: {action}!"
-#: engine/core/models.py:1888
+#: engine/core/models.py:2005
msgid "you cannot feedback an order which is not received"
msgstr "Bạn không thể phản hồi đơn hàng mà bạn chưa nhận được."
-#: engine/core/models.py:1894
+#: engine/core/models.py:2014
msgid "name"
msgstr "Tên"
-#: engine/core/models.py:1895
+#: engine/core/models.py:2016
msgid "URL of the integration"
msgstr "Đường dẫn URL của tích hợp"
-#: engine/core/models.py:1896
+#: engine/core/models.py:2019
msgid "authentication credentials"
msgstr "Thông tin xác thực"
-#: engine/core/models.py:1918
+#: engine/core/models.py:2042
msgid "you can only have one default CRM provider"
msgstr "Bạn chỉ có thể có một nhà cung cấp CRM mặc định."
-#: engine/core/models.py:1928
+#: engine/core/models.py:2052
msgid "CRM"
msgstr "Hệ thống Quản lý Quan hệ Khách hàng"
-#: engine/core/models.py:1929
+#: engine/core/models.py:2053
msgid "CRMs"
msgstr "Hệ thống Quản lý Quan hệ Khách hàng (CR"
-#: engine/core/models.py:1941
+#: engine/core/models.py:2069
msgid "order CRM link"
msgstr "Liên kết CRM của đơn hàng"
-#: engine/core/models.py:1942
+#: engine/core/models.py:2070
msgid "orders CRM links"
msgstr "Liên kết CRM của đơn hàng"
-#: engine/core/models.py:1947
+#: engine/core/models.py:2075
msgid ""
"Represents the downloading functionality for digital assets associated with "
"orders. The DigitalAssetDownload class provides the ability to manage and "
"access downloads related to order products. It maintains information about "
-"the associated order product, the number of downloads, and whether the asset"
-" is publicly visible. It includes a method to generate a URL for downloading"
-" the asset when the associated order is in a completed status."
+"the associated order product, the number of downloads, and whether the asset "
+"is publicly visible. It includes a method to generate a URL for downloading "
+"the asset when the associated order is in a completed status."
msgstr ""
"Đại diện cho chức năng tải xuống các tài sản kỹ thuật số liên quan đến đơn "
-"hàng. Lớp DigitalAssetDownload cung cấp khả năng quản lý và truy cập các tệp"
-" tải xuống liên quan đến sản phẩm trong đơn hàng. Nó lưu trữ thông tin về "
-"sản phẩm trong đơn hàng liên quan, số lần tải xuống và liệu tài sản có hiển "
-"thị công khai hay không. Nó bao gồm một phương thức để tạo URL tải xuống tài"
-" sản khi đơn hàng liên quan ở trạng thái đã hoàn thành."
+"hàng. Lớp DigitalAssetDownload cung cấp khả năng quản lý và truy cập các tệp "
+"tải xuống liên quan đến sản phẩm trong đơn hàng. Nó lưu trữ thông tin về sản "
+"phẩm trong đơn hàng liên quan, số lần tải xuống và liệu tài sản có hiển thị "
+"công khai hay không. Nó bao gồm một phương thức để tạo URL tải xuống tài sản "
+"khi đơn hàng liên quan ở trạng thái đã hoàn thành."
-#: engine/core/models.py:1961
+#: engine/core/models.py:2091
msgid "download"
msgstr "Tải xuống"
-#: engine/core/models.py:1962
+#: engine/core/models.py:2092
msgid "downloads"
msgstr "Tải xuống"
-#: engine/core/serializers/utility.py:89
+#: engine/core/serializers/utility.py:91
msgid ""
"you must provide a comment, rating, and order product uuid to add feedback."
msgstr ""
@@ -2975,7 +2981,8 @@ msgstr "Xin chào %(order.user.first_name)s,"
#, python-format
msgid ""
"thank you for your order #%(order.pk)s! we are pleased to inform you that\n"
-" we have taken your order into work. below are the details of your\n"
+" we have taken your order into work. below are "
+"the details of your\n"
" order:"
msgstr ""
"Cảm ơn quý khách đã đặt hàng #%(order.pk)s! Chúng tôi vui mừng thông báo "
@@ -3004,8 +3011,8 @@ msgid ""
"if you have any questions, feel free to contact our support at\n"
" %(config.EMAIL_HOST_USER)s."
msgstr ""
-"Nếu bạn có bất kỳ câu hỏi nào, vui lòng liên hệ với bộ phận hỗ trợ của chúng"
-" tôi tại %(config.EMAIL_HOST_USER)s."
+"Nếu bạn có bất kỳ câu hỏi nào, vui lòng liên hệ với bộ phận hỗ trợ của chúng "
+"tôi tại %(config.EMAIL_HOST_USER)s."
#: engine/core/templates/digital_order_created_email.html:133
#, python-format
@@ -3055,8 +3062,8 @@ msgid ""
"if you have any questions, feel free to contact our support at\n"
" %(contact_email)s."
msgstr ""
-"Nếu bạn có bất kỳ câu hỏi nào, vui lòng liên hệ với bộ phận hỗ trợ của chúng"
-" tôi tại %(contact_email)s."
+"Nếu bạn có bất kỳ câu hỏi nào, vui lòng liên hệ với bộ phận hỗ trợ của chúng "
+"tôi tại %(contact_email)s."
#: engine/core/templates/digital_order_delivered_email.html:165
#: engine/core/templates/promocode_granted_email.html:108
@@ -3082,13 +3089,14 @@ msgid ""
"Thank you for staying with us! We have granted you with a promocode\n"
" for "
msgstr ""
-"Cảm ơn quý khách đã đồng hành cùng chúng tôi! Chúng tôi đã cấp cho quý khách"
-" một mã khuyến mãi cho"
+"Cảm ơn quý khách đã đồng hành cùng chúng tôi! Chúng tôi đã cấp cho quý khách "
+"một mã khuyến mãi cho"
#: engine/core/templates/shipped_order_created_email.html:101
#: engine/core/templates/shipped_order_delivered_email.html:101
msgid ""
-"thank you for your order! we are pleased to confirm your purchase. below are\n"
+"thank you for your order! we are pleased to confirm your purchase. below "
+"are\n"
" the details of your order:"
msgstr ""
"Cảm ơn quý khách đã đặt hàng! Chúng tôi rất vui được xác nhận đơn hàng của "
@@ -3117,11 +3125,11 @@ msgid ""
" reserved"
msgstr "Tất cả các quyền được bảo lưu."
-#: engine/core/utils/caching.py:44
+#: engine/core/utils/caching.py:48
msgid "both data and timeout are required"
msgstr "Cả dữ liệu và thời gian chờ đều là bắt buộc."
-#: engine/core/utils/caching.py:46
+#: engine/core/utils/caching.py:51
msgid "invalid timeout value, it must be between 0 and 216000 seconds"
msgstr ""
"Giá trị thời gian chờ không hợp lệ, nó phải nằm trong khoảng từ 0 đến "
@@ -3132,17 +3140,17 @@ msgstr ""
msgid "{settings.PROJECT_NAME} | contact us initiated"
msgstr "{settings.PROJECT_NAME} | Liên hệ với chúng tôi đã được khởi tạo"
-#: engine/core/utils/emailing.py:73
+#: engine/core/utils/emailing.py:81
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order confirmation"
msgstr "{settings.PROJECT_NAME} | Xác nhận đơn hàng"
-#: engine/core/utils/emailing.py:105
+#: engine/core/utils/emailing.py:115
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order delivered"
msgstr "{settings.PROJECT_NAME} | Đơn hàng đã được giao"
-#: engine/core/utils/emailing.py:188
+#: engine/core/utils/emailing.py:203
#, python-brace-format
msgid "{settings.PROJECT_NAME} | promocode granted"
msgstr "{settings.PROJECT_NAME} | mã khuyến mãi được cấp"
@@ -3155,13 +3163,13 @@ msgstr "Bạn không có quyền thực hiện hành động này."
msgid "NOMINATIM_URL must be configured."
msgstr "Tham số NOMINATIM_URL phải được cấu hình!"
-#: engine/core/validators.py:19
+#: engine/core/validators.py:21
#, python-brace-format
msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels"
msgstr ""
"Kích thước hình ảnh không được vượt quá w{max_width} x h{max_height} pixel!"
-#: engine/core/views.py:91
+#: engine/core/views.py:105
msgid ""
"Handles the request for the sitemap index and returns an XML response. It "
"ensures the response includes the appropriate content type header for XML."
@@ -3169,7 +3177,7 @@ msgstr ""
"Xử lý yêu cầu về sơ đồ trang web (sitemap index) và trả về phản hồi XML. Nó "
"đảm bảo rằng phản hồi bao gồm tiêu đề loại nội dung XML phù hợp."
-#: engine/core/views.py:106
+#: engine/core/views.py:120
msgid ""
"Handles the detailed view response for a sitemap. This function processes "
"the request, fetches the appropriate sitemap detail response, and sets the "
@@ -3179,17 +3187,17 @@ msgstr ""
"lấy phản hồi chi tiết phù hợp của sơ đồ trang web và đặt tiêu đề Content-"
"Type cho XML."
-#: engine/core/views.py:141
+#: engine/core/views.py:156
msgid ""
"Returns a list of supported languages and their corresponding information."
msgstr ""
"Trả về danh sách các ngôn ngữ được hỗ trợ và thông tin tương ứng của chúng."
-#: engine/core/views.py:173
+#: engine/core/views.py:183
msgid "Returns the parameters of the website as a JSON object."
msgstr "Trả về các tham số của trang web dưới dạng đối tượng JSON."
-#: engine/core/views.py:192
+#: engine/core/views.py:199
msgid ""
"Handles cache operations such as reading and setting cache data with a "
"specified key and timeout."
@@ -3197,96 +3205,98 @@ msgstr ""
"Xử lý các thao tác bộ nhớ đệm như đọc và ghi dữ liệu bộ nhớ đệm với khóa và "
"thời gian chờ được chỉ định."
-#: engine/core/views.py:219
+#: engine/core/views.py:221
msgid "Handles `contact us` form submissions."
msgstr "Xử lý các biểu mẫu liên hệ."
-#: engine/core/views.py:240
+#: engine/core/views.py:237
msgid ""
"Handles requests for processing and validating URLs from incoming POST "
"requests."
msgstr "Xử lý các yêu cầu xử lý và xác thực URL từ các yêu cầu POST đến."
-#: engine/core/views.py:280
+#: engine/core/views.py:274
msgid "Handles global search queries."
msgstr "Xử lý các truy vấn tìm kiếm toàn cầu."
-#: engine/core/views.py:295
+#: engine/core/views.py:290
msgid "Handles the logic of buying as a business without registration."
msgstr ""
-"Xử lý logic của việc mua hàng như một hoạt động kinh doanh mà không cần đăng"
-" ký."
+"Xử lý logic của việc mua hàng như một hoạt động kinh doanh mà không cần đăng "
+"ký."
-#: engine/core/views.py:332
+#: engine/core/views.py:338
msgid ""
"Handles the downloading of a digital asset associated with an order.\n"
-"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the digital asset file located in the "
+"storage directory of the project. If the file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
msgstr ""
"Xử lý việc tải xuống tài sản kỹ thuật số liên quan đến một đơn hàng. Chức "
-"năng này cố gắng cung cấp tệp tài sản kỹ thuật số được lưu trữ trong thư mục"
-" lưu trữ của dự án. Nếu tệp không được tìm thấy, một lỗi HTTP 404 sẽ được "
-"trả về để thông báo rằng tài nguyên không khả dụng."
+"năng này cố gắng cung cấp tệp tài sản kỹ thuật số được lưu trữ trong thư mục "
+"lưu trữ của dự án. Nếu tệp không được tìm thấy, một lỗi HTTP 404 sẽ được trả "
+"về để thông báo rằng tài nguyên không khả dụng."
-#: engine/core/views.py:343
+#: engine/core/views.py:349
msgid "order_product_uuid is required"
msgstr "order_product_uuid là trường bắt buộc."
-#: engine/core/views.py:350
+#: engine/core/views.py:356
msgid "order product does not exist"
msgstr "Sản phẩm không tồn tại"
-#: engine/core/views.py:353
+#: engine/core/views.py:359
msgid "you can only download the digital asset once"
msgstr "Bạn chỉ có thể tải xuống tài sản kỹ thuật số một lần."
-#: engine/core/views.py:356
+#: engine/core/views.py:363
msgid "the order must be paid before downloading the digital asset"
-msgstr ""
-"Đơn hàng phải được thanh toán trước khi tải xuống tài sản kỹ thuật số."
+msgstr "Đơn hàng phải được thanh toán trước khi tải xuống tài sản kỹ thuật số."
-#: engine/core/views.py:362
+#: engine/core/views.py:370
msgid "the order product does not have a product"
msgstr "Sản phẩm đặt hàng không có sản phẩm."
-#: engine/core/views.py:399
+#: engine/core/views.py:414
msgid "favicon not found"
msgstr "Biểu tượng trang web không tìm thấy"
-#: engine/core/views.py:404
+#: engine/core/views.py:419
msgid ""
"Handles requests for the favicon of a website.\n"
-"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
+"This function attempts to serve the favicon file located in the static "
+"directory of the project. If the favicon file is not found, an HTTP 404 "
+"error is raised to indicate the resource is unavailable."
msgstr ""
-"Xử lý yêu cầu về biểu tượng favicon của một trang web. Chức năng này cố gắng"
-" cung cấp tệp favicon nằm trong thư mục tĩnh của dự án. Nếu tệp favicon "
-"không được tìm thấy, một lỗi HTTP 404 sẽ được trả về để thông báo rằng tài "
-"nguyên không khả dụng."
+"Xử lý yêu cầu về biểu tượng favicon của một trang web. Chức năng này cố gắng "
+"cung cấp tệp favicon nằm trong thư mục tĩnh của dự án. Nếu tệp favicon không "
+"được tìm thấy, một lỗi HTTP 404 sẽ được trả về để thông báo rằng tài nguyên "
+"không khả dụng."
-#: engine/core/views.py:416
+#: engine/core/views.py:431
msgid ""
-"Redirects the request to the admin index page. The function handles incoming"
-" HTTP requests and redirects them to the Django admin interface index page. "
+"Redirects the request to the admin index page. The function handles incoming "
+"HTTP requests and redirects them to the Django admin interface index page. "
"It uses Django's `redirect` function for handling the HTTP redirection."
msgstr ""
-"Chuyển hướng yêu cầu đến trang chỉ mục quản trị. Chức năng này xử lý các yêu"
-" cầu HTTP đến và chuyển hướng chúng đến trang chỉ mục giao diện quản trị "
-"Django. Nó sử dụng hàm `redirect` của Django để xử lý việc chuyển hướng "
-"HTTP."
+"Chuyển hướng yêu cầu đến trang chỉ mục quản trị. Chức năng này xử lý các yêu "
+"cầu HTTP đến và chuyển hướng chúng đến trang chỉ mục giao diện quản trị "
+"Django. Nó sử dụng hàm `redirect` của Django để xử lý việc chuyển hướng HTTP."
-#: engine/core/views.py:429
+#: engine/core/views.py:443
msgid "Returns current version of the eVibes. "
msgstr "Trả về phiên bản hiện tại của eVibes."
-#: engine/core/views.py:623 engine/core/views.py:636
+#: engine/core/views.py:672 engine/core/views.py:687
#, python-format
msgid "Revenue & Orders (last %(days)d)"
msgstr "Doanh thu & Đơn hàng (lần cuối %(days)d)"
-#: engine/core/views.py:793
+#: engine/core/views.py:868
msgid "Returns custom variables for Dashboard. "
msgstr "Trả về các biến tùy chỉnh cho Bảng điều khiển."
-#: engine/core/viewsets.py:136
+#: engine/core/viewsets.py:139
msgid ""
"Defines a viewset for managing Evibes-related operations. The EvibesViewSet "
"class inherits from ModelViewSet and provides functionality for handling "
@@ -3300,21 +3310,20 @@ msgstr ""
"trợ cho các lớp serializer động dựa trên hành động hiện tại, quyền truy cập "
"có thể tùy chỉnh và các định dạng hiển thị."
-#: engine/core/viewsets.py:156
+#: engine/core/viewsets.py:160
msgid ""
-"Represents a viewset for managing AttributeGroup objects. Handles operations"
-" related to AttributeGroup, including filtering, serialization, and "
-"retrieval of data. This class is part of the application's API layer and "
-"provides a standardized way to process requests and responses for "
-"AttributeGroup data."
+"Represents a viewset for managing AttributeGroup objects. Handles operations "
+"related to AttributeGroup, including filtering, serialization, and retrieval "
+"of data. This class is part of the application's API layer and provides a "
+"standardized way to process requests and responses for AttributeGroup data."
msgstr ""
"Đại diện cho một tập hợp các đối tượng để quản lý các đối tượng "
"AttributeGroup. Xử lý các thao tác liên quan đến AttributeGroup, bao gồm "
-"lọc, serialization và truy xuất dữ liệu. Lớp này là một phần của lớp API của"
-" ứng dụng và cung cấp một cách chuẩn hóa để xử lý yêu cầu và phản hồi cho dữ"
-" liệu AttributeGroup."
+"lọc, serialization và truy xuất dữ liệu. Lớp này là một phần của lớp API của "
+"ứng dụng và cung cấp một cách chuẩn hóa để xử lý yêu cầu và phản hồi cho dữ "
+"liệu AttributeGroup."
-#: engine/core/viewsets.py:175
+#: engine/core/viewsets.py:179
msgid ""
"Handles operations related to Attribute objects within the application. "
"Provides a set of API endpoints to interact with Attribute data. This class "
@@ -3326,17 +3335,17 @@ msgstr ""
"Quản lý các thao tác liên quan đến các đối tượng thuộc tính (Attribute) "
"trong ứng dụng. Cung cấp một bộ các điểm cuối API để tương tác với dữ liệu "
"thuộc tính. Lớp này quản lý việc truy vấn, lọc và serialization của các đối "
-"tượng thuộc tính, cho phép kiểm soát động đối với dữ liệu được trả về, chẳng"
-" hạn như lọc theo các trường cụ thể hoặc lấy thông tin chi tiết so với thông"
-" tin đơn giản tùy thuộc vào yêu cầu."
+"tượng thuộc tính, cho phép kiểm soát động đối với dữ liệu được trả về, chẳng "
+"hạn như lọc theo các trường cụ thể hoặc lấy thông tin chi tiết so với thông "
+"tin đơn giản tùy thuộc vào yêu cầu."
-#: engine/core/viewsets.py:194
+#: engine/core/viewsets.py:198
msgid ""
"A viewset for managing AttributeValue objects. This viewset provides "
"functionality for listing, retrieving, creating, updating, and deleting "
"AttributeValue objects. It integrates with Django REST Framework's viewset "
-"mechanisms and uses appropriate serializers for different actions. Filtering"
-" capabilities are provided through the DjangoFilterBackend."
+"mechanisms and uses appropriate serializers for different actions. Filtering "
+"capabilities are provided through the DjangoFilterBackend."
msgstr ""
"Bộ xem (viewset) để quản lý các đối tượng AttributeValue. Bộ xem này cung "
"cấp các chức năng để liệt kê, truy xuất, tạo, cập nhật và xóa các đối tượng "
@@ -3344,7 +3353,7 @@ msgstr ""
"sử dụng các trình serializer phù hợp cho các hành động khác nhau. Khả năng "
"lọc được cung cấp thông qua DjangoFilterBackend."
-#: engine/core/viewsets.py:213
+#: engine/core/viewsets.py:217
msgid ""
"Manages views for Category-related operations. The CategoryViewSet class is "
"responsible for handling operations related to the Category model in the "
@@ -3358,7 +3367,7 @@ msgstr ""
"của các danh mục. Chế độ xem này cũng áp dụng các quyền truy cập để đảm bảo "
"chỉ những người dùng được ủy quyền mới có thể truy cập vào dữ liệu cụ thể."
-#: engine/core/viewsets.py:326
+#: engine/core/viewsets.py:346
msgid ""
"Represents a viewset for managing Brand instances. This class provides "
"functionality for querying, filtering, and serializing Brand objects. It "
@@ -3370,7 +3379,7 @@ msgstr ""
"thương hiệu. Nó sử dụng khung ViewSet của Django để đơn giản hóa việc triển "
"khai các điểm cuối API cho các đối tượng thương hiệu."
-#: engine/core/viewsets.py:438
+#: engine/core/viewsets.py:458
msgid ""
"Manages operations related to the `Product` model in the system. This class "
"provides a viewset for managing products, including their filtering, "
@@ -3388,7 +3397,7 @@ msgstr ""
"thức để lấy thông tin chi tiết về sản phẩm, áp dụng quyền truy cập và truy "
"cập phản hồi liên quan đến sản phẩm."
-#: engine/core/viewsets.py:574
+#: engine/core/viewsets.py:605
msgid ""
"Represents a viewset for managing Vendor objects. This viewset allows "
"fetching, filtering, and serializing Vendor data. It defines the queryset, "
@@ -3403,13 +3412,13 @@ msgstr ""
"khác nhau. Mục đích của lớp này là cung cấp truy cập thuận tiện đến các tài "
"nguyên liên quan đến Nhà cung cấp thông qua khung làm việc Django REST."
-#: engine/core/viewsets.py:594
+#: engine/core/viewsets.py:625
msgid ""
"Representation of a view set handling Feedback objects. This class manages "
"operations related to Feedback objects, including listing, filtering, and "
"retrieving details. The purpose of this view set is to provide different "
-"serializers for different actions and implement permission-based handling of"
-" accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
+"serializers for different actions and implement permission-based handling of "
+"accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
"use of Django's filtering system for querying data."
msgstr ""
"Đại diện cho tập hợp các đối tượng Feedback. Lớp này quản lý các thao tác "
@@ -3419,18 +3428,18 @@ msgstr ""
"với các đối tượng Feedback có thể truy cập. Nó kế thừa từ lớp cơ sở "
"`EvibesViewSet` và sử dụng hệ thống lọc của Django để truy vấn dữ liệu."
-#: engine/core/viewsets.py:621
+#: engine/core/viewsets.py:652
msgid ""
"ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes "
"various endpoints for handling order operations such as adding or removing "
-"products, performing purchases for registered as well as unregistered users,"
-" and retrieving the current authenticated user's pending orders. The ViewSet"
-" uses multiple serializers based on the specific action being performed and "
+"products, performing purchases for registered as well as unregistered users, "
+"and retrieving the current authenticated user's pending orders. The ViewSet "
+"uses multiple serializers based on the specific action being performed and "
"enforces permissions accordingly while interacting with order data."
msgstr ""
-"ViewSet để quản lý đơn hàng và các hoạt động liên quan. Lớp này cung cấp các"
-" chức năng để truy xuất, sửa đổi và quản lý các đối tượng đơn hàng. Nó bao "
+"ViewSet để quản lý đơn hàng và các hoạt động liên quan. Lớp này cung cấp các "
+"chức năng để truy xuất, sửa đổi và quản lý các đối tượng đơn hàng. Nó bao "
"gồm các điểm cuối (endpoint) khác nhau để xử lý các hoạt động liên quan đến "
"đơn hàng như thêm hoặc xóa sản phẩm, thực hiện giao dịch mua hàng cho cả "
"người dùng đã đăng ký và chưa đăng ký, cũng như truy xuất các đơn hàng đang "
@@ -3438,12 +3447,12 @@ msgstr ""
"serializer khác nhau tùy thuộc vào hành động cụ thể đang được thực hiện và "
"áp dụng quyền truy cập tương ứng khi tương tác với dữ liệu đơn hàng."
-#: engine/core/viewsets.py:825
+#: engine/core/viewsets.py:914
msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It "
-"includes filtering, permission checks, and serializer switching based on the"
-" requested action. Additionally, it provides a detailed action for handling "
+"includes filtering, permission checks, and serializer switching based on the "
+"requested action. Additionally, it provides a detailed action for handling "
"feedback on OrderProduct instances"
msgstr ""
"Cung cấp một bộ xem (viewset) để quản lý các thực thể OrderProduct. Bộ xem "
@@ -3453,11 +3462,11 @@ msgstr ""
"hành động được yêu cầu. Ngoài ra, nó cung cấp một hành động chi tiết để xử "
"lý phản hồi cho các thực thể OrderProduct."
-#: engine/core/viewsets.py:879
+#: engine/core/viewsets.py:974
msgid "Manages operations related to Product images in the application. "
msgstr "Quản lý các hoạt động liên quan đến hình ảnh sản phẩm trong ứng dụng."
-#: engine/core/viewsets.py:892
+#: engine/core/viewsets.py:988
msgid ""
"Manages the retrieval and handling of PromoCode instances through various "
"API actions."
@@ -3465,20 +3474,20 @@ msgstr ""
"Quản lý việc truy xuất và xử lý các thực thể PromoCode thông qua các hành "
"động API khác nhau."
-#: engine/core/viewsets.py:914
+#: engine/core/viewsets.py:1019
msgid "Represents a view set for managing promotions. "
msgstr "Đại diện cho một bộ xem để quản lý các chương trình khuyến mãi."
-#: engine/core/viewsets.py:927
+#: engine/core/viewsets.py:1032
msgid "Handles operations related to Stock data in the system."
msgstr "Quản lý các hoạt động liên quan đến dữ liệu kho trong hệ thống."
-#: engine/core/viewsets.py:941
+#: engine/core/viewsets.py:1046
msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the "
-"retrieval, modification, and customization of products within the wish list."
-" This ViewSet facilitates functionality such as adding, removing, and bulk "
+"retrieval, modification, and customization of products within the wish list. "
+"This ViewSet facilitates functionality such as adding, removing, and bulk "
"actions for wishlist products. Permission checks are integrated to ensure "
"that users can only manage their own wishlists unless explicit permissions "
"are granted."
@@ -3486,13 +3495,13 @@ msgstr ""
"Bộ công cụ ViewSet để quản lý các thao tác liên quan đến Danh sách mong "
"muốn. Bộ công cụ WishlistViewSet cung cấp các điểm cuối để tương tác với "
"danh sách mong muốn của người dùng, cho phép truy xuất, chỉnh sửa và tùy "
-"chỉnh các sản phẩm trong danh sách mong muốn. Bộ công cụ này hỗ trợ các chức"
-" năng như thêm, xóa và thực hiện các thao tác hàng loạt đối với các sản phẩm"
-" trong danh sách mong muốn. Các kiểm tra quyền truy cập được tích hợp để đảm"
-" bảo rằng người dùng chỉ có thể quản lý danh sách mong muốn của chính mình "
+"chỉnh các sản phẩm trong danh sách mong muốn. Bộ công cụ này hỗ trợ các chức "
+"năng như thêm, xóa và thực hiện các thao tác hàng loạt đối với các sản phẩm "
+"trong danh sách mong muốn. Các kiểm tra quyền truy cập được tích hợp để đảm "
+"bảo rằng người dùng chỉ có thể quản lý danh sách mong muốn của chính mình "
"trừ khi được cấp quyền rõ ràng."
-#: engine/core/viewsets.py:1056
+#: engine/core/viewsets.py:1183
msgid ""
"This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom "
@@ -3501,17 +3510,17 @@ msgid ""
"on the request context."
msgstr ""
"Lớp này cung cấp chức năng viewset để quản lý các đối tượng `Address`. Lớp "
-"AddressViewSet cho phép thực hiện các thao tác CRUD, lọc dữ liệu và các hành"
-" động tùy chỉnh liên quan đến các thực thể địa chỉ. Nó bao gồm các hành vi "
+"AddressViewSet cho phép thực hiện các thao tác CRUD, lọc dữ liệu và các hành "
+"động tùy chỉnh liên quan đến các thực thể địa chỉ. Nó bao gồm các hành vi "
"chuyên biệt cho các phương thức HTTP khác nhau, các tùy chỉnh serializer và "
"xử lý quyền truy cập dựa trên bối cảnh yêu cầu."
-#: engine/core/viewsets.py:1123
+#: engine/core/viewsets.py:1254
#, python-brace-format
msgid "Geocoding error: {e}"
msgstr "Lỗi địa chỉ địa lý: {e}"
-#: engine/core/viewsets.py:1131
+#: engine/core/viewsets.py:1262
msgid ""
"Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing "
@@ -3519,8 +3528,8 @@ msgid ""
"using the specified filter backend and dynamically uses different "
"serializers based on the action being performed."
msgstr ""
-"Xử lý các tác vụ liên quan đến Thẻ Sản phẩm trong ứng dụng. Lớp này cung cấp"
-" chức năng để truy xuất, lọc và serialize các đối tượng Thẻ Sản phẩm. Nó hỗ "
+"Xử lý các tác vụ liên quan đến Thẻ Sản phẩm trong ứng dụng. Lớp này cung cấp "
+"chức năng để truy xuất, lọc và serialize các đối tượng Thẻ Sản phẩm. Nó hỗ "
"trợ lọc linh hoạt trên các thuộc tính cụ thể bằng cách sử dụng backend lọc "
"được chỉ định và động sử dụng các serializer khác nhau tùy thuộc vào hành "
"động đang thực hiện."
diff --git a/engine/core/locale/zh_Hans/LC_MESSAGES/django.po b/engine/core/locale/zh_Hans/LC_MESSAGES/django.po
index 029c7292..00760be7 100644
--- a/engine/core/locale/zh_Hans/LC_MESSAGES/django.po
+++ b/engine/core/locale/zh_Hans/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 22:12+0300\n"
+"POT-Creation-Date: 2025-12-18 19:09+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -25,111 +25,111 @@ msgstr "唯一 ID 用于确定识别任何数据库对象"
msgid "is active"
msgstr "处于活动状态"
-#: engine/core/abstract.py:21
+#: engine/core/abstract.py:22
msgid ""
"if set to false, this object can't be seen by users without needed "
"permission"
msgstr "如果设置为 false,则没有必要权限的用户无法查看此对象"
-#: engine/core/abstract.py:23 engine/core/choices.py:18
+#: engine/core/abstract.py:26 engine/core/choices.py:18
msgid "created"
msgstr "创建"
-#: engine/core/abstract.py:23
+#: engine/core/abstract.py:26
msgid "when the object first appeared on the database"
msgstr "对象首次出现在数据库中的时间"
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "modified"
msgstr "改装"
-#: engine/core/abstract.py:24
+#: engine/core/abstract.py:29
msgid "when the object was last modified"
msgstr "对象最后一次编辑的时间"
-#: engine/core/admin.py:85
+#: engine/core/admin.py:94
msgid "translations"
msgstr "翻译"
-#: engine/core/admin.py:89
+#: engine/core/admin.py:102
msgid "general"
msgstr "一般情况"
-#: engine/core/admin.py:91
+#: engine/core/admin.py:106
msgid "relations"
msgstr "关系"
-#: engine/core/admin.py:93
+#: engine/core/admin.py:111
msgid "additional info"
msgstr "其他信息"
-#: engine/core/admin.py:111
+#: engine/core/admin.py:133
msgid "metadata"
msgstr "元数据"
-#: engine/core/admin.py:118
+#: engine/core/admin.py:141
msgid "timestamps"
msgstr "时间戳"
-#: engine/core/admin.py:133
+#: engine/core/admin.py:157
#, python-format
msgid "activate selected %(verbose_name_plural)s"
msgstr "激活选定的 %(verbose_name_plural)s"
-#: engine/core/admin.py:138
+#: engine/core/admin.py:165
msgid "selected items have been activated."
msgstr "所选项目已激活!"
-#: engine/core/admin.py:144
+#: engine/core/admin.py:173
#, python-format
msgid "deactivate selected %(verbose_name_plural)s"
msgstr "停用选定的 %(verbose_name_plural)s"
-#: engine/core/admin.py:149
+#: engine/core/admin.py:183
msgid "selected items have been deactivated."
msgstr "选定项目已停用!"
-#: engine/core/admin.py:160 engine/core/graphene/object_types.py:586
-#: engine/core/graphene/object_types.py:593 engine/core/models.py:801
-#: engine/core/models.py:809
+#: engine/core/admin.py:195 engine/core/graphene/object_types.py:650
+#: engine/core/graphene/object_types.py:657 engine/core/models.py:824
+#: engine/core/models.py:832
msgid "attribute value"
msgstr "属性值"
-#: engine/core/admin.py:161 engine/core/graphene/object_types.py:75
-#: engine/core/models.py:810
+#: engine/core/admin.py:196 engine/core/graphene/object_types.py:75
+#: engine/core/models.py:833
msgid "attribute values"
msgstr "属性值"
-#: engine/core/admin.py:172
+#: engine/core/admin.py:207
msgid "image"
msgstr "图片"
-#: engine/core/admin.py:173 engine/core/graphene/object_types.py:474
+#: engine/core/admin.py:208 engine/core/graphene/object_types.py:527
msgid "images"
msgstr "图片"
-#: engine/core/admin.py:184 engine/core/models.py:566
+#: engine/core/admin.py:219 engine/core/models.py:587
msgid "stock"
msgstr "库存"
-#: engine/core/admin.py:185 engine/core/graphene/object_types.py:640
+#: engine/core/admin.py:220 engine/core/graphene/object_types.py:710
msgid "stocks"
msgstr "股票"
-#: engine/core/admin.py:196 engine/core/models.py:1818
+#: engine/core/admin.py:231 engine/core/models.py:1930
msgid "order product"
msgstr "订购产品"
-#: engine/core/admin.py:197 engine/core/graphene/object_types.py:389
-#: engine/core/models.py:1819
+#: engine/core/admin.py:232 engine/core/graphene/object_types.py:438
+#: engine/core/models.py:1931
msgid "order products"
msgstr "订购产品"
-#: engine/core/admin.py:210 engine/core/admin.py:211
+#: engine/core/admin.py:250 engine/core/admin.py:251
msgid "children"
msgstr "儿童"
-#: engine/core/admin.py:977
+#: engine/core/admin.py:1059
msgid "Config"
msgstr "配置"
@@ -182,22 +182,22 @@ msgstr "时刻"
msgid "successful"
msgstr "成功"
-#: engine/core/docs/drf/views.py:31
+#: engine/core/docs/drf/views.py:30
msgid "OpenAPI schema in selected format with selected language"
msgstr "选定格式和语言的 OpenAPI 模式"
-#: engine/core/docs/drf/views.py:33
+#: engine/core/docs/drf/views.py:32
msgid ""
"OpenApi3 schema for this API. Format can be selected via content "
"negotiation. Language can be selected with Accept-Language and query "
"parameter both."
msgstr "该 API 的 OpenApi3 模式。可通过内容协商选择格式。可通过 Accept-Language 和查询参数选择语言。"
-#: engine/core/docs/drf/views.py:44 engine/core/graphene/mutations.py:37
+#: engine/core/docs/drf/views.py:43 engine/core/graphene/mutations.py:37
msgid "cache I/O"
msgstr "缓存输入/输出"
-#: engine/core/docs/drf/views.py:46
+#: engine/core/docs/drf/views.py:45
msgid ""
"apply only a key to read permitted data from cache.\n"
"apply key, data and timeout with authentication to write data to cache."
@@ -205,167 +205,167 @@ msgstr ""
"仅使用密钥从缓存中读取允许的数据。\n"
"应用密钥、数据和带验证的超时,将数据写入缓存。"
-#: engine/core/docs/drf/views.py:62
+#: engine/core/docs/drf/views.py:63
msgid "get a list of supported languages"
msgstr "获取支持的语言列表"
-#: engine/core/docs/drf/views.py:74
+#: engine/core/docs/drf/views.py:75
msgid "get application's exposable parameters"
msgstr "获取应用程序的可公开参数"
-#: engine/core/docs/drf/views.py:84
+#: engine/core/docs/drf/views.py:89
msgid "send a message to the support team"
msgstr "向支持团队发送信息"
-#: engine/core/docs/drf/views.py:98 engine/core/graphene/mutations.py:57
+#: engine/core/docs/drf/views.py:103 engine/core/graphene/mutations.py:59
msgid "request a CORSed URL"
msgstr "请求 CORSed URL。只允许使用 https。"
-#: engine/core/docs/drf/views.py:112
+#: engine/core/docs/drf/views.py:119
msgid "Search between products, categories and brands"
msgstr "在产品、类别和品牌之间进行搜索"
-#: engine/core/docs/drf/views.py:130
+#: engine/core/docs/drf/views.py:141
msgid "global search endpoint to query across project's tables"
msgstr "全局搜索端点可跨项目表格进行查询"
-#: engine/core/docs/drf/views.py:139
+#: engine/core/docs/drf/views.py:150
msgid "purchase an order as a business"
msgstr "以企业身份购买订单"
-#: engine/core/docs/drf/views.py:146
+#: engine/core/docs/drf/views.py:158
msgid ""
"purchase an order as a business, using the provided `products` with "
"`product_uuid` and `attributes`."
msgstr "使用提供的带有 `product_uuid` 和 `attributes` 的 `products` 作为企业购买订单。"
-#: engine/core/docs/drf/views.py:164
+#: engine/core/docs/drf/views.py:177
msgid "download a digital asset from purchased digital order"
msgstr "从购买的数字订单中下载数字资产"
-#: engine/core/docs/drf/viewsets.py:61
+#: engine/core/docs/drf/viewsets.py:65
msgid "list all attribute groups (simple view)"
msgstr "列出所有属性组(简单视图)"
-#: engine/core/docs/drf/viewsets.py:68
+#: engine/core/docs/drf/viewsets.py:75
msgid "retrieve a single attribute group (detailed view)"
msgstr "检索单个属性组(详细视图)"
-#: engine/core/docs/drf/viewsets.py:75
+#: engine/core/docs/drf/viewsets.py:82
msgid "create an attribute group"
msgstr "创建属性组"
-#: engine/core/docs/drf/viewsets.py:82
+#: engine/core/docs/drf/viewsets.py:92
msgid "delete an attribute group"
msgstr "删除属性组"
-#: engine/core/docs/drf/viewsets.py:89
+#: engine/core/docs/drf/viewsets.py:99
msgid "rewrite an existing attribute group saving non-editables"
msgstr "重写保存不可编辑的现有属性组"
-#: engine/core/docs/drf/viewsets.py:96
+#: engine/core/docs/drf/viewsets.py:107
msgid ""
"rewrite some fields of an existing attribute group saving non-editables"
msgstr "重写现有属性组的某些字段,保存不可编辑的内容"
-#: engine/core/docs/drf/viewsets.py:106
+#: engine/core/docs/drf/viewsets.py:118
msgid "list all attributes (simple view)"
msgstr "列出所有属性(简单视图)"
-#: engine/core/docs/drf/viewsets.py:113
+#: engine/core/docs/drf/viewsets.py:128
msgid "retrieve a single attribute (detailed view)"
msgstr "检索单个属性(详细视图)"
-#: engine/core/docs/drf/viewsets.py:120
+#: engine/core/docs/drf/viewsets.py:135
msgid "create an attribute"
msgstr "创建属性"
-#: engine/core/docs/drf/viewsets.py:127
+#: engine/core/docs/drf/viewsets.py:142
msgid "delete an attribute"
msgstr "删除属性"
-#: engine/core/docs/drf/viewsets.py:134
+#: engine/core/docs/drf/viewsets.py:149
msgid "rewrite an existing attribute saving non-editables"
msgstr "重写现有属性,保存不可编辑属性"
-#: engine/core/docs/drf/viewsets.py:141
+#: engine/core/docs/drf/viewsets.py:156
msgid "rewrite some fields of an existing attribute saving non-editables"
msgstr "重写现有属性的某些字段,保存不可编辑的内容"
-#: engine/core/docs/drf/viewsets.py:151
+#: engine/core/docs/drf/viewsets.py:166
msgid "list all attribute values (simple view)"
msgstr "列出所有属性值(简单视图)"
-#: engine/core/docs/drf/viewsets.py:158
+#: engine/core/docs/drf/viewsets.py:176
msgid "retrieve a single attribute value (detailed view)"
msgstr "读取单个属性值(详细视图)"
-#: engine/core/docs/drf/viewsets.py:165
+#: engine/core/docs/drf/viewsets.py:183
msgid "create an attribute value"
msgstr "创建属性值"
-#: engine/core/docs/drf/viewsets.py:172
+#: engine/core/docs/drf/viewsets.py:193
msgid "delete an attribute value"
msgstr "删除属性值"
-#: engine/core/docs/drf/viewsets.py:179
+#: engine/core/docs/drf/viewsets.py:200
msgid "rewrite an existing attribute value saving non-editables"
msgstr "重写现有属性值,保存不可编辑属性"
-#: engine/core/docs/drf/viewsets.py:186
+#: engine/core/docs/drf/viewsets.py:208
msgid ""
"rewrite some fields of an existing attribute value saving non-editables"
msgstr "重写现有属性值的某些字段,保存不可编辑的属性值"
-#: engine/core/docs/drf/viewsets.py:196 engine/core/docs/drf/viewsets.py:197
+#: engine/core/docs/drf/viewsets.py:219 engine/core/docs/drf/viewsets.py:220
msgid "list all categories (simple view)"
msgstr "列出所有类别(简单视图)"
-#: engine/core/docs/drf/viewsets.py:204 engine/core/docs/drf/viewsets.py:205
+#: engine/core/docs/drf/viewsets.py:230 engine/core/docs/drf/viewsets.py:231
msgid "retrieve a single category (detailed view)"
msgstr "检索单个类别(详细视图)"
-#: engine/core/docs/drf/viewsets.py:210 engine/core/docs/drf/viewsets.py:258
+#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:286
msgid "Category UUID or slug"
msgstr "类别 UUID 或标签"
-#: engine/core/docs/drf/viewsets.py:220 engine/core/docs/drf/viewsets.py:221
+#: engine/core/docs/drf/viewsets.py:246 engine/core/docs/drf/viewsets.py:247
msgid "create a category"
msgstr "创建类别"
-#: engine/core/docs/drf/viewsets.py:228 engine/core/docs/drf/viewsets.py:229
+#: engine/core/docs/drf/viewsets.py:254 engine/core/docs/drf/viewsets.py:255
msgid "delete a category"
msgstr "删除类别"
-#: engine/core/docs/drf/viewsets.py:236 engine/core/docs/drf/viewsets.py:237
+#: engine/core/docs/drf/viewsets.py:262 engine/core/docs/drf/viewsets.py:263
msgid "rewrite an existing category saving non-editables"
msgstr "重写现有类别,保存不可编辑内容"
-#: engine/core/docs/drf/viewsets.py:244 engine/core/docs/drf/viewsets.py:245
+#: engine/core/docs/drf/viewsets.py:270 engine/core/docs/drf/viewsets.py:272
msgid "rewrite some fields of an existing category saving non-editables"
msgstr "重写现有类别的某些字段,保存不可编辑内容"
-#: engine/core/docs/drf/viewsets.py:252 engine/core/docs/drf/viewsets.py:704
-#: engine/core/docs/drf/viewsets.py:988
+#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:1046
#: engine/core/graphene/object_types.py:117
-#: engine/core/graphene/object_types.py:207
-#: engine/core/graphene/object_types.py:482
+#: engine/core/graphene/object_types.py:236
+#: engine/core/graphene/object_types.py:537
msgid "SEO Meta snapshot"
msgstr "搜索引擎优化元快照"
-#: engine/core/docs/drf/viewsets.py:253
+#: engine/core/docs/drf/viewsets.py:281
msgid "returns a snapshot of the category's SEO meta data"
msgstr "返回类别的搜索引擎优化元数据快照"
-#: engine/core/docs/drf/viewsets.py:274
+#: engine/core/docs/drf/viewsets.py:302
msgid "list all orders (simple view)"
msgstr "列出所有类别(简单视图)"
-#: engine/core/docs/drf/viewsets.py:275
+#: engine/core/docs/drf/viewsets.py:303
msgid "for non-staff users, only their own orders are returned."
msgstr "对于非工作人员用户,只有他们自己的订单才会被退回。"
-#: engine/core/docs/drf/viewsets.py:281
+#: engine/core/docs/drf/viewsets.py:309
msgid ""
"Case-insensitive substring search across human_readable_id, "
"order_products.product.name, and order_products.product.partnumber"
@@ -373,35 +373,35 @@ msgstr ""
"在 human_readable_id、order_products.product.name 和 "
"order_products.product.partnumber 中进行不区分大小写的子串搜索"
-#: engine/core/docs/drf/viewsets.py:288
+#: engine/core/docs/drf/viewsets.py:316
msgid "Filter orders with buy_time >= this ISO 8601 datetime"
msgstr "过滤买入时间 >= 此 ISO 8601 日期的订单"
-#: engine/core/docs/drf/viewsets.py:293
+#: engine/core/docs/drf/viewsets.py:321
msgid "Filter orders with buy_time <= this ISO 8601 datetime"
msgstr "过滤买入时间 <= 此 ISO 8601 日期的订单"
-#: engine/core/docs/drf/viewsets.py:298
+#: engine/core/docs/drf/viewsets.py:326
msgid "Filter by exact order UUID"
msgstr "按准确订单 UUID 筛选"
-#: engine/core/docs/drf/viewsets.py:303
+#: engine/core/docs/drf/viewsets.py:331
msgid "Filter by exact human-readable order ID"
msgstr "根据准确的人工可读订单 ID 进行筛选"
-#: engine/core/docs/drf/viewsets.py:308
+#: engine/core/docs/drf/viewsets.py:336
msgid "Filter by user's email (case-insensitive exact match)"
msgstr "按用户电子邮件过滤(不区分大小写精确匹配)"
-#: engine/core/docs/drf/viewsets.py:313
+#: engine/core/docs/drf/viewsets.py:341
msgid "Filter by user's UUID"
msgstr "按用户的 UUID 筛选"
-#: engine/core/docs/drf/viewsets.py:318
+#: engine/core/docs/drf/viewsets.py:347
msgid "Filter by order status (case-insensitive substring match)"
msgstr "按订单状态筛选(不区分大小写的子串匹配)"
-#: engine/core/docs/drf/viewsets.py:324
+#: engine/core/docs/drf/viewsets.py:354
msgid ""
"Order by one of: uuid, human_readable_id, user_email, user, status, created,"
" modified, buy_time, random. Prefix with '-' for descending (e.g. "
@@ -409,175 +409,175 @@ msgid ""
msgstr ""
"按以下一项排序:uuid、human_readable_id、user_email、user、status、created、modified、buy_time、random。前缀\"-\"表示降序(例如\"-buy_time\")。"
-#: engine/core/docs/drf/viewsets.py:336
+#: engine/core/docs/drf/viewsets.py:366
msgid "retrieve a single order (detailed view)"
msgstr "检索单个类别(详细视图)"
-#: engine/core/docs/drf/viewsets.py:341
+#: engine/core/docs/drf/viewsets.py:371
msgid "Order UUID or human-readable id"
msgstr "订单 UUID 或人类可读 ID"
-#: engine/core/docs/drf/viewsets.py:351
+#: engine/core/docs/drf/viewsets.py:381
msgid "create an order"
msgstr "创建属性"
-#: engine/core/docs/drf/viewsets.py:352
+#: engine/core/docs/drf/viewsets.py:382
msgid "doesn't work for non-staff users."
msgstr "不适用于非工作人员用户。"
-#: engine/core/docs/drf/viewsets.py:359
+#: engine/core/docs/drf/viewsets.py:389
msgid "delete an order"
msgstr "删除属性"
-#: engine/core/docs/drf/viewsets.py:366
+#: engine/core/docs/drf/viewsets.py:396
msgid "rewrite an existing order saving non-editables"
msgstr "重写现有类别,保存不可编辑内容"
-#: engine/core/docs/drf/viewsets.py:373
+#: engine/core/docs/drf/viewsets.py:403
msgid "rewrite some fields of an existing order saving non-editables"
msgstr "重写现有类别的某些字段,保存不可编辑内容"
-#: engine/core/docs/drf/viewsets.py:380
+#: engine/core/docs/drf/viewsets.py:410
msgid "purchase an order"
msgstr "订购时的购买价格"
-#: engine/core/docs/drf/viewsets.py:382
+#: engine/core/docs/drf/viewsets.py:412
msgid ""
"finalizes the order purchase. if `force_balance` is used, the purchase is "
"completed using the user's balance; if `force_payment` is used, a "
"transaction is initiated."
msgstr "完成订单购买。如果使用 \"force_balance\",则使用用户的余额完成购买;如果使用 \"force_payment\",则启动交易。"
-#: engine/core/docs/drf/viewsets.py:397
+#: engine/core/docs/drf/viewsets.py:427
msgid "retrieve current pending order of a user"
msgstr "检索用户当前的挂单"
-#: engine/core/docs/drf/viewsets.py:398
+#: engine/core/docs/drf/viewsets.py:428
msgid "retrieves a current pending order of an authenticated user"
msgstr "检索已验证用户的当前待处理订单"
-#: engine/core/docs/drf/viewsets.py:408 engine/core/graphene/mutations.py:334
+#: engine/core/docs/drf/viewsets.py:438 engine/core/graphene/mutations.py:354
msgid "purchase an order without account creation"
msgstr "无需创建账户即可购买订单"
-#: engine/core/docs/drf/viewsets.py:409
+#: engine/core/docs/drf/viewsets.py:439
msgid "finalizes the order purchase for a non-registered user."
msgstr "完成非注册用户的订单购买。"
-#: engine/core/docs/drf/viewsets.py:420
+#: engine/core/docs/drf/viewsets.py:450
msgid "add product to order"
msgstr "在订单中添加产品"
-#: engine/core/docs/drf/viewsets.py:421
+#: engine/core/docs/drf/viewsets.py:452
msgid ""
"adds a product to an order using the provided `product_uuid` and "
"`attributes`."
msgstr "使用提供的 `product_uuid` 和 `attributes` 将产品添加到订单中。"
-#: engine/core/docs/drf/viewsets.py:429
+#: engine/core/docs/drf/viewsets.py:461
msgid "add a list of products to order, quantities will not count"
msgstr "添加要订购的产品列表,不计算数量"
-#: engine/core/docs/drf/viewsets.py:430
+#: engine/core/docs/drf/viewsets.py:463
msgid ""
"adds a list of products to an order using the provided `product_uuid` and "
"`attributes`."
msgstr "使用提供的 `product_uuid` 和 `attributes` 将产品列表添加到订单中。"
-#: engine/core/docs/drf/viewsets.py:438
+#: engine/core/docs/drf/viewsets.py:472
msgid "remove product from order"
msgstr "从订单中删除产品"
-#: engine/core/docs/drf/viewsets.py:439
+#: engine/core/docs/drf/viewsets.py:474
msgid ""
"removes a product from an order using the provided `product_uuid` and "
"`attributes`."
msgstr "使用提供的 `product_uuid` 和 `attributes` 从订单中删除产品。"
-#: engine/core/docs/drf/viewsets.py:447
+#: engine/core/docs/drf/viewsets.py:483
msgid "remove product from order, quantities will not count"
msgstr "从订单中删除产品,不计算数量"
-#: engine/core/docs/drf/viewsets.py:448
+#: engine/core/docs/drf/viewsets.py:485
msgid ""
"removes a list of products from an order using the provided `product_uuid` "
"and `attributes`"
msgstr "使用提供的 `product_uuid` 和 `attributes` 从订单中删除产品列表。"
-#: engine/core/docs/drf/viewsets.py:459
+#: engine/core/docs/drf/viewsets.py:497
msgid "list all wishlists (simple view)"
msgstr "列出所有属性(简单视图)"
-#: engine/core/docs/drf/viewsets.py:460
+#: engine/core/docs/drf/viewsets.py:498
msgid "for non-staff users, only their own wishlists are returned."
msgstr "对于非工作人员用户,只返回他们自己的愿望清单。"
-#: engine/core/docs/drf/viewsets.py:467
+#: engine/core/docs/drf/viewsets.py:508
msgid "retrieve a single wishlist (detailed view)"
msgstr "检索单个属性(详细视图)"
-#: engine/core/docs/drf/viewsets.py:474
+#: engine/core/docs/drf/viewsets.py:515
msgid "create an wishlist"
msgstr "创建属性"
-#: engine/core/docs/drf/viewsets.py:475
+#: engine/core/docs/drf/viewsets.py:516
msgid "Doesn't work for non-staff users."
msgstr "不适用于非工作人员用户。"
-#: engine/core/docs/drf/viewsets.py:482
+#: engine/core/docs/drf/viewsets.py:523
msgid "delete an wishlist"
msgstr "删除属性"
-#: engine/core/docs/drf/viewsets.py:489
+#: engine/core/docs/drf/viewsets.py:530
msgid "rewrite an existing wishlist saving non-editables"
msgstr "重写现有属性,保存不可编辑属性"
-#: engine/core/docs/drf/viewsets.py:496
+#: engine/core/docs/drf/viewsets.py:537
msgid "rewrite some fields of an existing wishlist saving non-editables"
msgstr "重写现有属性的某些字段,保存不可编辑的内容"
-#: engine/core/docs/drf/viewsets.py:503
+#: engine/core/docs/drf/viewsets.py:544
msgid "retrieve current pending wishlist of a user"
msgstr "检索用户当前待处理的心愿单"
-#: engine/core/docs/drf/viewsets.py:504
+#: engine/core/docs/drf/viewsets.py:545
msgid "retrieves a current pending wishlist of an authenticated user"
msgstr "检索已通过身份验证用户的当前待处理愿望清单"
-#: engine/core/docs/drf/viewsets.py:514
+#: engine/core/docs/drf/viewsets.py:555
msgid "add product to wishlist"
msgstr "在订单中添加产品"
-#: engine/core/docs/drf/viewsets.py:515
+#: engine/core/docs/drf/viewsets.py:557
msgid "adds a product to an wishlist using the provided `product_uuid`"
msgstr "使用提供的 `product_uuid` 将产品添加到愿望清单中"
-#: engine/core/docs/drf/viewsets.py:523
+#: engine/core/docs/drf/viewsets.py:566
msgid "remove product from wishlist"
msgstr "从愿望清单中删除产品"
-#: engine/core/docs/drf/viewsets.py:524
+#: engine/core/docs/drf/viewsets.py:568
msgid "removes a product from an wishlist using the provided `product_uuid`"
msgstr "使用提供的 `product_uuid` 从愿望清单中删除产品"
-#: engine/core/docs/drf/viewsets.py:532
+#: engine/core/docs/drf/viewsets.py:577
msgid "add many products to wishlist"
msgstr "将许多产品添加到愿望清单"
-#: engine/core/docs/drf/viewsets.py:533
+#: engine/core/docs/drf/viewsets.py:579
msgid "adds many products to an wishlist using the provided `product_uuids`"
msgstr "使用提供的 `product_uuids` 将许多产品添加到愿望清单中"
-#: engine/core/docs/drf/viewsets.py:541
+#: engine/core/docs/drf/viewsets.py:588
msgid "remove many products from wishlist"
msgstr "从订单中删除产品"
-#: engine/core/docs/drf/viewsets.py:542
+#: engine/core/docs/drf/viewsets.py:590
msgid ""
"removes many products from an wishlist using the provided `product_uuids`"
msgstr "使用提供的 `product_uuids` 从愿望清单中删除多个产品"
-#: engine/core/docs/drf/viewsets.py:549
+#: engine/core/docs/drf/viewsets.py:598
msgid ""
"Filter by one or more attribute name/value pairs. \n"
"• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n"
@@ -597,15 +597,15 @@ msgstr ""
"color=exact-red`、`size=gt-10`、`features=in-[\"wifi\"、\"bluetooth\"]`、\n"
"`b64-description=icontains-aGVhdC1jb2xk`."
-#: engine/core/docs/drf/viewsets.py:568 engine/core/docs/drf/viewsets.py:569
+#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
msgid "list all products (simple view)"
msgstr "列出所有产品(简单视图)"
-#: engine/core/docs/drf/viewsets.py:574
+#: engine/core/docs/drf/viewsets.py:623
msgid "(exact) Product UUID"
msgstr "(产品 UUID"
-#: engine/core/docs/drf/viewsets.py:581
+#: engine/core/docs/drf/viewsets.py:630
msgid ""
"Comma-separated list of fields to sort by. Prefix with `-` for descending. \n"
"**Allowed:** uuid, rating, name, slug, created, modified, price, random"
@@ -613,577 +613,577 @@ msgstr ""
"用逗号分隔的要排序的字段列表。前缀为 `-` 表示降序。 \n"
"**允许:** uuid、评分、名称、标签、创建、修改、价格、随机"
-#: engine/core/docs/drf/viewsets.py:598 engine/core/docs/drf/viewsets.py:599
+#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
msgid "retrieve a single product (detailed view)"
msgstr "检索单个产品(详细视图)"
-#: engine/core/docs/drf/viewsets.py:604 engine/core/docs/drf/viewsets.py:634
-#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:672
-#: engine/core/docs/drf/viewsets.py:691 engine/core/docs/drf/viewsets.py:710
+#: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683
+#: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725
+#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763
msgid "Product UUID or slug"
msgstr "产品 UUID 或 Slug"
-#: engine/core/docs/drf/viewsets.py:617 engine/core/docs/drf/viewsets.py:618
+#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
#: engine/core/graphene/dashboard_mutations/product.py:80
#: engine/core/graphene/dashboard_mutations/product.py:118
#: engine/core/graphene/dashboard_mutations/product.py:166
msgid "create a product"
msgstr "创建产品"
-#: engine/core/docs/drf/viewsets.py:628 engine/core/docs/drf/viewsets.py:629
+#: engine/core/docs/drf/viewsets.py:677 engine/core/docs/drf/viewsets.py:678
msgid "rewrite an existing product, preserving non-editable fields"
msgstr "重写现有产品,保留不可编辑字段"
-#: engine/core/docs/drf/viewsets.py:647 engine/core/docs/drf/viewsets.py:648
+#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:700
msgid ""
"update some fields of an existing product, preserving non-editable fields"
msgstr "更新现有产品的某些字段,保留不可编辑的字段"
-#: engine/core/docs/drf/viewsets.py:666 engine/core/docs/drf/viewsets.py:667
+#: engine/core/docs/drf/viewsets.py:719 engine/core/docs/drf/viewsets.py:720
msgid "delete a product"
msgstr "删除产品"
-#: engine/core/docs/drf/viewsets.py:685 engine/core/docs/drf/viewsets.py:686
+#: engine/core/docs/drf/viewsets.py:738 engine/core/docs/drf/viewsets.py:739
msgid "lists all permitted feedbacks for a product"
msgstr "列出产品的所有允许反馈"
-#: engine/core/docs/drf/viewsets.py:705
+#: engine/core/docs/drf/viewsets.py:758
msgid "returns a snapshot of the product's SEO meta data"
msgstr "返回产品的搜索引擎优化元数据快照"
-#: engine/core/docs/drf/viewsets.py:726
+#: engine/core/docs/drf/viewsets.py:779
msgid "list all addresses"
msgstr "列出所有地址"
-#: engine/core/docs/drf/viewsets.py:736
+#: engine/core/docs/drf/viewsets.py:789
msgid "retrieve a single address"
msgstr "检索单个地址"
-#: engine/core/docs/drf/viewsets.py:746
+#: engine/core/docs/drf/viewsets.py:799
msgid "create a new address"
msgstr "创建新地址"
-#: engine/core/docs/drf/viewsets.py:757
+#: engine/core/docs/drf/viewsets.py:810
msgid "delete an address"
msgstr "删除地址"
-#: engine/core/docs/drf/viewsets.py:767
+#: engine/core/docs/drf/viewsets.py:820
msgid "update an entire address"
msgstr "更新整个地址"
-#: engine/core/docs/drf/viewsets.py:778
+#: engine/core/docs/drf/viewsets.py:831
msgid "partially update an address"
msgstr "部分更新地址"
-#: engine/core/docs/drf/viewsets.py:789
+#: engine/core/docs/drf/viewsets.py:842
msgid "autocomplete address suggestions"
msgstr "自动完成地址输入"
-#: engine/core/docs/drf/viewsets.py:794
+#: engine/core/docs/drf/viewsets.py:848
msgid "raw data query string, please append with data from geo-IP endpoint"
msgstr "原始数据查询字符串,请附加来自地理 IP 端点的数据"
-#: engine/core/docs/drf/viewsets.py:800
+#: engine/core/docs/drf/viewsets.py:855
msgid "limit the results amount, 1 < limit < 10, default: 5"
msgstr "限制结果数量,1 < limit < 10,默认:5"
-#: engine/core/docs/drf/viewsets.py:816
+#: engine/core/docs/drf/viewsets.py:871
msgid "list all feedbacks (simple view)"
msgstr "列出所有反馈(简单视图)"
-#: engine/core/docs/drf/viewsets.py:823
+#: engine/core/docs/drf/viewsets.py:881
msgid "retrieve a single feedback (detailed view)"
msgstr "检索单个反馈(详细视图)"
-#: engine/core/docs/drf/viewsets.py:830
+#: engine/core/docs/drf/viewsets.py:888
msgid "create a feedback"
msgstr "创建反馈"
-#: engine/core/docs/drf/viewsets.py:837
+#: engine/core/docs/drf/viewsets.py:895
msgid "delete a feedback"
msgstr "删除反馈"
-#: engine/core/docs/drf/viewsets.py:844
+#: engine/core/docs/drf/viewsets.py:902
msgid "rewrite an existing feedback saving non-editables"
msgstr "重写现有的反馈,保存不可编辑的内容"
-#: engine/core/docs/drf/viewsets.py:851
+#: engine/core/docs/drf/viewsets.py:909
msgid "rewrite some fields of an existing feedback saving non-editables"
msgstr "重写现有反馈的某些字段,保存不可编辑的内容"
-#: engine/core/docs/drf/viewsets.py:861
+#: engine/core/docs/drf/viewsets.py:919
msgid "list all order–product relations (simple view)"
msgstr "列出所有订单-产品关系(简单视图)"
-#: engine/core/docs/drf/viewsets.py:871
+#: engine/core/docs/drf/viewsets.py:929
msgid "retrieve a single order–product relation (detailed view)"
msgstr "检索单一订单-产品关系(详细视图)"
-#: engine/core/docs/drf/viewsets.py:881
+#: engine/core/docs/drf/viewsets.py:939
msgid "create a new order–product relation"
msgstr "创建新的订单-产品关系"
-#: engine/core/docs/drf/viewsets.py:891
+#: engine/core/docs/drf/viewsets.py:949
msgid "replace an existing order–product relation"
msgstr "替换现有的订单-产品关系"
-#: engine/core/docs/drf/viewsets.py:901
+#: engine/core/docs/drf/viewsets.py:959
msgid "partially update an existing order–product relation"
msgstr "部分更新现有的订单-产品关系"
-#: engine/core/docs/drf/viewsets.py:911
+#: engine/core/docs/drf/viewsets.py:969
msgid "delete an order–product relation"
msgstr "删除订单-产品关系"
-#: engine/core/docs/drf/viewsets.py:921
+#: engine/core/docs/drf/viewsets.py:979
msgid "add or remove feedback on an order–product relation"
msgstr "添加或删除订单与产品关系中的反馈信息"
-#: engine/core/docs/drf/viewsets.py:938
+#: engine/core/docs/drf/viewsets.py:996
msgid "list all brands (simple view)"
msgstr "列出所有品牌(简单视图)"
-#: engine/core/docs/drf/viewsets.py:945
+#: engine/core/docs/drf/viewsets.py:1003
msgid "retrieve a single brand (detailed view)"
msgstr "检索单一品牌(详细视图)"
-#: engine/core/docs/drf/viewsets.py:950 engine/core/docs/drf/viewsets.py:993
+#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051
msgid "Brand UUID or slug"
msgstr "品牌 UUID 或标签"
-#: engine/core/docs/drf/viewsets.py:960
+#: engine/core/docs/drf/viewsets.py:1018
msgid "create a brand"
msgstr "创建品牌"
-#: engine/core/docs/drf/viewsets.py:967
+#: engine/core/docs/drf/viewsets.py:1025
msgid "delete a brand"
msgstr "删除品牌"
-#: engine/core/docs/drf/viewsets.py:974
+#: engine/core/docs/drf/viewsets.py:1032
msgid "rewrite an existing brand saving non-editables"
msgstr "重写现有品牌,节省非编辑材料"
-#: engine/core/docs/drf/viewsets.py:981
+#: engine/core/docs/drf/viewsets.py:1039
msgid "rewrite some fields of an existing brand saving non-editables"
msgstr "重写现有品牌的某些字段,保存不可编辑字段"
-#: engine/core/docs/drf/viewsets.py:1006
+#: engine/core/docs/drf/viewsets.py:1064
msgid "list all vendors (simple view)"
msgstr "列出所有供应商(简单视图)"
-#: engine/core/docs/drf/viewsets.py:1013
+#: engine/core/docs/drf/viewsets.py:1074
msgid "retrieve a single vendor (detailed view)"
msgstr "检索单个供应商(详细视图)"
-#: engine/core/docs/drf/viewsets.py:1020
+#: engine/core/docs/drf/viewsets.py:1081
msgid "create a vendor"
msgstr "创建供应商"
-#: engine/core/docs/drf/viewsets.py:1027
+#: engine/core/docs/drf/viewsets.py:1088
msgid "delete a vendor"
msgstr "删除供应商"
-#: engine/core/docs/drf/viewsets.py:1034
+#: engine/core/docs/drf/viewsets.py:1095
msgid "rewrite an existing vendor saving non-editables"
msgstr "重写现有供应商,保存不可编辑内容"
-#: engine/core/docs/drf/viewsets.py:1041
+#: engine/core/docs/drf/viewsets.py:1102
msgid "rewrite some fields of an existing vendor saving non-editables"
msgstr "重写现有供应商的某些字段,保存不可编辑字段"
-#: engine/core/docs/drf/viewsets.py:1051
+#: engine/core/docs/drf/viewsets.py:1112
msgid "list all product images (simple view)"
msgstr "列出所有产品图片(简单视图)"
-#: engine/core/docs/drf/viewsets.py:1058
+#: engine/core/docs/drf/viewsets.py:1122
msgid "retrieve a single product image (detailed view)"
msgstr "检索单个产品图片(详细视图)"
-#: engine/core/docs/drf/viewsets.py:1065
+#: engine/core/docs/drf/viewsets.py:1129
msgid "create a product image"
msgstr "创建产品形象"
-#: engine/core/docs/drf/viewsets.py:1072
+#: engine/core/docs/drf/viewsets.py:1139
msgid "delete a product image"
msgstr "删除产品图像"
-#: engine/core/docs/drf/viewsets.py:1079
+#: engine/core/docs/drf/viewsets.py:1146
msgid "rewrite an existing product image saving non-editables"
msgstr "重写现有产品图像,保存不可编辑图像"
-#: engine/core/docs/drf/viewsets.py:1086
+#: engine/core/docs/drf/viewsets.py:1154
msgid "rewrite some fields of an existing product image saving non-editables"
msgstr "重写现有产品图像的某些字段,保存不可编辑的内容"
-#: engine/core/docs/drf/viewsets.py:1096
+#: engine/core/docs/drf/viewsets.py:1165
msgid "list all promo codes (simple view)"
msgstr "列出所有促销代码(简单视图)"
-#: engine/core/docs/drf/viewsets.py:1103
+#: engine/core/docs/drf/viewsets.py:1175
msgid "retrieve a single promo code (detailed view)"
msgstr "检索单个促销代码(详细视图)"
-#: engine/core/docs/drf/viewsets.py:1110
+#: engine/core/docs/drf/viewsets.py:1182
msgid "create a promo code"
msgstr "创建促销代码"
-#: engine/core/docs/drf/viewsets.py:1117
+#: engine/core/docs/drf/viewsets.py:1189
msgid "delete a promo code"
msgstr "删除促销代码"
-#: engine/core/docs/drf/viewsets.py:1124
+#: engine/core/docs/drf/viewsets.py:1196
msgid "rewrite an existing promo code saving non-editables"
msgstr "重写现有促销代码,保存不可编辑的代码"
-#: engine/core/docs/drf/viewsets.py:1131
+#: engine/core/docs/drf/viewsets.py:1203
msgid "rewrite some fields of an existing promo code saving non-editables"
msgstr "重写现有促销代码的某些字段,保存不可编辑的内容"
-#: engine/core/docs/drf/viewsets.py:1141
+#: engine/core/docs/drf/viewsets.py:1213
msgid "list all promotions (simple view)"
msgstr "列出所有促销活动(简单视图)"
-#: engine/core/docs/drf/viewsets.py:1148
+#: engine/core/docs/drf/viewsets.py:1223
msgid "retrieve a single promotion (detailed view)"
msgstr "检索单个促销活动(详细视图)"
-#: engine/core/docs/drf/viewsets.py:1155
+#: engine/core/docs/drf/viewsets.py:1230
msgid "create a promotion"
msgstr "创建促销活动"
-#: engine/core/docs/drf/viewsets.py:1162
+#: engine/core/docs/drf/viewsets.py:1237
msgid "delete a promotion"
msgstr "删除促销"
-#: engine/core/docs/drf/viewsets.py:1169
+#: engine/core/docs/drf/viewsets.py:1244
msgid "rewrite an existing promotion saving non-editables"
msgstr "重写现有促销活动,保存不可编辑内容"
-#: engine/core/docs/drf/viewsets.py:1176
+#: engine/core/docs/drf/viewsets.py:1251
msgid "rewrite some fields of an existing promotion saving non-editables"
msgstr "重写现有促销活动的某些字段,保存不可编辑字段"
-#: engine/core/docs/drf/viewsets.py:1186
+#: engine/core/docs/drf/viewsets.py:1261
msgid "list all stocks (simple view)"
msgstr "列出所有股票(简单视图)"
-#: engine/core/docs/drf/viewsets.py:1193
+#: engine/core/docs/drf/viewsets.py:1268
msgid "retrieve a single stock (detailed view)"
msgstr "检索单个股票(详细视图)"
-#: engine/core/docs/drf/viewsets.py:1200
+#: engine/core/docs/drf/viewsets.py:1275
msgid "create a stock record"
msgstr "创建库存记录"
-#: engine/core/docs/drf/viewsets.py:1207
+#: engine/core/docs/drf/viewsets.py:1282
msgid "delete a stock record"
msgstr "删除库存记录"
-#: engine/core/docs/drf/viewsets.py:1214
+#: engine/core/docs/drf/viewsets.py:1289
msgid "rewrite an existing stock record saving non-editables"
msgstr "重写现有库存记录,保存不可编辑数据"
-#: engine/core/docs/drf/viewsets.py:1221
+#: engine/core/docs/drf/viewsets.py:1297
msgid "rewrite some fields of an existing stock record saving non-editables"
msgstr "重写现有库存记录的某些字段,保存不可编辑的内容"
-#: engine/core/docs/drf/viewsets.py:1231
+#: engine/core/docs/drf/viewsets.py:1308
msgid "list all product tags (simple view)"
msgstr "列出所有产品标签(简单视图)"
-#: engine/core/docs/drf/viewsets.py:1238
+#: engine/core/docs/drf/viewsets.py:1318
msgid "retrieve a single product tag (detailed view)"
msgstr "检索单个产品标签(详细视图)"
-#: engine/core/docs/drf/viewsets.py:1245
+#: engine/core/docs/drf/viewsets.py:1325
msgid "create a product tag"
msgstr "创建产品标签"
-#: engine/core/docs/drf/viewsets.py:1252
+#: engine/core/docs/drf/viewsets.py:1335
msgid "delete a product tag"
msgstr "删除产品标签"
-#: engine/core/docs/drf/viewsets.py:1259
+#: engine/core/docs/drf/viewsets.py:1342
msgid "rewrite an existing product tag saving non-editables"
msgstr "重写现有产品标签,保存不可编辑内容"
-#: engine/core/docs/drf/viewsets.py:1266
+#: engine/core/docs/drf/viewsets.py:1350
msgid "rewrite some fields of an existing product tag saving non-editables"
msgstr "重写现有产品标签的某些字段,保存不可编辑字段"
-#: engine/core/elasticsearch/__init__.py:122
-#: engine/core/elasticsearch/__init__.py:570
+#: engine/core/elasticsearch/__init__.py:127
+#: engine/core/elasticsearch/__init__.py:627
msgid "no search term provided."
msgstr "未提供搜索条件。"
-#: engine/core/filters.py:69 engine/core/filters.py:426
-#: engine/core/filters.py:553
+#: engine/core/filters.py:78 engine/core/filters.py:484
+#: engine/core/filters.py:625
msgid "Search"
msgstr "搜索"
-#: engine/core/filters.py:70 engine/core/filters.py:583
-#: engine/core/filters.py:612
+#: engine/core/filters.py:79 engine/core/filters.py:662
+#: engine/core/filters.py:691
msgid "UUID"
msgstr "UUID"
-#: engine/core/filters.py:71 engine/core/filters.py:428
-#: engine/core/filters.py:555
+#: engine/core/filters.py:80 engine/core/filters.py:487
+#: engine/core/filters.py:627
msgid "Name"
msgstr "名称"
-#: engine/core/filters.py:72 engine/core/filters.py:557
+#: engine/core/filters.py:82 engine/core/filters.py:630
msgid "Categories"
msgstr "类别"
-#: engine/core/filters.py:74
+#: engine/core/filters.py:86
msgid "Categories Slugs"
msgstr "类别 蛞蝓"
-#: engine/core/filters.py:75 engine/core/filters.py:436
+#: engine/core/filters.py:88 engine/core/filters.py:495
msgid "Tags"
msgstr "标签"
-#: engine/core/filters.py:76
+#: engine/core/filters.py:90
msgid "Min Price"
msgstr "最低价格"
-#: engine/core/filters.py:77
+#: engine/core/filters.py:93
msgid "Max Price"
msgstr "最高价格"
-#: engine/core/filters.py:78
+#: engine/core/filters.py:95
msgid "Is Active"
msgstr "处于活动状态"
-#: engine/core/filters.py:79
+#: engine/core/filters.py:96
msgid "Brand"
msgstr "品牌"
-#: engine/core/filters.py:80
+#: engine/core/filters.py:97
msgid "Attributes"
msgstr "属性"
-#: engine/core/filters.py:81
+#: engine/core/filters.py:99
msgid "Quantity"
msgstr "数量"
-#: engine/core/filters.py:82 engine/core/filters.py:430
-#: engine/core/filters.py:556 engine/core/models.py:321
-#: engine/core/models.py:489 engine/core/models.py:644
+#: engine/core/filters.py:101 engine/core/filters.py:489
+#: engine/core/filters.py:628 engine/core/models.py:327
+#: engine/core/models.py:508 engine/core/models.py:665
msgid "Slug"
msgstr "蛞蝓"
-#: engine/core/filters.py:83
+#: engine/core/filters.py:102
msgid "Is Digital"
msgstr "是数字"
-#: engine/core/filters.py:84
+#: engine/core/filters.py:104
msgid "Include sub-categories"
msgstr "包括子类别"
-#: engine/core/filters.py:87
+#: engine/core/filters.py:108
msgid "Include personal ordered"
msgstr "包括个人订购的产品"
-#: engine/core/filters.py:89 engine/core/models.py:648
+#: engine/core/filters.py:110 engine/core/models.py:669
msgid "SKU"
msgstr "商品编号"
-#: engine/core/filters.py:184
+#: engine/core/filters.py:212
msgid "there must be a category_uuid to use include_subcategories flag"
msgstr "必须有 category_uuid 才能使用 include_subcategories 标志"
-#: engine/core/filters.py:353
+#: engine/core/filters.py:398
msgid "Search (ID, product name or part number)"
msgstr "搜索(ID、产品名称或零件编号)"
-#: engine/core/filters.py:356
+#: engine/core/filters.py:402
msgid "Bought after (inclusive)"
msgstr "之后购买(含)"
-#: engine/core/filters.py:357
+#: engine/core/filters.py:405
msgid "Bought before (inclusive)"
msgstr "之前购买(含)"
-#: engine/core/filters.py:360 engine/core/filters.py:407
-#: engine/core/filters.py:614
+#: engine/core/filters.py:410 engine/core/filters.py:461
+#: engine/core/filters.py:696
msgid "User email"
msgstr "用户电子邮件"
-#: engine/core/filters.py:361 engine/core/filters.py:408
-#: engine/core/filters.py:592 engine/core/filters.py:613
+#: engine/core/filters.py:413 engine/core/filters.py:464
+#: engine/core/filters.py:671 engine/core/filters.py:693
msgid "User UUID"
msgstr "用户 UUID"
-#: engine/core/filters.py:362
+#: engine/core/filters.py:415
msgid "Status"
msgstr "现状"
-#: engine/core/filters.py:366
+#: engine/core/filters.py:419
msgid "Human Readable ID"
msgstr "人可读 ID"
-#: engine/core/filters.py:429
+#: engine/core/filters.py:488
msgid "Parent"
msgstr "家长"
-#: engine/core/filters.py:433
+#: engine/core/filters.py:492
msgid "Whole category(has at least 1 product or not)"
msgstr "整个类别(是否至少有 1 个产品)"
-#: engine/core/filters.py:437
+#: engine/core/filters.py:496
msgid "Level"
msgstr "级别"
-#: engine/core/filters.py:587
+#: engine/core/filters.py:666
msgid "Product UUID"
msgstr "产品 UUID"
-#: engine/core/graphene/mutations.py:40
+#: engine/core/graphene/mutations.py:41
msgid "key to look for in or set into the cache"
msgstr "在缓存中查找或设置的关键字"
-#: engine/core/graphene/mutations.py:41
+#: engine/core/graphene/mutations.py:43
msgid "data to store in cache"
msgstr "缓存中要存储的数据"
-#: engine/core/graphene/mutations.py:44
+#: engine/core/graphene/mutations.py:46
msgid "timeout in seconds to set the data for into the cache"
msgstr "将数据设置为缓存的超时(以秒为单位"
-#: engine/core/graphene/mutations.py:47
+#: engine/core/graphene/mutations.py:49
msgid "cached data"
msgstr "缓存数据"
-#: engine/core/graphene/mutations.py:62
+#: engine/core/graphene/mutations.py:64
msgid "camelized JSON data from the requested URL"
msgstr "从请求的 URL 中获取驼峰化 JSON 数据"
-#: engine/core/graphene/mutations.py:67 engine/core/views.py:257
+#: engine/core/graphene/mutations.py:69 engine/core/views.py:249
msgid "only URLs starting with http(s):// are allowed"
msgstr "只允许使用以 http(s):// 开头的 URL"
-#: engine/core/graphene/mutations.py:83
+#: engine/core/graphene/mutations.py:87
msgid "add a product to the order"
msgstr "在订单中添加产品"
-#: engine/core/graphene/mutations.py:104 engine/core/graphene/mutations.py:131
-#: engine/core/graphene/mutations.py:239 engine/core/graphene/mutations.py:287
+#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139
+#: engine/core/graphene/mutations.py:255 engine/core/graphene/mutations.py:307
#, python-brace-format
msgid "order {order_uuid} not found"
msgstr "未找到 {order_uuid} 订单!"
-#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:159
+#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167
msgid "remove a product from the order"
msgstr "从订单中删除产品"
-#: engine/core/graphene/mutations.py:137
+#: engine/core/graphene/mutations.py:145
msgid "remove all products from the order"
msgstr "从订单中删除所有产品"
-#: engine/core/graphene/mutations.py:182
+#: engine/core/graphene/mutations.py:190
msgid "buy an order"
msgstr "购买订单"
-#: engine/core/graphene/mutations.py:211 engine/core/graphene/mutations.py:265
+#: engine/core/graphene/mutations.py:221 engine/core/graphene/mutations.py:283
msgid "please provide either order_uuid or order_hr_id - mutually exclusive"
msgstr "请提供 order_uuid 或 order_hr_id(互斥)!"
-#: engine/core/graphene/mutations.py:236 engine/core/graphene/mutations.py:501
-#: engine/core/graphene/mutations.py:543 engine/core/viewsets.py:712
+#: engine/core/graphene/mutations.py:250 engine/core/graphene/mutations.py:525
+#: engine/core/graphene/mutations.py:574 engine/core/viewsets.py:753
msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr "order.buy() 方法中的类型有误:{type(instance)!s}"
-#: engine/core/graphene/mutations.py:245
+#: engine/core/graphene/mutations.py:261
msgid "perform an action on a list of products in the order"
msgstr "对订单中的产品列表执行操作"
-#: engine/core/graphene/mutations.py:250
+#: engine/core/graphene/mutations.py:266
msgid "remove/add"
msgstr "删除/添加"
-#: engine/core/graphene/mutations.py:282 engine/core/graphene/mutations.py:323
+#: engine/core/graphene/mutations.py:302 engine/core/graphene/mutations.py:343
msgid "action must be either add or remove"
msgstr "操作必须是 \"添加 \"或 \"删除\"!"
-#: engine/core/graphene/mutations.py:293
+#: engine/core/graphene/mutations.py:313
msgid "perform an action on a list of products in the wishlist"
msgstr "对愿望清单中的产品列表执行操作"
-#: engine/core/graphene/mutations.py:311
+#: engine/core/graphene/mutations.py:331
msgid "please provide wishlist_uuid value"
msgstr "请提供 `wishlist_uuid` 值。"
-#: engine/core/graphene/mutations.py:328 engine/core/graphene/mutations.py:404
-#: engine/core/graphene/mutations.py:432 engine/core/graphene/mutations.py:460
-#: engine/core/graphene/mutations.py:504
+#: engine/core/graphene/mutations.py:348 engine/core/graphene/mutations.py:424
+#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480
+#: engine/core/graphene/mutations.py:530
#, python-brace-format
msgid "wishlist {wishlist_uuid} not found"
msgstr "未找到 Wishlist {wishlist_uuid}!"
-#: engine/core/graphene/mutations.py:382
+#: engine/core/graphene/mutations.py:402
msgid "add a product to the wishlist"
msgstr "在订单中添加产品"
-#: engine/core/graphene/mutations.py:410
+#: engine/core/graphene/mutations.py:430
msgid "remove a product from the wishlist"
msgstr "从订单中删除产品"
-#: engine/core/graphene/mutations.py:438
+#: engine/core/graphene/mutations.py:458
msgid "remove all products from the wishlist"
msgstr "从订单中删除产品"
-#: engine/core/graphene/mutations.py:466
+#: engine/core/graphene/mutations.py:486
msgid "buy all products from the wishlist"
msgstr "从订单中删除产品"
-#: engine/core/graphene/mutations.py:510
+#: engine/core/graphene/mutations.py:536
msgid "buy a product"
msgstr "购买订单"
-#: engine/core/graphene/mutations.py:516
+#: engine/core/graphene/mutations.py:543
msgid ""
"please send the attributes as the string formatted like "
"attr1=value1,attr2=value2"
msgstr "请以字符串形式发送属性,格式如 attr1=value1,attr2=value2"
-#: engine/core/graphene/mutations.py:549
+#: engine/core/graphene/mutations.py:581
msgid "add or delete a feedback for orderproduct"
msgstr "添加或删除订单产品的反馈信息"
-#: engine/core/graphene/mutations.py:573
+#: engine/core/graphene/mutations.py:607
msgid "action must be either `add` or `remove`"
msgstr "操作必须是 \"添加 \"或 \"删除\"!"
-#: engine/core/graphene/mutations.py:576
+#: engine/core/graphene/mutations.py:610
#, python-brace-format
msgid "order product {order_product_uuid} not found"
msgstr "未找到订购产品 {order_product_uuid}!"
-#: engine/core/graphene/mutations.py:582
+#: engine/core/graphene/mutations.py:617
msgid "original address string provided by the user"
msgstr "用户提供的原始地址字符串"
-#: engine/core/graphene/mutations.py:618 engine/core/models.py:955
-#: engine/core/models.py:968 engine/core/models.py:1383
-#: engine/core/models.py:1412 engine/core/models.py:1437
-#: engine/core/viewsets.py:715
+#: engine/core/graphene/mutations.py:654 engine/core/models.py:978
+#: engine/core/models.py:991 engine/core/models.py:1435
+#: engine/core/models.py:1466 engine/core/models.py:1497
+#: engine/core/viewsets.py:760
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr "{name} 不存在:{uuid}!"
-#: engine/core/graphene/mutations.py:632
+#: engine/core/graphene/mutations.py:668
msgid "limit must be between 1 and 10"
msgstr "限值必须在 1 和 10 之间"
-#: engine/core/graphene/mutations.py:681
+#: engine/core/graphene/mutations.py:717
msgid "elasticsearch - works like a charm"
msgstr "ElasticSearch - 工作起来得心应手"
#: engine/core/graphene/object_types.py:82
-#: engine/core/graphene/object_types.py:370
-#: engine/core/graphene/object_types.py:417 engine/core/models.py:772
-#: engine/core/models.py:1250 engine/core/models.py:1897
+#: engine/core/graphene/object_types.py:417
+#: engine/core/graphene/object_types.py:468 engine/core/models.py:795
+#: engine/core/models.py:1289 engine/core/models.py:2021
msgid "attributes"
msgstr "属性"
@@ -1196,140 +1196,140 @@ msgid "groups of attributes"
msgstr "属性组"
#: engine/core/graphene/object_types.py:116
-#: engine/core/graphene/object_types.py:193
-#: engine/core/graphene/object_types.py:223 engine/core/models.py:432
+#: engine/core/graphene/object_types.py:214
+#: engine/core/graphene/object_types.py:252 engine/core/models.py:451
msgid "categories"
msgstr "类别"
-#: engine/core/graphene/object_types.py:124 engine/core/models.py:503
+#: engine/core/graphene/object_types.py:132 engine/core/models.py:522
msgid "brands"
msgstr "品牌"
-#: engine/core/graphene/object_types.py:195
+#: engine/core/graphene/object_types.py:216
msgid "category image url"
msgstr "类别"
-#: engine/core/graphene/object_types.py:196
-#: engine/core/graphene/object_types.py:317 engine/core/models.py:283
+#: engine/core/graphene/object_types.py:217
+#: engine/core/graphene/object_types.py:362 engine/core/models.py:289
msgid "markup percentage"
msgstr "加价百分比"
-#: engine/core/graphene/object_types.py:199
+#: engine/core/graphene/object_types.py:221
msgid "which attributes and values can be used for filtering this category."
msgstr "哪些属性和值可用于筛选该类别。"
-#: engine/core/graphene/object_types.py:203
+#: engine/core/graphene/object_types.py:227
msgid ""
"minimum and maximum prices for products in this category, if available."
msgstr "该类别产品的最低和最高价格(如有)。"
-#: engine/core/graphene/object_types.py:205
+#: engine/core/graphene/object_types.py:231
msgid "tags for this category"
msgstr "此类别的标签"
-#: engine/core/graphene/object_types.py:206
+#: engine/core/graphene/object_types.py:234
msgid "products in this category"
msgstr "该类别中的产品"
-#: engine/core/graphene/object_types.py:324 engine/core/models.py:188
+#: engine/core/graphene/object_types.py:369 engine/core/models.py:194
msgid "vendors"
msgstr "供应商"
-#: engine/core/graphene/object_types.py:328
+#: engine/core/graphene/object_types.py:373
msgid "Latitude (Y coordinate)"
msgstr "纬度(Y 坐标)"
-#: engine/core/graphene/object_types.py:329
+#: engine/core/graphene/object_types.py:374
msgid "Longitude (X coordinate)"
msgstr "经度(X 坐标)"
-#: engine/core/graphene/object_types.py:358
+#: engine/core/graphene/object_types.py:403
msgid "comment"
msgstr "如何"
-#: engine/core/graphene/object_types.py:359
-#: engine/core/graphene/object_types.py:483
+#: engine/core/graphene/object_types.py:405
+#: engine/core/graphene/object_types.py:539
msgid "rating value from 1 to 10, inclusive, or 0 if not set."
msgstr "评级值从 1 到 10(包括 10),如果未设置,则为 0。"
-#: engine/core/graphene/object_types.py:366
+#: engine/core/graphene/object_types.py:413
msgid "represents feedback from a user."
msgstr "代表用户的反馈意见。"
-#: engine/core/graphene/object_types.py:371
-#: engine/core/graphene/object_types.py:418 engine/core/models.py:1244
+#: engine/core/graphene/object_types.py:418
+#: engine/core/graphene/object_types.py:469 engine/core/models.py:1283
msgid "notifications"
msgstr "通知"
-#: engine/core/graphene/object_types.py:372
+#: engine/core/graphene/object_types.py:420
msgid "download url for this order product if applicable"
msgstr "此订单产品的下载网址(如适用"
-#: engine/core/graphene/object_types.py:373 engine/core/models.py:1736
+#: engine/core/graphene/object_types.py:422 engine/core/models.py:1848
msgid "feedback"
msgstr "反馈意见"
-#: engine/core/graphene/object_types.py:407
+#: engine/core/graphene/object_types.py:456
msgid "a list of order products in this order"
msgstr "该订单中的订单产品列表"
-#: engine/core/graphene/object_types.py:409 engine/core/models.py:1214
+#: engine/core/graphene/object_types.py:458 engine/core/models.py:1253
msgid "billing address"
msgstr "账单地址"
-#: engine/core/graphene/object_types.py:412
+#: engine/core/graphene/object_types.py:462
msgid ""
"shipping address for this order, leave blank if same as billing address or "
"if not applicable"
msgstr "此订单的送货地址,如果与账单地址相同或不适用,请留空"
-#: engine/core/graphene/object_types.py:414
+#: engine/core/graphene/object_types.py:465
msgid "total price of this order"
msgstr "订单总价"
-#: engine/core/graphene/object_types.py:415
+#: engine/core/graphene/object_types.py:466
msgid "total quantity of products in order"
msgstr "订单中产品的总数量"
-#: engine/core/graphene/object_types.py:416
+#: engine/core/graphene/object_types.py:467
msgid "are all products in the order digital"
msgstr "订单中的所有产品都是数字产品吗?"
-#: engine/core/graphene/object_types.py:419
+#: engine/core/graphene/object_types.py:471
msgid "transactions for this order"
msgstr "此订单的交易"
-#: engine/core/graphene/object_types.py:438 engine/core/models.py:1278
+#: engine/core/graphene/object_types.py:491 engine/core/models.py:1317
msgid "orders"
msgstr "订单"
-#: engine/core/graphene/object_types.py:459
+#: engine/core/graphene/object_types.py:512
msgid "image url"
msgstr "图片 URL"
-#: engine/core/graphene/object_types.py:466
+#: engine/core/graphene/object_types.py:519
msgid "product's images"
msgstr "产品图片"
-#: engine/core/graphene/object_types.py:473 engine/core/models.py:431
-#: engine/core/models.py:586
+#: engine/core/graphene/object_types.py:526 engine/core/models.py:450
+#: engine/core/models.py:607
msgid "category"
msgstr "类别"
-#: engine/core/graphene/object_types.py:475 engine/core/models.py:1737
+#: engine/core/graphene/object_types.py:528 engine/core/models.py:1849
msgid "feedbacks"
msgstr "反馈意见"
-#: engine/core/graphene/object_types.py:476 engine/core/models.py:502
-#: engine/core/models.py:595
+#: engine/core/graphene/object_types.py:529 engine/core/models.py:521
+#: engine/core/models.py:616
msgid "brand"
msgstr "品牌"
-#: engine/core/graphene/object_types.py:477 engine/core/models.py:106
+#: engine/core/graphene/object_types.py:531 engine/core/models.py:106
msgid "attribute groups"
msgstr "属性组"
-#: engine/core/graphene/object_types.py:478
+#: engine/core/graphene/object_types.py:533
#: engine/core/templates/digital_order_created_email.html:111
#: engine/core/templates/digital_order_delivered_email.html:109
#: engine/core/templates/shipped_order_created_email.html:109
@@ -1337,7 +1337,7 @@ msgstr "属性组"
msgid "price"
msgstr "价格"
-#: engine/core/graphene/object_types.py:479
+#: engine/core/graphene/object_types.py:534
#: engine/core/templates/digital_order_created_email.html:110
#: engine/core/templates/digital_order_delivered_email.html:108
#: engine/core/templates/shipped_order_created_email.html:108
@@ -1345,39 +1345,39 @@ msgstr "价格"
msgid "quantity"
msgstr "数量"
-#: engine/core/graphene/object_types.py:480
+#: engine/core/graphene/object_types.py:535
msgid "number of feedbacks"
msgstr "反馈数量"
-#: engine/core/graphene/object_types.py:481
+#: engine/core/graphene/object_types.py:536
msgid "only available for personal orders"
msgstr "仅限个人订购的产品"
-#: engine/core/graphene/object_types.py:484
+#: engine/core/graphene/object_types.py:541
msgid "discount price"
msgstr "折扣价"
-#: engine/core/graphene/object_types.py:508 engine/core/models.py:658
+#: engine/core/graphene/object_types.py:565 engine/core/models.py:679
msgid "products"
msgstr "产品"
-#: engine/core/graphene/object_types.py:611
+#: engine/core/graphene/object_types.py:675
msgid "promocodes"
msgstr "促销代码"
-#: engine/core/graphene/object_types.py:621
+#: engine/core/graphene/object_types.py:690
msgid "products on sale"
msgstr "销售产品"
-#: engine/core/graphene/object_types.py:628 engine/core/models.py:904
+#: engine/core/graphene/object_types.py:698 engine/core/models.py:927
msgid "promotions"
msgstr "促销活动"
-#: engine/core/graphene/object_types.py:632 engine/core/models.py:187
+#: engine/core/graphene/object_types.py:702 engine/core/models.py:193
msgid "vendor"
msgstr "供应商"
-#: engine/core/graphene/object_types.py:633 engine/core/models.py:657
+#: engine/core/graphene/object_types.py:703 engine/core/models.py:678
#: engine/core/templates/digital_order_created_email.html:109
#: engine/core/templates/digital_order_delivered_email.html:107
#: engine/core/templates/shipped_order_created_email.html:107
@@ -1385,98 +1385,98 @@ msgstr "供应商"
msgid "product"
msgstr "产品"
-#: engine/core/graphene/object_types.py:644 engine/core/models.py:927
+#: engine/core/graphene/object_types.py:715 engine/core/models.py:950
msgid "wishlisted products"
msgstr "心愿单上的产品"
-#: engine/core/graphene/object_types.py:650 engine/core/models.py:944
+#: engine/core/graphene/object_types.py:722 engine/core/models.py:967
msgid "wishlists"
msgstr "愿望清单"
-#: engine/core/graphene/object_types.py:654
+#: engine/core/graphene/object_types.py:727
msgid "tagged products"
msgstr "标签产品"
-#: engine/core/graphene/object_types.py:661 engine/core/models.py:224
-#: engine/core/models.py:601
+#: engine/core/graphene/object_types.py:735 engine/core/models.py:230
+#: engine/core/models.py:622
msgid "product tags"
msgstr "产品标签"
-#: engine/core/graphene/object_types.py:665
+#: engine/core/graphene/object_types.py:740
msgid "tagged categories"
msgstr "标签类别"
-#: engine/core/graphene/object_types.py:672
+#: engine/core/graphene/object_types.py:748
msgid "categories tags"
msgstr "类别标签"
-#: engine/core/graphene/object_types.py:676
+#: engine/core/graphene/object_types.py:752
msgid "project name"
msgstr "项目名称"
-#: engine/core/graphene/object_types.py:677
+#: engine/core/graphene/object_types.py:753
msgid "company name"
msgstr "公司名称"
-#: engine/core/graphene/object_types.py:678
+#: engine/core/graphene/object_types.py:754
msgid "company address"
msgstr "公司地址"
-#: engine/core/graphene/object_types.py:679
+#: engine/core/graphene/object_types.py:755
msgid "company phone number"
msgstr "公司电话号码"
-#: engine/core/graphene/object_types.py:680
+#: engine/core/graphene/object_types.py:758
msgid "email from, sometimes it must be used instead of host user value"
msgstr "电子邮件来自\",有时必须使用它来代替主机用户值"
-#: engine/core/graphene/object_types.py:681
+#: engine/core/graphene/object_types.py:761
msgid "email host user"
msgstr "电子邮件主机用户"
-#: engine/core/graphene/object_types.py:682
+#: engine/core/graphene/object_types.py:762
msgid "maximum amount for payment"
msgstr "最高付款额"
-#: engine/core/graphene/object_types.py:683
+#: engine/core/graphene/object_types.py:763
msgid "minimum amount for payment"
msgstr "最低付款额"
-#: engine/core/graphene/object_types.py:684
+#: engine/core/graphene/object_types.py:764
msgid "analytics data"
msgstr "分析数据"
-#: engine/core/graphene/object_types.py:685
+#: engine/core/graphene/object_types.py:765
msgid "advertisement data"
msgstr "广告数据"
-#: engine/core/graphene/object_types.py:688
+#: engine/core/graphene/object_types.py:768
msgid "company configuration"
msgstr "配置"
-#: engine/core/graphene/object_types.py:692
+#: engine/core/graphene/object_types.py:772
msgid "language code"
msgstr "语言代码"
-#: engine/core/graphene/object_types.py:693
+#: engine/core/graphene/object_types.py:773
msgid "language name"
msgstr "语言名称"
-#: engine/core/graphene/object_types.py:694
+#: engine/core/graphene/object_types.py:774
msgid "language flag, if exists :)"
msgstr "语言标志(如果有):)"
-#: engine/core/graphene/object_types.py:697
+#: engine/core/graphene/object_types.py:777
msgid "supported languages"
msgstr "获取支持的语言列表"
-#: engine/core/graphene/object_types.py:728
-#: engine/core/graphene/object_types.py:729
-#: engine/core/graphene/object_types.py:730
+#: engine/core/graphene/object_types.py:809
+#: engine/core/graphene/object_types.py:812
+#: engine/core/graphene/object_types.py:815
msgid "products search results"
msgstr "产品搜索结果"
-#: engine/core/graphene/object_types.py:731
+#: engine/core/graphene/object_types.py:817
msgid "posts search results"
msgstr "产品搜索结果"
@@ -1501,7 +1501,7 @@ msgstr "父属性组"
msgid "attribute group's name"
msgstr "属性组名称"
-#: engine/core/models.py:105 engine/core/models.py:734
+#: engine/core/models.py:105 engine/core/models.py:755
msgid "attribute group"
msgstr "属性组"
@@ -1517,47 +1517,47 @@ msgid ""
msgstr ""
"代表一个供应商实体,能够存储有关外部供应商及其交互要求的信息。供应商类用于定义和管理与外部供应商相关的信息。它存储供应商的名称、通信所需的身份验证详细信息,以及从供应商处检索产品时所应用的百分比标记。该模型还维护附加的元数据和约束,使其适用于与第三方供应商交互的系统。"
-#: engine/core/models.py:124
+#: engine/core/models.py:125
msgid "stores credentials and endpoints required for vendor communication"
msgstr "存储供应商应用程序接口通信所需的凭证和端点"
-#: engine/core/models.py:125
+#: engine/core/models.py:127
msgid "authentication info"
msgstr "认证信息"
-#: engine/core/models.py:130
+#: engine/core/models.py:132
msgid "define the markup for products retrieved from this vendor"
msgstr "定义从该供应商获取的产品的标记"
-#: engine/core/models.py:131
+#: engine/core/models.py:133
msgid "vendor markup percentage"
msgstr "供应商加价百分比"
-#: engine/core/models.py:135
+#: engine/core/models.py:137
msgid "name of this vendor"
msgstr "供应商名称"
-#: engine/core/models.py:136
+#: engine/core/models.py:138
msgid "vendor name"
msgstr "供应商名称"
-#: engine/core/models.py:147
+#: engine/core/models.py:153
msgid "response file"
msgstr "回复文件"
-#: engine/core/models.py:148
+#: engine/core/models.py:154
msgid "vendor's last processing response"
msgstr "供应商最后的处理回复"
-#: engine/core/models.py:154
+#: engine/core/models.py:160
msgid "vendor's integration file path"
msgstr "供应商的集成文件路径"
-#: engine/core/models.py:155
+#: engine/core/models.py:161
msgid "integration path"
msgstr "整合路径"
-#: engine/core/models.py:197
+#: engine/core/models.py:203
msgid ""
"Represents a product tag used for classifying or identifying products. The "
"ProductTag class is designed to uniquely identify and classify products "
@@ -1568,42 +1568,42 @@ msgstr ""
"代表用于分类或识别产品的产品标签。ProductTag "
"类旨在通过内部标签标识符和用户友好显示名称的组合,对产品进行唯一标识和分类。它支持通过混合功能导出的操作,并为管理目的提供元数据定制功能。"
-#: engine/core/models.py:209 engine/core/models.py:240
+#: engine/core/models.py:215 engine/core/models.py:246
msgid "internal tag identifier for the product tag"
msgstr "产品标签的内部标签标识符"
-#: engine/core/models.py:210 engine/core/models.py:241
+#: engine/core/models.py:216 engine/core/models.py:247
msgid "tag name"
msgstr "标签名称"
-#: engine/core/models.py:214 engine/core/models.py:245
+#: engine/core/models.py:220 engine/core/models.py:251
msgid "user-friendly name for the product tag"
msgstr "方便用户使用的产品标签名称"
-#: engine/core/models.py:215 engine/core/models.py:246
+#: engine/core/models.py:221 engine/core/models.py:252
msgid "tag display name"
msgstr "标签显示名称"
-#: engine/core/models.py:223
+#: engine/core/models.py:229
msgid "product tag"
msgstr "产品标签"
-#: engine/core/models.py:229
+#: engine/core/models.py:235
msgid ""
"Represents a category tag used for products. This class models a category "
"tag that can be used to associate and classify products. It includes "
"attributes for an internal tag identifier and a user-friendly display name."
msgstr "代表用于产品的类别标签。该类是类别标签的模型,可用于关联和分类产品。它包括内部标签标识符和用户友好显示名称的属性。"
-#: engine/core/models.py:254
+#: engine/core/models.py:260
msgid "category tag"
msgstr "类别标签"
-#: engine/core/models.py:255 engine/core/models.py:327
+#: engine/core/models.py:261 engine/core/models.py:333
msgid "category tags"
msgstr "类别标签"
-#: engine/core/models.py:260
+#: engine/core/models.py:266
msgid ""
"Represents a category entity to organize and group related items in a "
"hierarchical structure. Categories may have hierarchical relationships with "
@@ -1617,51 +1617,51 @@ msgid ""
msgstr ""
"代表类别实体,用于在分层结构中组织和分组相关项目。类别可与其他类别建立层次关系,支持父子关系。该类包括元数据和可视化表示字段,是类别相关功能的基础。该类通常用于定义和管理应用程序中的产品类别或其他类似分组,允许用户或管理员指定类别的名称、描述和层次结构,以及分配图像、标记或优先级等属性。"
-#: engine/core/models.py:274
+#: engine/core/models.py:280
msgid "upload an image representing this category"
msgstr "上传代表该类别的图片"
-#: engine/core/models.py:277
+#: engine/core/models.py:283
msgid "category image"
msgstr "类别 图像"
-#: engine/core/models.py:282
+#: engine/core/models.py:288
msgid "define a markup percentage for products in this category"
msgstr "定义该类别产品的加价百分比"
-#: engine/core/models.py:291
+#: engine/core/models.py:297
msgid "parent of this category to form a hierarchical structure"
msgstr "该类别的父类别,形成等级结构"
-#: engine/core/models.py:292
+#: engine/core/models.py:298
msgid "parent category"
msgstr "父类"
-#: engine/core/models.py:297
+#: engine/core/models.py:303
msgid "category name"
msgstr "类别名称"
-#: engine/core/models.py:298
+#: engine/core/models.py:304
msgid "provide a name for this category"
msgstr "提供该类别的名称"
-#: engine/core/models.py:305
+#: engine/core/models.py:311
msgid "add a detailed description for this category"
msgstr "为该类别添加详细说明"
-#: engine/core/models.py:306
+#: engine/core/models.py:312
msgid "category description"
msgstr "类别说明"
-#: engine/core/models.py:326
+#: engine/core/models.py:332
msgid "tags that help describe or group this category"
msgstr "有助于描述或归类该类别的标签"
-#: engine/core/models.py:333 engine/core/models.py:495
+#: engine/core/models.py:339 engine/core/models.py:514
msgid "priority"
msgstr "优先权"
-#: engine/core/models.py:438
+#: engine/core/models.py:457
msgid ""
"Represents a Brand object in the system. This class handles information and "
"attributes related to a brand, including its name, logos, description, "
@@ -1671,47 +1671,47 @@ msgid ""
msgstr ""
"代表系统中的品牌对象。该类用于处理与品牌相关的信息和属性,包括名称、徽标、描述、相关类别、唯一标签和优先顺序。它允许在应用程序中组织和表示与品牌相关的数据。"
-#: engine/core/models.py:448
+#: engine/core/models.py:467
msgid "name of this brand"
msgstr "品牌名称"
-#: engine/core/models.py:449
+#: engine/core/models.py:468
msgid "brand name"
msgstr "品牌名称"
-#: engine/core/models.py:456
+#: engine/core/models.py:475
msgid "upload a logo representing this brand"
msgstr "上传代表该品牌的徽标"
-#: engine/core/models.py:458
+#: engine/core/models.py:477
msgid "brand small image"
msgstr "品牌小形象"
-#: engine/core/models.py:464
+#: engine/core/models.py:483
msgid "upload a big logo representing this brand"
msgstr "上传代表该品牌的大徽标"
-#: engine/core/models.py:466
+#: engine/core/models.py:485
msgid "brand big image"
msgstr "品牌大形象"
-#: engine/core/models.py:471
+#: engine/core/models.py:490
msgid "add a detailed description of the brand"
msgstr "添加品牌的详细描述"
-#: engine/core/models.py:472
+#: engine/core/models.py:491
msgid "brand description"
msgstr "品牌描述"
-#: engine/core/models.py:477
+#: engine/core/models.py:496
msgid "optional categories that this brand is associated with"
msgstr "与该品牌相关的可选类别"
-#: engine/core/models.py:478
+#: engine/core/models.py:497
msgid "associated categories"
msgstr "类别"
-#: engine/core/models.py:508
+#: engine/core/models.py:527
msgid ""
"Represents the stock of a product managed in the system. This class provides"
" details about the relationship between vendors, products, and their stock "
@@ -1723,72 +1723,72 @@ msgstr ""
"代表系统中管理的产品库存。该类提供有关供应商、产品及其库存信息之间关系的详细信息,以及与库存相关的属性,如价格、购买价格、数量、SKU "
"和数字资产。它是库存管理系统的一部分,用于跟踪和评估不同供应商提供的产品。"
-#: engine/core/models.py:520
+#: engine/core/models.py:539
msgid "the vendor supplying this product stock"
msgstr "提供该产品库存的供应商"
-#: engine/core/models.py:521
+#: engine/core/models.py:540
msgid "associated vendor"
msgstr "相关供应商"
-#: engine/core/models.py:525
+#: engine/core/models.py:544
msgid "final price to the customer after markups"
msgstr "加价后给客户的最终价格"
-#: engine/core/models.py:526
+#: engine/core/models.py:545
msgid "selling price"
msgstr "销售价格"
-#: engine/core/models.py:531
+#: engine/core/models.py:550
msgid "the product associated with this stock entry"
msgstr "与该库存条目相关的产品"
-#: engine/core/models.py:532 engine/core/models.py:797
-#: engine/core/models.py:843 engine/core/models.py:1792
+#: engine/core/models.py:551 engine/core/models.py:820
+#: engine/core/models.py:866 engine/core/models.py:1904
msgid "associated product"
msgstr "相关产品"
-#: engine/core/models.py:539
+#: engine/core/models.py:558
msgid "the price paid to the vendor for this product"
msgstr "为该产品支付给供应商的价格"
-#: engine/core/models.py:540
+#: engine/core/models.py:559
msgid "vendor purchase price"
msgstr "供应商购买价格"
-#: engine/core/models.py:544
+#: engine/core/models.py:563
msgid "available quantity of the product in stock"
msgstr "产品的可用库存量"
-#: engine/core/models.py:545
+#: engine/core/models.py:564
msgid "quantity in stock"
msgstr "库存数量"
-#: engine/core/models.py:549
+#: engine/core/models.py:568
msgid "vendor-assigned SKU for identifying the product"
msgstr "供应商指定的 SKU,用于识别产品"
-#: engine/core/models.py:550
+#: engine/core/models.py:569
msgid "vendor sku"
msgstr "供应商 SKU"
-#: engine/core/models.py:556
+#: engine/core/models.py:575
msgid "digital file associated with this stock if applicable"
msgstr "与该库存相关的数字文件(如适用"
-#: engine/core/models.py:557
+#: engine/core/models.py:576
msgid "digital file"
msgstr "数字文件"
-#: engine/core/models.py:560
+#: engine/core/models.py:580
msgid "system attributes"
msgstr "系统属性"
-#: engine/core/models.py:567
+#: engine/core/models.py:588
msgid "stock entries"
msgstr "库存条目"
-#: engine/core/models.py:572
+#: engine/core/models.py:593
msgid ""
"Represents a product with attributes such as category, brand, tags, digital "
"status, name, description, part number, and slug. Provides related utility "
@@ -1802,55 +1802,55 @@ msgstr ""
"代表产品的属性,如类别、品牌、标签、数字状态、名称、描述、零件编号和标签。提供相关的实用属性,以检索评级、反馈计数、价格、数量和订单总数。设计用于处理电子商务或库存管理的系统。该类可与相关模型(如类别、品牌和"
" ProductTag)交互,并对频繁访问的属性进行缓存管理,以提高性能。它用于在应用程序中定义和操作产品数据及其相关信息。"
-#: engine/core/models.py:585
+#: engine/core/models.py:606
msgid "category this product belongs to"
msgstr "该产品所属类别"
-#: engine/core/models.py:594
+#: engine/core/models.py:615
msgid "optionally associate this product with a brand"
msgstr "可选择将该产品与某个品牌联系起来"
-#: engine/core/models.py:600
+#: engine/core/models.py:621
msgid "tags that help describe or group this product"
msgstr "有助于描述或归类该产品的标签"
-#: engine/core/models.py:605
+#: engine/core/models.py:626
msgid "indicates whether this product is digitally delivered"
msgstr "表示该产品是否以数字方式交付"
-#: engine/core/models.py:606
+#: engine/core/models.py:627
msgid "is product digital"
msgstr "产品是否数字化"
-#: engine/core/models.py:612
+#: engine/core/models.py:633
msgid "provide a clear identifying name for the product"
msgstr "为产品提供一个明确的标识名称"
-#: engine/core/models.py:613
+#: engine/core/models.py:634
msgid "product name"
msgstr "产品名称"
-#: engine/core/models.py:619 engine/core/models.py:892
+#: engine/core/models.py:640 engine/core/models.py:915
msgid "add a detailed description of the product"
msgstr "添加产品的详细描述"
-#: engine/core/models.py:620
+#: engine/core/models.py:641
msgid "product description"
msgstr "产品说明"
-#: engine/core/models.py:627
+#: engine/core/models.py:648
msgid "part number for this product"
msgstr "该产品的零件编号"
-#: engine/core/models.py:628
+#: engine/core/models.py:649
msgid "part number"
msgstr "部件编号"
-#: engine/core/models.py:647
+#: engine/core/models.py:668
msgid "stock keeping unit for this product"
msgstr "该产品的库存单位"
-#: engine/core/models.py:720
+#: engine/core/models.py:741
msgid ""
"Represents an attribute in the system. This class is used to define and "
"manage attributes, which are customizable pieces of data that can be "
@@ -1861,83 +1861,83 @@ msgid ""
msgstr ""
"代表系统中的一个属性。该类用于定义和管理属性,属性是可与其他实体关联的自定义数据块。属性有相关的类别、组、值类型和名称。该模型支持多种类型的值,包括字符串、整数、浮点数、布尔值、数组和对象。这样就可以实现动态、灵活的数据结构。"
-#: engine/core/models.py:733
+#: engine/core/models.py:754
msgid "group of this attribute"
msgstr "该属性的组"
-#: engine/core/models.py:739
+#: engine/core/models.py:760
msgid "string"
msgstr "字符串"
-#: engine/core/models.py:740
+#: engine/core/models.py:761
msgid "integer"
msgstr "整数"
-#: engine/core/models.py:741
+#: engine/core/models.py:762
msgid "float"
msgstr "浮动"
-#: engine/core/models.py:742
+#: engine/core/models.py:763
msgid "boolean"
msgstr "布尔型"
-#: engine/core/models.py:743
+#: engine/core/models.py:764
msgid "array"
msgstr "阵列"
-#: engine/core/models.py:744
+#: engine/core/models.py:765
msgid "object"
msgstr "对象"
-#: engine/core/models.py:746
+#: engine/core/models.py:767
msgid "type of the attribute's value"
msgstr "属性值的类型"
-#: engine/core/models.py:747
+#: engine/core/models.py:768
msgid "value type"
msgstr "价值类型"
-#: engine/core/models.py:752
+#: engine/core/models.py:773
msgid "name of this attribute"
msgstr "该属性的名称"
-#: engine/core/models.py:753
+#: engine/core/models.py:774
msgid "attribute's name"
msgstr "属性名称"
-#: engine/core/models.py:758
+#: engine/core/models.py:779
msgid "is filterable"
msgstr "可过滤"
-#: engine/core/models.py:759
+#: engine/core/models.py:781
msgid "designates whether this attribute can be used for filtering or not"
msgstr "指定该属性是否可用于筛选"
-#: engine/core/models.py:771 engine/core/models.py:789
+#: engine/core/models.py:794 engine/core/models.py:812
#: engine/core/templates/digital_order_delivered_email.html:134
msgid "attribute"
msgstr "属性"
-#: engine/core/models.py:777
+#: engine/core/models.py:800
msgid ""
"Represents a specific value for an attribute that is linked to a product. It"
" links the 'attribute' to a unique 'value', allowing better organization and"
" dynamic representation of product characteristics."
msgstr "代表与产品相关联的属性的特定值。它将 \"属性 \"与唯一的 \"值 \"联系起来,从而更好地组织和动态呈现产品特征。"
-#: engine/core/models.py:788
+#: engine/core/models.py:811
msgid "attribute of this value"
msgstr "该值的属性"
-#: engine/core/models.py:796
+#: engine/core/models.py:819
msgid "the specific product associated with this attribute's value"
msgstr "与该属性值相关的特定产品"
-#: engine/core/models.py:802
+#: engine/core/models.py:825
msgid "the specific value for this attribute"
msgstr "该属性的具体值"
-#: engine/core/models.py:815
+#: engine/core/models.py:838
msgid ""
"Represents a product image associated with a product in the system. This "
"class is designed to manage images for products, including functionality for"
@@ -1947,39 +1947,39 @@ msgid ""
msgstr ""
"代表与系统中产品相关联的产品图片。该类用于管理产品图片,包括上传图片文件、将图片与特定产品关联以及确定图片显示顺序等功能。它还包括一个为图像提供替代文本的可访问性功能。"
-#: engine/core/models.py:826
+#: engine/core/models.py:849
msgid "provide alternative text for the image for accessibility"
msgstr "为图像提供替代文字,以便于访问"
-#: engine/core/models.py:827
+#: engine/core/models.py:850
msgid "image alt text"
msgstr "图片 alt 文本"
-#: engine/core/models.py:830
+#: engine/core/models.py:853
msgid "upload the image file for this product"
msgstr "上传该产品的图片文件"
-#: engine/core/models.py:831 engine/core/models.py:862
+#: engine/core/models.py:854 engine/core/models.py:885
msgid "product image"
msgstr "产品图片"
-#: engine/core/models.py:836
+#: engine/core/models.py:859
msgid "determines the order in which images are displayed"
msgstr "确定图像的显示顺序"
-#: engine/core/models.py:837
+#: engine/core/models.py:860
msgid "display priority"
msgstr "显示优先级"
-#: engine/core/models.py:842
+#: engine/core/models.py:865
msgid "the product that this image represents"
msgstr "该图片所代表的产品"
-#: engine/core/models.py:863
+#: engine/core/models.py:886
msgid "product images"
msgstr "产品图片"
-#: engine/core/models.py:868
+#: engine/core/models.py:891
msgid ""
"Represents a promotional campaign for products with a discount. This class "
"is used to define and manage promotional campaigns that offer a percentage-"
@@ -1990,39 +1990,39 @@ msgid ""
msgstr ""
"代表有折扣的产品促销活动。该类用于定义和管理为产品提供百分比折扣的促销活动。该类包括用于设置折扣率、提供促销详情以及将其链接到适用产品的属性。它与产品目录集成,以确定促销活动中受影响的产品。"
-#: engine/core/models.py:880
+#: engine/core/models.py:903
msgid "percentage discount for the selected products"
msgstr "所选产品的折扣百分比"
-#: engine/core/models.py:881
+#: engine/core/models.py:904
msgid "discount percentage"
msgstr "折扣百分比"
-#: engine/core/models.py:886
+#: engine/core/models.py:909
msgid "provide a unique name for this promotion"
msgstr "为该促销活动提供一个独特的名称"
-#: engine/core/models.py:887
+#: engine/core/models.py:910
msgid "promotion name"
msgstr "推广名称"
-#: engine/core/models.py:893
+#: engine/core/models.py:916
msgid "promotion description"
msgstr "促销说明"
-#: engine/core/models.py:898
+#: engine/core/models.py:921
msgid "select which products are included in this promotion"
msgstr "选择促销活动包括哪些产品"
-#: engine/core/models.py:899
+#: engine/core/models.py:922
msgid "included products"
msgstr "包括产品"
-#: engine/core/models.py:903
+#: engine/core/models.py:926
msgid "promotion"
msgstr "促销活动"
-#: engine/core/models.py:914
+#: engine/core/models.py:937
msgid ""
"Represents a user's wishlist for storing and managing desired products. The "
"class provides functionality to manage a collection of products, supporting "
@@ -2030,23 +2030,23 @@ msgid ""
"operations for adding and removing multiple products at once."
msgstr "代表用户用于存储和管理所需产品的愿望清单。该类提供管理产品集合的功能,支持添加和删除产品等操作,还支持同时添加和删除多个产品的操作。"
-#: engine/core/models.py:926
+#: engine/core/models.py:949
msgid "products that the user has marked as wanted"
msgstr "用户标记为想要的产品"
-#: engine/core/models.py:934
+#: engine/core/models.py:957
msgid "user who owns this wishlist"
msgstr "拥有此愿望清单的用户"
-#: engine/core/models.py:935
+#: engine/core/models.py:958
msgid "wishlist owner"
msgstr "心愿单所有者"
-#: engine/core/models.py:943
+#: engine/core/models.py:966
msgid "wishlist"
msgstr "愿望清单"
-#: engine/core/models.py:985
+#: engine/core/models.py:1008
msgid ""
"Represents a documentary record tied to a product. This class is used to "
"store information about documentaries related to specific products, "
@@ -2057,19 +2057,19 @@ msgid ""
msgstr ""
"代表与产品相关的文档记录。该类用于存储与特定产品相关的文档信息,包括文件上传及其元数据。它包含处理文件类型和文档文件存储路径的方法和属性。它扩展了特定混合类的功能,并提供了额外的自定义功能。"
-#: engine/core/models.py:998
+#: engine/core/models.py:1023
msgid "documentary"
msgstr "纪录片"
-#: engine/core/models.py:999
+#: engine/core/models.py:1024
msgid "documentaries"
msgstr "纪录片"
-#: engine/core/models.py:1009
+#: engine/core/models.py:1034
msgid "unresolved"
msgstr "未解决"
-#: engine/core/models.py:1014
+#: engine/core/models.py:1039
msgid ""
"Represents an address entity that includes location details and associations"
" with a user. Provides functionality for geographic and address data "
@@ -2083,59 +2083,59 @@ msgstr ""
"代表一个地址实体,其中包括位置详情以及与用户的关联。提供地理和地址数据存储功能,以及与地理编码服务集成的功能。该类旨在存储详细的地址信息,包括街道、城市、地区、国家和地理位置(经度和纬度)等组件。它支持与地理编码"
" API 集成,可存储原始 API 响应,以便进一步处理或检查。该类还可以将地址与用户关联起来,方便个性化数据处理。"
-#: engine/core/models.py:1029
+#: engine/core/models.py:1054
msgid "address line for the customer"
msgstr "客户地址栏"
-#: engine/core/models.py:1030
+#: engine/core/models.py:1055
msgid "address line"
msgstr "地址栏"
-#: engine/core/models.py:1032
+#: engine/core/models.py:1057
msgid "street"
msgstr "街道"
-#: engine/core/models.py:1033
+#: engine/core/models.py:1058
msgid "district"
msgstr "地区"
-#: engine/core/models.py:1034
+#: engine/core/models.py:1059
msgid "city"
msgstr "城市"
-#: engine/core/models.py:1035
+#: engine/core/models.py:1060
msgid "region"
msgstr "地区"
-#: engine/core/models.py:1036
+#: engine/core/models.py:1061
msgid "postal code"
msgstr "邮政编码"
-#: engine/core/models.py:1037
+#: engine/core/models.py:1062
msgid "country"
msgstr "国家"
-#: engine/core/models.py:1044
+#: engine/core/models.py:1069
msgid "geolocation point: (longitude, latitude)"
msgstr "地理位置点(经度、纬度)"
-#: engine/core/models.py:1047
+#: engine/core/models.py:1075
msgid "full JSON response from geocoder for this address"
msgstr "地理编码器对此地址的完整 JSON 响应"
-#: engine/core/models.py:1052
+#: engine/core/models.py:1081
msgid "stored JSON response from the geocoding service"
msgstr "存储的来自地理编码服务的 JSON 响应"
-#: engine/core/models.py:1060
+#: engine/core/models.py:1091
msgid "address"
msgstr "地址"
-#: engine/core/models.py:1061
+#: engine/core/models.py:1092
msgid "addresses"
msgstr "地址"
-#: engine/core/models.py:1073
+#: engine/core/models.py:1104
msgid ""
"Represents a promotional code that can be used for discounts, managing its "
"validity, type of discount, and application. The PromoCode class stores "
@@ -2147,86 +2147,86 @@ msgstr ""
"代表可用于折扣的促销代码,管理其有效期、折扣类型和应用。PromoCode "
"类存储促销代码的详细信息,包括其唯一标识符、折扣属性(金额或百分比)、有效期、关联用户(如有)及其使用状态。该类包含验证促销代码并将其应用于订单的功能,同时确保符合约束条件。"
-#: engine/core/models.py:1087
+#: engine/core/models.py:1118
msgid "unique code used by a user to redeem a discount"
msgstr "用户用于兑换折扣的唯一代码"
-#: engine/core/models.py:1088
+#: engine/core/models.py:1119
msgid "promo code identifier"
msgstr "促销代码标识符"
-#: engine/core/models.py:1095
+#: engine/core/models.py:1126
msgid "fixed discount amount applied if percent is not used"
msgstr "如果不使用百分比,则使用固定折扣额"
-#: engine/core/models.py:1096
+#: engine/core/models.py:1127
msgid "fixed discount amount"
msgstr "固定折扣额"
-#: engine/core/models.py:1102
+#: engine/core/models.py:1133
msgid "percentage discount applied if fixed amount is not used"
msgstr "未使用固定金额时适用的折扣百分比"
-#: engine/core/models.py:1103
+#: engine/core/models.py:1134
msgid "percentage discount"
msgstr "折扣百分比"
-#: engine/core/models.py:1108
+#: engine/core/models.py:1139
msgid "timestamp when the promocode expires"
msgstr "促销代码过期的时间戳"
-#: engine/core/models.py:1109
+#: engine/core/models.py:1140
msgid "end validity time"
msgstr "结束有效时间"
-#: engine/core/models.py:1114
+#: engine/core/models.py:1145
msgid "timestamp from which this promocode is valid"
msgstr "该促销代码有效的时间戳"
-#: engine/core/models.py:1115
+#: engine/core/models.py:1146
msgid "start validity time"
msgstr "开始有效时间"
-#: engine/core/models.py:1120
+#: engine/core/models.py:1151
msgid "timestamp when the promocode was used, blank if not used yet"
msgstr "使用促销代码的时间戳,如果尚未使用,则留空"
-#: engine/core/models.py:1121
+#: engine/core/models.py:1152
msgid "usage timestamp"
msgstr "使用时间戳"
-#: engine/core/models.py:1126
+#: engine/core/models.py:1157
msgid "user assigned to this promocode if applicable"
msgstr "分配给此促销代码的用户(如适用"
-#: engine/core/models.py:1127
+#: engine/core/models.py:1158
msgid "assigned user"
msgstr "指定用户"
-#: engine/core/models.py:1134
+#: engine/core/models.py:1165
msgid "promo code"
msgstr "促销代码"
-#: engine/core/models.py:1135
+#: engine/core/models.py:1166
msgid "promo codes"
msgstr "促销代码"
-#: engine/core/models.py:1150
+#: engine/core/models.py:1182
msgid ""
"only one type of discount should be defined (amount or percent), but not "
"both or neither."
msgstr "只能定义一种折扣类型(金额或百分比),而不能同时定义两种类型或两者都不定义。"
-#: engine/core/models.py:1171
+#: engine/core/models.py:1204
msgid "promocode already used"
msgstr "促销代码已被使用"
-#: engine/core/models.py:1187
+#: engine/core/models.py:1226
#, python-brace-format
msgid "invalid discount type for promocode {self.uuid}"
msgstr "促销代码 {self.uuid} 的折扣类型无效!"
-#: engine/core/models.py:1196
+#: engine/core/models.py:1235
msgid ""
"Represents an order placed by a user. This class models an order within the "
"application, including its various attributes such as billing and shipping "
@@ -2237,145 +2237,145 @@ msgid ""
msgstr ""
"代表用户下达的订单。该类在应用程序中模拟订单,包括订单的各种属性,如账单和发货信息、状态、关联用户、通知和相关操作。订单可以有关联的产品,可以应用促销活动,设置地址,更新发货或账单详情。同样,该功能还支持在订单生命周期中管理产品。"
-#: engine/core/models.py:1213
+#: engine/core/models.py:1252
msgid "the billing address used for this order"
msgstr "该订单使用的账单地址"
-#: engine/core/models.py:1221
+#: engine/core/models.py:1260
msgid "optional promo code applied to this order"
msgstr "此订单可选择使用促销代码"
-#: engine/core/models.py:1222
+#: engine/core/models.py:1261
msgid "applied promo code"
msgstr "应用促销代码"
-#: engine/core/models.py:1230
+#: engine/core/models.py:1269
msgid "the shipping address used for this order"
msgstr "该订单使用的送货地址"
-#: engine/core/models.py:1231
+#: engine/core/models.py:1270
msgid "shipping address"
msgstr "送货地址"
-#: engine/core/models.py:1237
+#: engine/core/models.py:1276
msgid "current status of the order in its lifecycle"
msgstr "订单在其生命周期中的当前状态"
-#: engine/core/models.py:1238
+#: engine/core/models.py:1277
msgid "order status"
msgstr "订单状态"
-#: engine/core/models.py:1243 engine/core/models.py:1769
+#: engine/core/models.py:1282 engine/core/models.py:1881
msgid "json structure of notifications to display to users"
msgstr "向用户显示的通知的 JSON 结构,在管理用户界面中使用表格视图"
-#: engine/core/models.py:1249
+#: engine/core/models.py:1288
msgid "json representation of order attributes for this order"
msgstr "该订单属性的 JSON 表示形式"
-#: engine/core/models.py:1255
+#: engine/core/models.py:1294
msgid "the user who placed the order"
msgstr "下订单的用户"
-#: engine/core/models.py:1256
+#: engine/core/models.py:1295
msgid "user"
msgstr "用户"
-#: engine/core/models.py:1262
+#: engine/core/models.py:1301
msgid "the timestamp when the order was finalized"
msgstr "订单确定的时间戳"
-#: engine/core/models.py:1263
+#: engine/core/models.py:1302
msgid "buy time"
msgstr "购买时间"
-#: engine/core/models.py:1270
+#: engine/core/models.py:1309
msgid "a human-readable identifier for the order"
msgstr "订单的人工可读标识符"
-#: engine/core/models.py:1271
+#: engine/core/models.py:1310
msgid "human readable id"
msgstr "人类可读 ID"
-#: engine/core/models.py:1277
+#: engine/core/models.py:1316
msgid "order"
msgstr "订购"
-#: engine/core/models.py:1319
+#: engine/core/models.py:1363
msgid "a user must have only one pending order at a time"
msgstr "用户每次只能有一个挂单!"
-#: engine/core/models.py:1351
+#: engine/core/models.py:1396
msgid "you cannot add products to an order that is not a pending one"
msgstr "您不能向非待处理订单添加产品"
-#: engine/core/models.py:1356
+#: engine/core/models.py:1402
msgid "you cannot add inactive products to order"
msgstr "您不能在订单中添加非活动产品"
-#: engine/core/models.py:1373
+#: engine/core/models.py:1424
msgid "you cannot add more products than available in stock"
msgstr "添加的产品数量不能超过现有库存"
-#: engine/core/models.py:1395 engine/core/models.py:1420
-#: engine/core/models.py:1428
+#: engine/core/models.py:1448 engine/core/models.py:1477
+#: engine/core/models.py:1487
msgid "you cannot remove products from an order that is not a pending one"
msgstr "您不能从非待处理订单中删除产品"
-#: engine/core/models.py:1416
+#: engine/core/models.py:1472
#, python-brace-format
msgid "{name} does not exist with query <{query}>"
msgstr "查询 <{query}> 时,{name} 不存在!"
-#: engine/core/models.py:1448
+#: engine/core/models.py:1511
msgid "promocode does not exist"
msgstr "促销代码不存在"
-#: engine/core/models.py:1454
+#: engine/core/models.py:1526
msgid "you can only buy physical products with shipping address specified"
msgstr "您只能购买指定送货地址的实物产品!"
-#: engine/core/models.py:1473
+#: engine/core/models.py:1547
msgid "address does not exist"
msgstr "地址不存在"
-#: engine/core/models.py:1494 engine/core/models.py:1563
+#: engine/core/models.py:1569 engine/core/models.py:1648
msgid "you can not buy at this moment, please try again in a few minutes"
msgstr "您现在无法购买,请稍后再试。"
-#: engine/core/models.py:1497 engine/core/models.py:1559
+#: engine/core/models.py:1575 engine/core/models.py:1641
msgid "invalid force value"
msgstr "力值无效"
-#: engine/core/models.py:1503 engine/core/models.py:1566
+#: engine/core/models.py:1581 engine/core/models.py:1652
msgid "you cannot purchase an empty order!"
msgstr "您不能购买空单!"
-#: engine/core/models.py:1522
+#: engine/core/models.py:1602
msgid "you cannot buy an order without a user"
msgstr "没有用户就无法购买订单!"
-#: engine/core/models.py:1536
+#: engine/core/models.py:1616
msgid "a user without a balance cannot buy with balance"
msgstr "没有余额的用户不能使用余额购买!"
-#: engine/core/models.py:1541
+#: engine/core/models.py:1622
msgid "insufficient funds to complete the order"
msgstr "资金不足,无法完成订单"
-#: engine/core/models.py:1575
+#: engine/core/models.py:1663
msgid ""
"you cannot buy without registration, please provide the following "
"information: customer name, customer email, customer phone number"
msgstr "未经注册不能购买,请提供以下信息:客户姓名、客户电子邮件、客户电话号码"
-#: engine/core/models.py:1584
+#: engine/core/models.py:1674
#, python-brace-format
msgid ""
"invalid payment method: {payment_method} from {available_payment_methods}"
msgstr "付款方式无效:来自 {available_payment_methods} 的 {payment_method} !"
-#: engine/core/models.py:1699
+#: engine/core/models.py:1805
msgid ""
"Manages user feedback for products. This class is designed to capture and "
"store user feedback for specific products that they have purchased. It "
@@ -2385,32 +2385,32 @@ msgid ""
msgstr ""
"管理产品的用户反馈。该类用于捕获和存储用户对其购买的特定产品的反馈。它包含用于存储用户评论的属性、订单中相关产品的引用以及用户指定的评分。该类使用数据库字段对反馈数据进行有效建模和管理。"
-#: engine/core/models.py:1711
+#: engine/core/models.py:1817
msgid "user-provided comments about their experience with the product"
msgstr "用户提供的产品使用体验评论"
-#: engine/core/models.py:1712
+#: engine/core/models.py:1818
msgid "feedback comments"
msgstr "反馈意见"
-#: engine/core/models.py:1719
+#: engine/core/models.py:1826
msgid ""
"references the specific product in an order that this feedback is about"
msgstr "引用该反馈意见涉及的订单中的具体产品"
-#: engine/core/models.py:1720
+#: engine/core/models.py:1828
msgid "related order product"
msgstr "相关订购产品"
-#: engine/core/models.py:1725
+#: engine/core/models.py:1833
msgid "user-assigned rating for the product"
msgstr "用户对产品的评分"
-#: engine/core/models.py:1726
+#: engine/core/models.py:1834
msgid "product rating"
msgstr "产品评级"
-#: engine/core/models.py:1742
+#: engine/core/models.py:1854
msgid ""
"Represents products associated with orders and their attributes. The "
"OrderProduct model maintains information about a product that is part of an "
@@ -2426,108 +2426,108 @@ msgstr ""
"模型维护订单中产品的相关信息,包括购买价格、数量、产品属性和状态等详细信息。它为用户和管理员管理通知,并处理返回产品余额或添加反馈等操作。该模型还提供支持业务逻辑的方法和属性,如计算总价或为数字产品生成下载"
" URL。该模型与订单和产品模型集成,并存储对它们的引用。"
-#: engine/core/models.py:1757
+#: engine/core/models.py:1869
msgid "the price paid by the customer for this product at purchase time"
msgstr "客户购买该产品时支付的价格"
-#: engine/core/models.py:1758
+#: engine/core/models.py:1870
msgid "purchase price at order time"
msgstr "订购时的购买价格"
-#: engine/core/models.py:1763
+#: engine/core/models.py:1875
msgid "internal comments for admins about this ordered product"
msgstr "管理员对该订购产品的内部评论"
-#: engine/core/models.py:1764
+#: engine/core/models.py:1876
msgid "internal comments"
msgstr "内部意见"
-#: engine/core/models.py:1770
+#: engine/core/models.py:1882
msgid "user notifications"
msgstr "用户通知"
-#: engine/core/models.py:1775
+#: engine/core/models.py:1887
msgid "json representation of this item's attributes"
msgstr "该项属性的 JSON 表示形式"
-#: engine/core/models.py:1776
+#: engine/core/models.py:1888
msgid "ordered product attributes"
msgstr "有序的产品属性"
-#: engine/core/models.py:1781
+#: engine/core/models.py:1893
msgid "reference to the parent order that contains this product"
msgstr "对包含该产品的父订单的引用"
-#: engine/core/models.py:1782
+#: engine/core/models.py:1894
msgid "parent order"
msgstr "父顺序"
-#: engine/core/models.py:1791
+#: engine/core/models.py:1903
msgid "the specific product associated with this order line"
msgstr "与该订单项目相关的具体产品"
-#: engine/core/models.py:1798
+#: engine/core/models.py:1910
msgid "quantity of this specific product in the order"
msgstr "订单中该特定产品的数量"
-#: engine/core/models.py:1799
+#: engine/core/models.py:1911
msgid "product quantity"
msgstr "产品数量"
-#: engine/core/models.py:1806
+#: engine/core/models.py:1918
msgid "current status of this product in the order"
msgstr "订单中该产品的当前状态"
-#: engine/core/models.py:1807
+#: engine/core/models.py:1919
msgid "product line status"
msgstr "产品系列状态"
-#: engine/core/models.py:1872
+#: engine/core/models.py:1986
msgid "order product must have an order"
msgstr "订单产品必须有相关的订单!"
-#: engine/core/models.py:1874
+#: engine/core/models.py:1988
#, python-brace-format
msgid "wrong action specified for feedback: {action}"
msgstr "为反馈指定了错误的操作:{action}!"
-#: engine/core/models.py:1888
+#: engine/core/models.py:2005
msgid "you cannot feedback an order which is not received"
msgstr "您不能反馈未收到的订单"
-#: engine/core/models.py:1894
+#: engine/core/models.py:2014
msgid "name"
msgstr "名称"
-#: engine/core/models.py:1895
+#: engine/core/models.py:2016
msgid "URL of the integration"
msgstr "集成的 URL"
-#: engine/core/models.py:1896
+#: engine/core/models.py:2019
msgid "authentication credentials"
msgstr "认证证书"
-#: engine/core/models.py:1918
+#: engine/core/models.py:2042
msgid "you can only have one default CRM provider"
msgstr "只能有一个默认 CRM 提供商"
-#: engine/core/models.py:1928
+#: engine/core/models.py:2052
msgid "CRM"
msgstr "客户关系管理"
-#: engine/core/models.py:1929
+#: engine/core/models.py:2053
msgid "CRMs"
msgstr "客户关系管理"
-#: engine/core/models.py:1941
+#: engine/core/models.py:2069
msgid "order CRM link"
msgstr "订单的客户关系管理链接"
-#: engine/core/models.py:1942
+#: engine/core/models.py:2070
msgid "orders CRM links"
msgstr "订单的客户关系管理链接"
-#: engine/core/models.py:1947
+#: engine/core/models.py:2075
msgid ""
"Represents the downloading functionality for digital assets associated with "
"orders. The DigitalAssetDownload class provides the ability to manage and "
@@ -2540,15 +2540,15 @@ msgstr ""
"类提供了管理和访问与订单产品相关的下载的功能。该类维护相关订单产品的信息、下载次数以及资产是否公开可见。当相关订单处于完成状态时,该类包含一个生成用于下载资产的"
" URL 的方法。"
-#: engine/core/models.py:1961
+#: engine/core/models.py:2091
msgid "download"
msgstr "下载"
-#: engine/core/models.py:1962
+#: engine/core/models.py:2092
msgid "downloads"
msgstr "下载"
-#: engine/core/serializers/utility.py:89
+#: engine/core/serializers/utility.py:91
msgid ""
"you must provide a comment, rating, and order product uuid to add feedback."
msgstr "您必须提供评论、评级和订单产品 uuid 才能添加反馈。"
@@ -2878,11 +2878,11 @@ msgstr ""
"版权所有\n"
" 保留所有权利"
-#: engine/core/utils/caching.py:44
+#: engine/core/utils/caching.py:48
msgid "both data and timeout are required"
msgstr "需要数据和超时"
-#: engine/core/utils/caching.py:46
+#: engine/core/utils/caching.py:51
msgid "invalid timeout value, it must be between 0 and 216000 seconds"
msgstr "超时值无效,必须介于 0 和 216000 秒之间"
@@ -2891,17 +2891,17 @@ msgstr "超时值无效,必须介于 0 和 216000 秒之间"
msgid "{settings.PROJECT_NAME} | contact us initiated"
msgstr "{settings.PROJECT_NAME}| 联系我们"
-#: engine/core/utils/emailing.py:73
+#: engine/core/utils/emailing.py:81
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order confirmation"
msgstr "{settings.PROJECT_NAME}| 订单确认"
-#: engine/core/utils/emailing.py:105
+#: engine/core/utils/emailing.py:115
#, python-brace-format
msgid "{settings.PROJECT_NAME} | order delivered"
msgstr "{settings.PROJECT_NAME} | 订单已送达"
-#: engine/core/utils/emailing.py:188
+#: engine/core/utils/emailing.py:203
#, python-brace-format
msgid "{settings.PROJECT_NAME} | promocode granted"
msgstr "{settings.PROJECT_NAME} | 授予的促销代码"
@@ -2914,58 +2914,58 @@ msgstr "您没有执行此操作的权限。"
msgid "NOMINATIM_URL must be configured."
msgstr "必须配置 NOMINATIM_URL 参数!"
-#: engine/core/validators.py:19
+#: engine/core/validators.py:21
#, python-brace-format
msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels"
msgstr "图像尺寸不应超过 w{max_width} x h{max_height} 像素!"
-#: engine/core/views.py:91
+#: engine/core/views.py:105
msgid ""
"Handles the request for the sitemap index and returns an XML response. It "
"ensures the response includes the appropriate content type header for XML."
msgstr "处理网站地图索引请求并返回 XML 响应。它确保响应包含适当的 XML 内容类型标头。"
-#: engine/core/views.py:106
+#: engine/core/views.py:120
msgid ""
"Handles the detailed view response for a sitemap. This function processes "
"the request, fetches the appropriate sitemap detail response, and sets the "
"Content-Type header for XML."
msgstr "处理网站地图的详细视图响应。该函数处理请求,获取相应的网站地图详细响应,并将 Content-Type 标头设置为 XML。"
-#: engine/core/views.py:141
+#: engine/core/views.py:156
msgid ""
"Returns a list of supported languages and their corresponding information."
msgstr "返回支持语言及其相应信息的列表。"
-#: engine/core/views.py:173
+#: engine/core/views.py:183
msgid "Returns the parameters of the website as a JSON object."
msgstr "以 JSON 对象形式返回网站参数。"
-#: engine/core/views.py:192
+#: engine/core/views.py:199
msgid ""
"Handles cache operations such as reading and setting cache data with a "
"specified key and timeout."
msgstr "处理缓存操作,如使用指定的键和超时读取和设置缓存数据。"
-#: engine/core/views.py:219
+#: engine/core/views.py:221
msgid "Handles `contact us` form submissions."
msgstr "处理 \"联系我们 \"表单提交。"
-#: engine/core/views.py:240
+#: engine/core/views.py:237
msgid ""
"Handles requests for processing and validating URLs from incoming POST "
"requests."
msgstr "处理来自传入 POST 请求的处理和验证 URL 的请求。"
-#: engine/core/views.py:280
+#: engine/core/views.py:274
msgid "Handles global search queries."
msgstr "处理全局搜索查询。"
-#: engine/core/views.py:295
+#: engine/core/views.py:290
msgid "Handles the logic of buying as a business without registration."
msgstr "处理未注册企业的购买逻辑。"
-#: engine/core/views.py:332
+#: engine/core/views.py:338
msgid ""
"Handles the downloading of a digital asset associated with an order.\n"
"This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
@@ -2973,31 +2973,31 @@ msgstr ""
"处理与订单相关的数字资产的下载。\n"
"此函数会尝试为位于项目存储目录中的数字资产文件提供服务。如果未找到文件,则会出现 HTTP 404 错误,表示资源不可用。"
-#: engine/core/views.py:343
+#: engine/core/views.py:349
msgid "order_product_uuid is required"
msgstr "order_product_uuid 为必填项"
-#: engine/core/views.py:350
+#: engine/core/views.py:356
msgid "order product does not exist"
msgstr "订单产品不存在"
-#: engine/core/views.py:353
+#: engine/core/views.py:359
msgid "you can only download the digital asset once"
msgstr "您只能下载一次数字资产"
-#: engine/core/views.py:356
+#: engine/core/views.py:363
msgid "the order must be paid before downloading the digital asset"
msgstr "在下载数字资产前必须支付订单费用"
-#: engine/core/views.py:362
+#: engine/core/views.py:370
msgid "the order product does not have a product"
msgstr "订单产品没有产品"
-#: engine/core/views.py:399
+#: engine/core/views.py:414
msgid "favicon not found"
msgstr "未找到 favicon"
-#: engine/core/views.py:404
+#: engine/core/views.py:419
msgid ""
"Handles requests for the favicon of a website.\n"
"This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
@@ -3005,7 +3005,7 @@ msgstr ""
"处理网站的 favicon 请求。\n"
"该函数会尝试为位于项目静态目录中的 favicon 文件提供服务。如果找不到 favicon 文件,就会出现 HTTP 404 错误,表示资源不可用。"
-#: engine/core/views.py:416
+#: engine/core/views.py:431
msgid ""
"Redirects the request to the admin index page. The function handles incoming"
" HTTP requests and redirects them to the Django admin interface index page. "
@@ -3014,20 +3014,20 @@ msgstr ""
"将请求重定向到管理索引页面。该函数处理传入的 HTTP 请求并将其重定向到 Django 管理界面索引页面。它使用 Django 的 "
"`redirect` 函数来处理 HTTP 重定向。"
-#: engine/core/views.py:429
+#: engine/core/views.py:443
msgid "Returns current version of the eVibes. "
msgstr "返回 eVibes 的当前版本。"
-#: engine/core/views.py:623 engine/core/views.py:636
+#: engine/core/views.py:672 engine/core/views.py:687
#, python-format
msgid "Revenue & Orders (last %(days)d)"
msgstr ""
-#: engine/core/views.py:793
+#: engine/core/views.py:868
msgid "Returns custom variables for Dashboard. "
msgstr "返回 Dashboard 的自定义变量。"
-#: engine/core/viewsets.py:136
+#: engine/core/viewsets.py:139
msgid ""
"Defines a viewset for managing Evibes-related operations. The EvibesViewSet "
"class inherits from ModelViewSet and provides functionality for handling "
@@ -3038,7 +3038,7 @@ msgstr ""
"定义用于管理 Evibes 相关操作的视图集。EvibesViewSet 类继承于 ModelViewSet,提供了处理 Evibes "
"实体上的操作和运行的功能。它包括支持基于当前操作的动态序列化类、可定制的权限和渲染格式。"
-#: engine/core/viewsets.py:156
+#: engine/core/viewsets.py:160
msgid ""
"Represents a viewset for managing AttributeGroup objects. Handles operations"
" related to AttributeGroup, including filtering, serialization, and "
@@ -3049,7 +3049,7 @@ msgstr ""
"代表用于管理属性组对象的视图集。处理与 AttributeGroup 相关的操作,包括过滤、序列化和检索数据。该类是应用程序 API 层的一部分,为处理"
" AttributeGroup 数据的请求和响应提供了标准化方法。"
-#: engine/core/viewsets.py:175
+#: engine/core/viewsets.py:179
msgid ""
"Handles operations related to Attribute objects within the application. "
"Provides a set of API endpoints to interact with Attribute data. This class "
@@ -3061,7 +3061,7 @@ msgstr ""
"在应用程序中处理与属性对象相关的操作。提供一组 API "
"端点,用于与属性数据交互。该类管理属性对象的查询、过滤和序列化,允许对返回的数据进行动态控制,例如根据请求按特定字段进行过滤或检索详细信息与简化信息。"
-#: engine/core/viewsets.py:194
+#: engine/core/viewsets.py:198
msgid ""
"A viewset for managing AttributeValue objects. This viewset provides "
"functionality for listing, retrieving, creating, updating, and deleting "
@@ -3072,7 +3072,7 @@ msgstr ""
"用于管理 AttributeValue 对象的视图集。该视图集提供了用于列出、检索、创建、更新和删除 AttributeValue 对象的功能。它与 "
"Django REST 框架的视图集机制集成,并为不同的操作使用适当的序列化器。过滤功能通过 DjangoFilterBackend 提供。"
-#: engine/core/viewsets.py:213
+#: engine/core/viewsets.py:217
msgid ""
"Manages views for Category-related operations. The CategoryViewSet class is "
"responsible for handling operations related to the Category model in the "
@@ -3083,7 +3083,7 @@ msgstr ""
"管理类别相关操作的视图。CategoryViewSet "
"类负责处理系统中与类别模型相关的操作。它支持类别数据的检索、过滤和序列化。视图集还强制执行权限,确保只有授权用户才能访问特定数据。"
-#: engine/core/viewsets.py:326
+#: engine/core/viewsets.py:346
msgid ""
"Represents a viewset for managing Brand instances. This class provides "
"functionality for querying, filtering, and serializing Brand objects. It "
@@ -3093,7 +3093,7 @@ msgstr ""
"代表用于管理品牌实例的视图集。该类提供了查询、过滤和序列化品牌对象的功能。它使用 Django 的 ViewSet 框架来简化品牌对象 API "
"端点的实现。"
-#: engine/core/viewsets.py:438
+#: engine/core/viewsets.py:458
msgid ""
"Manages operations related to the `Product` model in the system. This class "
"provides a viewset for managing products, including their filtering, "
@@ -3107,7 +3107,7 @@ msgstr ""
"`EvibesViewSet` 扩展而来,使用通用功能,并与 Django REST 框架集成,用于 RESTful API "
"操作。包括检索产品详细信息、应用权限和访问产品相关反馈的方法。"
-#: engine/core/viewsets.py:574
+#: engine/core/viewsets.py:605
msgid ""
"Represents a viewset for managing Vendor objects. This viewset allows "
"fetching, filtering, and serializing Vendor data. It defines the queryset, "
@@ -3118,7 +3118,7 @@ msgstr ""
"代表用于管理供应商对象的视图集。该视图集允许获取、过滤和序列化 Vendor "
"数据。它定义了用于处理不同操作的查询集、过滤器配置和序列化器类。该类的目的是通过 Django REST 框架提供对 Vendor 相关资源的简化访问。"
-#: engine/core/viewsets.py:594
+#: engine/core/viewsets.py:625
msgid ""
"Representation of a view set handling Feedback objects. This class manages "
"operations related to Feedback objects, including listing, filtering, and "
@@ -3130,7 +3130,7 @@ msgstr ""
"处理反馈对象的视图集的表示。该类管理与反馈对象相关的操作,包括列出、筛选和检索详细信息。该视图集的目的是为不同的操作提供不同的序列化器,并对可访问的反馈对象实施基于权限的处理。它扩展了基本的"
" `EvibesViewSet` 并使用 Django 的过滤系统来查询数据。"
-#: engine/core/viewsets.py:621
+#: engine/core/viewsets.py:652
msgid ""
"ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes "
@@ -3144,7 +3144,7 @@ msgstr ""
"ViewSet。该类提供了检索、修改和管理订单对象的功能。它包括用于处理订单操作的各种端点,如添加或删除产品、为注册用户和未注册用户执行购买操作,以及检索当前已验证用户的待处理订单。ViewSet"
" 根据正在执行的特定操作使用多个序列化器,并在与订单数据交互时执行相应的权限。"
-#: engine/core/viewsets.py:825
+#: engine/core/viewsets.py:914
msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It "
@@ -3156,25 +3156,25 @@ msgstr ""
"模型的自定义操作。它包括过滤、权限检查和根据请求的操作切换序列化器。此外,它还提供了一个详细的操作,用于处理有关 OrderProduct "
"实例的反馈信息"
-#: engine/core/viewsets.py:879
+#: engine/core/viewsets.py:974
msgid "Manages operations related to Product images in the application. "
msgstr "管理应用程序中与产品图像相关的操作。"
-#: engine/core/viewsets.py:892
+#: engine/core/viewsets.py:988
msgid ""
"Manages the retrieval and handling of PromoCode instances through various "
"API actions."
msgstr "通过各种 API 操作管理 PromoCode 实例的检索和处理。"
-#: engine/core/viewsets.py:914
+#: engine/core/viewsets.py:1019
msgid "Represents a view set for managing promotions. "
msgstr "代表用于管理促销活动的视图集。"
-#: engine/core/viewsets.py:927
+#: engine/core/viewsets.py:1032
msgid "Handles operations related to Stock data in the system."
msgstr "处理系统中与库存数据有关的操作。"
-#: engine/core/viewsets.py:941
+#: engine/core/viewsets.py:1046
msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the "
@@ -3187,7 +3187,7 @@ msgstr ""
"用于管理愿望清单操作的 ViewSet。WishlistViewSet 提供了与用户愿望清单交互的端点,允许检索、修改和定制愿望清单中的产品。该 "
"ViewSet 支持添加、删除和批量操作愿望清单产品等功能。此外,还集成了权限检查功能,以确保用户只能管理自己的愿望清单,除非获得明确的权限。"
-#: engine/core/viewsets.py:1056
+#: engine/core/viewsets.py:1183
msgid ""
"This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom "
@@ -3198,12 +3198,12 @@ msgstr ""
"该类为管理 \"地址 \"对象提供了视图集功能。AddressViewSet 类支持与地址实体相关的 CRUD 操作、过滤和自定义操作。它包括针对不同 "
"HTTP 方法的专门行为、序列化器重载以及基于请求上下文的权限处理。"
-#: engine/core/viewsets.py:1123
+#: engine/core/viewsets.py:1254
#, python-brace-format
msgid "Geocoding error: {e}"
msgstr "地理编码错误:{e}"
-#: engine/core/viewsets.py:1131
+#: engine/core/viewsets.py:1262
msgid ""
"Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing "
diff --git a/engine/core/management/commands/check_translated.py b/engine/core/management/commands/check_translated.py
index 29e62927..afdcdac3 100644
--- a/engine/core/management/commands/check_translated.py
+++ b/engine/core/management/commands/check_translated.py
@@ -95,17 +95,17 @@ class Command(BaseCommand):
)
def handle(self, *args: list[Any], **options: dict[str, str | list[str]]) -> None:
- langs: list[str] = options.get("target_languages", []) # type: ignore [assignment]
+ langs: list[str] = options.get("target_languages", [])
if "ALL" in langs:
langs = list(dict(settings.LANGUAGES).keys())
apps_to_scan: set[str] = set(options["target_apps"])
if "ALL" in apps_to_scan:
apps_to_scan = set(TRANSLATABLE_APPS)
- root_path: str = options.get("root_path") or "/app/" # type: ignore [assignment]
+ root_path: str = options.get("root_path") or "/app/"
configs = list(apps.get_app_configs())
# noinspection PyTypeChecker
- configs.append(RootDirectory()) # type: ignore [arg-type]
+ configs.append(RootDirectory())
errors = 0
diff --git a/engine/core/management/commands/deepl_translate.py b/engine/core/management/commands/deepl_translate.py
index b5441ea5..395ea2cc 100644
--- a/engine/core/management/commands/deepl_translate.py
+++ b/engine/core/management/commands/deepl_translate.py
@@ -30,7 +30,7 @@ def placeholderize(text: str) -> tuple[str, list[str]]:
"""
placeholders: list[str] = []
- def _repl(match: re.Match) -> str: # type: ignore [type-arg]
+ def _repl(match: re.Match) -> str:
idx = len(placeholders)
placeholders.append(match.group(0))
return f"__PH_{idx}__"
@@ -107,9 +107,9 @@ class Command(BaseCommand):
)
def handle(self, *args: list[Any], **options: dict[Any, Any]) -> None:
- target_langs: list[str] = options["target_languages"] # type: ignore [assignment]
+ target_langs: list[str] = options["target_languages"]
if "ALL" in target_langs:
- target_langs = DEEPL_TARGET_LANGUAGES_MAPPING.keys() # type: ignore [assignment]
+ target_langs = DEEPL_TARGET_LANGUAGES_MAPPING.keys()
target_apps = set(options["target_apps"])
if "ALL" in target_apps:
target_apps = {
@@ -125,7 +125,7 @@ class Command(BaseCommand):
try:
import readline
except ImportError:
- readline = None # type: ignore [assignment]
+ readline = None
for target_lang in target_langs:
api_code = DEEPL_TARGET_LANGUAGES_MAPPING.get(target_lang)
@@ -176,16 +176,16 @@ class Command(BaseCommand):
if readline:
def hook() -> None:
- readline.insert_text(default) # type: ignore [attr-defined] # noqa: B023
- readline.redisplay() # type: ignore [attr-defined]
+ readline.insert_text(default) # noqa: B023
+ readline.redisplay()
- readline.set_pre_input_hook(hook) # type: ignore [attr-defined]
+ readline.set_pre_input_hook(hook)
prompt = f"Enter translation for '{e.msgid}': "
user_in = input(prompt).strip()
if readline:
- readline.set_pre_input_hook(None) # type: ignore [attr-defined]
+ readline.set_pre_input_hook(None)
if user_in:
e.msgstr = user_in
diff --git a/engine/core/management/commands/delete_never_ordered_products.py b/engine/core/management/commands/delete_never_ordered_products.py
index 11a47347..7f9c8f10 100644
--- a/engine/core/management/commands/delete_never_ordered_products.py
+++ b/engine/core/management/commands/delete_never_ordered_products.py
@@ -19,7 +19,7 @@ class Command(BaseCommand):
)
def handle(self, *args: list[Any], **options: dict[Any, Any]) -> None:
- size: int = options["size"] # type: ignore [assignment]
+ size: int = options["size"]
while True:
batch_ids = list(
Product.objects.filter(orderproduct__isnull=True).values_list(
diff --git a/engine/core/management/commands/delete_products_by_description.py b/engine/core/management/commands/delete_products_by_description.py
index f39e1434..f249cf4d 100644
--- a/engine/core/management/commands/delete_products_by_description.py
+++ b/engine/core/management/commands/delete_products_by_description.py
@@ -19,7 +19,7 @@ class Command(BaseCommand):
)
def handle(self, *args: list[Any], **options: dict[Any, Any]) -> None:
- size: int = options["size"] # type: ignore [assignment]
+ size: int = options["size"]
while True:
batch_ids = list(
Product.objects.filter(
diff --git a/engine/core/management/commands/fetch_products.py b/engine/core/management/commands/fetch_products.py
index 27bd635a..56cd1922 100644
--- a/engine/core/management/commands/fetch_products.py
+++ b/engine/core/management/commands/fetch_products.py
@@ -11,7 +11,7 @@ class Command(BaseCommand):
self.style.SUCCESS("Starting fetching products task in worker container...")
)
- update_products_task.delay() # type: ignore [attr-defined]
+ update_products_task.delay()
self.stdout.write(
self.style.SUCCESS(
diff --git a/engine/core/managers.py b/engine/core/managers.py
index 36882106..69b24961 100644
--- a/engine/core/managers.py
+++ b/engine/core/managers.py
@@ -14,7 +14,7 @@ class AddressManager(models.Manager):
if not kwargs.get("raw_data"):
raise ValueError("'raw_data' (address string) must be provided.")
- params: dict[str, str | int] = { # type: ignore [annotation-unchecked]
+ params: dict[str, str | int] = {
"format": "json",
"addressdetails": 1,
"q": kwargs.get("raw_data"),
diff --git a/engine/core/models.py b/engine/core/models.py
index 63d8aaa8..7ff1797a 100644
--- a/engine/core/models.py
+++ b/engine/core/models.py
@@ -70,8 +70,8 @@ from evibes.utils.misc import create_object
logger = logging.getLogger(__name__)
-class AttributeGroup(ExportModelOperationsMixin("attribute_group"), NiceModel): # type: ignore [misc]
- __doc__ = _( # type: ignore
+class AttributeGroup(ExportModelOperationsMixin("attribute_group"), NiceModel):
+ __doc__ = _(
"Represents a group of attributes, which can be hierarchical."
" This class is used to manage and organize attribute groups."
" An attribute group can have a parent group, forming a hierarchical structure."
@@ -106,8 +106,8 @@ class AttributeGroup(ExportModelOperationsMixin("attribute_group"), NiceModel):
verbose_name_plural = _("attribute groups")
-class Vendor(ExportModelOperationsMixin("vendor"), NiceModel): # type: ignore [misc]
- __doc__ = _( # type: ignore
+class Vendor(ExportModelOperationsMixin("vendor"), NiceModel):
+ __doc__ = _(
"Represents a vendor entity capable of storing information about external vendors and their interaction requirements."
" The Vendor class is used to define and manage information related to an external vendor."
" It stores the vendor's name, authentication details required for communication,"
@@ -164,7 +164,7 @@ class Vendor(ExportModelOperationsMixin("vendor"), NiceModel): # type: ignore [
def __str__(self) -> str:
return self.name
- def save( # type: ignore [override]
+ def save(
self,
*,
force_insert: bool = False,
@@ -198,8 +198,8 @@ class Vendor(ExportModelOperationsMixin("vendor"), NiceModel): # type: ignore [
]
-class ProductTag(ExportModelOperationsMixin("product_tag"), NiceModel): # type: ignore [misc]
- __doc__ = _( # type: ignore
+class ProductTag(ExportModelOperationsMixin("product_tag"), NiceModel):
+ __doc__ = _(
"Represents a product tag used for classifying or identifying products."
" The ProductTag class is designed to uniquely identify and classify products through a combination"
" of an internal tag identifier and a user-friendly display name."
@@ -230,8 +230,8 @@ class ProductTag(ExportModelOperationsMixin("product_tag"), NiceModel): # type:
verbose_name_plural = _("product tags")
-class CategoryTag(ExportModelOperationsMixin("category_tag"), NiceModel): # type: ignore [misc]
- __doc__ = _( # type: ignore
+class CategoryTag(ExportModelOperationsMixin("category_tag"), NiceModel):
+ __doc__ = _(
"Represents a category tag used for products."
" This class models a category tag that can be used to associate and classify products."
" It includes attributes for an internal tag identifier and a user-friendly display name."
@@ -261,8 +261,8 @@ class CategoryTag(ExportModelOperationsMixin("category_tag"), NiceModel): # typ
verbose_name_plural = _("category tags")
-class Category(ExportModelOperationsMixin("category"), NiceModel, MPTTModel): # type: ignore [misc, django-manager-missing]
- __doc__ = _( # type: ignore
+class Category(ExportModelOperationsMixin("category"), NiceModel, MPTTModel):
+ __doc__ = _(
"Represents a category entity to organize and group related items in a hierarchical structure."
" Categories may have hierarchical relationships with other categories, supporting parent-child relationships."
" The class includes fields for metadata and visual representation,"
@@ -437,7 +437,7 @@ class Category(ExportModelOperationsMixin("category"), NiceModel, MPTTModel): #
):
bucket["possible_values"].append(value)
- return list(by_attr.values()) # type: ignore [arg-type]
+ return list(by_attr.values())
@cached_property
def image_url(self) -> str:
@@ -452,8 +452,8 @@ class Category(ExportModelOperationsMixin("category"), NiceModel, MPTTModel): #
ordering = ["tree_id", "lft"]
-class Brand(ExportModelOperationsMixin("brand"), NiceModel): # type: ignore [misc]
- __doc__ = _( # type: ignore
+class Brand(ExportModelOperationsMixin("brand"), NiceModel):
+ __doc__ = _(
"Represents a Brand object in the system. "
"This class handles information and attributes related to a brand, including its name, logos, "
"description, associated categories, a unique slug, and priority order. "
@@ -522,8 +522,8 @@ class Brand(ExportModelOperationsMixin("brand"), NiceModel): # type: ignore [mi
verbose_name_plural = _("brands")
-class Stock(ExportModelOperationsMixin("stock"), NiceModel): # type: ignore [misc]
- __doc__ = _( # type: ignore
+class Stock(ExportModelOperationsMixin("stock"), NiceModel):
+ __doc__ = _(
"Represents the stock of a product managed in the system."
" This class provides details about the relationship between vendors, products, and their stock information, "
"as well as inventory-related properties like price, purchase price, quantity, SKU, and digital assets."
@@ -588,8 +588,8 @@ class Stock(ExportModelOperationsMixin("stock"), NiceModel): # type: ignore [mi
verbose_name_plural = _("stock entries")
-class Product(ExportModelOperationsMixin("product"), NiceModel): # type: ignore [misc]
- __doc__ = _( # type: ignore
+class Product(ExportModelOperationsMixin("product"), NiceModel):
+ __doc__ = _(
"Represents a product with attributes such as category, brand, tags, digital status, name, description, part number, and slug."
" Provides related utility properties to retrieve ratings, feedback counts, price, quantity, and total orders."
" Designed for use in a system that handles e-commerce or inventory management."
@@ -695,7 +695,7 @@ class Product(ExportModelOperationsMixin("product"), NiceModel): # type: ignore
@cached_property
def discount_price(self) -> float | None:
- return self.promos.first().discount_percent if self.promos.exists() else None # type: ignore [union-attr]
+ return self.promos.first().discount_percent if self.promos.exists() else None
@property
def rating(self) -> float:
@@ -736,8 +736,8 @@ class Product(ExportModelOperationsMixin("product"), NiceModel): # type: ignore
self.__dict__["personal_orders_only"] = value
-class Attribute(ExportModelOperationsMixin("attribute"), NiceModel): # type: ignore [misc]
- __doc__ = _( # type: ignore
+class Attribute(ExportModelOperationsMixin("attribute"), NiceModel):
+ __doc__ = _(
"Represents an attribute in the system."
" This class is used to define and manage attributes,"
" which are customizable pieces of data that can be associated with other entities."
@@ -795,8 +795,8 @@ class Attribute(ExportModelOperationsMixin("attribute"), NiceModel): # type: ig
verbose_name_plural = _("attributes")
-class AttributeValue(ExportModelOperationsMixin("attribute_value"), NiceModel): # type: ignore [misc]
- __doc__ = _( # type: ignore
+class AttributeValue(ExportModelOperationsMixin("attribute_value"), NiceModel):
+ __doc__ = _(
"Represents a specific value for an attribute that is linked to a product. "
"It links the 'attribute' to a unique 'value', allowing "
"better organization and dynamic representation of product characteristics."
@@ -833,8 +833,8 @@ class AttributeValue(ExportModelOperationsMixin("attribute_value"), NiceModel):
verbose_name_plural = _("attribute values")
-class ProductImage(ExportModelOperationsMixin("product_image"), NiceModel): # type: ignore [misc]
- __doc__ = _( # type: ignore
+class ProductImage(ExportModelOperationsMixin("product_image"), NiceModel):
+ __doc__ = _(
"Represents a product image associated with a product in the system. "
"This class is designed to manage images for products, including functionality "
"for uploading image files, associating them with specific products, and "
@@ -886,8 +886,8 @@ class ProductImage(ExportModelOperationsMixin("product_image"), NiceModel): # t
verbose_name_plural = _("product images")
-class Promotion(ExportModelOperationsMixin("promotion"), NiceModel): # type: ignore [misc]
- __doc__ = _( # type: ignore
+class Promotion(ExportModelOperationsMixin("promotion"), NiceModel):
+ __doc__ = _(
"Represents a promotional campaign for products with a discount. "
"This class is used to define and manage promotional campaigns that offer a "
"percentage-based discount for products. The class includes attributes for "
@@ -932,8 +932,8 @@ class Promotion(ExportModelOperationsMixin("promotion"), NiceModel): # type: ig
return str(self.id)
-class Wishlist(ExportModelOperationsMixin("wishlist"), NiceModel): # type: ignore [misc]
- __doc__ = _( # type: ignore
+class Wishlist(ExportModelOperationsMixin("wishlist"), NiceModel):
+ __doc__ = _(
"Represents a user's wishlist for storing and managing desired products. "
"The class provides functionality to manage a collection of products, "
"supporting operations such as adding and removing products, "
@@ -1003,8 +1003,8 @@ class Wishlist(ExportModelOperationsMixin("wishlist"), NiceModel): # type: igno
return self
-class Documentary(ExportModelOperationsMixin("attribute_group"), NiceModel): # type: ignore [misc]
- __doc__ = _( # type: ignore
+class Documentary(ExportModelOperationsMixin("attribute_group"), NiceModel):
+ __doc__ = _(
"Represents a documentary record tied to a product. "
"This class is used to store information about documentaries related to specific "
"products, including file uploads and their metadata. It contains methods and "
@@ -1034,8 +1034,8 @@ class Documentary(ExportModelOperationsMixin("attribute_group"), NiceModel): #
return self.document.name.split(".")[-1] or _("unresolved")
-class Address(ExportModelOperationsMixin("address"), NiceModel): # type: ignore [misc]
- __doc__ = _( # type: ignore
+class Address(ExportModelOperationsMixin("address"), NiceModel):
+ __doc__ = _(
"Represents an address entity that includes location details and associations with a user. "
"Provides functionality for geographic and address data storage, as well "
"as integration with geocoding services. "
@@ -1099,8 +1099,8 @@ class Address(ExportModelOperationsMixin("address"), NiceModel): # type: ignore
return f"{base} for {self.user.email}" if self.user else base
-class PromoCode(ExportModelOperationsMixin("promocode"), NiceModel): # type: ignore [misc]
- __doc__ = _( # type: ignore
+class PromoCode(ExportModelOperationsMixin("promocode"), NiceModel):
+ __doc__ = _(
"Represents a promotional code that can be used for discounts, managing its validity, "
"type of discount, and application. "
"The PromoCode class stores details about a promotional code, including its unique "
@@ -1211,13 +1211,13 @@ class PromoCode(ExportModelOperationsMixin("promocode"), NiceModel): # type: ig
if self.discount_type == "percent":
promo_amount -= round(
promo_amount * (float(self.discount_percent) / 100), 2
- ) # type: ignore [arg-type]
+ )
order.attributes.update(
{"promocode_uuid": str(self.uuid), "final_price": promo_amount}
)
order.save()
elif self.discount_type == "amount":
- promo_amount -= round(float(self.discount_amount), 2) # type: ignore [arg-type]
+ promo_amount -= round(float(self.discount_amount), 2)
order.attributes.update(
{"promocode_uuid": str(self.uuid), "final_price": promo_amount}
)
@@ -1230,8 +1230,8 @@ class PromoCode(ExportModelOperationsMixin("promocode"), NiceModel): # type: ig
return promo_amount
-class Order(ExportModelOperationsMixin("order"), NiceModel): # type: ignore [misc]
- __doc__ = _( # type: ignore
+class Order(ExportModelOperationsMixin("order"), NiceModel):
+ __doc__ = _(
"Represents an order placed by a user."
" This class models an order within the application,"
" including its various attributes such as billing and shipping information,"
@@ -1341,7 +1341,7 @@ class Order(ExportModelOperationsMixin("order"), NiceModel): # type: ignore [mi
(
self.user.attributes.get("is_business", False)
and self.user.attributes.get("business_identificator")
- ) # type: ignore [union-attr]
+ )
if self.user
else False
)
@@ -1410,7 +1410,7 @@ class Order(ExportModelOperationsMixin("order"), NiceModel): # type: ignore [mi
if promotions.exists():
buy_price -= round(
product.price * (promotions.first().discount_percent / 100), 2
- ) # type: ignore [union-attr]
+ )
order_product, is_created = OrderProduct.objects.get_or_create(
product=product,
@@ -1800,8 +1800,8 @@ class Order(ExportModelOperationsMixin("order"), NiceModel): # type: ignore [mi
return None
-class Feedback(ExportModelOperationsMixin("feedback"), NiceModel): # type: ignore [misc]
- __doc__ = _( # type: ignore
+class Feedback(ExportModelOperationsMixin("feedback"), NiceModel):
+ __doc__ = _(
"Manages user feedback for products. "
"This class is designed to capture and store user feedback for specific products "
"that they have purchased. It contains attributes to store user comments, "
@@ -1849,8 +1849,8 @@ class Feedback(ExportModelOperationsMixin("feedback"), NiceModel): # type: igno
verbose_name_plural = _("feedbacks")
-class OrderProduct(ExportModelOperationsMixin("order_product"), NiceModel): # type: ignore [misc]
- __doc__ = _( # type: ignore
+class OrderProduct(ExportModelOperationsMixin("order_product"), NiceModel):
+ __doc__ = _(
"Represents products associated with orders and their attributes. "
"The OrderProduct model maintains information about a product that is part of an order, "
"including details such as purchase price, quantity, product attributes, and status. It "
@@ -1969,12 +1969,12 @@ class OrderProduct(ExportModelOperationsMixin("order_product"), NiceModel): # t
@property
def total_price(self: Self) -> float:
- return round(float(self.buy_price) * self.quantity, 2) # type: ignore [arg-type]
+ return round(float(self.buy_price) * self.quantity, 2)
@property
def download_url(self: Self) -> str:
if self.product and self.product.stocks:
- if self.product.is_digital and self.product.stocks.first().digital_asset: # type: ignore [union-attr]
+ if self.product.is_digital and self.product.stocks.first().digital_asset:
if hasattr(self, "download"):
return self.download.url
else:
@@ -2010,7 +2010,7 @@ class OrderProduct(ExportModelOperationsMixin("order_product"), NiceModel): # t
class CustomerRelationshipManagementProvider(
ExportModelOperationsMixin("crm_provider"), NiceModel
-): # type: ignore [misc]
+):
name = CharField(max_length=128, unique=True, verbose_name=_("name"))
integration_url = URLField(
blank=True, null=True, help_text=_("URL of the integration")
@@ -2053,7 +2053,7 @@ class CustomerRelationshipManagementProvider(
verbose_name_plural = _("CRMs")
-class OrderCrmLink(ExportModelOperationsMixin("order_crm_link"), NiceModel): # type: ignore
+class OrderCrmLink(ExportModelOperationsMixin("order_crm_link"), NiceModel):
order = ForeignKey(to=Order, on_delete=PROTECT, related_name="crm_links")
crm = ForeignKey(
to=CustomerRelationshipManagementProvider,
@@ -2070,8 +2070,8 @@ class OrderCrmLink(ExportModelOperationsMixin("order_crm_link"), NiceModel): #
verbose_name_plural = _("orders CRM links")
-class DigitalAssetDownload(ExportModelOperationsMixin("attribute_group"), NiceModel): # type: ignore [misc]
- __doc__ = _( # type: ignore
+class DigitalAssetDownload(ExportModelOperationsMixin("attribute_group"), NiceModel):
+ __doc__ = _(
"Represents the downloading functionality for digital assets associated with orders. "
"The DigitalAssetDownload class provides the ability to manage and access "
"downloads related to order products. It maintains information about the "
diff --git a/engine/core/serializers/detail.py b/engine/core/serializers/detail.py
index 834c5bec..2286779c 100644
--- a/engine/core/serializers/detail.py
+++ b/engine/core/serializers/detail.py
@@ -50,7 +50,7 @@ class AttributeGroupDetailSerializer(ModelSerializer):
class CategoryDetailListSerializer(ListSerializer):
- def to_representation(self, data): # type: ignore[override]
+ def to_representation(self, data):
items = list(data)
with suppress(Exception):
Category.bulk_prefetch_filterable_attributes(items)
@@ -92,7 +92,7 @@ class CategoryDetailSerializer(ModelSerializer):
CategorySimpleSerializer(children, many=True, context=self.context).data
if obj.children.exists()
else []
- ) # type: ignore [return-value]
+ )
class BrandDetailSerializer(ModelSerializer):
diff --git a/engine/core/serializers/simple.py b/engine/core/serializers/simple.py
index 7f88badc..22a7f1c5 100644
--- a/engine/core/serializers/simple.py
+++ b/engine/core/serializers/simple.py
@@ -25,9 +25,9 @@ from engine.core.models import (
from engine.core.serializers.utility import AddressSerializer
-class AttributeGroupSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
- parent = PrimaryKeyRelatedField(read_only=True) # type: ignore [assignment, var-annotated]
- children = PrimaryKeyRelatedField(many=True, read_only=True) # type: ignore [assignment, var-annotated]
+class AttributeGroupSimpleSerializer(ModelSerializer):
+ parent = PrimaryKeyRelatedField(read_only=True)
+ children = PrimaryKeyRelatedField(many=True, read_only=True)
class Meta:
model = AttributeGroup
@@ -39,7 +39,7 @@ class AttributeGroupSimpleSerializer(ModelSerializer): # type: ignore [type-arg
]
-class CategorySimpleSerializer(ModelSerializer): # type: ignore [type-arg]
+class CategorySimpleSerializer(ModelSerializer):
children = SerializerMethodField()
class Meta:
@@ -63,10 +63,10 @@ class CategorySimpleSerializer(ModelSerializer): # type: ignore [type-arg]
CategorySimpleSerializer(children, many=True, context=self.context).data
if obj.children.exists()
else []
- ) # type: ignore [return-value]
+ )
-class BrandSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
+class BrandSimpleSerializer(ModelSerializer):
class Meta:
model = Brand
fields = [
@@ -77,7 +77,7 @@ class BrandSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
]
-class ProductTagSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
+class ProductTagSimpleSerializer(ModelSerializer):
class Meta:
model = ProductTag
fields = [
@@ -87,8 +87,8 @@ class ProductTagSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
]
-class ProductImageSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
- product: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True) # type: ignore [type-arg]
+class ProductImageSimpleSerializer(ModelSerializer):
+ product: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True)
class Meta:
model = ProductImage
@@ -101,7 +101,7 @@ class ProductImageSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
]
-class AttributeSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
+class AttributeSimpleSerializer(ModelSerializer):
group = AttributeGroupSimpleSerializer(read_only=True)
class Meta:
@@ -114,9 +114,9 @@ class AttributeSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
]
-class AttributeValueSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
+class AttributeValueSimpleSerializer(ModelSerializer):
attribute = AttributeSimpleSerializer(read_only=True)
- product: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True) # type: ignore [type-arg]
+ product: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True)
class Meta:
model = AttributeValue
@@ -128,7 +128,7 @@ class AttributeValueSimpleSerializer(ModelSerializer): # type: ignore [type-arg
]
-class ProductSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
+class ProductSimpleSerializer(ModelSerializer):
brand = BrandSimpleSerializer(read_only=True)
category = CategorySimpleSerializer(read_only=True)
tags = ProductTagSimpleSerializer(many=True, read_only=True)
@@ -185,7 +185,7 @@ class ProductSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
return obj.discount_price
-class VendorSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
+class VendorSimpleSerializer(ModelSerializer):
class Meta:
model = Vendor
fields = [
@@ -194,7 +194,7 @@ class VendorSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
]
-class StockSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
+class StockSimpleSerializer(ModelSerializer):
vendor = VendorSimpleSerializer(read_only=True)
product = ProductSimpleSerializer(read_only=True)
@@ -211,7 +211,7 @@ class StockSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
]
-class PromoCodeSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
+class PromoCodeSimpleSerializer(ModelSerializer):
class Meta:
model = PromoCode
fields = [
@@ -220,7 +220,7 @@ class PromoCodeSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
]
-class PromotionSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
+class PromotionSimpleSerializer(ModelSerializer):
products = ProductSimpleSerializer(many=True, read_only=True)
class Meta:
@@ -233,8 +233,8 @@ class PromotionSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
]
-class WishlistSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
- user: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True) # type: ignore [type-arg]
+class WishlistSimpleSerializer(ModelSerializer):
+ user: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True)
products = ProductSimpleSerializer(many=True, read_only=True)
class Meta:
@@ -246,8 +246,8 @@ class WishlistSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
]
-class FeedbackSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
- order_product: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True) # type: ignore [type-arg]
+class FeedbackSimpleSerializer(ModelSerializer):
+ order_product: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True)
class Meta:
model = Feedback
@@ -258,7 +258,7 @@ class FeedbackSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
]
-class OrderProductSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
+class OrderProductSimpleSerializer(ModelSerializer):
product = ProductSimpleSerializer(read_only=True)
class Meta:
@@ -272,8 +272,8 @@ class OrderProductSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
]
-class OrderSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
- user: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True) # type: ignore [type-arg]
+class OrderSimpleSerializer(ModelSerializer):
+ user: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True)
promo_code = PromoCodeSimpleSerializer(read_only=True)
order_products = OrderProductSimpleSerializer(many=True, read_only=True)
billing_address = AddressSerializer(read_only=True, required=False)
diff --git a/engine/core/serializers/utility.py b/engine/core/serializers/utility.py
index 4b2cd298..ea015f3c 100644
--- a/engine/core/serializers/utility.py
+++ b/engine/core/serializers/utility.py
@@ -18,19 +18,19 @@ from rest_framework.serializers import ListSerializer, ModelSerializer, Serializ
from engine.core.models import Address
-class AddressAutocompleteInputSerializer(Serializer): # type: ignore [type-arg]
+class AddressAutocompleteInputSerializer(Serializer):
q = CharField(required=True)
limit = IntegerField(required=False, min_value=1, max_value=10, default=5)
-class AddressSuggestionSerializer(Serializer): # type: ignore [type-arg]
+class AddressSuggestionSerializer(Serializer):
display_name = CharField()
lat = FloatField()
lon = FloatField()
address = DictField(child=CharField())
-class AddressSerializer(ModelSerializer): # type: ignore [type-arg]
+class AddressSerializer(ModelSerializer):
latitude = FloatField(source="location.y", read_only=True)
longitude = FloatField(source="location.x", read_only=True)
@@ -59,7 +59,7 @@ class AddressSerializer(ModelSerializer): # type: ignore [type-arg]
]
-class AddressCreateSerializer(ModelSerializer): # type: ignore [type-arg]
+class AddressCreateSerializer(ModelSerializer):
raw_data = CharField(
write_only=True,
max_length=512,
@@ -76,10 +76,10 @@ class AddressCreateSerializer(ModelSerializer): # type: ignore [type-arg]
user = None
if self.context["request"].user.is_authenticated:
user = self.context["request"].user
- return Address.objects.create(raw_data=raw, user=user, **validated_data) # type: ignore [no-untyped-call]
+ return Address.objects.create(raw_data=raw, user=user, **validated_data)
-class DoFeedbackSerializer(Serializer): # type: ignore [type-arg]
+class DoFeedbackSerializer(Serializer):
comment = CharField(required=True)
rating = IntegerField(min_value=1, max_value=10, default=10)
action = CharField(default="add")
@@ -94,13 +94,13 @@ class DoFeedbackSerializer(Serializer): # type: ignore [type-arg]
return data
-class CacheOperatorSerializer(Serializer): # type: ignore [type-arg]
+class CacheOperatorSerializer(Serializer):
key = CharField(required=True)
- data = JSONField(required=False) # type: ignore [assignment]
+ data = JSONField(required=False)
timeout = IntegerField(required=False)
-class ContactUsSerializer(Serializer): # type: ignore [type-arg]
+class ContactUsSerializer(Serializer):
email = CharField(required=True)
name = CharField(required=True)
subject = CharField(required=True)
@@ -108,13 +108,13 @@ class ContactUsSerializer(Serializer): # type: ignore [type-arg]
message = CharField(required=True)
-class LanguageSerializer(Serializer): # type: ignore [type-arg]
+class LanguageSerializer(Serializer):
code = CharField(required=True)
name = CharField(required=True)
flag = CharField()
-class RecursiveField(Field): # type: ignore [type-arg]
+class RecursiveField(Field):
def to_representation(self, value: Any) -> Any:
parent = self.parent
if isinstance(parent, ListSerializer):
@@ -127,45 +127,45 @@ class RecursiveField(Field): # type: ignore [type-arg]
return data
-class AddOrderProductSerializer(Serializer): # type: ignore [type-arg]
+class AddOrderProductSerializer(Serializer):
product_uuid = CharField(required=True)
attributes = ListField(required=False, child=DictField(), default=list)
-class BulkAddOrderProductsSerializer(Serializer): # type: ignore [type-arg]
+class BulkAddOrderProductsSerializer(Serializer):
products = ListField(child=AddOrderProductSerializer(), required=True)
-class RemoveOrderProductSerializer(Serializer): # type: ignore [type-arg]
+class RemoveOrderProductSerializer(Serializer):
product_uuid = CharField(required=True)
attributes = JSONField(required=False, default=dict)
-class BulkRemoveOrderProductsSerializer(Serializer): # type: ignore [type-arg]
+class BulkRemoveOrderProductsSerializer(Serializer):
products = ListField(child=RemoveOrderProductSerializer(), required=True)
-class AddWishlistProductSerializer(Serializer): # type: ignore [type-arg]
+class AddWishlistProductSerializer(Serializer):
product_uuid = CharField(required=True)
-class RemoveWishlistProductSerializer(Serializer): # type: ignore [type-arg]
+class RemoveWishlistProductSerializer(Serializer):
product_uuid = CharField(required=True)
-class BulkAddWishlistProductSerializer(Serializer): # type: ignore [type-arg]
+class BulkAddWishlistProductSerializer(Serializer):
product_uuids = ListField(
child=CharField(required=True), allow_empty=False, max_length=64
)
-class BulkRemoveWishlistProductSerializer(Serializer): # type: ignore [type-arg]
+class BulkRemoveWishlistProductSerializer(Serializer):
product_uuids = ListField(
child=CharField(required=True), allow_empty=False, max_length=64
)
-class BuyOrderSerializer(Serializer): # type: ignore [type-arg]
+class BuyOrderSerializer(Serializer):
force_balance = BooleanField(required=False, default=False)
force_payment = BooleanField(required=False, default=False)
promocode_uuid = CharField(required=False)
@@ -174,7 +174,7 @@ class BuyOrderSerializer(Serializer): # type: ignore [type-arg]
chosen_products = AddOrderProductSerializer(many=True, required=False)
-class BuyUnregisteredOrderSerializer(Serializer): # type: ignore [type-arg]
+class BuyUnregisteredOrderSerializer(Serializer):
products = AddOrderProductSerializer(many=True, required=True)
promocode_uuid = UUIDField(required=False)
customer_name = CharField(required=True)
@@ -185,7 +185,7 @@ class BuyUnregisteredOrderSerializer(Serializer): # type: ignore [type-arg]
payment_method = CharField(required=True)
-class BuyAsBusinessOrderSerializer(Serializer): # type: ignore [type-arg]
+class BuyAsBusinessOrderSerializer(Serializer):
products = AddOrderProductSerializer(many=True, required=True)
business_identificator = CharField(required=True)
promocode_uuid = UUIDField(required=False)
diff --git a/engine/core/signals.py b/engine/core/signals.py
index fb15c6d6..3f4b8aca 100644
--- a/engine/core/signals.py
+++ b/engine/core/signals.py
@@ -156,8 +156,8 @@ def process_order_changes(instance: Order, created: bool, **kwargs: dict[Any, An
)
order_product.order.user.payments_balance.amount -= (
order_product.buy_price
- ) # type: ignore [union-attr, operator]
- order_product.order.user.payments_balance.save() # type: ignore [union-attr]
+ )
+ order_product.order.user.payments_balance.save()
order_product.save()
continue
@@ -169,14 +169,15 @@ def process_order_changes(instance: Order, created: bool, **kwargs: dict[Any, An
price=order_product.buy_price
)
.first()
- .vendor.name.lower() # type: ignore [union-attr, attr-defined, misc]
+ .vendor.name.lower()
)
vendor = create_object(
- f"core.vendors.{vendor_name}", f"{vendor_name.title()}Vendor"
+ f"engine.core.vendors.{vendor_name}",
+ f"{vendor_name.title()}Vendor",
)
- vendor.buy_order_product(order_product) # type: ignore [attr-defined]
+ vendor.buy_order_product(order_product)
except Exception as e:
order_product.add_error(
diff --git a/engine/core/sitemaps.py b/engine/core/sitemaps.py
index ce30bfe6..b43e65c5 100644
--- a/engine/core/sitemaps.py
+++ b/engine/core/sitemaps.py
@@ -12,7 +12,7 @@ class SitemapLanguageMixin:
return getattr(req, "LANGUAGE_CODE", settings.LANGUAGE_CODE)
-class StaticPagesSitemap(SitemapLanguageMixin, Sitemap): # type: ignore [type-arg]
+class StaticPagesSitemap(SitemapLanguageMixin, Sitemap):
protocol = "https"
changefreq = "monthly"
priority = 0.8
@@ -58,7 +58,7 @@ class StaticPagesSitemap(SitemapLanguageMixin, Sitemap): # type: ignore [type-a
return obj.get("lastmod")
-class ProductSitemap(SitemapLanguageMixin, Sitemap): # type: ignore [type-arg]
+class ProductSitemap(SitemapLanguageMixin, Sitemap):
protocol = "https"
changefreq = "daily"
priority = 0.9
@@ -84,7 +84,7 @@ class ProductSitemap(SitemapLanguageMixin, Sitemap): # type: ignore [type-arg]
return f"/{self._lang()}/product/{obj.slug if obj.slug else '404-non-existent-product'}"
-class CategorySitemap(SitemapLanguageMixin, Sitemap): # type: ignore [type-arg]
+class CategorySitemap(SitemapLanguageMixin, Sitemap):
protocol = "https"
changefreq = "weekly"
priority = 0.7
@@ -109,7 +109,7 @@ class CategorySitemap(SitemapLanguageMixin, Sitemap): # type: ignore [type-arg]
return f"/{self._lang()}/catalog/{obj.slug if obj.slug else '404-non-existent-category'}"
-class BrandSitemap(SitemapLanguageMixin, Sitemap): # type: ignore [type-arg]
+class BrandSitemap(SitemapLanguageMixin, Sitemap):
protocol = "https"
changefreq = "weekly"
priority = 0.6
diff --git a/engine/core/templatetags/arith.py b/engine/core/templatetags/arith.py
index fbd9dfa1..a3e000d2 100644
--- a/engine/core/templatetags/arith.py
+++ b/engine/core/templatetags/arith.py
@@ -8,7 +8,7 @@ register = template.Library()
def _to_float(val: object) -> float:
conv: float = 0.0
with suppress(Exception):
- return float(val) # type: ignore [arg-type]
+ return float(val)
return conv
diff --git a/engine/core/utils/__init__.py b/engine/core/utils/__init__.py
index 5a23312a..bb6e3a41 100644
--- a/engine/core/utils/__init__.py
+++ b/engine/core/utils/__init__.py
@@ -66,15 +66,15 @@ def get_random_code() -> str:
return get_random_string(20)
-def get_product_uuid_as_path(instance, filename: str = "") -> str: # type: ignore [no-untyped-def]
+def get_product_uuid_as_path(instance, filename: str = "") -> str:
return "products" + "/" + str(instance.product.uuid) + "/" + filename
-def get_vendor_name_as_path(instance, filename: str = "") -> str: # type: ignore [no-untyped-def]
+def get_vendor_name_as_path(instance, filename: str = "") -> str:
return "vendors_responses/" + str(instance.name) + "/" + filename
-def get_brand_name_as_path(instance, filename: str = "") -> str: # type: ignore [no-untyped-def]
+def get_brand_name_as_path(instance, filename: str = "") -> str:
return "brands/" + str(instance.name) + "/" + filename
@@ -150,7 +150,7 @@ def get_project_parameters() -> Any:
return parameters
-def resolve_translations_for_elasticsearch(instance, field_name: str) -> None: # type: ignore [no-untyped-def]
+def resolve_translations_for_elasticsearch(instance, field_name: str) -> None:
"""
Resolves translations for a given field in an Elasticsearch-compatible
format. It checks if the localized version of the field contains data,
@@ -211,7 +211,7 @@ def is_status_code_success(status_code: int) -> bool:
def get_dynamic_email_connection() -> EmailBackend:
- return mail.get_connection( # type: ignore [no-any-return]
+ return mail.get_connection(
host=config.EMAIL_HOST,
port=config.EMAIL_PORT,
username=config.EMAIL_HOST_USER,
diff --git a/engine/core/utils/caching.py b/engine/core/utils/caching.py
index a51754a5..7f1a9fe1 100644
--- a/engine/core/utils/caching.py
+++ b/engine/core/utils/caching.py
@@ -43,14 +43,14 @@ def web_cache(
request: Request | Context, key: str, data: dict[str, Any], timeout: int
) -> dict[str, Any]:
if not data and not timeout:
- return {"data": get_cached_value(request.user, key)} # type: ignore [assignment, arg-type]
+ return {"data": get_cached_value(request.user, key)}
if (data and not timeout) or (timeout and not data):
raise BadRequest(_("both data and timeout are required"))
if not 0 < int(timeout) < 216000:
raise BadRequest(
_("invalid timeout value, it must be between 0 and 216000 seconds")
)
- return {"data": set_cached_value(request.user, key, data, timeout)} # type: ignore [assignment, arg-type]
+ return {"data": set_cached_value(request.user, key, data, timeout)}
def set_default_cache() -> None:
diff --git a/engine/core/utils/commerce.py b/engine/core/utils/commerce.py
index f6035e6e..4a9e2c91 100644
--- a/engine/core/utils/commerce.py
+++ b/engine/core/utils/commerce.py
@@ -160,7 +160,7 @@ def get_top_returned_products(
p = product_by_id[pid]
img = ""
with suppress(Exception):
- img = p.images.first().image_url if p.images.exists() else "" # type: ignore [union-attr]
+ img = p.images.first().image_url if p.images.exists() else ""
result.append(
{
"name": p.name,
diff --git a/engine/core/utils/emailing.py b/engine/core/utils/emailing.py
index c570ba1c..4cd82d2d 100644
--- a/engine/core/utils/emailing.py
+++ b/engine/core/utils/emailing.py
@@ -121,7 +121,7 @@ def send_order_finished_email(order_pk: str) -> tuple[bool, str]:
"order_products": ops,
"project_name": settings.PROJECT_NAME,
"contact_email": config.EMAIL_FROM,
- "total_price": round(sum(0.0 or op.buy_price for op in ops), 2), # type: ignore [misc]
+ "total_price": round(sum(0.0 or op.buy_price for op in ops), 2),
"display_system_attributes": order.user.has_perm("core.view_order"),
"today": datetime.today(),
},
diff --git a/engine/core/utils/vendors.py b/engine/core/utils/vendors.py
index efd18be0..3edf4304 100644
--- a/engine/core/utils/vendors.py
+++ b/engine/core/utils/vendors.py
@@ -16,7 +16,7 @@ def get_vendors_integrations(name: str | None = None) -> list[AbstractVendor]:
for vendor in vendors:
try:
- module_name, class_name = vendor.integration_path.rsplit(".", 1) # type: ignore [union-attr]
+ module_name, class_name = vendor.integration_path.rsplit(".", 1)
vendors_integrations.append(create_object(module_name, class_name))
except Exception as e:
logger.warning(
diff --git a/engine/core/validators.py b/engine/core/validators.py
index 525bb927..3b3643d0 100644
--- a/engine/core/validators.py
+++ b/engine/core/validators.py
@@ -11,11 +11,11 @@ def validate_category_image_dimensions(
if image:
try:
- width, height = get_image_dimensions(image.file) # type: ignore [arg-type]
+ width, height = get_image_dimensions(image.file)
except (FileNotFoundError, OSError, ValueError):
return
- if int(width) > max_width or int(height) > max_height: # type: ignore [arg-type]
+ if int(width) > max_width or int(height) > max_height:
raise ValidationError(
_(
f"image dimensions should not exceed w{max_width} x h{max_height} pixels"
diff --git a/engine/core/vendors/__init__.py b/engine/core/vendors/__init__.py
index b2c2f249..28145d4f 100644
--- a/engine/core/vendors/__init__.py
+++ b/engine/core/vendors/__init__.py
@@ -343,7 +343,7 @@ class AbstractVendor:
f"No rate found for {currency} in {rates} with probider {provider}..."
)
- return float(round(price / rate, 2)) if rate else float(round(price, 2)) # type: ignore [arg-type, operator]
+ return float(round(price / rate, 2)) if rate else float(round(price, 2))
@staticmethod
def round_price_marketologically(price: float) -> float:
@@ -536,7 +536,7 @@ class AbstractVendor:
Attribute.objects.filter(name=key, group=attr_group)
.order_by("uuid")
.first()
- ) # type: ignore [assignment]
+ )
fields_to_update: list[str] = []
if not attribute.is_active:
attribute.is_active = True
diff --git a/engine/core/views.py b/engine/core/views.py
index 8ca22bf2..e7622e32 100644
--- a/engine/core/views.py
+++ b/engine/core/views.py
@@ -4,6 +4,7 @@ import os
import traceback
from contextlib import suppress
from datetime import date, timedelta
+from typing import Any
import requests
from constance import config
@@ -31,8 +32,6 @@ from django.utils.translation import gettext_lazy as _
from django.views.decorators.cache import cache_page
from django.views.decorators.vary import vary_on_headers
from django_ratelimit.decorators import ratelimit
-from djangorestframework_camel_case.render import CamelCaseJSONRenderer
-from djangorestframework_camel_case.util import camelize
from drf_spectacular.utils import extend_schema_view
from drf_spectacular.views import (
SpectacularAPIView,
@@ -42,12 +41,9 @@ from drf_spectacular.views import (
from graphene_file_upload.django import FileUploadGraphQLView
from rest_framework import status
from rest_framework.permissions import AllowAny
-from rest_framework.renderers import MultiPartRenderer
from rest_framework.request import Request
from rest_framework.response import Response
from rest_framework.views import APIView
-from rest_framework_xml.renderers import XMLRenderer
-from rest_framework_yaml.renderers import YAMLRenderer
from sentry_sdk import capture_exception
from engine.core.docs.drf.views import (
@@ -91,6 +87,7 @@ from engine.core.utils.commerce import (
from engine.core.utils.emailing import contact_us_email
from engine.core.utils.languages import get_flag_by_language
from engine.payments.serializers import TransactionProcessSerializer
+from evibes.utils.renderers import camelize
logger = logging.getLogger(__name__)
@@ -104,7 +101,7 @@ def sitemap_index(request, *args, **kwargs):
# noinspection PyTypeChecker
-sitemap_index.__doc__ = _( # type: ignore [assignment]
+sitemap_index.__doc__ = _( # pyright: ignore[reportUnknownVariableType]
"Handles the request for the sitemap index and returns an XML response. "
"It ensures the response includes the appropriate content type header for XML."
)
@@ -119,7 +116,7 @@ def sitemap_detail(request, *args, **kwargs):
# noinspection PyTypeChecker
-sitemap_detail.__doc__ = _( # type: ignore [assignment]
+sitemap_detail.__doc__ = _( # pyright: ignore[reportUnknownVariableType]
"Handles the detailed view response for a sitemap. "
"This function processes the request, fetches the appropriate "
"sitemap detail response, and sets the Content-Type header for XML."
@@ -155,20 +152,14 @@ class CustomRedocView(SpectacularRedocView):
@extend_schema_view(**LANGUAGE_SCHEMA)
class SupportedLanguagesView(APIView):
- __doc__ = _(
+ __doc__ = _( # pyright: ignore[reportUnknownVariableType]
"Returns a list of supported languages and their corresponding information."
- ) # type: ignore [assignment]
+ )
serializer_class = LanguageSerializer
permission_classes = [
AllowAny,
]
- renderer_classes = [
- CamelCaseJSONRenderer,
- MultiPartRenderer,
- XMLRenderer,
- YAMLRenderer,
- ]
def get(self, request: Request, *args, **kwargs) -> Response:
return Response(
@@ -189,18 +180,12 @@ class SupportedLanguagesView(APIView):
@extend_schema_view(**PARAMETERS_SCHEMA)
class WebsiteParametersView(APIView):
- __doc__ = _("Returns the parameters of the website as a JSON object.") # type: ignore [assignment]
+ __doc__ = _("Returns the parameters of the website as a JSON object.")
serializer_class = None
permission_classes = [
AllowAny,
]
- renderer_classes = [
- CamelCaseJSONRenderer,
- MultiPartRenderer,
- XMLRenderer,
- YAMLRenderer,
- ]
def get(self, request: Request, *args, **kwargs) -> Response:
return Response(
@@ -212,26 +197,20 @@ class WebsiteParametersView(APIView):
class CacheOperatorView(APIView):
__doc__ = _(
"Handles cache operations such as reading and setting cache data with a specified key and timeout."
- ) # type: ignore [assignment]
+ )
serializer_class = CacheOperatorSerializer
permission_classes = [
AllowAny,
]
- renderer_classes = [
- CamelCaseJSONRenderer,
- MultiPartRenderer,
- XMLRenderer,
- YAMLRenderer,
- ]
def post(self, request: Request, *args, **kwargs) -> Response:
return Response(
data=web_cache(
request,
- request.data.get("key"), # type: ignore [arg-type]
+ request.data.get("key"),
request.data.get("data", {}),
- request.data.get("timeout"), # type: ignore [arg-type]
+ request.data.get("timeout"),
),
status=status.HTTP_200_OK,
)
@@ -239,21 +218,15 @@ class CacheOperatorView(APIView):
@extend_schema_view(**CONTACT_US_SCHEMA)
class ContactUsView(APIView):
- __doc__ = _("Handles `contact us` form submissions.") # type: ignore [assignment]
+ __doc__ = _("Handles `contact us` form submissions.")
serializer_class = ContactUsSerializer
- renderer_classes = [
- CamelCaseJSONRenderer,
- MultiPartRenderer,
- XMLRenderer,
- YAMLRenderer,
- ]
@method_decorator(ratelimit(key="ip", rate="2/h", method="POST", block=True))
def post(self, request: Request, *args, **kwargs) -> Response:
serializer = self.serializer_class(data=request.data)
serializer.is_valid(raise_exception=True)
- contact_us_email.delay(serializer.validated_data) # type: ignore [attr-defined]
+ contact_us_email.delay(serializer.validated_data)
return Response(data=serializer.data, status=status.HTTP_200_OK)
@@ -262,17 +235,11 @@ class ContactUsView(APIView):
class RequestCursedURLView(APIView):
__doc__ = _(
"Handles requests for processing and validating URLs from incoming POST requests."
- ) # type: ignore [assignment]
+ )
permission_classes = [
AllowAny,
]
- renderer_classes = [
- CamelCaseJSONRenderer,
- MultiPartRenderer,
- XMLRenderer,
- YAMLRenderer,
- ]
@method_decorator(ratelimit(key="ip", rate="10/h"))
def post(self, request: Request, *args, **kwargs) -> Response:
@@ -304,14 +271,7 @@ class RequestCursedURLView(APIView):
@extend_schema_view(**SEARCH_SCHEMA)
class GlobalSearchView(APIView):
- __doc__ = _("Handles global search queries.") # type: ignore [assignment]
-
- renderer_classes = [
- CamelCaseJSONRenderer,
- MultiPartRenderer,
- XMLRenderer,
- YAMLRenderer,
- ]
+ __doc__ = _("Handles global search queries.")
def get(self, request: Request, *args, **kwargs) -> Response:
return Response(
@@ -327,7 +287,7 @@ class GlobalSearchView(APIView):
@extend_schema_view(**BUY_AS_BUSINESS_SCHEMA)
class BuyAsBusinessView(APIView):
- __doc__ = _("Handles the logic of buying as a business without registration.") # type: ignore [assignment]
+ __doc__ = _("Handles the logic of buying as a business without registration.")
# noinspection PyUnusedLocal
@method_decorator(
@@ -374,7 +334,7 @@ class BuyAsBusinessView(APIView):
@extend_schema_view(**DOWNLOAD_DIGITAL_ASSET_SCHEMA)
class DownloadDigitalAssetView(APIView):
- __doc__ = _( # type: ignore [assignment]
+ __doc__ = _(
"Handles the downloading of a digital asset associated with an order.\n"
"This function attempts to serve the digital asset file located in the "
"storage directory of the project. If the file is not found, an HTTP 404 "
@@ -409,7 +369,7 @@ class DownloadDigitalAssetView(APIView):
if not order_product.download.order_product.product:
raise BadRequest(_("the order product does not have a product"))
- file_path = order_product.download.order_product.product.stocks.first().digital_asset.path # type: ignore [union-attr]
+ file_path = order_product.download.order_product.product.stocks.first().digital_asset.path
content_type, encoding = mimetypes.guess_type(file_path)
if not content_type:
@@ -444,7 +404,9 @@ class DownloadDigitalAssetView(APIView):
)
-def favicon_view(request: HttpRequest, *args, **kwargs) -> HttpResponse | FileResponse:
+def favicon_view(
+ request: HttpRequest, *args: list[Any], **kwargs: dict[str, Any]
+) -> HttpResponse | FileResponse | None:
try:
favicon_path = os.path.join(settings.BASE_DIR, "static/favicon.png")
return FileResponse(open(favicon_path, "rb"), content_type="image/x-icon")
@@ -453,7 +415,7 @@ def favicon_view(request: HttpRequest, *args, **kwargs) -> HttpResponse | FileRe
# noinspection PyTypeChecker
-favicon_view.__doc__ = _( # type: ignore [assignment]
+favicon_view.__doc__ = _(
"Handles requests for the favicon of a website.\n"
"This function attempts to serve the favicon file located in the static directory of the project. "
"If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
@@ -465,7 +427,7 @@ def index(request: HttpRequest, *args, **kwargs) -> HttpResponse | HttpResponseR
# noinspection PyTypeChecker
-index.__doc__ = _( # type: ignore [assignment]
+index.__doc__ = _(
"Redirects the request to the admin index page. "
"The function handles incoming HTTP requests and redirects them to the Django "
"admin interface index page. It uses Django's `redirect` function for handling "
@@ -478,9 +440,7 @@ def version(request: HttpRequest, *args, **kwargs) -> HttpResponse:
# noinspection PyTypeChecker
-version.__doc__ = _( # type: ignore [assignment]
- "Returns current version of the eVibes. "
-)
+version.__doc__ = _("Returns current version of the eVibes. ")
def dashboard_callback(request: HttpRequest, context: Context) -> Context:
@@ -631,7 +591,7 @@ def dashboard_callback(request: HttpRequest, context: Context) -> Context:
with suppress(Exception):
quick_links_section = settings.UNFOLD.get("SIDEBAR", {}).get("navigation", [])[
1
- ] # type: ignore[assignment]
+ ]
for item in quick_links_section.get("items", []):
title = item.get("title")
link = item.get("link")
@@ -661,7 +621,7 @@ def dashboard_callback(request: HttpRequest, context: Context) -> Context:
if product:
img = (
product.images.first().image_url if product.images.exists() else ""
- ) # type: ignore [union-attr]
+ )
most_wished = {
"name": product.name,
"image": img,
@@ -684,7 +644,7 @@ def dashboard_callback(request: HttpRequest, context: Context) -> Context:
if not pid or pid not in product_by_id:
continue
p = product_by_id[pid]
- img = p.images.first().image_url if p.images.exists() else "" # type: ignore [union-attr]
+ img = p.images.first().image_url if p.images.exists() else ""
most_wished_list.append(
{
"name": p.name,
@@ -783,7 +743,7 @@ def dashboard_callback(request: HttpRequest, context: Context) -> Context:
if product:
img = (
product.images.first().image_url if product.images.exists() else ""
- ) # type: ignore [union-attr]
+ )
most_popular = {
"name": product.name,
"image": img,
@@ -806,7 +766,7 @@ def dashboard_callback(request: HttpRequest, context: Context) -> Context:
if not pid or pid not in product_by_id:
continue
p = product_by_id[pid]
- img = p.images.first().image_url if p.images.exists() else "" # type: ignore [union-attr]
+ img = p.images.first().image_url if p.images.exists() else ""
most_popular_list.append(
{
"name": p.name,
@@ -905,6 +865,4 @@ def dashboard_callback(request: HttpRequest, context: Context) -> Context:
return context
-dashboard_callback.__doc__ = _( # type: ignore [assignment]
- "Returns custom variables for Dashboard. "
-)
+dashboard_callback.__doc__ = _("Returns custom variables for Dashboard. ")
diff --git a/engine/core/viewsets.py b/engine/core/viewsets.py
index 367d436f..224d76d7 100644
--- a/engine/core/viewsets.py
+++ b/engine/core/viewsets.py
@@ -11,19 +11,15 @@ from django.utils.decorators import method_decorator
from django.utils.translation import gettext_lazy as _
from django_filters.rest_framework import DjangoFilterBackend
from django_ratelimit.decorators import ratelimit
-from djangorestframework_camel_case.render import CamelCaseJSONRenderer
from drf_spectacular.utils import extend_schema_view
from rest_framework import status
from rest_framework.decorators import action
from rest_framework.exceptions import PermissionDenied
from rest_framework.permissions import AllowAny
-from rest_framework.renderers import MultiPartRenderer
from rest_framework.request import Request
from rest_framework.response import Response
from rest_framework.serializers import Serializer
from rest_framework.viewsets import ModelViewSet
-from rest_framework_xml.renderers import XMLRenderer
-from rest_framework_yaml.renderers import YAMLRenderer
from engine.core.docs.drf.viewsets import (
ADDRESS_SCHEMA,
@@ -139,7 +135,7 @@ logger = logging.getLogger(__name__)
class EvibesViewSet(ModelViewSet):
- __doc__ = _( # type: ignore
+ __doc__ = _(
"Defines a viewset for managing Evibes-related operations. "
"The EvibesViewSet class inherits from ModelViewSet and provides functionality "
"for handling actions and operations on Evibes entities. It includes support "
@@ -150,18 +146,12 @@ class EvibesViewSet(ModelViewSet):
action_serializer_classes: dict[str, Type[Serializer]] = {}
additional: dict[str, str] = {}
permission_classes = [EvibesPermission]
- renderer_classes = [
- CamelCaseJSONRenderer,
- MultiPartRenderer,
- XMLRenderer,
- YAMLRenderer,
- ]
def get_serializer_class(self) -> Type[Serializer]:
# noinspection PyTypeChecker
return self.action_serializer_classes.get(
self.action, super().get_serializer_class()
- ) # type: ignore [arg-type]
+ )
@extend_schema_view(**ATTRIBUTE_GROUP_SCHEMA)
diff --git a/engine/core/widgets.py b/engine/core/widgets.py
index eb484863..10098d34 100644
--- a/engine/core/widgets.py
+++ b/engine/core/widgets.py
@@ -11,7 +11,7 @@ from django.utils.safestring import SafeString
class JSONTableWidget(forms.Widget):
template_name = "json_table_widget.html"
- def format_value(self, value: str | dict[str, Any]) -> str | dict[str, Any]: # type: ignore [override]
+ def format_value(self, value: str | dict[str, Any]) -> str | dict[str, Any]:
if isinstance(value, dict):
return value
try:
@@ -40,8 +40,8 @@ class JSONTableWidget(forms.Widget):
json_data = {}
try:
- keys = data.getlist(f"{name}_key") # type: ignore [attr-defined]
- values = data.getlist(f"{name}_value") # type: ignore [attr-defined]
+ keys = data.getlist(f"{name}_key")
+ values = data.getlist(f"{name}_value")
for key, value in zip(keys, values, strict=True):
if key.strip():
try:
diff --git a/engine/payments/admin.py b/engine/payments/admin.py
index 4cd4b905..222a7cb8 100644
--- a/engine/payments/admin.py
+++ b/engine/payments/admin.py
@@ -9,7 +9,7 @@ from engine.payments.forms import GatewayForm, TransactionForm
from engine.payments.models import Balance, Gateway, Transaction
-class TransactionInline(TabularInline): # type: ignore [type-arg]
+class TransactionInline(TabularInline):
model = Transaction
form = TransactionForm
extra = 1
@@ -23,7 +23,7 @@ class TransactionInline(TabularInline): # type: ignore [type-arg]
@register(Balance)
-class BalanceAdmin(ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg]
+class BalanceAdmin(ActivationActionsMixin, ModelAdmin):
inlines = (TransactionInline,)
list_display = ("user", "amount")
search_fields = ("user__email",)
@@ -35,7 +35,7 @@ class BalanceAdmin(ActivationActionsMixin, ModelAdmin): # type: ignore [misc, t
@register(Transaction)
-class TransactionAdmin(ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg]
+class TransactionAdmin(ActivationActionsMixin, ModelAdmin):
list_display = ("balance", "amount", "order", "modified", "created")
search_fields = ("balance__user__email", "currency", "payment_method")
list_filter = ("currency", "payment_method")
@@ -44,7 +44,7 @@ class TransactionAdmin(ActivationActionsMixin, ModelAdmin): # type: ignore [mis
@register(Gateway)
-class GatewayAdmin(ActivationActionsMixin, ModelAdmin): # type: ignore [misc]
+class GatewayAdmin(ActivationActionsMixin, ModelAdmin):
list_display = (
"name",
"can_be_used",
@@ -57,8 +57,8 @@ class GatewayAdmin(ActivationActionsMixin, ModelAdmin): # type: ignore [misc]
ordering = ("name",)
form = GatewayForm
- def can_be_used(self, obj: Gateway) -> bool: # type: ignore[override]
+ def can_be_used(self, obj: Gateway) -> bool:
return obj.can_be_used
- can_be_used.boolean = True # type: ignore[attr-defined]
- can_be_used.short_description = _("can be used") # type: ignore[attr-defined]
+ can_be_used.boolean = True
+ can_be_used.short_description = _("can be used")
diff --git a/engine/payments/forms.py b/engine/payments/forms.py
index cfa3d522..41de8563 100644
--- a/engine/payments/forms.py
+++ b/engine/payments/forms.py
@@ -4,7 +4,7 @@ from engine.core.widgets import JSONTableWidget
from engine.payments.models import Gateway, Transaction
-class TransactionForm(forms.ModelForm): # type: ignore [type-arg]
+class TransactionForm(forms.ModelForm):
class Meta:
model = Transaction
fields = "__all__"
@@ -13,7 +13,7 @@ class TransactionForm(forms.ModelForm): # type: ignore [type-arg]
}
-class GatewayForm(forms.ModelForm): # type: ignore [type-arg]
+class GatewayForm(forms.ModelForm):
class Meta:
model = Gateway
fields = "__all__"
diff --git a/engine/payments/locale/ar_AR/LC_MESSAGES/django.po b/engine/payments/locale/ar_AR/LC_MESSAGES/django.po
index 623b2c53..d6ba3903 100644
--- a/engine/payments/locale/ar_AR/LC_MESSAGES/django.po
+++ b/engine/payments/locale/ar_AR/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -13,11 +13,11 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: engine/payments/admin.py:17 engine/payments/models.py:56
+#: engine/payments/admin.py:17 engine/payments/models.py:68
msgid "transaction"
msgstr "المعاملات"
-#: engine/payments/admin.py:18 engine/payments/models.py:57
+#: engine/payments/admin.py:18 engine/payments/models.py:69
msgid "transactions"
msgstr "المعاملات"
@@ -37,19 +37,19 @@ msgstr "الإيداع"
msgid "withdraw"
msgstr "سحب"
-#: engine/payments/docs/drf/views.py:13
+#: engine/payments/docs/drf/views.py:17
msgid "deposit to balance"
msgstr "الإيداع في الرصيد"
-#: engine/payments/docs/drf/views.py:14
+#: engine/payments/docs/drf/views.py:18
msgid "deposit some money to balance"
msgstr "إيداع بعض الأموال لتحقيق التوازن"
-#: engine/payments/docs/drf/views.py:29
+#: engine/payments/docs/drf/views.py:33
msgid "payment limits"
msgstr "حدود الدفع"
-#: engine/payments/docs/drf/views.py:30
+#: engine/payments/docs/drf/views.py:35
msgid ""
"retrieve minimal and maximal allowed deposit amounts across available "
"gateways"
@@ -69,88 +69,88 @@ msgstr "استرداد معاملة واحدة (للقراءة فقط)"
msgid "Transaction UUID"
msgstr "معرّف المعاملة UUID"
-#: engine/payments/models.py:36
+#: engine/payments/models.py:42
msgid "order to process after paid"
msgstr "طلب المعالجة بعد الدفع"
-#: engine/payments/models.py:39
+#: engine/payments/models.py:45
msgid "processing details"
msgstr "تفاصيل المعالجة"
-#: engine/payments/models.py:75
+#: engine/payments/models.py:91
msgid "balance"
msgstr "الرصيد"
-#: engine/payments/models.py:76
+#: engine/payments/models.py:92
msgid "balances"
msgstr "الموازين"
-#: engine/payments/models.py:86
+#: engine/payments/models.py:102
msgid "name"
msgstr "الاسم"
-#: engine/payments/models.py:91
+#: engine/payments/models.py:107
msgid "default currency"
msgstr "العملة الافتراضية"
-#: engine/payments/models.py:98
+#: engine/payments/models.py:114
msgid "currencies"
msgstr "العملات"
-#: engine/payments/models.py:100
+#: engine/payments/models.py:116
msgid "comma separated list of currencies supported by this gateway, "
msgstr "قائمة مفصولة بفاصلة بالعملات التي تدعمها هذه البوابة,"
-#: engine/payments/models.py:106
+#: engine/payments/models.py:122
msgid "minimum transaction amount"
msgstr "الحد الأدنى لمبلغ المعاملة"
-#: engine/payments/models.py:109
+#: engine/payments/models.py:125
msgid "maximum transaction amount"
msgstr "الحد الأقصى لمبلغ المعاملة"
-#: engine/payments/models.py:115
+#: engine/payments/models.py:131
msgid "daily limit"
msgstr "الحد اليومي"
-#: engine/payments/models.py:116
+#: engine/payments/models.py:132
msgid "daily sum limit of transactions' amounts. 0 means no limit"
msgstr "حد المجموع اليومي لمبالغ المعاملات. 0 يعني عدم وجود حد"
-#: engine/payments/models.py:122
+#: engine/payments/models.py:138
msgid "monthly limit"
msgstr "الحد الشهري"
-#: engine/payments/models.py:123
+#: engine/payments/models.py:139
msgid "monthly sum limit of transactions' amounts. 0 means no limit"
msgstr "حد المجموع الشهري لمبالغ المعاملات. 0 يعني عدم وجود حد"
-#: engine/payments/models.py:125
+#: engine/payments/models.py:142
msgid "priority"
msgstr "الأولوية"
-#: engine/payments/models.py:126
+#: engine/payments/models.py:145
msgid "integration variables"
msgstr "متغيرات التكامل"
-#: engine/payments/models.py:132
+#: engine/payments/models.py:152
msgid "payment gateway"
msgstr "بوابة الدفع"
-#: engine/payments/models.py:133
+#: engine/payments/models.py:153
msgid "payment gateways"
msgstr "بوابات الدفع"
-#: engine/payments/models.py:169
+#: engine/payments/models.py:198
msgid "gateway integration path is not set"
msgstr "لم يتم تعيين مسار تكامل البوابة"
-#: engine/payments/models.py:174
+#: engine/payments/models.py:204
#, python-format
msgid "invalid integration path: %(path)s"
msgstr "مسار تكامل غير صالح: %(path)s"
-#: engine/payments/signals.py:41
+#: engine/payments/signals.py:45
msgid "the transaction amount didn't fit into allowed limits: "
msgstr "لم يتناسب مبلغ المعاملة مع الحدود المسموح بها:"
@@ -204,12 +204,12 @@ msgstr "مطلوب مزود للحصول على الأسعار من"
msgid "couldn't find provider {provider}"
msgstr "تعذر العثور على مزود {provider}"
-#: engine/payments/utils/emailing.py:28
+#: engine/payments/utils/emailing.py:31
#, python-brace-format
msgid "{settings.PROJECT_NAME} | balance deposit"
msgstr "{settings.PROJECT_NAME} | إيداع الرصيد"
-#: engine/payments/views.py:24
+#: engine/payments/views.py:28
msgid ""
"This class provides an API endpoint to handle deposit transactions.\n"
"It supports the creation of a deposit transaction after validating the "
@@ -222,7 +222,7 @@ msgstr ""
"مصادقة المستخدم، يتم إرجاع استجابة مناسبة. عند التحقق والتنفيذ بنجاح، يتم "
"توفير استجابة بتفاصيل المعاملة."
-#: engine/payments/views.py:50
+#: engine/payments/views.py:61
msgid ""
"Handles incoming callback requests to the API.\n"
"This class processes and routes incoming HTTP POST requests to the "
@@ -235,17 +235,17 @@ msgstr ""
"المناسب بناءً على معلمة البوابة المقدمة. وهو مصمم للتعامل مع أحداث رد الاتصال "
"الواردة من أنظمة خارجية وتوفير استجابة HTTP مناسبة تشير إلى النجاح أو الفشل."
-#: engine/payments/views.py:61
+#: engine/payments/views.py:75
#, python-brace-format
msgid "Transaction {transaction.uuid} has no gateway"
msgstr "لا تحتوي المعاملة {transaction.uuid} على بوابة"
-#: engine/payments/views.py:64
+#: engine/payments/views.py:82
#, python-brace-format
msgid "Gateway {transaction.gateway} has no integration"
msgstr "البوابة {transaction.gateway} ليس لها تكامل"
-#: engine/payments/views.py:76
+#: engine/payments/views.py:96
msgid ""
"This endpoint returns minimal and maximal allowed deposit amounts across "
"available gateways."
diff --git a/engine/payments/locale/cs_CZ/LC_MESSAGES/django.po b/engine/payments/locale/cs_CZ/LC_MESSAGES/django.po
index 9da67146..98e4afde 100644
--- a/engine/payments/locale/cs_CZ/LC_MESSAGES/django.po
+++ b/engine/payments/locale/cs_CZ/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -13,11 +13,11 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: engine/payments/admin.py:17 engine/payments/models.py:56
+#: engine/payments/admin.py:17 engine/payments/models.py:68
msgid "transaction"
msgstr "Transakce"
-#: engine/payments/admin.py:18 engine/payments/models.py:57
+#: engine/payments/admin.py:18 engine/payments/models.py:69
msgid "transactions"
msgstr "Transakce"
@@ -37,19 +37,19 @@ msgstr "Vklad"
msgid "withdraw"
msgstr "Stáhnout"
-#: engine/payments/docs/drf/views.py:13
+#: engine/payments/docs/drf/views.py:17
msgid "deposit to balance"
msgstr "Vklad do zůstatku"
-#: engine/payments/docs/drf/views.py:14
+#: engine/payments/docs/drf/views.py:18
msgid "deposit some money to balance"
msgstr "Vložte nějaké peníze na účet"
-#: engine/payments/docs/drf/views.py:29
+#: engine/payments/docs/drf/views.py:33
msgid "payment limits"
msgstr "Limity plateb"
-#: engine/payments/docs/drf/views.py:30
+#: engine/payments/docs/drf/views.py:35
msgid ""
"retrieve minimal and maximal allowed deposit amounts across available "
"gateways"
@@ -69,88 +69,88 @@ msgstr "Získání jedné transakce (pouze pro čtení)"
msgid "Transaction UUID"
msgstr "UUID transakce"
-#: engine/payments/models.py:36
+#: engine/payments/models.py:42
msgid "order to process after paid"
msgstr "Objednávka ke zpracování po zaplacení"
-#: engine/payments/models.py:39
+#: engine/payments/models.py:45
msgid "processing details"
msgstr "Podrobnosti o zpracování"
-#: engine/payments/models.py:75
+#: engine/payments/models.py:91
msgid "balance"
msgstr "Bilance"
-#: engine/payments/models.py:76
+#: engine/payments/models.py:92
msgid "balances"
msgstr "Váhy"
-#: engine/payments/models.py:86
+#: engine/payments/models.py:102
msgid "name"
msgstr "název"
-#: engine/payments/models.py:91
+#: engine/payments/models.py:107
msgid "default currency"
msgstr "výchozí měna"
-#: engine/payments/models.py:98
+#: engine/payments/models.py:114
msgid "currencies"
msgstr "měny"
-#: engine/payments/models.py:100
+#: engine/payments/models.py:116
msgid "comma separated list of currencies supported by this gateway, "
msgstr "seznam měn podporovaných touto bránou oddělený čárkou,"
-#: engine/payments/models.py:106
+#: engine/payments/models.py:122
msgid "minimum transaction amount"
msgstr "minimální částka transakce"
-#: engine/payments/models.py:109
+#: engine/payments/models.py:125
msgid "maximum transaction amount"
msgstr "maximální částka transakce"
-#: engine/payments/models.py:115
+#: engine/payments/models.py:131
msgid "daily limit"
msgstr "denní limit"
-#: engine/payments/models.py:116
+#: engine/payments/models.py:132
msgid "daily sum limit of transactions' amounts. 0 means no limit"
msgstr "denní limit součtu částek transakcí. 0 znamená žádný limit"
-#: engine/payments/models.py:122
+#: engine/payments/models.py:138
msgid "monthly limit"
msgstr "měsíční limit"
-#: engine/payments/models.py:123
+#: engine/payments/models.py:139
msgid "monthly sum limit of transactions' amounts. 0 means no limit"
msgstr "měsíční limit součtu částek transakcí. 0 znamená žádný limit"
-#: engine/payments/models.py:125
+#: engine/payments/models.py:142
msgid "priority"
msgstr "priorita"
-#: engine/payments/models.py:126
+#: engine/payments/models.py:145
msgid "integration variables"
msgstr "integrační proměnné"
-#: engine/payments/models.py:132
+#: engine/payments/models.py:152
msgid "payment gateway"
msgstr "platební brána"
-#: engine/payments/models.py:133
+#: engine/payments/models.py:153
msgid "payment gateways"
msgstr "platební brány"
-#: engine/payments/models.py:169
+#: engine/payments/models.py:198
msgid "gateway integration path is not set"
msgstr "cesta integrace brány není nastavena"
-#: engine/payments/models.py:174
+#: engine/payments/models.py:204
#, python-format
msgid "invalid integration path: %(path)s"
msgstr "neplatná cesta integrace: %(path)s"
-#: engine/payments/signals.py:41
+#: engine/payments/signals.py:45
msgid "the transaction amount didn't fit into allowed limits: "
msgstr "Částka transakce se nevešla do povolených limitů:"
@@ -204,12 +204,12 @@ msgstr "Je třeba mít poskytovatele, od kterého lze získat sazby"
msgid "couldn't find provider {provider}"
msgstr "Nepodařilo se najít poskytovatele {provider}"
-#: engine/payments/utils/emailing.py:28
+#: engine/payments/utils/emailing.py:31
#, python-brace-format
msgid "{settings.PROJECT_NAME} | balance deposit"
msgstr "{settings.PROJECT_NAME} | zůstatek vkladu"
-#: engine/payments/views.py:24
+#: engine/payments/views.py:28
msgid ""
"This class provides an API endpoint to handle deposit transactions.\n"
"It supports the creation of a deposit transaction after validating the "
@@ -222,7 +222,7 @@ msgstr ""
"uživatel není ověřen, je vrácena odpovídající odpověď. Při úspěšném ověření "
"a provedení je poskytnuta odpověď s údaji o transakci."
-#: engine/payments/views.py:50
+#: engine/payments/views.py:61
msgid ""
"Handles incoming callback requests to the API.\n"
"This class processes and routes incoming HTTP POST requests to the "
@@ -236,17 +236,17 @@ msgstr ""
"zpracovávala události zpětného volání přicházející z externích systémů a "
"poskytovala příslušnou odpověď HTTP označující úspěch nebo selhání."
-#: engine/payments/views.py:61
+#: engine/payments/views.py:75
#, python-brace-format
msgid "Transaction {transaction.uuid} has no gateway"
msgstr "Transakce {transaction.uuid} nemá žádnou bránu"
-#: engine/payments/views.py:64
+#: engine/payments/views.py:82
#, python-brace-format
msgid "Gateway {transaction.gateway} has no integration"
msgstr "Brána {transaction.gateway} nemá žádnou integraci"
-#: engine/payments/views.py:76
+#: engine/payments/views.py:96
msgid ""
"This endpoint returns minimal and maximal allowed deposit amounts across "
"available gateways."
diff --git a/engine/payments/locale/da_DK/LC_MESSAGES/django.po b/engine/payments/locale/da_DK/LC_MESSAGES/django.po
index 0cfed36a..0a4d71b2 100644
--- a/engine/payments/locale/da_DK/LC_MESSAGES/django.po
+++ b/engine/payments/locale/da_DK/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -13,11 +13,11 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: engine/payments/admin.py:17 engine/payments/models.py:56
+#: engine/payments/admin.py:17 engine/payments/models.py:68
msgid "transaction"
msgstr "Transaktion"
-#: engine/payments/admin.py:18 engine/payments/models.py:57
+#: engine/payments/admin.py:18 engine/payments/models.py:69
msgid "transactions"
msgstr "Transaktioner"
@@ -37,19 +37,19 @@ msgstr "Indskud"
msgid "withdraw"
msgstr "Træk dig tilbage"
-#: engine/payments/docs/drf/views.py:13
+#: engine/payments/docs/drf/views.py:17
msgid "deposit to balance"
msgstr "Indbetaling til saldo"
-#: engine/payments/docs/drf/views.py:14
+#: engine/payments/docs/drf/views.py:18
msgid "deposit some money to balance"
msgstr "Sæt nogle penge ind på saldoen"
-#: engine/payments/docs/drf/views.py:29
+#: engine/payments/docs/drf/views.py:33
msgid "payment limits"
msgstr "Grænser for betaling"
-#: engine/payments/docs/drf/views.py:30
+#: engine/payments/docs/drf/views.py:35
msgid ""
"retrieve minimal and maximal allowed deposit amounts across available "
"gateways"
@@ -69,88 +69,88 @@ msgstr "Hent en enkelt transaktion (skrivebeskyttet)"
msgid "Transaction UUID"
msgstr "Transaktions-UUID"
-#: engine/payments/models.py:36
+#: engine/payments/models.py:42
msgid "order to process after paid"
msgstr "Ordre til behandling efter betaling"
-#: engine/payments/models.py:39
+#: engine/payments/models.py:45
msgid "processing details"
msgstr "Behandling af detaljer"
-#: engine/payments/models.py:75
+#: engine/payments/models.py:91
msgid "balance"
msgstr "Balance"
-#: engine/payments/models.py:76
+#: engine/payments/models.py:92
msgid "balances"
msgstr "Vægte"
-#: engine/payments/models.py:86
+#: engine/payments/models.py:102
msgid "name"
msgstr "Navn"
-#: engine/payments/models.py:91
+#: engine/payments/models.py:107
msgid "default currency"
msgstr "Standardvaluta"
-#: engine/payments/models.py:98
+#: engine/payments/models.py:114
msgid "currencies"
msgstr "Valutaer"
-#: engine/payments/models.py:100
+#: engine/payments/models.py:116
msgid "comma separated list of currencies supported by this gateway, "
msgstr "kommasepareret liste over valutaer, der understøttes af denne gateway,"
-#: engine/payments/models.py:106
+#: engine/payments/models.py:122
msgid "minimum transaction amount"
msgstr "mindste transaktionsbeløb"
-#: engine/payments/models.py:109
+#: engine/payments/models.py:125
msgid "maximum transaction amount"
msgstr "maksimalt transaktionsbeløb"
-#: engine/payments/models.py:115
+#: engine/payments/models.py:131
msgid "daily limit"
msgstr "daglig grænse"
-#: engine/payments/models.py:116
+#: engine/payments/models.py:132
msgid "daily sum limit of transactions' amounts. 0 means no limit"
msgstr "daglig sumgrænse for transaktionsbeløb. 0 betyder ingen grænse"
-#: engine/payments/models.py:122
+#: engine/payments/models.py:138
msgid "monthly limit"
msgstr "månedlig grænse"
-#: engine/payments/models.py:123
+#: engine/payments/models.py:139
msgid "monthly sum limit of transactions' amounts. 0 means no limit"
msgstr "månedlig sumgrænse for transaktionsbeløb. 0 betyder ingen grænse"
-#: engine/payments/models.py:125
+#: engine/payments/models.py:142
msgid "priority"
msgstr "prioritet"
-#: engine/payments/models.py:126
+#: engine/payments/models.py:145
msgid "integration variables"
msgstr "Integrationsvariabler"
-#: engine/payments/models.py:132
+#: engine/payments/models.py:152
msgid "payment gateway"
msgstr "betalingsgateway"
-#: engine/payments/models.py:133
+#: engine/payments/models.py:153
msgid "payment gateways"
msgstr "Betalingsgateways"
-#: engine/payments/models.py:169
+#: engine/payments/models.py:198
msgid "gateway integration path is not set"
msgstr "gateway-integrationsstien er ikke indstillet"
-#: engine/payments/models.py:174
+#: engine/payments/models.py:204
#, python-format
msgid "invalid integration path: %(path)s"
msgstr "Ugyldig integrationssti: %(path)s."
-#: engine/payments/signals.py:41
+#: engine/payments/signals.py:45
msgid "the transaction amount didn't fit into allowed limits: "
msgstr "Transaktionsbeløbet passede ikke ind i de tilladte grænser:"
@@ -204,12 +204,12 @@ msgstr "Der er brug for en udbyder at få priser fra"
msgid "couldn't find provider {provider}"
msgstr "Kunne ikke finde udbyder {provider}."
-#: engine/payments/utils/emailing.py:28
+#: engine/payments/utils/emailing.py:31
#, python-brace-format
msgid "{settings.PROJECT_NAME} | balance deposit"
msgstr "{settings.PROJECT_NAME} | Saldoindbetaling"
-#: engine/payments/views.py:24
+#: engine/payments/views.py:28
msgid ""
"This class provides an API endpoint to handle deposit transactions.\n"
"It supports the creation of a deposit transaction after validating the "
@@ -224,7 +224,7 @@ msgstr ""
"passende svar. Ved vellykket validering og udførelse leveres et svar med "
"transaktionsoplysningerne."
-#: engine/payments/views.py:50
+#: engine/payments/views.py:61
msgid ""
"Handles incoming callback requests to the API.\n"
"This class processes and routes incoming HTTP POST requests to the "
@@ -238,17 +238,17 @@ msgstr ""
"designet til at håndtere tilbagekaldshændelser, der kommer fra eksterne "
"systemer, og give et passende HTTP-svar, der angiver succes eller fiasko."
-#: engine/payments/views.py:61
+#: engine/payments/views.py:75
#, python-brace-format
msgid "Transaction {transaction.uuid} has no gateway"
msgstr "Transaktion {transaction.uuid} har ingen gateway"
-#: engine/payments/views.py:64
+#: engine/payments/views.py:82
#, python-brace-format
msgid "Gateway {transaction.gateway} has no integration"
msgstr "Gateway {transaction.gateway} har ingen integration"
-#: engine/payments/views.py:76
+#: engine/payments/views.py:96
msgid ""
"This endpoint returns minimal and maximal allowed deposit amounts across "
"available gateways."
diff --git a/engine/payments/locale/de_DE/LC_MESSAGES/django.po b/engine/payments/locale/de_DE/LC_MESSAGES/django.po
index 31036a00..6b04cc88 100644
--- a/engine/payments/locale/de_DE/LC_MESSAGES/django.po
+++ b/engine/payments/locale/de_DE/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -13,11 +13,11 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: engine/payments/admin.py:17 engine/payments/models.py:56
+#: engine/payments/admin.py:17 engine/payments/models.py:68
msgid "transaction"
msgstr "Transaktion"
-#: engine/payments/admin.py:18 engine/payments/models.py:57
+#: engine/payments/admin.py:18 engine/payments/models.py:69
msgid "transactions"
msgstr "Transaktionen"
@@ -37,19 +37,19 @@ msgstr "Einzahlung"
msgid "withdraw"
msgstr "Zurückziehen"
-#: engine/payments/docs/drf/views.py:13
+#: engine/payments/docs/drf/views.py:17
msgid "deposit to balance"
msgstr "Einzahlung auf den Saldo"
-#: engine/payments/docs/drf/views.py:14
+#: engine/payments/docs/drf/views.py:18
msgid "deposit some money to balance"
msgstr "Einzahlung von Geld zum Ausgleich"
-#: engine/payments/docs/drf/views.py:29
+#: engine/payments/docs/drf/views.py:33
msgid "payment limits"
msgstr "Obergrenzen für Zahlungen"
-#: engine/payments/docs/drf/views.py:30
+#: engine/payments/docs/drf/views.py:35
msgid ""
"retrieve minimal and maximal allowed deposit amounts across available "
"gateways"
@@ -69,92 +69,92 @@ msgstr "Eine einzelne Transaktion abrufen (schreibgeschützt)"
msgid "Transaction UUID"
msgstr "Transaktion UUID"
-#: engine/payments/models.py:36
+#: engine/payments/models.py:42
msgid "order to process after paid"
msgstr "Auftrag zur Bearbeitung nach Bezahlung"
-#: engine/payments/models.py:39
+#: engine/payments/models.py:45
msgid "processing details"
msgstr "Details zur Verarbeitung"
-#: engine/payments/models.py:75
+#: engine/payments/models.py:91
msgid "balance"
msgstr "Waage"
-#: engine/payments/models.py:76
+#: engine/payments/models.py:92
msgid "balances"
msgstr "Waagen"
-#: engine/payments/models.py:86
+#: engine/payments/models.py:102
msgid "name"
msgstr "Name"
-#: engine/payments/models.py:91
+#: engine/payments/models.py:107
msgid "default currency"
msgstr "Standardwährung"
-#: engine/payments/models.py:98
+#: engine/payments/models.py:114
msgid "currencies"
msgstr "Währungen"
-#: engine/payments/models.py:100
+#: engine/payments/models.py:116
msgid "comma separated list of currencies supported by this gateway, "
msgstr "kommagetrennte Liste der von diesem Gateway unterstützten Währungen,"
-#: engine/payments/models.py:106
+#: engine/payments/models.py:122
msgid "minimum transaction amount"
msgstr "Mindesttransaktionsbetrag"
-#: engine/payments/models.py:109
+#: engine/payments/models.py:125
msgid "maximum transaction amount"
msgstr "maximaler Transaktionsbetrag"
-#: engine/payments/models.py:115
+#: engine/payments/models.py:131
msgid "daily limit"
msgstr "Tageslimit"
-#: engine/payments/models.py:116
+#: engine/payments/models.py:132
msgid "daily sum limit of transactions' amounts. 0 means no limit"
msgstr ""
"tägliches Summenlimit für die Beträge der Transaktionen. 0 bedeutet kein "
"Limit"
-#: engine/payments/models.py:122
+#: engine/payments/models.py:138
msgid "monthly limit"
msgstr "monatliche Obergrenze"
-#: engine/payments/models.py:123
+#: engine/payments/models.py:139
msgid "monthly sum limit of transactions' amounts. 0 means no limit"
msgstr ""
"monatliches Summenlimit für die Beträge der Transaktionen. 0 bedeutet kein "
"Limit"
-#: engine/payments/models.py:125
+#: engine/payments/models.py:142
msgid "priority"
msgstr "Priorität"
-#: engine/payments/models.py:126
+#: engine/payments/models.py:145
msgid "integration variables"
msgstr "Integrationsvariablen"
-#: engine/payments/models.py:132
+#: engine/payments/models.py:152
msgid "payment gateway"
msgstr "Zahlungs-Gateway"
-#: engine/payments/models.py:133
+#: engine/payments/models.py:153
msgid "payment gateways"
msgstr "Zahlungs-Gateways"
-#: engine/payments/models.py:169
+#: engine/payments/models.py:198
msgid "gateway integration path is not set"
msgstr "Gateway-Integrationspfad ist nicht festgelegt"
-#: engine/payments/models.py:174
+#: engine/payments/models.py:204
#, python-format
msgid "invalid integration path: %(path)s"
msgstr "Ungültiger Integrationspfad: %(path)s"
-#: engine/payments/signals.py:41
+#: engine/payments/signals.py:45
msgid "the transaction amount didn't fit into allowed limits: "
msgstr "Der Transaktionsbetrag passte nicht in die zulässigen Grenzen:"
@@ -208,12 +208,12 @@ msgstr "Sie benötigen einen Anbieter, bei dem Sie die Preise erfragen können."
msgid "couldn't find provider {provider}"
msgstr "Anbieter {provider} konnte nicht gefunden werden"
-#: engine/payments/utils/emailing.py:28
+#: engine/payments/utils/emailing.py:31
#, python-brace-format
msgid "{settings.PROJECT_NAME} | balance deposit"
msgstr "{settings.PROJECT_NAME} | Saldoeinlage"
-#: engine/payments/views.py:24
+#: engine/payments/views.py:28
msgid ""
"This class provides an API endpoint to handle deposit transactions.\n"
"It supports the creation of a deposit transaction after validating the "
@@ -228,7 +228,7 @@ msgstr ""
"eine entsprechende Antwort zurückgegeben. Bei erfolgreicher Validierung und "
"Ausführung wird eine Antwort mit den Transaktionsdetails geliefert."
-#: engine/payments/views.py:50
+#: engine/payments/views.py:61
msgid ""
"Handles incoming callback requests to the API.\n"
"This class processes and routes incoming HTTP POST requests to the "
@@ -243,17 +243,17 @@ msgstr ""
"Systemen zu verarbeiten und eine entsprechende HTTP-Antwort zu liefern, die "
"Erfolg oder Misserfolg anzeigt."
-#: engine/payments/views.py:61
+#: engine/payments/views.py:75
#, python-brace-format
msgid "Transaction {transaction.uuid} has no gateway"
msgstr "Transaktion {transaction.uuid} hat kein Gateway"
-#: engine/payments/views.py:64
+#: engine/payments/views.py:82
#, python-brace-format
msgid "Gateway {transaction.gateway} has no integration"
msgstr "Gateway {transaction.gateway} hat keine Integration"
-#: engine/payments/views.py:76
+#: engine/payments/views.py:96
msgid ""
"This endpoint returns minimal and maximal allowed deposit amounts across "
"available gateways."
diff --git a/engine/payments/locale/en_GB/LC_MESSAGES/django.po b/engine/payments/locale/en_GB/LC_MESSAGES/django.po
index 2262d8c0..a32611d0 100644
--- a/engine/payments/locale/en_GB/LC_MESSAGES/django.po
+++ b/engine/payments/locale/en_GB/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -17,11 +17,11 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: engine/payments/admin.py:17 engine/payments/models.py:56
+#: engine/payments/admin.py:17 engine/payments/models.py:68
msgid "transaction"
msgstr "Transaction"
-#: engine/payments/admin.py:18 engine/payments/models.py:57
+#: engine/payments/admin.py:18 engine/payments/models.py:69
msgid "transactions"
msgstr "Transactions"
@@ -41,19 +41,19 @@ msgstr "Deposit"
msgid "withdraw"
msgstr "Withdraw"
-#: engine/payments/docs/drf/views.py:13
+#: engine/payments/docs/drf/views.py:17
msgid "deposit to balance"
msgstr "Deposit to balance"
-#: engine/payments/docs/drf/views.py:14
+#: engine/payments/docs/drf/views.py:18
msgid "deposit some money to balance"
msgstr "Deposit some money to balance"
-#: engine/payments/docs/drf/views.py:29
+#: engine/payments/docs/drf/views.py:33
msgid "payment limits"
msgstr "Payment limits"
-#: engine/payments/docs/drf/views.py:30
+#: engine/payments/docs/drf/views.py:35
msgid ""
"retrieve minimal and maximal allowed deposit amounts across available "
"gateways"
@@ -73,88 +73,88 @@ msgstr "Retrieve a single transaction (read-only)"
msgid "Transaction UUID"
msgstr "Transaction UUID"
-#: engine/payments/models.py:36
+#: engine/payments/models.py:42
msgid "order to process after paid"
msgstr "Order to process after paid"
-#: engine/payments/models.py:39
+#: engine/payments/models.py:45
msgid "processing details"
msgstr "Processing details"
-#: engine/payments/models.py:75
+#: engine/payments/models.py:91
msgid "balance"
msgstr "Balance"
-#: engine/payments/models.py:76
+#: engine/payments/models.py:92
msgid "balances"
msgstr "Balances"
-#: engine/payments/models.py:86
+#: engine/payments/models.py:102
msgid "name"
msgstr "name"
-#: engine/payments/models.py:91
+#: engine/payments/models.py:107
msgid "default currency"
msgstr "default currency"
-#: engine/payments/models.py:98
+#: engine/payments/models.py:114
msgid "currencies"
msgstr "currencies"
-#: engine/payments/models.py:100
+#: engine/payments/models.py:116
msgid "comma separated list of currencies supported by this gateway, "
msgstr "comma separated list of currencies supported by this gateway,"
-#: engine/payments/models.py:106
+#: engine/payments/models.py:122
msgid "minimum transaction amount"
msgstr "minimum transaction amount"
-#: engine/payments/models.py:109
+#: engine/payments/models.py:125
msgid "maximum transaction amount"
msgstr "maximum transaction amount"
-#: engine/payments/models.py:115
+#: engine/payments/models.py:131
msgid "daily limit"
msgstr "daily limit"
-#: engine/payments/models.py:116
+#: engine/payments/models.py:132
msgid "daily sum limit of transactions' amounts. 0 means no limit"
msgstr "daily sum limit of transactions' amounts. 0 means no limit"
-#: engine/payments/models.py:122
+#: engine/payments/models.py:138
msgid "monthly limit"
msgstr "monthly limit"
-#: engine/payments/models.py:123
+#: engine/payments/models.py:139
msgid "monthly sum limit of transactions' amounts. 0 means no limit"
msgstr "monthly sum limit of transactions' amounts. 0 means no limit"
-#: engine/payments/models.py:125
+#: engine/payments/models.py:142
msgid "priority"
msgstr "priority"
-#: engine/payments/models.py:126
+#: engine/payments/models.py:145
msgid "integration variables"
msgstr "integration variables"
-#: engine/payments/models.py:132
+#: engine/payments/models.py:152
msgid "payment gateway"
msgstr "payment gateway"
-#: engine/payments/models.py:133
+#: engine/payments/models.py:153
msgid "payment gateways"
msgstr "payment gateways"
-#: engine/payments/models.py:169
+#: engine/payments/models.py:198
msgid "gateway integration path is not set"
msgstr "gateway integration path is not set"
-#: engine/payments/models.py:174
+#: engine/payments/models.py:204
#, python-format
msgid "invalid integration path: %(path)s"
msgstr "invalid integration path: %(path)s"
-#: engine/payments/signals.py:41
+#: engine/payments/signals.py:45
msgid "the transaction amount didn't fit into allowed limits: "
msgstr "The transaction amount didn't fit into allowed limits:"
@@ -208,12 +208,12 @@ msgstr "A provider to get rates from is required"
msgid "couldn't find provider {provider}"
msgstr "Couldn't find provider {provider}"
-#: engine/payments/utils/emailing.py:28
+#: engine/payments/utils/emailing.py:31
#, python-brace-format
msgid "{settings.PROJECT_NAME} | balance deposit"
msgstr "{settings.PROJECT_NAME} | balance deposit"
-#: engine/payments/views.py:24
+#: engine/payments/views.py:28
msgid ""
"This class provides an API endpoint to handle deposit transactions.\n"
"It supports the creation of a deposit transaction after validating the "
@@ -227,31 +227,31 @@ msgstr ""
"returned. On successful validation and execution, a response with the "
"transaction details is provided."
-#: engine/payments/views.py:50
-msgid ""
-"Handles incoming callback requests to the API.\n"
-"This class processes and routes incoming HTTP POST requests to the "
-"appropriate pgateway handler based on the provided gateway parameter. It is "
-"designed to handle callback events coming from external systems and provide "
-"an appropriate HTTP response indicating success or failure."
-msgstr ""
-"Handles incoming callback requests to the API.\n"
-"This class processes and routes incoming HTTP POST requests to the "
-"appropriate pgateway handler based on the provided gateway parameter. It is "
-"designed to handle callback events coming from external systems and provide "
-"an appropriate HTTP response indicating success or failure."
-
#: engine/payments/views.py:61
+msgid ""
+"Handles incoming callback requests to the API.\n"
+"This class processes and routes incoming HTTP POST requests to the "
+"appropriate pgateway handler based on the provided gateway parameter. It is "
+"designed to handle callback events coming from external systems and provide "
+"an appropriate HTTP response indicating success or failure."
+msgstr ""
+"Handles incoming callback requests to the API.\n"
+"This class processes and routes incoming HTTP POST requests to the "
+"appropriate pgateway handler based on the provided gateway parameter. It is "
+"designed to handle callback events coming from external systems and provide "
+"an appropriate HTTP response indicating success or failure."
+
+#: engine/payments/views.py:75
#, python-brace-format
msgid "Transaction {transaction.uuid} has no gateway"
msgstr "Transaction {transaction.uuid} has no gateway"
-#: engine/payments/views.py:64
+#: engine/payments/views.py:82
#, python-brace-format
msgid "Gateway {transaction.gateway} has no integration"
msgstr "Gateway {transaction.gateway} has no integration"
-#: engine/payments/views.py:76
+#: engine/payments/views.py:96
msgid ""
"This endpoint returns minimal and maximal allowed deposit amounts across "
"available gateways."
diff --git a/engine/payments/locale/en_US/LC_MESSAGES/django.po b/engine/payments/locale/en_US/LC_MESSAGES/django.po
index e8ba4040..f881072c 100644
--- a/engine/payments/locale/en_US/LC_MESSAGES/django.po
+++ b/engine/payments/locale/en_US/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -13,11 +13,11 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: engine/payments/admin.py:17 engine/payments/models.py:56
+#: engine/payments/admin.py:17 engine/payments/models.py:68
msgid "transaction"
msgstr "Transaction"
-#: engine/payments/admin.py:18 engine/payments/models.py:57
+#: engine/payments/admin.py:18 engine/payments/models.py:69
msgid "transactions"
msgstr "Transactions"
@@ -37,19 +37,19 @@ msgstr "Deposit"
msgid "withdraw"
msgstr "Withdraw"
-#: engine/payments/docs/drf/views.py:13
+#: engine/payments/docs/drf/views.py:17
msgid "deposit to balance"
msgstr "Deposit to balance"
-#: engine/payments/docs/drf/views.py:14
+#: engine/payments/docs/drf/views.py:18
msgid "deposit some money to balance"
msgstr "Deposit some money to balance"
-#: engine/payments/docs/drf/views.py:29
+#: engine/payments/docs/drf/views.py:33
msgid "payment limits"
msgstr "Payment limits"
-#: engine/payments/docs/drf/views.py:30
+#: engine/payments/docs/drf/views.py:35
msgid ""
"retrieve minimal and maximal allowed deposit amounts across available "
"gateways"
@@ -69,88 +69,88 @@ msgstr "Retrieve a single transaction (read-only)"
msgid "Transaction UUID"
msgstr "Transaction UUID"
-#: engine/payments/models.py:36
+#: engine/payments/models.py:42
msgid "order to process after paid"
msgstr "Order to process after paid"
-#: engine/payments/models.py:39
+#: engine/payments/models.py:45
msgid "processing details"
msgstr "Processing details"
-#: engine/payments/models.py:75
+#: engine/payments/models.py:91
msgid "balance"
msgstr "Balance"
-#: engine/payments/models.py:76
+#: engine/payments/models.py:92
msgid "balances"
msgstr "Scales"
-#: engine/payments/models.py:86
+#: engine/payments/models.py:102
msgid "name"
msgstr "name"
-#: engine/payments/models.py:91
+#: engine/payments/models.py:107
msgid "default currency"
msgstr "default currency"
-#: engine/payments/models.py:98
+#: engine/payments/models.py:114
msgid "currencies"
msgstr "currencies"
-#: engine/payments/models.py:100
+#: engine/payments/models.py:116
msgid "comma separated list of currencies supported by this gateway, "
msgstr "comma separated list of currencies supported by this gateway,"
-#: engine/payments/models.py:106
+#: engine/payments/models.py:122
msgid "minimum transaction amount"
msgstr "minimum transaction amount"
-#: engine/payments/models.py:109
+#: engine/payments/models.py:125
msgid "maximum transaction amount"
msgstr "maximum transaction amount"
-#: engine/payments/models.py:115
+#: engine/payments/models.py:131
msgid "daily limit"
msgstr "daily limit"
-#: engine/payments/models.py:116
+#: engine/payments/models.py:132
msgid "daily sum limit of transactions' amounts. 0 means no limit"
msgstr "daily sum limit of transactions' amounts. 0 means no limit"
-#: engine/payments/models.py:122
+#: engine/payments/models.py:138
msgid "monthly limit"
msgstr "monthly limit"
-#: engine/payments/models.py:123
+#: engine/payments/models.py:139
msgid "monthly sum limit of transactions' amounts. 0 means no limit"
msgstr "monthly sum limit of transactions' amounts. 0 means no limit"
-#: engine/payments/models.py:125
+#: engine/payments/models.py:142
msgid "priority"
msgstr "priority"
-#: engine/payments/models.py:126
+#: engine/payments/models.py:145
msgid "integration variables"
msgstr "integration variables"
-#: engine/payments/models.py:132
+#: engine/payments/models.py:152
msgid "payment gateway"
msgstr "payment gateway"
-#: engine/payments/models.py:133
+#: engine/payments/models.py:153
msgid "payment gateways"
msgstr "payment gateways"
-#: engine/payments/models.py:169
+#: engine/payments/models.py:198
msgid "gateway integration path is not set"
msgstr "gateway integration path is not set"
-#: engine/payments/models.py:174
+#: engine/payments/models.py:204
#, python-format
msgid "invalid integration path: %(path)s"
msgstr "invalid integration path: %(path)s"
-#: engine/payments/signals.py:41
+#: engine/payments/signals.py:45
msgid "the transaction amount didn't fit into allowed limits: "
msgstr "The transaction amount didn't fit into allowed limits:"
@@ -204,12 +204,12 @@ msgstr "A provider to get rates from is required"
msgid "couldn't find provider {provider}"
msgstr "Couldn't find provider {provider}"
-#: engine/payments/utils/emailing.py:28
+#: engine/payments/utils/emailing.py:31
#, python-brace-format
msgid "{settings.PROJECT_NAME} | balance deposit"
msgstr "{settings.PROJECT_NAME} | balance deposit"
-#: engine/payments/views.py:24
+#: engine/payments/views.py:28
msgid ""
"This class provides an API endpoint to handle deposit transactions.\n"
"It supports the creation of a deposit transaction after validating the "
@@ -223,31 +223,31 @@ msgstr ""
"returned. On successful validation and execution, a response with the "
"transaction details is provided."
-#: engine/payments/views.py:50
-msgid ""
-"Handles incoming callback requests to the API.\n"
-"This class processes and routes incoming HTTP POST requests to the "
-"appropriate pgateway handler based on the provided gateway parameter. It is "
-"designed to handle callback events coming from external systems and provide "
-"an appropriate HTTP response indicating success or failure."
-msgstr ""
-"Handles incoming callback requests to the API.\n"
-"This class processes and routes incoming HTTP POST requests to the "
-"appropriate pgateway handler based on the provided gateway parameter. It is "
-"designed to handle callback events coming from external systems and provide "
-"an appropriate HTTP response indicating success or failure."
-
#: engine/payments/views.py:61
+msgid ""
+"Handles incoming callback requests to the API.\n"
+"This class processes and routes incoming HTTP POST requests to the "
+"appropriate pgateway handler based on the provided gateway parameter. It is "
+"designed to handle callback events coming from external systems and provide "
+"an appropriate HTTP response indicating success or failure."
+msgstr ""
+"Handles incoming callback requests to the API.\n"
+"This class processes and routes incoming HTTP POST requests to the "
+"appropriate pgateway handler based on the provided gateway parameter. It is "
+"designed to handle callback events coming from external systems and provide "
+"an appropriate HTTP response indicating success or failure."
+
+#: engine/payments/views.py:75
#, python-brace-format
msgid "Transaction {transaction.uuid} has no gateway"
msgstr "Transaction {transaction.uuid} has no gateway"
-#: engine/payments/views.py:64
+#: engine/payments/views.py:82
#, python-brace-format
msgid "Gateway {transaction.gateway} has no integration"
msgstr "Gateway {transaction.gateway} has no integration"
-#: engine/payments/views.py:76
+#: engine/payments/views.py:96
msgid ""
"This endpoint returns minimal and maximal allowed deposit amounts across "
"available gateways."
diff --git a/engine/payments/locale/es_ES/LC_MESSAGES/django.po b/engine/payments/locale/es_ES/LC_MESSAGES/django.po
index a2619d5b..faa26b1d 100644
--- a/engine/payments/locale/es_ES/LC_MESSAGES/django.po
+++ b/engine/payments/locale/es_ES/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -13,11 +13,11 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: engine/payments/admin.py:17 engine/payments/models.py:56
+#: engine/payments/admin.py:17 engine/payments/models.py:68
msgid "transaction"
msgstr "Transacción"
-#: engine/payments/admin.py:18 engine/payments/models.py:57
+#: engine/payments/admin.py:18 engine/payments/models.py:69
msgid "transactions"
msgstr "Transacciones"
@@ -37,19 +37,19 @@ msgstr "Depósito"
msgid "withdraw"
msgstr "Retirar"
-#: engine/payments/docs/drf/views.py:13
+#: engine/payments/docs/drf/views.py:17
msgid "deposit to balance"
msgstr "Depósito a cuenta"
-#: engine/payments/docs/drf/views.py:14
+#: engine/payments/docs/drf/views.py:18
msgid "deposit some money to balance"
msgstr "Depositar dinero para equilibrar"
-#: engine/payments/docs/drf/views.py:29
+#: engine/payments/docs/drf/views.py:33
msgid "payment limits"
msgstr "Límites de pago"
-#: engine/payments/docs/drf/views.py:30
+#: engine/payments/docs/drf/views.py:35
msgid ""
"retrieve minimal and maximal allowed deposit amounts across available "
"gateways"
@@ -69,92 +69,92 @@ msgstr "Recuperar una única transacción (sólo lectura)"
msgid "Transaction UUID"
msgstr "UUID de la transacción"
-#: engine/payments/models.py:36
+#: engine/payments/models.py:42
msgid "order to process after paid"
msgstr "Orden a tramitar una vez pagada"
-#: engine/payments/models.py:39
+#: engine/payments/models.py:45
msgid "processing details"
msgstr "Detalles del proceso"
-#: engine/payments/models.py:75
+#: engine/payments/models.py:91
msgid "balance"
msgstr "Saldo"
-#: engine/payments/models.py:76
+#: engine/payments/models.py:92
msgid "balances"
msgstr "Escalas"
-#: engine/payments/models.py:86
+#: engine/payments/models.py:102
msgid "name"
msgstr "nombre"
-#: engine/payments/models.py:91
+#: engine/payments/models.py:107
msgid "default currency"
msgstr "moneda por defecto"
-#: engine/payments/models.py:98
+#: engine/payments/models.py:114
msgid "currencies"
msgstr "divisas"
-#: engine/payments/models.py:100
+#: engine/payments/models.py:116
msgid "comma separated list of currencies supported by this gateway, "
msgstr "lista separada por comas de las divisas admitidas por esta pasarela,"
-#: engine/payments/models.py:106
+#: engine/payments/models.py:122
msgid "minimum transaction amount"
msgstr "importe mínimo de transacción"
-#: engine/payments/models.py:109
+#: engine/payments/models.py:125
msgid "maximum transaction amount"
msgstr "importe máximo de transacción"
-#: engine/payments/models.py:115
+#: engine/payments/models.py:131
msgid "daily limit"
msgstr "límite diario"
-#: engine/payments/models.py:116
+#: engine/payments/models.py:132
msgid "daily sum limit of transactions' amounts. 0 means no limit"
msgstr ""
"límite de la suma diaria de los importes de las transacciones. 0 significa "
"sin límite"
-#: engine/payments/models.py:122
+#: engine/payments/models.py:138
msgid "monthly limit"
msgstr "límite mensual"
-#: engine/payments/models.py:123
+#: engine/payments/models.py:139
msgid "monthly sum limit of transactions' amounts. 0 means no limit"
msgstr ""
"límite de la suma mensual de los importes de las transacciones. 0 significa "
"sin límite"
-#: engine/payments/models.py:125
+#: engine/payments/models.py:142
msgid "priority"
msgstr "prioridad"
-#: engine/payments/models.py:126
+#: engine/payments/models.py:145
msgid "integration variables"
msgstr "variables de integración"
-#: engine/payments/models.py:132
+#: engine/payments/models.py:152
msgid "payment gateway"
msgstr "pasarela de pagos"
-#: engine/payments/models.py:133
+#: engine/payments/models.py:153
msgid "payment gateways"
msgstr "pasarelas de pago"
-#: engine/payments/models.py:169
+#: engine/payments/models.py:198
msgid "gateway integration path is not set"
msgstr "la ruta de integración de la pasarela no está configurada"
-#: engine/payments/models.py:174
+#: engine/payments/models.py:204
#, python-format
msgid "invalid integration path: %(path)s"
msgstr "ruta de integración no válida: %(path)s"
-#: engine/payments/signals.py:41
+#: engine/payments/signals.py:45
msgid "the transaction amount didn't fit into allowed limits: "
msgstr "El importe de la transacción no se ajustaba a los límites permitidos:"
@@ -209,12 +209,12 @@ msgstr "Se necesita un proveedor del que obtener tarifas"
msgid "couldn't find provider {provider}"
msgstr "No se pudo encontrar el proveedor {provider}"
-#: engine/payments/utils/emailing.py:28
+#: engine/payments/utils/emailing.py:31
#, python-brace-format
msgid "{settings.PROJECT_NAME} | balance deposit"
msgstr "{settings.PROJECT_NAME} | depósito de saldo"
-#: engine/payments/views.py:24
+#: engine/payments/views.py:28
msgid ""
"This class provides an API endpoint to handle deposit transactions.\n"
"It supports the creation of a deposit transaction after validating the "
@@ -229,7 +229,7 @@ msgstr ""
"apropiada. Si la validación y ejecución son correctas, se proporciona una "
"respuesta con los detalles de la transacción."
-#: engine/payments/views.py:50
+#: engine/payments/views.py:61
msgid ""
"Handles incoming callback requests to the API.\n"
"This class processes and routes incoming HTTP POST requests to the "
@@ -244,17 +244,17 @@ msgstr ""
"sistemas externos y proporcionar una respuesta HTTP adecuada que indique el "
"éxito o el fracaso."
-#: engine/payments/views.py:61
+#: engine/payments/views.py:75
#, python-brace-format
msgid "Transaction {transaction.uuid} has no gateway"
msgstr "La transacción {transaction.uuid} no tiene puerta de enlace"
-#: engine/payments/views.py:64
+#: engine/payments/views.py:82
#, python-brace-format
msgid "Gateway {transaction.gateway} has no integration"
msgstr "Gateway {transaction.gateway} no tiene integración"
-#: engine/payments/views.py:76
+#: engine/payments/views.py:96
msgid ""
"This endpoint returns minimal and maximal allowed deposit amounts across "
"available gateways."
diff --git a/engine/payments/locale/fa_IR/LC_MESSAGES/django.po b/engine/payments/locale/fa_IR/LC_MESSAGES/django.po
index 7a88150c..e21c73b3 100644
--- a/engine/payments/locale/fa_IR/LC_MESSAGES/django.po
+++ b/engine/payments/locale/fa_IR/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -16,11 +16,11 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: engine/payments/admin.py:17 engine/payments/models.py:56
+#: engine/payments/admin.py:17 engine/payments/models.py:68
msgid "transaction"
msgstr ""
-#: engine/payments/admin.py:18 engine/payments/models.py:57
+#: engine/payments/admin.py:18 engine/payments/models.py:69
msgid "transactions"
msgstr ""
@@ -40,19 +40,19 @@ msgstr ""
msgid "withdraw"
msgstr ""
-#: engine/payments/docs/drf/views.py:13
+#: engine/payments/docs/drf/views.py:17
msgid "deposit to balance"
msgstr ""
-#: engine/payments/docs/drf/views.py:14
+#: engine/payments/docs/drf/views.py:18
msgid "deposit some money to balance"
msgstr ""
-#: engine/payments/docs/drf/views.py:29
+#: engine/payments/docs/drf/views.py:33
msgid "payment limits"
msgstr ""
-#: engine/payments/docs/drf/views.py:30
+#: engine/payments/docs/drf/views.py:35
msgid ""
"retrieve minimal and maximal allowed deposit amounts across available "
"gateways"
@@ -70,88 +70,88 @@ msgstr ""
msgid "Transaction UUID"
msgstr ""
-#: engine/payments/models.py:36
+#: engine/payments/models.py:42
msgid "order to process after paid"
msgstr ""
-#: engine/payments/models.py:39
+#: engine/payments/models.py:45
msgid "processing details"
msgstr ""
-#: engine/payments/models.py:75
+#: engine/payments/models.py:91
msgid "balance"
msgstr ""
-#: engine/payments/models.py:76
+#: engine/payments/models.py:92
msgid "balances"
msgstr ""
-#: engine/payments/models.py:86
+#: engine/payments/models.py:102
msgid "name"
msgstr ""
-#: engine/payments/models.py:91
+#: engine/payments/models.py:107
msgid "default currency"
msgstr ""
-#: engine/payments/models.py:98
+#: engine/payments/models.py:114
msgid "currencies"
msgstr ""
-#: engine/payments/models.py:100
+#: engine/payments/models.py:116
msgid "comma separated list of currencies supported by this gateway, "
msgstr ""
-#: engine/payments/models.py:106
+#: engine/payments/models.py:122
msgid "minimum transaction amount"
msgstr ""
-#: engine/payments/models.py:109
+#: engine/payments/models.py:125
msgid "maximum transaction amount"
msgstr ""
-#: engine/payments/models.py:115
+#: engine/payments/models.py:131
msgid "daily limit"
msgstr ""
-#: engine/payments/models.py:116
+#: engine/payments/models.py:132
msgid "daily sum limit of transactions' amounts. 0 means no limit"
msgstr ""
-#: engine/payments/models.py:122
+#: engine/payments/models.py:138
msgid "monthly limit"
msgstr ""
-#: engine/payments/models.py:123
+#: engine/payments/models.py:139
msgid "monthly sum limit of transactions' amounts. 0 means no limit"
msgstr ""
-#: engine/payments/models.py:125
+#: engine/payments/models.py:142
msgid "priority"
msgstr ""
-#: engine/payments/models.py:126
+#: engine/payments/models.py:145
msgid "integration variables"
msgstr ""
-#: engine/payments/models.py:132
+#: engine/payments/models.py:152
msgid "payment gateway"
msgstr ""
-#: engine/payments/models.py:133
+#: engine/payments/models.py:153
msgid "payment gateways"
msgstr ""
-#: engine/payments/models.py:169
+#: engine/payments/models.py:198
msgid "gateway integration path is not set"
msgstr ""
-#: engine/payments/models.py:174
+#: engine/payments/models.py:204
#, python-format
msgid "invalid integration path: %(path)s"
msgstr ""
-#: engine/payments/signals.py:41
+#: engine/payments/signals.py:45
msgid "the transaction amount didn't fit into allowed limits: "
msgstr ""
@@ -201,12 +201,12 @@ msgstr ""
msgid "couldn't find provider {provider}"
msgstr ""
-#: engine/payments/utils/emailing.py:28
+#: engine/payments/utils/emailing.py:31
#, python-brace-format
msgid "{settings.PROJECT_NAME} | balance deposit"
msgstr ""
-#: engine/payments/views.py:24
+#: engine/payments/views.py:28
msgid ""
"This class provides an API endpoint to handle deposit transactions.\n"
"It supports the creation of a deposit transaction after validating the "
@@ -215,7 +215,7 @@ msgid ""
"transaction details is provided."
msgstr ""
-#: engine/payments/views.py:50
+#: engine/payments/views.py:61
msgid ""
"Handles incoming callback requests to the API.\n"
"This class processes and routes incoming HTTP POST requests to the "
@@ -224,17 +224,17 @@ msgid ""
"an appropriate HTTP response indicating success or failure."
msgstr ""
-#: engine/payments/views.py:61
+#: engine/payments/views.py:75
#, python-brace-format
msgid "Transaction {transaction.uuid} has no gateway"
msgstr ""
-#: engine/payments/views.py:64
+#: engine/payments/views.py:82
#, python-brace-format
msgid "Gateway {transaction.gateway} has no integration"
msgstr ""
-#: engine/payments/views.py:76
+#: engine/payments/views.py:96
msgid ""
"This endpoint returns minimal and maximal allowed deposit amounts across "
"available gateways."
diff --git a/engine/payments/locale/fr_FR/LC_MESSAGES/django.po b/engine/payments/locale/fr_FR/LC_MESSAGES/django.po
index fd2779b8..ddc50bb4 100644
--- a/engine/payments/locale/fr_FR/LC_MESSAGES/django.po
+++ b/engine/payments/locale/fr_FR/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -13,11 +13,11 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: engine/payments/admin.py:17 engine/payments/models.py:56
+#: engine/payments/admin.py:17 engine/payments/models.py:68
msgid "transaction"
msgstr "Transaction"
-#: engine/payments/admin.py:18 engine/payments/models.py:57
+#: engine/payments/admin.py:18 engine/payments/models.py:69
msgid "transactions"
msgstr "Transactions"
@@ -37,19 +37,19 @@ msgstr "Dépôt"
msgid "withdraw"
msgstr "Se retirer"
-#: engine/payments/docs/drf/views.py:13
+#: engine/payments/docs/drf/views.py:17
msgid "deposit to balance"
msgstr "Dépôt au solde"
-#: engine/payments/docs/drf/views.py:14
+#: engine/payments/docs/drf/views.py:18
msgid "deposit some money to balance"
msgstr "Déposer de l'argent sur le compte"
-#: engine/payments/docs/drf/views.py:29
+#: engine/payments/docs/drf/views.py:33
msgid "payment limits"
msgstr "Limites de paiement"
-#: engine/payments/docs/drf/views.py:30
+#: engine/payments/docs/drf/views.py:35
msgid ""
"retrieve minimal and maximal allowed deposit amounts across available "
"gateways"
@@ -69,92 +69,92 @@ msgstr "Récupérer une transaction unique (en lecture seule)"
msgid "Transaction UUID"
msgstr "UUID de la transaction"
-#: engine/payments/models.py:36
+#: engine/payments/models.py:42
msgid "order to process after paid"
msgstr "Commande à traiter après paiement"
-#: engine/payments/models.py:39
+#: engine/payments/models.py:45
msgid "processing details"
msgstr "Détails du traitement"
-#: engine/payments/models.py:75
+#: engine/payments/models.py:91
msgid "balance"
msgstr "Balance"
-#: engine/payments/models.py:76
+#: engine/payments/models.py:92
msgid "balances"
msgstr "Balances"
-#: engine/payments/models.py:86
+#: engine/payments/models.py:102
msgid "name"
msgstr "nom"
-#: engine/payments/models.py:91
+#: engine/payments/models.py:107
msgid "default currency"
msgstr "monnaie par défaut"
-#: engine/payments/models.py:98
+#: engine/payments/models.py:114
msgid "currencies"
msgstr "monnaies"
-#: engine/payments/models.py:100
+#: engine/payments/models.py:116
msgid "comma separated list of currencies supported by this gateway, "
msgstr ""
"liste séparée par des virgules des devises prises en charge par cette "
"passerelle,"
-#: engine/payments/models.py:106
+#: engine/payments/models.py:122
msgid "minimum transaction amount"
msgstr "montant minimum de la transaction"
-#: engine/payments/models.py:109
+#: engine/payments/models.py:125
msgid "maximum transaction amount"
msgstr "montant maximum de la transaction"
-#: engine/payments/models.py:115
+#: engine/payments/models.py:131
msgid "daily limit"
msgstr "limite journalière"
-#: engine/payments/models.py:116
+#: engine/payments/models.py:132
msgid "daily sum limit of transactions' amounts. 0 means no limit"
msgstr ""
"la limite quotidienne des montants des transactions. 0 signifie aucune limite"
-#: engine/payments/models.py:122
+#: engine/payments/models.py:138
msgid "monthly limit"
msgstr "limite mensuelle"
-#: engine/payments/models.py:123
+#: engine/payments/models.py:139
msgid "monthly sum limit of transactions' amounts. 0 means no limit"
msgstr ""
"limite mensuelle des montants des transactions. 0 signifie aucune limite"
-#: engine/payments/models.py:125
+#: engine/payments/models.py:142
msgid "priority"
msgstr "priorité"
-#: engine/payments/models.py:126
+#: engine/payments/models.py:145
msgid "integration variables"
msgstr "variables d'intégration"
-#: engine/payments/models.py:132
+#: engine/payments/models.py:152
msgid "payment gateway"
msgstr "passerelle de paiement"
-#: engine/payments/models.py:133
+#: engine/payments/models.py:153
msgid "payment gateways"
msgstr "passerelles de paiement"
-#: engine/payments/models.py:169
+#: engine/payments/models.py:198
msgid "gateway integration path is not set"
msgstr "le chemin d'intégration de la passerelle n'est pas défini"
-#: engine/payments/models.py:174
+#: engine/payments/models.py:204
#, python-format
msgid "invalid integration path: %(path)s"
msgstr "chemin d'intégration non valide : %(path)s"
-#: engine/payments/signals.py:41
+#: engine/payments/signals.py:45
msgid "the transaction amount didn't fit into allowed limits: "
msgstr ""
"Le montant de la transaction ne correspondait pas aux limites autorisées :"
@@ -210,12 +210,12 @@ msgstr "Il est nécessaire de disposer d'un fournisseur pour obtenir des tarifs"
msgid "couldn't find provider {provider}"
msgstr "Impossible de trouver le fournisseur {provider}"
-#: engine/payments/utils/emailing.py:28
+#: engine/payments/utils/emailing.py:31
#, python-brace-format
msgid "{settings.PROJECT_NAME} | balance deposit"
msgstr "{settings.PROJECT_NAME} | dépôt de solde"
-#: engine/payments/views.py:24
+#: engine/payments/views.py:28
msgid ""
"This class provides an API endpoint to handle deposit transactions.\n"
"It supports the creation of a deposit transaction after validating the "
@@ -230,7 +230,7 @@ msgstr ""
"appropriée est renvoyée. Si la validation et l'exécution sont réussies, une "
"réponse contenant les détails de la transaction est fournie."
-#: engine/payments/views.py:50
+#: engine/payments/views.py:61
msgid ""
"Handles incoming callback requests to the API.\n"
"This class processes and routes incoming HTTP POST requests to the "
@@ -245,17 +245,17 @@ msgstr ""
"systèmes externes et fournir une réponse HTTP appropriée indiquant le succès "
"ou l'échec."
-#: engine/payments/views.py:61
+#: engine/payments/views.py:75
#, python-brace-format
msgid "Transaction {transaction.uuid} has no gateway"
msgstr "La transaction {transaction.uuid} n'a pas de passerelle"
-#: engine/payments/views.py:64
+#: engine/payments/views.py:82
#, python-brace-format
msgid "Gateway {transaction.gateway} has no integration"
msgstr "La passerelle {transaction.gateway} n'a pas d'intégration"
-#: engine/payments/views.py:76
+#: engine/payments/views.py:96
msgid ""
"This endpoint returns minimal and maximal allowed deposit amounts across "
"available gateways."
diff --git a/engine/payments/locale/he_IL/LC_MESSAGES/django.po b/engine/payments/locale/he_IL/LC_MESSAGES/django.po
index 60d4892b..28c21719 100644
--- a/engine/payments/locale/he_IL/LC_MESSAGES/django.po
+++ b/engine/payments/locale/he_IL/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -13,11 +13,11 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: engine/payments/admin.py:17 engine/payments/models.py:56
+#: engine/payments/admin.py:17 engine/payments/models.py:68
msgid "transaction"
msgstr "עסקה"
-#: engine/payments/admin.py:18 engine/payments/models.py:57
+#: engine/payments/admin.py:18 engine/payments/models.py:69
msgid "transactions"
msgstr "עסקאות"
@@ -37,19 +37,19 @@ msgstr "הפקדה"
msgid "withdraw"
msgstr "למשוך"
-#: engine/payments/docs/drf/views.py:13
+#: engine/payments/docs/drf/views.py:17
msgid "deposit to balance"
msgstr "הפקדה לאיזון"
-#: engine/payments/docs/drf/views.py:14
+#: engine/payments/docs/drf/views.py:18
msgid "deposit some money to balance"
msgstr "הפקד סכום כסף כדי לאזן את החשבון"
-#: engine/payments/docs/drf/views.py:29
+#: engine/payments/docs/drf/views.py:33
msgid "payment limits"
msgstr "מגבלות תשלום"
-#: engine/payments/docs/drf/views.py:30
+#: engine/payments/docs/drf/views.py:35
msgid ""
"retrieve minimal and maximal allowed deposit amounts across available "
"gateways"
@@ -67,88 +67,88 @@ msgstr "איתור עסקה בודדת (לקריאה בלבד)"
msgid "Transaction UUID"
msgstr "UUID של העסקה"
-#: engine/payments/models.py:36
+#: engine/payments/models.py:42
msgid "order to process after paid"
msgstr "הזמנה לעיבוד לאחר תשלום"
-#: engine/payments/models.py:39
+#: engine/payments/models.py:45
msgid "processing details"
msgstr "פרטי העיבוד"
-#: engine/payments/models.py:75
+#: engine/payments/models.py:91
msgid "balance"
msgstr "מאזניים"
-#: engine/payments/models.py:76
+#: engine/payments/models.py:92
msgid "balances"
msgstr "מאזניים"
-#: engine/payments/models.py:86
+#: engine/payments/models.py:102
msgid "name"
msgstr "שם"
-#: engine/payments/models.py:91
+#: engine/payments/models.py:107
msgid "default currency"
msgstr "מטבע ברירת מחדל"
-#: engine/payments/models.py:98
+#: engine/payments/models.py:114
msgid "currencies"
msgstr "מטבעות"
-#: engine/payments/models.py:100
+#: engine/payments/models.py:116
msgid "comma separated list of currencies supported by this gateway, "
msgstr "רשימה מופרדת בפסיקים של המטבעות הנתמכים על ידי שער זה,"
-#: engine/payments/models.py:106
+#: engine/payments/models.py:122
msgid "minimum transaction amount"
msgstr "סכום העסקה המינימלי"
-#: engine/payments/models.py:109
+#: engine/payments/models.py:125
msgid "maximum transaction amount"
msgstr "סכום העסקה המקסימלי"
-#: engine/payments/models.py:115
+#: engine/payments/models.py:131
msgid "daily limit"
msgstr "מגבלה יומית"
-#: engine/payments/models.py:116
+#: engine/payments/models.py:132
msgid "daily sum limit of transactions' amounts. 0 means no limit"
msgstr "הגבלה יומית על סכום העסקאות. 0 פירושו ללא הגבלה."
-#: engine/payments/models.py:122
+#: engine/payments/models.py:138
msgid "monthly limit"
msgstr "מגבלה חודשית"
-#: engine/payments/models.py:123
+#: engine/payments/models.py:139
msgid "monthly sum limit of transactions' amounts. 0 means no limit"
msgstr "הגבלת סכום חודשי של סכומי העסקאות. 0 פירושו ללא הגבלת סכום."
-#: engine/payments/models.py:125
+#: engine/payments/models.py:142
msgid "priority"
msgstr "עדיפות"
-#: engine/payments/models.py:126
+#: engine/payments/models.py:145
msgid "integration variables"
msgstr "משתני אינטגרציה"
-#: engine/payments/models.py:132
+#: engine/payments/models.py:152
msgid "payment gateway"
msgstr "שער תשלום"
-#: engine/payments/models.py:133
+#: engine/payments/models.py:153
msgid "payment gateways"
msgstr "שערי תשלום"
-#: engine/payments/models.py:169
+#: engine/payments/models.py:198
msgid "gateway integration path is not set"
msgstr "נתיב שילוב השער אינו מוגדר"
-#: engine/payments/models.py:174
+#: engine/payments/models.py:204
#, python-format
msgid "invalid integration path: %(path)s"
msgstr "נתיב אינטגרציה לא חוקי: %(path)s"
-#: engine/payments/signals.py:41
+#: engine/payments/signals.py:45
msgid "the transaction amount didn't fit into allowed limits: "
msgstr "סכום העסקה לא התאים למגבלות המותרות:"
@@ -199,12 +199,12 @@ msgstr "נדרש ספק ממנו ניתן לקבל תעריפים"
msgid "couldn't find provider {provider}"
msgstr "לא ניתן למצוא את הספק {provider}"
-#: engine/payments/utils/emailing.py:28
+#: engine/payments/utils/emailing.py:31
#, python-brace-format
msgid "{settings.PROJECT_NAME} | balance deposit"
msgstr "{settings.PROJECT_NAME} | הפקדת יתרה"
-#: engine/payments/views.py:24
+#: engine/payments/views.py:28
msgid ""
"This class provides an API endpoint to handle deposit transactions.\n"
"It supports the creation of a deposit transaction after validating the "
@@ -216,7 +216,7 @@ msgstr ""
"הפקדה לאחר אימות הנתונים שנמסרו. אם המשתמש אינו מאומת, מתקבלת תגובה מתאימה. "
"לאחר אימות וביצוע מוצלחים, מתקבלת תגובה עם פרטי העסקה."
-#: engine/payments/views.py:50
+#: engine/payments/views.py:61
msgid ""
"Handles incoming callback requests to the API.\n"
"This class processes and routes incoming HTTP POST requests to the "
@@ -228,17 +228,17 @@ msgstr ""
"למטפל pgateway המתאים על סמך פרמטר השער שסופק. היא נועדה לטפל באירועי החזרה "
"ממערכות חיצוניות ולספק תגובת HTTP מתאימה המציינת הצלחה או כישלון."
-#: engine/payments/views.py:61
+#: engine/payments/views.py:75
#, python-brace-format
msgid "Transaction {transaction.uuid} has no gateway"
msgstr "לעסקה {transaction.uuid} אין שער"
-#: engine/payments/views.py:64
+#: engine/payments/views.py:82
#, python-brace-format
msgid "Gateway {transaction.gateway} has no integration"
msgstr "לשער {transaction.gateway} אין אינטגרציה"
-#: engine/payments/views.py:76
+#: engine/payments/views.py:96
msgid ""
"This endpoint returns minimal and maximal allowed deposit amounts across "
"available gateways."
diff --git a/engine/payments/locale/hi_IN/LC_MESSAGES/django.po b/engine/payments/locale/hi_IN/LC_MESSAGES/django.po
index 97802b25..1ec9921b 100644
--- a/engine/payments/locale/hi_IN/LC_MESSAGES/django.po
+++ b/engine/payments/locale/hi_IN/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: LANGUAGE \n"
@@ -16,11 +16,11 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: engine/payments/admin.py:17 engine/payments/models.py:56
+#: engine/payments/admin.py:17 engine/payments/models.py:68
msgid "transaction"
msgstr ""
-#: engine/payments/admin.py:18 engine/payments/models.py:57
+#: engine/payments/admin.py:18 engine/payments/models.py:69
msgid "transactions"
msgstr ""
@@ -40,19 +40,19 @@ msgstr ""
msgid "withdraw"
msgstr ""
-#: engine/payments/docs/drf/views.py:13
+#: engine/payments/docs/drf/views.py:17
msgid "deposit to balance"
msgstr ""
-#: engine/payments/docs/drf/views.py:14
+#: engine/payments/docs/drf/views.py:18
msgid "deposit some money to balance"
msgstr ""
-#: engine/payments/docs/drf/views.py:29
+#: engine/payments/docs/drf/views.py:33
msgid "payment limits"
msgstr ""
-#: engine/payments/docs/drf/views.py:30
+#: engine/payments/docs/drf/views.py:35
msgid ""
"retrieve minimal and maximal allowed deposit amounts across available "
"gateways"
@@ -70,88 +70,88 @@ msgstr ""
msgid "Transaction UUID"
msgstr ""
-#: engine/payments/models.py:36
+#: engine/payments/models.py:42
msgid "order to process after paid"
msgstr ""
-#: engine/payments/models.py:39
+#: engine/payments/models.py:45
msgid "processing details"
msgstr ""
-#: engine/payments/models.py:75
+#: engine/payments/models.py:91
msgid "balance"
msgstr ""
-#: engine/payments/models.py:76
+#: engine/payments/models.py:92
msgid "balances"
msgstr ""
-#: engine/payments/models.py:86
+#: engine/payments/models.py:102
msgid "name"
msgstr ""
-#: engine/payments/models.py:91
+#: engine/payments/models.py:107
msgid "default currency"
msgstr ""
-#: engine/payments/models.py:98
+#: engine/payments/models.py:114
msgid "currencies"
msgstr ""
-#: engine/payments/models.py:100
+#: engine/payments/models.py:116
msgid "comma separated list of currencies supported by this gateway, "
msgstr ""
-#: engine/payments/models.py:106
+#: engine/payments/models.py:122
msgid "minimum transaction amount"
msgstr ""
-#: engine/payments/models.py:109
+#: engine/payments/models.py:125
msgid "maximum transaction amount"
msgstr ""
-#: engine/payments/models.py:115
+#: engine/payments/models.py:131
msgid "daily limit"
msgstr ""
-#: engine/payments/models.py:116
+#: engine/payments/models.py:132
msgid "daily sum limit of transactions' amounts. 0 means no limit"
msgstr ""
-#: engine/payments/models.py:122
+#: engine/payments/models.py:138
msgid "monthly limit"
msgstr ""
-#: engine/payments/models.py:123
+#: engine/payments/models.py:139
msgid "monthly sum limit of transactions' amounts. 0 means no limit"
msgstr ""
-#: engine/payments/models.py:125
+#: engine/payments/models.py:142
msgid "priority"
msgstr ""
-#: engine/payments/models.py:126
+#: engine/payments/models.py:145
msgid "integration variables"
msgstr ""
-#: engine/payments/models.py:132
+#: engine/payments/models.py:152
msgid "payment gateway"
msgstr ""
-#: engine/payments/models.py:133
+#: engine/payments/models.py:153
msgid "payment gateways"
msgstr ""
-#: engine/payments/models.py:169
+#: engine/payments/models.py:198
msgid "gateway integration path is not set"
msgstr ""
-#: engine/payments/models.py:174
+#: engine/payments/models.py:204
#, python-format
msgid "invalid integration path: %(path)s"
msgstr ""
-#: engine/payments/signals.py:41
+#: engine/payments/signals.py:45
msgid "the transaction amount didn't fit into allowed limits: "
msgstr ""
@@ -201,12 +201,12 @@ msgstr ""
msgid "couldn't find provider {provider}"
msgstr ""
-#: engine/payments/utils/emailing.py:28
+#: engine/payments/utils/emailing.py:31
#, python-brace-format
msgid "{settings.PROJECT_NAME} | balance deposit"
msgstr ""
-#: engine/payments/views.py:24
+#: engine/payments/views.py:28
msgid ""
"This class provides an API endpoint to handle deposit transactions.\n"
"It supports the creation of a deposit transaction after validating the "
@@ -215,7 +215,7 @@ msgid ""
"transaction details is provided."
msgstr ""
-#: engine/payments/views.py:50
+#: engine/payments/views.py:61
msgid ""
"Handles incoming callback requests to the API.\n"
"This class processes and routes incoming HTTP POST requests to the "
@@ -224,17 +224,17 @@ msgid ""
"an appropriate HTTP response indicating success or failure."
msgstr ""
-#: engine/payments/views.py:61
+#: engine/payments/views.py:75
#, python-brace-format
msgid "Transaction {transaction.uuid} has no gateway"
msgstr ""
-#: engine/payments/views.py:64
+#: engine/payments/views.py:82
#, python-brace-format
msgid "Gateway {transaction.gateway} has no integration"
msgstr ""
-#: engine/payments/views.py:76
+#: engine/payments/views.py:96
msgid ""
"This endpoint returns minimal and maximal allowed deposit amounts across "
"available gateways."
diff --git a/engine/payments/locale/hr_HR/LC_MESSAGES/django.po b/engine/payments/locale/hr_HR/LC_MESSAGES/django.po
index 7a88150c..e21c73b3 100644
--- a/engine/payments/locale/hr_HR/LC_MESSAGES/django.po
+++ b/engine/payments/locale/hr_HR/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -16,11 +16,11 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: engine/payments/admin.py:17 engine/payments/models.py:56
+#: engine/payments/admin.py:17 engine/payments/models.py:68
msgid "transaction"
msgstr ""
-#: engine/payments/admin.py:18 engine/payments/models.py:57
+#: engine/payments/admin.py:18 engine/payments/models.py:69
msgid "transactions"
msgstr ""
@@ -40,19 +40,19 @@ msgstr ""
msgid "withdraw"
msgstr ""
-#: engine/payments/docs/drf/views.py:13
+#: engine/payments/docs/drf/views.py:17
msgid "deposit to balance"
msgstr ""
-#: engine/payments/docs/drf/views.py:14
+#: engine/payments/docs/drf/views.py:18
msgid "deposit some money to balance"
msgstr ""
-#: engine/payments/docs/drf/views.py:29
+#: engine/payments/docs/drf/views.py:33
msgid "payment limits"
msgstr ""
-#: engine/payments/docs/drf/views.py:30
+#: engine/payments/docs/drf/views.py:35
msgid ""
"retrieve minimal and maximal allowed deposit amounts across available "
"gateways"
@@ -70,88 +70,88 @@ msgstr ""
msgid "Transaction UUID"
msgstr ""
-#: engine/payments/models.py:36
+#: engine/payments/models.py:42
msgid "order to process after paid"
msgstr ""
-#: engine/payments/models.py:39
+#: engine/payments/models.py:45
msgid "processing details"
msgstr ""
-#: engine/payments/models.py:75
+#: engine/payments/models.py:91
msgid "balance"
msgstr ""
-#: engine/payments/models.py:76
+#: engine/payments/models.py:92
msgid "balances"
msgstr ""
-#: engine/payments/models.py:86
+#: engine/payments/models.py:102
msgid "name"
msgstr ""
-#: engine/payments/models.py:91
+#: engine/payments/models.py:107
msgid "default currency"
msgstr ""
-#: engine/payments/models.py:98
+#: engine/payments/models.py:114
msgid "currencies"
msgstr ""
-#: engine/payments/models.py:100
+#: engine/payments/models.py:116
msgid "comma separated list of currencies supported by this gateway, "
msgstr ""
-#: engine/payments/models.py:106
+#: engine/payments/models.py:122
msgid "minimum transaction amount"
msgstr ""
-#: engine/payments/models.py:109
+#: engine/payments/models.py:125
msgid "maximum transaction amount"
msgstr ""
-#: engine/payments/models.py:115
+#: engine/payments/models.py:131
msgid "daily limit"
msgstr ""
-#: engine/payments/models.py:116
+#: engine/payments/models.py:132
msgid "daily sum limit of transactions' amounts. 0 means no limit"
msgstr ""
-#: engine/payments/models.py:122
+#: engine/payments/models.py:138
msgid "monthly limit"
msgstr ""
-#: engine/payments/models.py:123
+#: engine/payments/models.py:139
msgid "monthly sum limit of transactions' amounts. 0 means no limit"
msgstr ""
-#: engine/payments/models.py:125
+#: engine/payments/models.py:142
msgid "priority"
msgstr ""
-#: engine/payments/models.py:126
+#: engine/payments/models.py:145
msgid "integration variables"
msgstr ""
-#: engine/payments/models.py:132
+#: engine/payments/models.py:152
msgid "payment gateway"
msgstr ""
-#: engine/payments/models.py:133
+#: engine/payments/models.py:153
msgid "payment gateways"
msgstr ""
-#: engine/payments/models.py:169
+#: engine/payments/models.py:198
msgid "gateway integration path is not set"
msgstr ""
-#: engine/payments/models.py:174
+#: engine/payments/models.py:204
#, python-format
msgid "invalid integration path: %(path)s"
msgstr ""
-#: engine/payments/signals.py:41
+#: engine/payments/signals.py:45
msgid "the transaction amount didn't fit into allowed limits: "
msgstr ""
@@ -201,12 +201,12 @@ msgstr ""
msgid "couldn't find provider {provider}"
msgstr ""
-#: engine/payments/utils/emailing.py:28
+#: engine/payments/utils/emailing.py:31
#, python-brace-format
msgid "{settings.PROJECT_NAME} | balance deposit"
msgstr ""
-#: engine/payments/views.py:24
+#: engine/payments/views.py:28
msgid ""
"This class provides an API endpoint to handle deposit transactions.\n"
"It supports the creation of a deposit transaction after validating the "
@@ -215,7 +215,7 @@ msgid ""
"transaction details is provided."
msgstr ""
-#: engine/payments/views.py:50
+#: engine/payments/views.py:61
msgid ""
"Handles incoming callback requests to the API.\n"
"This class processes and routes incoming HTTP POST requests to the "
@@ -224,17 +224,17 @@ msgid ""
"an appropriate HTTP response indicating success or failure."
msgstr ""
-#: engine/payments/views.py:61
+#: engine/payments/views.py:75
#, python-brace-format
msgid "Transaction {transaction.uuid} has no gateway"
msgstr ""
-#: engine/payments/views.py:64
+#: engine/payments/views.py:82
#, python-brace-format
msgid "Gateway {transaction.gateway} has no integration"
msgstr ""
-#: engine/payments/views.py:76
+#: engine/payments/views.py:96
msgid ""
"This endpoint returns minimal and maximal allowed deposit amounts across "
"available gateways."
diff --git a/engine/payments/locale/id_ID/LC_MESSAGES/django.po b/engine/payments/locale/id_ID/LC_MESSAGES/django.po
index e5749ef9..e1fce809 100644
--- a/engine/payments/locale/id_ID/LC_MESSAGES/django.po
+++ b/engine/payments/locale/id_ID/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -13,11 +13,11 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: engine/payments/admin.py:17 engine/payments/models.py:56
+#: engine/payments/admin.py:17 engine/payments/models.py:68
msgid "transaction"
msgstr "Transaksi"
-#: engine/payments/admin.py:18 engine/payments/models.py:57
+#: engine/payments/admin.py:18 engine/payments/models.py:69
msgid "transactions"
msgstr "Transaksi"
@@ -37,19 +37,19 @@ msgstr "Deposit"
msgid "withdraw"
msgstr "Menarik diri"
-#: engine/payments/docs/drf/views.py:13
+#: engine/payments/docs/drf/views.py:17
msgid "deposit to balance"
msgstr "Setoran ke saldo"
-#: engine/payments/docs/drf/views.py:14
+#: engine/payments/docs/drf/views.py:18
msgid "deposit some money to balance"
msgstr "Menyetor sejumlah uang untuk menyeimbangkan"
-#: engine/payments/docs/drf/views.py:29
+#: engine/payments/docs/drf/views.py:33
msgid "payment limits"
msgstr "Batas pembayaran"
-#: engine/payments/docs/drf/views.py:30
+#: engine/payments/docs/drf/views.py:35
msgid ""
"retrieve minimal and maximal allowed deposit amounts across available "
"gateways"
@@ -69,89 +69,89 @@ msgstr "Mengambil satu transaksi (hanya-baca)"
msgid "Transaction UUID"
msgstr "UUID Transaksi"
-#: engine/payments/models.py:36
+#: engine/payments/models.py:42
msgid "order to process after paid"
msgstr "Pesanan akan diproses setelah dibayar"
-#: engine/payments/models.py:39
+#: engine/payments/models.py:45
msgid "processing details"
msgstr "Detail pemrosesan"
-#: engine/payments/models.py:75
+#: engine/payments/models.py:91
msgid "balance"
msgstr "Keseimbangan"
-#: engine/payments/models.py:76
+#: engine/payments/models.py:92
msgid "balances"
msgstr "Timbangan"
-#: engine/payments/models.py:86
+#: engine/payments/models.py:102
msgid "name"
msgstr "nama"
-#: engine/payments/models.py:91
+#: engine/payments/models.py:107
msgid "default currency"
msgstr "mata uang default"
-#: engine/payments/models.py:98
+#: engine/payments/models.py:114
msgid "currencies"
msgstr "mata uang"
-#: engine/payments/models.py:100
+#: engine/payments/models.py:116
msgid "comma separated list of currencies supported by this gateway, "
msgstr ""
"daftar mata uang yang didukung oleh gateway ini yang dipisahkan dengan koma,"
-#: engine/payments/models.py:106
+#: engine/payments/models.py:122
msgid "minimum transaction amount"
msgstr "jumlah transaksi minimum"
-#: engine/payments/models.py:109
+#: engine/payments/models.py:125
msgid "maximum transaction amount"
msgstr "jumlah transaksi maksimum"
-#: engine/payments/models.py:115
+#: engine/payments/models.py:131
msgid "daily limit"
msgstr "batas harian"
-#: engine/payments/models.py:116
+#: engine/payments/models.py:132
msgid "daily sum limit of transactions' amounts. 0 means no limit"
msgstr "batas jumlah transaksi harian. 0 berarti tidak ada batas"
-#: engine/payments/models.py:122
+#: engine/payments/models.py:138
msgid "monthly limit"
msgstr "batas bulanan"
-#: engine/payments/models.py:123
+#: engine/payments/models.py:139
msgid "monthly sum limit of transactions' amounts. 0 means no limit"
msgstr "batas jumlah transaksi bulanan. 0 berarti tidak ada limit"
-#: engine/payments/models.py:125
+#: engine/payments/models.py:142
msgid "priority"
msgstr "prioritas"
-#: engine/payments/models.py:126
+#: engine/payments/models.py:145
msgid "integration variables"
msgstr "variabel integrasi"
-#: engine/payments/models.py:132
+#: engine/payments/models.py:152
msgid "payment gateway"
msgstr "gerbang pembayaran"
-#: engine/payments/models.py:133
+#: engine/payments/models.py:153
msgid "payment gateways"
msgstr "gateway pembayaran"
-#: engine/payments/models.py:169
+#: engine/payments/models.py:198
msgid "gateway integration path is not set"
msgstr "jalur integrasi gateway tidak ditetapkan"
-#: engine/payments/models.py:174
+#: engine/payments/models.py:204
#, python-format
msgid "invalid integration path: %(path)s"
msgstr "jalur integrasi yang tidak valid: %(path)s"
-#: engine/payments/signals.py:41
+#: engine/payments/signals.py:45
msgid "the transaction amount didn't fit into allowed limits: "
msgstr "Jumlah transaksi tidak sesuai dengan batas yang diizinkan:"
@@ -207,12 +207,12 @@ msgstr "Diperlukan penyedia layanan untuk mendapatkan tarif"
msgid "couldn't find provider {provider}"
msgstr "Tidak dapat menemukan penyedia {provider}"
-#: engine/payments/utils/emailing.py:28
+#: engine/payments/utils/emailing.py:31
#, python-brace-format
msgid "{settings.PROJECT_NAME} | balance deposit"
msgstr "{settings.PROJECT_NAME} | setoran saldo"
-#: engine/payments/views.py:24
+#: engine/payments/views.py:28
msgid ""
"This class provides an API endpoint to handle deposit transactions.\n"
"It supports the creation of a deposit transaction after validating the "
@@ -226,7 +226,7 @@ msgstr ""
"akan dikembalikan. Pada validasi dan eksekusi yang berhasil, sebuah respons "
"dengan detail transaksi disediakan."
-#: engine/payments/views.py:50
+#: engine/payments/views.py:61
msgid ""
"Handles incoming callback requests to the API.\n"
"This class processes and routes incoming HTTP POST requests to the "
@@ -241,17 +241,17 @@ msgstr ""
"sistem eksternal dan memberikan respons HTTP yang sesuai yang "
"mengindikasikan keberhasilan atau kegagalan."
-#: engine/payments/views.py:61
+#: engine/payments/views.py:75
#, python-brace-format
msgid "Transaction {transaction.uuid} has no gateway"
msgstr "Transaksi {transaction.uuid} tidak memiliki gateway"
-#: engine/payments/views.py:64
+#: engine/payments/views.py:82
#, python-brace-format
msgid "Gateway {transaction.gateway} has no integration"
msgstr "Gateway {transaction.gateway} tidak memiliki integrasi"
-#: engine/payments/views.py:76
+#: engine/payments/views.py:96
msgid ""
"This endpoint returns minimal and maximal allowed deposit amounts across "
"available gateways."
diff --git a/engine/payments/locale/it_IT/LC_MESSAGES/django.po b/engine/payments/locale/it_IT/LC_MESSAGES/django.po
index 0574c5b1..e57acfc0 100644
--- a/engine/payments/locale/it_IT/LC_MESSAGES/django.po
+++ b/engine/payments/locale/it_IT/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -13,11 +13,11 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: engine/payments/admin.py:17 engine/payments/models.py:56
+#: engine/payments/admin.py:17 engine/payments/models.py:68
msgid "transaction"
msgstr "Transazione"
-#: engine/payments/admin.py:18 engine/payments/models.py:57
+#: engine/payments/admin.py:18 engine/payments/models.py:69
msgid "transactions"
msgstr "Transazioni"
@@ -37,19 +37,19 @@ msgstr "Deposito"
msgid "withdraw"
msgstr "Ritiro"
-#: engine/payments/docs/drf/views.py:13
+#: engine/payments/docs/drf/views.py:17
msgid "deposit to balance"
msgstr "Deposito a saldo"
-#: engine/payments/docs/drf/views.py:14
+#: engine/payments/docs/drf/views.py:18
msgid "deposit some money to balance"
msgstr "Depositare del denaro per bilanciare"
-#: engine/payments/docs/drf/views.py:29
+#: engine/payments/docs/drf/views.py:33
msgid "payment limits"
msgstr "Limiti di pagamento"
-#: engine/payments/docs/drf/views.py:30
+#: engine/payments/docs/drf/views.py:35
msgid ""
"retrieve minimal and maximal allowed deposit amounts across available "
"gateways"
@@ -69,92 +69,92 @@ msgstr "Recuperare una singola transazione (solo lettura)"
msgid "Transaction UUID"
msgstr "UUID della transazione"
-#: engine/payments/models.py:36
+#: engine/payments/models.py:42
msgid "order to process after paid"
msgstr "Ordine da elaborare dopo il pagamento"
-#: engine/payments/models.py:39
+#: engine/payments/models.py:45
msgid "processing details"
msgstr "Dettagli di elaborazione"
-#: engine/payments/models.py:75
+#: engine/payments/models.py:91
msgid "balance"
msgstr "Equilibrio"
-#: engine/payments/models.py:76
+#: engine/payments/models.py:92
msgid "balances"
msgstr "Bilance"
-#: engine/payments/models.py:86
+#: engine/payments/models.py:102
msgid "name"
msgstr "nome"
-#: engine/payments/models.py:91
+#: engine/payments/models.py:107
msgid "default currency"
msgstr "valuta predefinita"
-#: engine/payments/models.py:98
+#: engine/payments/models.py:114
msgid "currencies"
msgstr "valute"
-#: engine/payments/models.py:100
+#: engine/payments/models.py:116
msgid "comma separated list of currencies supported by this gateway, "
msgstr "elenco separato da virgole delle valute supportate da questo gateway,"
-#: engine/payments/models.py:106
+#: engine/payments/models.py:122
msgid "minimum transaction amount"
msgstr "importo minimo della transazione"
-#: engine/payments/models.py:109
+#: engine/payments/models.py:125
msgid "maximum transaction amount"
msgstr "importo massimo della transazione"
-#: engine/payments/models.py:115
+#: engine/payments/models.py:131
msgid "daily limit"
msgstr "limite giornaliero"
-#: engine/payments/models.py:116
+#: engine/payments/models.py:132
msgid "daily sum limit of transactions' amounts. 0 means no limit"
msgstr ""
"limite di somma giornaliera degli importi delle transazioni. 0 significa "
"nessun limite"
-#: engine/payments/models.py:122
+#: engine/payments/models.py:138
msgid "monthly limit"
msgstr "limite mensile"
-#: engine/payments/models.py:123
+#: engine/payments/models.py:139
msgid "monthly sum limit of transactions' amounts. 0 means no limit"
msgstr ""
"limite di somma mensile degli importi delle transazioni. 0 significa nessun "
"limite"
-#: engine/payments/models.py:125
+#: engine/payments/models.py:142
msgid "priority"
msgstr "priorità"
-#: engine/payments/models.py:126
+#: engine/payments/models.py:145
msgid "integration variables"
msgstr "variabili di integrazione"
-#: engine/payments/models.py:132
+#: engine/payments/models.py:152
msgid "payment gateway"
msgstr "gateway di pagamento"
-#: engine/payments/models.py:133
+#: engine/payments/models.py:153
msgid "payment gateways"
msgstr "gateway di pagamento"
-#: engine/payments/models.py:169
+#: engine/payments/models.py:198
msgid "gateway integration path is not set"
msgstr "Il percorso di integrazione del gateway non è impostato"
-#: engine/payments/models.py:174
+#: engine/payments/models.py:204
#, python-format
msgid "invalid integration path: %(path)s"
msgstr "percorso di integrazione non valido: %(path)s"
-#: engine/payments/signals.py:41
+#: engine/payments/signals.py:45
msgid "the transaction amount didn't fit into allowed limits: "
msgstr "L'importo della transazione non rientrava nei limiti consentiti:"
@@ -209,12 +209,12 @@ msgstr "È necessario un fornitore da cui ottenere le tariffe"
msgid "couldn't find provider {provider}"
msgstr "Impossibile trovare il fornitore {provider}"
-#: engine/payments/utils/emailing.py:28
+#: engine/payments/utils/emailing.py:31
#, python-brace-format
msgid "{settings.PROJECT_NAME} | balance deposit"
msgstr "{settings.PROJECT_NAME} | deposito a saldo"
-#: engine/payments/views.py:24
+#: engine/payments/views.py:28
msgid ""
"This class provides an API endpoint to handle deposit transactions.\n"
"It supports the creation of a deposit transaction after validating the "
@@ -229,7 +229,7 @@ msgstr ""
"appropriata. Se la convalida e l'esecuzione hanno esito positivo, viene "
"fornita una risposta con i dettagli della transazione."
-#: engine/payments/views.py:50
+#: engine/payments/views.py:61
msgid ""
"Handles incoming callback requests to the API.\n"
"This class processes and routes incoming HTTP POST requests to the "
@@ -243,17 +243,17 @@ msgstr ""
"gestire gli eventi di callback provenienti da sistemi esterni e fornire una "
"risposta HTTP appropriata che indichi il successo o il fallimento."
-#: engine/payments/views.py:61
+#: engine/payments/views.py:75
#, python-brace-format
msgid "Transaction {transaction.uuid} has no gateway"
msgstr "La transazione {transaction.uuid} non ha un gateway"
-#: engine/payments/views.py:64
+#: engine/payments/views.py:82
#, python-brace-format
msgid "Gateway {transaction.gateway} has no integration"
msgstr "Il gateway {transaction.gateway} non ha alcuna integrazione"
-#: engine/payments/views.py:76
+#: engine/payments/views.py:96
msgid ""
"This endpoint returns minimal and maximal allowed deposit amounts across "
"available gateways."
diff --git a/engine/payments/locale/ja_JP/LC_MESSAGES/django.po b/engine/payments/locale/ja_JP/LC_MESSAGES/django.po
index 10495734..258cc879 100644
--- a/engine/payments/locale/ja_JP/LC_MESSAGES/django.po
+++ b/engine/payments/locale/ja_JP/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -13,11 +13,11 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: engine/payments/admin.py:17 engine/payments/models.py:56
+#: engine/payments/admin.py:17 engine/payments/models.py:68
msgid "transaction"
msgstr "トランザクション"
-#: engine/payments/admin.py:18 engine/payments/models.py:57
+#: engine/payments/admin.py:18 engine/payments/models.py:69
msgid "transactions"
msgstr "トランザクション"
@@ -37,19 +37,19 @@ msgstr "デポジット"
msgid "withdraw"
msgstr "辞退"
-#: engine/payments/docs/drf/views.py:13
+#: engine/payments/docs/drf/views.py:17
msgid "deposit to balance"
msgstr "預金残高"
-#: engine/payments/docs/drf/views.py:14
+#: engine/payments/docs/drf/views.py:18
msgid "deposit some money to balance"
msgstr "預金残高を増やす"
-#: engine/payments/docs/drf/views.py:29
+#: engine/payments/docs/drf/views.py:33
msgid "payment limits"
msgstr "支払限度額"
-#: engine/payments/docs/drf/views.py:30
+#: engine/payments/docs/drf/views.py:35
msgid ""
"retrieve minimal and maximal allowed deposit amounts across available "
"gateways"
@@ -67,88 +67,88 @@ msgstr "単一のトランザクションを取得する(読み取り専用)
msgid "Transaction UUID"
msgstr "トランザクションUUID"
-#: engine/payments/models.py:36
+#: engine/payments/models.py:42
msgid "order to process after paid"
msgstr "支払い後の処理順序"
-#: engine/payments/models.py:39
+#: engine/payments/models.py:45
msgid "processing details"
msgstr "加工内容"
-#: engine/payments/models.py:75
+#: engine/payments/models.py:91
msgid "balance"
msgstr "バランス"
-#: engine/payments/models.py:76
+#: engine/payments/models.py:92
msgid "balances"
msgstr "体重計"
-#: engine/payments/models.py:86
+#: engine/payments/models.py:102
msgid "name"
msgstr "名称"
-#: engine/payments/models.py:91
+#: engine/payments/models.py:107
msgid "default currency"
msgstr "デフォルト通貨"
-#: engine/payments/models.py:98
+#: engine/payments/models.py:114
msgid "currencies"
msgstr "通貨"
-#: engine/payments/models.py:100
+#: engine/payments/models.py:116
msgid "comma separated list of currencies supported by this gateway, "
msgstr "このゲートウェイがサポートする通貨のカンマ区切りリスト、"
-#: engine/payments/models.py:106
+#: engine/payments/models.py:122
msgid "minimum transaction amount"
msgstr "最低取引金額"
-#: engine/payments/models.py:109
+#: engine/payments/models.py:125
msgid "maximum transaction amount"
msgstr "最高取引額"
-#: engine/payments/models.py:115
+#: engine/payments/models.py:131
msgid "daily limit"
msgstr "デイリーリミット"
-#: engine/payments/models.py:116
+#: engine/payments/models.py:132
msgid "daily sum limit of transactions' amounts. 0 means no limit"
msgstr "取引金額の日次合計限度額。0は制限なし"
-#: engine/payments/models.py:122
+#: engine/payments/models.py:138
msgid "monthly limit"
msgstr "月間限度額"
-#: engine/payments/models.py:123
+#: engine/payments/models.py:139
msgid "monthly sum limit of transactions' amounts. 0 means no limit"
msgstr "取引金額の月間合計限度額。0は制限なし"
-#: engine/payments/models.py:125
+#: engine/payments/models.py:142
msgid "priority"
msgstr "優先順位"
-#: engine/payments/models.py:126
+#: engine/payments/models.py:145
msgid "integration variables"
msgstr "統合変数"
-#: engine/payments/models.py:132
+#: engine/payments/models.py:152
msgid "payment gateway"
msgstr "ペイメントゲートウェイ"
-#: engine/payments/models.py:133
+#: engine/payments/models.py:153
msgid "payment gateways"
msgstr "ペイメントゲートウェイ"
-#: engine/payments/models.py:169
+#: engine/payments/models.py:198
msgid "gateway integration path is not set"
msgstr "ゲートウェイ統合パスが設定されていない"
-#: engine/payments/models.py:174
+#: engine/payments/models.py:204
#, python-format
msgid "invalid integration path: %(path)s"
msgstr "無効な統合パスです:%(path)s"
-#: engine/payments/signals.py:41
+#: engine/payments/signals.py:45
msgid "the transaction amount didn't fit into allowed limits: "
msgstr "取引額が許容範囲に収まらなかった:"
@@ -202,12 +202,12 @@ msgstr "レートを取得するプロバイダーが必要"
msgid "couldn't find provider {provider}"
msgstr "プロバイダーが見つかりませんでした {provider} 。"
-#: engine/payments/utils/emailing.py:28
+#: engine/payments/utils/emailing.py:31
#, python-brace-format
msgid "{settings.PROJECT_NAME} | balance deposit"
msgstr "{settings.PROJECT_NAME}| 預金残高"
-#: engine/payments/views.py:24
+#: engine/payments/views.py:28
msgid ""
"This class provides an API endpoint to handle deposit transactions.\n"
"It supports the creation of a deposit transaction after validating the "
@@ -220,7 +220,7 @@ msgstr ""
"ユーザが認証されていない場合は、適切なレスポンスが返されます。検証および実行"
"に成功すると、トランザクションの詳細を含むレスポンスが提供されます。"
-#: engine/payments/views.py:50
+#: engine/payments/views.py:61
msgid ""
"Handles incoming callback requests to the API.\n"
"This class processes and routes incoming HTTP POST requests to the "
@@ -234,17 +234,17 @@ msgstr ""
"ムから来るコールバック・イベントを処理し、成功または失敗を示す適切なHTTP応答"
"を提供するように設計されています。"
-#: engine/payments/views.py:61
+#: engine/payments/views.py:75
#, python-brace-format
msgid "Transaction {transaction.uuid} has no gateway"
msgstr "トランザクション {transaction.uuid} にはゲートウェイがありません。"
-#: engine/payments/views.py:64
+#: engine/payments/views.py:82
#, python-brace-format
msgid "Gateway {transaction.gateway} has no integration"
msgstr "ゲートウェイ {transaction.gateway} は統合されていない"
-#: engine/payments/views.py:76
+#: engine/payments/views.py:96
msgid ""
"This endpoint returns minimal and maximal allowed deposit amounts across "
"available gateways."
diff --git a/engine/payments/locale/kk_KZ/LC_MESSAGES/django.po b/engine/payments/locale/kk_KZ/LC_MESSAGES/django.po
index 97802b25..1ec9921b 100644
--- a/engine/payments/locale/kk_KZ/LC_MESSAGES/django.po
+++ b/engine/payments/locale/kk_KZ/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: LANGUAGE \n"
@@ -16,11 +16,11 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: engine/payments/admin.py:17 engine/payments/models.py:56
+#: engine/payments/admin.py:17 engine/payments/models.py:68
msgid "transaction"
msgstr ""
-#: engine/payments/admin.py:18 engine/payments/models.py:57
+#: engine/payments/admin.py:18 engine/payments/models.py:69
msgid "transactions"
msgstr ""
@@ -40,19 +40,19 @@ msgstr ""
msgid "withdraw"
msgstr ""
-#: engine/payments/docs/drf/views.py:13
+#: engine/payments/docs/drf/views.py:17
msgid "deposit to balance"
msgstr ""
-#: engine/payments/docs/drf/views.py:14
+#: engine/payments/docs/drf/views.py:18
msgid "deposit some money to balance"
msgstr ""
-#: engine/payments/docs/drf/views.py:29
+#: engine/payments/docs/drf/views.py:33
msgid "payment limits"
msgstr ""
-#: engine/payments/docs/drf/views.py:30
+#: engine/payments/docs/drf/views.py:35
msgid ""
"retrieve minimal and maximal allowed deposit amounts across available "
"gateways"
@@ -70,88 +70,88 @@ msgstr ""
msgid "Transaction UUID"
msgstr ""
-#: engine/payments/models.py:36
+#: engine/payments/models.py:42
msgid "order to process after paid"
msgstr ""
-#: engine/payments/models.py:39
+#: engine/payments/models.py:45
msgid "processing details"
msgstr ""
-#: engine/payments/models.py:75
+#: engine/payments/models.py:91
msgid "balance"
msgstr ""
-#: engine/payments/models.py:76
+#: engine/payments/models.py:92
msgid "balances"
msgstr ""
-#: engine/payments/models.py:86
+#: engine/payments/models.py:102
msgid "name"
msgstr ""
-#: engine/payments/models.py:91
+#: engine/payments/models.py:107
msgid "default currency"
msgstr ""
-#: engine/payments/models.py:98
+#: engine/payments/models.py:114
msgid "currencies"
msgstr ""
-#: engine/payments/models.py:100
+#: engine/payments/models.py:116
msgid "comma separated list of currencies supported by this gateway, "
msgstr ""
-#: engine/payments/models.py:106
+#: engine/payments/models.py:122
msgid "minimum transaction amount"
msgstr ""
-#: engine/payments/models.py:109
+#: engine/payments/models.py:125
msgid "maximum transaction amount"
msgstr ""
-#: engine/payments/models.py:115
+#: engine/payments/models.py:131
msgid "daily limit"
msgstr ""
-#: engine/payments/models.py:116
+#: engine/payments/models.py:132
msgid "daily sum limit of transactions' amounts. 0 means no limit"
msgstr ""
-#: engine/payments/models.py:122
+#: engine/payments/models.py:138
msgid "monthly limit"
msgstr ""
-#: engine/payments/models.py:123
+#: engine/payments/models.py:139
msgid "monthly sum limit of transactions' amounts. 0 means no limit"
msgstr ""
-#: engine/payments/models.py:125
+#: engine/payments/models.py:142
msgid "priority"
msgstr ""
-#: engine/payments/models.py:126
+#: engine/payments/models.py:145
msgid "integration variables"
msgstr ""
-#: engine/payments/models.py:132
+#: engine/payments/models.py:152
msgid "payment gateway"
msgstr ""
-#: engine/payments/models.py:133
+#: engine/payments/models.py:153
msgid "payment gateways"
msgstr ""
-#: engine/payments/models.py:169
+#: engine/payments/models.py:198
msgid "gateway integration path is not set"
msgstr ""
-#: engine/payments/models.py:174
+#: engine/payments/models.py:204
#, python-format
msgid "invalid integration path: %(path)s"
msgstr ""
-#: engine/payments/signals.py:41
+#: engine/payments/signals.py:45
msgid "the transaction amount didn't fit into allowed limits: "
msgstr ""
@@ -201,12 +201,12 @@ msgstr ""
msgid "couldn't find provider {provider}"
msgstr ""
-#: engine/payments/utils/emailing.py:28
+#: engine/payments/utils/emailing.py:31
#, python-brace-format
msgid "{settings.PROJECT_NAME} | balance deposit"
msgstr ""
-#: engine/payments/views.py:24
+#: engine/payments/views.py:28
msgid ""
"This class provides an API endpoint to handle deposit transactions.\n"
"It supports the creation of a deposit transaction after validating the "
@@ -215,7 +215,7 @@ msgid ""
"transaction details is provided."
msgstr ""
-#: engine/payments/views.py:50
+#: engine/payments/views.py:61
msgid ""
"Handles incoming callback requests to the API.\n"
"This class processes and routes incoming HTTP POST requests to the "
@@ -224,17 +224,17 @@ msgid ""
"an appropriate HTTP response indicating success or failure."
msgstr ""
-#: engine/payments/views.py:61
+#: engine/payments/views.py:75
#, python-brace-format
msgid "Transaction {transaction.uuid} has no gateway"
msgstr ""
-#: engine/payments/views.py:64
+#: engine/payments/views.py:82
#, python-brace-format
msgid "Gateway {transaction.gateway} has no integration"
msgstr ""
-#: engine/payments/views.py:76
+#: engine/payments/views.py:96
msgid ""
"This endpoint returns minimal and maximal allowed deposit amounts across "
"available gateways."
diff --git a/engine/payments/locale/ko_KR/LC_MESSAGES/django.po b/engine/payments/locale/ko_KR/LC_MESSAGES/django.po
index b5aa379f..0fa007f8 100644
--- a/engine/payments/locale/ko_KR/LC_MESSAGES/django.po
+++ b/engine/payments/locale/ko_KR/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -13,11 +13,11 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: engine/payments/admin.py:17 engine/payments/models.py:56
+#: engine/payments/admin.py:17 engine/payments/models.py:68
msgid "transaction"
msgstr "거래"
-#: engine/payments/admin.py:18 engine/payments/models.py:57
+#: engine/payments/admin.py:18 engine/payments/models.py:69
msgid "transactions"
msgstr "거래"
@@ -37,19 +37,19 @@ msgstr "입금"
msgid "withdraw"
msgstr "철회"
-#: engine/payments/docs/drf/views.py:13
+#: engine/payments/docs/drf/views.py:17
msgid "deposit to balance"
msgstr "잔액 입금"
-#: engine/payments/docs/drf/views.py:14
+#: engine/payments/docs/drf/views.py:18
msgid "deposit some money to balance"
msgstr "잔액을 입금하여 균형 맞추기"
-#: engine/payments/docs/drf/views.py:29
+#: engine/payments/docs/drf/views.py:33
msgid "payment limits"
msgstr "결제 한도"
-#: engine/payments/docs/drf/views.py:30
+#: engine/payments/docs/drf/views.py:35
msgid ""
"retrieve minimal and maximal allowed deposit amounts across available "
"gateways"
@@ -67,88 +67,88 @@ msgstr "단일 트랜잭션 검색(읽기 전용)"
msgid "Transaction UUID"
msgstr "트랜잭션 UUID"
-#: engine/payments/models.py:36
+#: engine/payments/models.py:42
msgid "order to process after paid"
msgstr "결제 후 처리할 주문"
-#: engine/payments/models.py:39
+#: engine/payments/models.py:45
msgid "processing details"
msgstr "처리 세부 정보"
-#: engine/payments/models.py:75
+#: engine/payments/models.py:91
msgid "balance"
msgstr "잔액"
-#: engine/payments/models.py:76
+#: engine/payments/models.py:92
msgid "balances"
msgstr "저울"
-#: engine/payments/models.py:86
+#: engine/payments/models.py:102
msgid "name"
msgstr "이름"
-#: engine/payments/models.py:91
+#: engine/payments/models.py:107
msgid "default currency"
msgstr "기본 통화"
-#: engine/payments/models.py:98
+#: engine/payments/models.py:114
msgid "currencies"
msgstr "통화"
-#: engine/payments/models.py:100
+#: engine/payments/models.py:116
msgid "comma separated list of currencies supported by this gateway, "
msgstr "쉼표로 구분된 이 게이트웨이에서 지원하는 통화 목록입니다,"
-#: engine/payments/models.py:106
+#: engine/payments/models.py:122
msgid "minimum transaction amount"
msgstr "최소 거래 금액"
-#: engine/payments/models.py:109
+#: engine/payments/models.py:125
msgid "maximum transaction amount"
msgstr "최대 거래 금액"
-#: engine/payments/models.py:115
+#: engine/payments/models.py:131
msgid "daily limit"
msgstr "일일 한도"
-#: engine/payments/models.py:116
+#: engine/payments/models.py:132
msgid "daily sum limit of transactions' amounts. 0 means no limit"
msgstr "거래 금액의 일일 합산 한도입니다. 0은 한도가 없음을 의미합니다."
-#: engine/payments/models.py:122
+#: engine/payments/models.py:138
msgid "monthly limit"
msgstr "월별 한도"
-#: engine/payments/models.py:123
+#: engine/payments/models.py:139
msgid "monthly sum limit of transactions' amounts. 0 means no limit"
msgstr "거래 금액의 월별 합산 한도입니다. 0은 한도가 없음을 의미합니다."
-#: engine/payments/models.py:125
+#: engine/payments/models.py:142
msgid "priority"
msgstr "우선순위"
-#: engine/payments/models.py:126
+#: engine/payments/models.py:145
msgid "integration variables"
msgstr "통합 변수"
-#: engine/payments/models.py:132
+#: engine/payments/models.py:152
msgid "payment gateway"
msgstr "결제 게이트웨이"
-#: engine/payments/models.py:133
+#: engine/payments/models.py:153
msgid "payment gateways"
msgstr "결제 게이트웨이"
-#: engine/payments/models.py:169
+#: engine/payments/models.py:198
msgid "gateway integration path is not set"
msgstr "게이트웨이 통합 경로가 설정되지 않았습니다."
-#: engine/payments/models.py:174
+#: engine/payments/models.py:204
#, python-format
msgid "invalid integration path: %(path)s"
msgstr "잘못된 통합 경로입니다: %(path)s"
-#: engine/payments/signals.py:41
+#: engine/payments/signals.py:45
msgid "the transaction amount didn't fit into allowed limits: "
msgstr "거래 금액이 허용 한도에 맞지 않습니다:"
@@ -202,12 +202,12 @@ msgstr "요금을 받을 공급업체가 필요합니다."
msgid "couldn't find provider {provider}"
msgstr "공급자를 찾을 수 없습니다 {provider}."
-#: engine/payments/utils/emailing.py:28
+#: engine/payments/utils/emailing.py:31
#, python-brace-format
msgid "{settings.PROJECT_NAME} | balance deposit"
msgstr "{settings.PROJECT_NAME} | 잔액 입금"
-#: engine/payments/views.py:24
+#: engine/payments/views.py:28
msgid ""
"This class provides an API endpoint to handle deposit transactions.\n"
"It supports the creation of a deposit transaction after validating the "
@@ -220,7 +220,7 @@ msgstr ""
"인증되지 않은 경우 적절한 응답이 반환됩니다. 유효성 검사 및 실행에 성공하면 "
"트랜잭션 세부 정보가 포함된 응답이 제공됩니다."
-#: engine/payments/views.py:50
+#: engine/payments/views.py:61
msgid ""
"Handles incoming callback requests to the API.\n"
"This class processes and routes incoming HTTP POST requests to the "
@@ -234,17 +234,17 @@ msgstr ""
"벤트를 처리하고 성공 또는 실패를 나타내는 적절한 HTTP 응답을 제공하도록 설계"
"되었습니다."
-#: engine/payments/views.py:61
+#: engine/payments/views.py:75
#, python-brace-format
msgid "Transaction {transaction.uuid} has no gateway"
msgstr "트랜잭션 {transaction.uuid}에 게이트웨이가 없습니다."
-#: engine/payments/views.py:64
+#: engine/payments/views.py:82
#, python-brace-format
msgid "Gateway {transaction.gateway} has no integration"
msgstr "게이트웨이 {transaction.gateway}에 통합이 없습니다."
-#: engine/payments/views.py:76
+#: engine/payments/views.py:96
msgid ""
"This endpoint returns minimal and maximal allowed deposit amounts across "
"available gateways."
diff --git a/engine/payments/locale/nl_NL/LC_MESSAGES/django.po b/engine/payments/locale/nl_NL/LC_MESSAGES/django.po
index b3532f43..a8dda8f9 100644
--- a/engine/payments/locale/nl_NL/LC_MESSAGES/django.po
+++ b/engine/payments/locale/nl_NL/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -13,11 +13,11 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: engine/payments/admin.py:17 engine/payments/models.py:56
+#: engine/payments/admin.py:17 engine/payments/models.py:68
msgid "transaction"
msgstr "Transactie"
-#: engine/payments/admin.py:18 engine/payments/models.py:57
+#: engine/payments/admin.py:18 engine/payments/models.py:69
msgid "transactions"
msgstr "Transacties"
@@ -37,19 +37,19 @@ msgstr "Statiegeld"
msgid "withdraw"
msgstr "Intrekken"
-#: engine/payments/docs/drf/views.py:13
+#: engine/payments/docs/drf/views.py:17
msgid "deposit to balance"
msgstr "Storting op saldo"
-#: engine/payments/docs/drf/views.py:14
+#: engine/payments/docs/drf/views.py:18
msgid "deposit some money to balance"
msgstr "Stort wat geld om te balanceren"
-#: engine/payments/docs/drf/views.py:29
+#: engine/payments/docs/drf/views.py:33
msgid "payment limits"
msgstr "Betalingslimieten"
-#: engine/payments/docs/drf/views.py:30
+#: engine/payments/docs/drf/views.py:35
msgid ""
"retrieve minimal and maximal allowed deposit amounts across available "
"gateways"
@@ -69,90 +69,90 @@ msgstr "Een enkele transactie ophalen (alleen-lezen)"
msgid "Transaction UUID"
msgstr "UUID transactie"
-#: engine/payments/models.py:36
+#: engine/payments/models.py:42
msgid "order to process after paid"
msgstr "Order te verwerken na betaling"
-#: engine/payments/models.py:39
+#: engine/payments/models.py:45
msgid "processing details"
msgstr "Verwerkingsdetails"
-#: engine/payments/models.py:75
+#: engine/payments/models.py:91
msgid "balance"
msgstr "Saldo"
-#: engine/payments/models.py:76
+#: engine/payments/models.py:92
msgid "balances"
msgstr "Weegschaal"
-#: engine/payments/models.py:86
+#: engine/payments/models.py:102
msgid "name"
msgstr "naam"
-#: engine/payments/models.py:91
+#: engine/payments/models.py:107
msgid "default currency"
msgstr "standaardvaluta"
-#: engine/payments/models.py:98
+#: engine/payments/models.py:114
msgid "currencies"
msgstr "valuta"
-#: engine/payments/models.py:100
+#: engine/payments/models.py:116
msgid "comma separated list of currencies supported by this gateway, "
msgstr ""
"door komma's gescheiden lijst van munteenheden die door deze gateway worden "
"ondersteund,"
-#: engine/payments/models.py:106
+#: engine/payments/models.py:122
msgid "minimum transaction amount"
msgstr "minimum transactiebedrag"
-#: engine/payments/models.py:109
+#: engine/payments/models.py:125
msgid "maximum transaction amount"
msgstr "maximaal transactiebedrag"
-#: engine/payments/models.py:115
+#: engine/payments/models.py:131
msgid "daily limit"
msgstr "daglimiet"
-#: engine/payments/models.py:116
+#: engine/payments/models.py:132
msgid "daily sum limit of transactions' amounts. 0 means no limit"
msgstr "dagelijkse somlimiet van transactiebedragen. 0 betekent geen limiet"
-#: engine/payments/models.py:122
+#: engine/payments/models.py:138
msgid "monthly limit"
msgstr "maandelijkse limiet"
-#: engine/payments/models.py:123
+#: engine/payments/models.py:139
msgid "monthly sum limit of transactions' amounts. 0 means no limit"
msgstr "maandelijkse somlimiet van transactiebedragen. 0 betekent geen limiet"
-#: engine/payments/models.py:125
+#: engine/payments/models.py:142
msgid "priority"
msgstr "prioriteit"
-#: engine/payments/models.py:126
+#: engine/payments/models.py:145
msgid "integration variables"
msgstr "integratievariabelen"
-#: engine/payments/models.py:132
+#: engine/payments/models.py:152
msgid "payment gateway"
msgstr "betalingsgateway"
-#: engine/payments/models.py:133
+#: engine/payments/models.py:153
msgid "payment gateways"
msgstr "betalingsgateways"
-#: engine/payments/models.py:169
+#: engine/payments/models.py:198
msgid "gateway integration path is not set"
msgstr "gateway integratiepad is niet ingesteld"
-#: engine/payments/models.py:174
+#: engine/payments/models.py:204
#, python-format
msgid "invalid integration path: %(path)s"
msgstr "ongeldig integratiepad: %(path)s"
-#: engine/payments/signals.py:41
+#: engine/payments/signals.py:45
msgid "the transaction amount didn't fit into allowed limits: "
msgstr "Het transactiebedrag paste niet binnen de toegestane limieten:"
@@ -206,12 +206,12 @@ msgstr "Een provider om tarieven van te krijgen is vereist"
msgid "couldn't find provider {provider}"
msgstr "Kon provider {provider} niet vinden."
-#: engine/payments/utils/emailing.py:28
+#: engine/payments/utils/emailing.py:31
#, python-brace-format
msgid "{settings.PROJECT_NAME} | balance deposit"
msgstr "{settings.PROJECT_NAME} | storting saldo"
-#: engine/payments/views.py:24
+#: engine/payments/views.py:28
msgid ""
"This class provides an API endpoint to handle deposit transactions.\n"
"It supports the creation of a deposit transaction after validating the "
@@ -226,7 +226,7 @@ msgstr ""
"een passend antwoord teruggestuurd. Bij succesvolle validatie en uitvoering "
"wordt een antwoord met de transactiedetails gegeven."
-#: engine/payments/views.py:50
+#: engine/payments/views.py:61
msgid ""
"Handles incoming callback requests to the API.\n"
"This class processes and routes incoming HTTP POST requests to the "
@@ -240,17 +240,17 @@ msgstr ""
"ontworpen om callback events af te handelen die van externe systemen komen "
"en een passend HTTP antwoord te geven dat succes of mislukking aangeeft."
-#: engine/payments/views.py:61
+#: engine/payments/views.py:75
#, python-brace-format
msgid "Transaction {transaction.uuid} has no gateway"
msgstr "Transactie {transaction.uuid} heeft geen gateway"
-#: engine/payments/views.py:64
+#: engine/payments/views.py:82
#, python-brace-format
msgid "Gateway {transaction.gateway} has no integration"
msgstr "Gateway {transaction.gateway} heeft geen integratie"
-#: engine/payments/views.py:76
+#: engine/payments/views.py:96
msgid ""
"This endpoint returns minimal and maximal allowed deposit amounts across "
"available gateways."
diff --git a/engine/payments/locale/no_NO/LC_MESSAGES/django.po b/engine/payments/locale/no_NO/LC_MESSAGES/django.po
index 24677fb9..2e62a150 100644
--- a/engine/payments/locale/no_NO/LC_MESSAGES/django.po
+++ b/engine/payments/locale/no_NO/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -13,11 +13,11 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: engine/payments/admin.py:17 engine/payments/models.py:56
+#: engine/payments/admin.py:17 engine/payments/models.py:68
msgid "transaction"
msgstr "Transaksjon"
-#: engine/payments/admin.py:18 engine/payments/models.py:57
+#: engine/payments/admin.py:18 engine/payments/models.py:69
msgid "transactions"
msgstr "Transaksjoner"
@@ -37,19 +37,19 @@ msgstr "Innskudd"
msgid "withdraw"
msgstr "Trekke tilbake"
-#: engine/payments/docs/drf/views.py:13
+#: engine/payments/docs/drf/views.py:17
msgid "deposit to balance"
msgstr "Innskudd til saldo"
-#: engine/payments/docs/drf/views.py:14
+#: engine/payments/docs/drf/views.py:18
msgid "deposit some money to balance"
msgstr "Sett inn litt penger for å balansere"
-#: engine/payments/docs/drf/views.py:29
+#: engine/payments/docs/drf/views.py:33
msgid "payment limits"
msgstr "Grenser for betaling"
-#: engine/payments/docs/drf/views.py:30
+#: engine/payments/docs/drf/views.py:35
msgid ""
"retrieve minimal and maximal allowed deposit amounts across available "
"gateways"
@@ -69,88 +69,88 @@ msgstr "Hent en enkelttransaksjon (skrivebeskyttet)"
msgid "Transaction UUID"
msgstr "UUID for transaksjon"
-#: engine/payments/models.py:36
+#: engine/payments/models.py:42
msgid "order to process after paid"
msgstr "Ordre som skal behandles etter betaling"
-#: engine/payments/models.py:39
+#: engine/payments/models.py:45
msgid "processing details"
msgstr "Detaljer om behandlingen"
-#: engine/payments/models.py:75
+#: engine/payments/models.py:91
msgid "balance"
msgstr "Balanse"
-#: engine/payments/models.py:76
+#: engine/payments/models.py:92
msgid "balances"
msgstr "Vekt"
-#: engine/payments/models.py:86
+#: engine/payments/models.py:102
msgid "name"
msgstr "navn"
-#: engine/payments/models.py:91
+#: engine/payments/models.py:107
msgid "default currency"
msgstr "standard valuta"
-#: engine/payments/models.py:98
+#: engine/payments/models.py:114
msgid "currencies"
msgstr "valutaer"
-#: engine/payments/models.py:100
+#: engine/payments/models.py:116
msgid "comma separated list of currencies supported by this gateway, "
msgstr "kommaseparert liste over valutaer som støttes av denne gatewayen,"
-#: engine/payments/models.py:106
+#: engine/payments/models.py:122
msgid "minimum transaction amount"
msgstr "minimum transaksjonsbeløp"
-#: engine/payments/models.py:109
+#: engine/payments/models.py:125
msgid "maximum transaction amount"
msgstr "maksimalt transaksjonsbeløp"
-#: engine/payments/models.py:115
+#: engine/payments/models.py:131
msgid "daily limit"
msgstr "daglig grense"
-#: engine/payments/models.py:116
+#: engine/payments/models.py:132
msgid "daily sum limit of transactions' amounts. 0 means no limit"
msgstr "daglig sumgrense for transaksjonsbeløp. 0 betyr ingen grense"
-#: engine/payments/models.py:122
+#: engine/payments/models.py:138
msgid "monthly limit"
msgstr "månedlig grense"
-#: engine/payments/models.py:123
+#: engine/payments/models.py:139
msgid "monthly sum limit of transactions' amounts. 0 means no limit"
msgstr "månedlig sumgrense for transaksjonsbeløp. 0 betyr ingen grense"
-#: engine/payments/models.py:125
+#: engine/payments/models.py:142
msgid "priority"
msgstr "prioritet"
-#: engine/payments/models.py:126
+#: engine/payments/models.py:145
msgid "integration variables"
msgstr "integrasjonsvariabler"
-#: engine/payments/models.py:132
+#: engine/payments/models.py:152
msgid "payment gateway"
msgstr "betalingsgateway"
-#: engine/payments/models.py:133
+#: engine/payments/models.py:153
msgid "payment gateways"
msgstr "betalingsportaler"
-#: engine/payments/models.py:169
+#: engine/payments/models.py:198
msgid "gateway integration path is not set"
msgstr "gateway-integrasjonsbanen er ikke angitt"
-#: engine/payments/models.py:174
+#: engine/payments/models.py:204
#, python-format
msgid "invalid integration path: %(path)s"
msgstr "ugyldig integrasjonsbane: %(path)s"
-#: engine/payments/signals.py:41
+#: engine/payments/signals.py:45
msgid "the transaction amount didn't fit into allowed limits: "
msgstr "Transaksjonsbeløpet passet ikke inn i de tillatte grensene:"
@@ -204,12 +204,12 @@ msgstr "Det kreves en leverandør å få priser fra"
msgid "couldn't find provider {provider}"
msgstr "Fant ikke leverandøren {provider}."
-#: engine/payments/utils/emailing.py:28
+#: engine/payments/utils/emailing.py:31
#, python-brace-format
msgid "{settings.PROJECT_NAME} | balance deposit"
msgstr "{settings.PROJECT_NAME} | Saldo innskudd"
-#: engine/payments/views.py:24
+#: engine/payments/views.py:28
msgid ""
"This class provides an API endpoint to handle deposit transactions.\n"
"It supports the creation of a deposit transaction after validating the "
@@ -224,7 +224,7 @@ msgstr ""
"svar. Ved vellykket validering og utførelse leveres et svar med "
"transaksjonsdetaljer."
-#: engine/payments/views.py:50
+#: engine/payments/views.py:61
msgid ""
"Handles incoming callback requests to the API.\n"
"This class processes and routes incoming HTTP POST requests to the "
@@ -239,17 +239,17 @@ msgstr ""
"systemer, og gir et passende HTTP-svar som angir om forespørselen er "
"vellykket eller mislykket."
-#: engine/payments/views.py:61
+#: engine/payments/views.py:75
#, python-brace-format
msgid "Transaction {transaction.uuid} has no gateway"
msgstr "Transaksjon {transaction.uuid} har ingen gateway"
-#: engine/payments/views.py:64
+#: engine/payments/views.py:82
#, python-brace-format
msgid "Gateway {transaction.gateway} has no integration"
msgstr "Gateway {transaction.gateway} har ingen integrasjon"
-#: engine/payments/views.py:76
+#: engine/payments/views.py:96
msgid ""
"This endpoint returns minimal and maximal allowed deposit amounts across "
"available gateways."
diff --git a/engine/payments/locale/pl_PL/LC_MESSAGES/django.po b/engine/payments/locale/pl_PL/LC_MESSAGES/django.po
index 4e9b2011..08c6605a 100644
--- a/engine/payments/locale/pl_PL/LC_MESSAGES/django.po
+++ b/engine/payments/locale/pl_PL/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -13,11 +13,11 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: engine/payments/admin.py:17 engine/payments/models.py:56
+#: engine/payments/admin.py:17 engine/payments/models.py:68
msgid "transaction"
msgstr "Transakcja"
-#: engine/payments/admin.py:18 engine/payments/models.py:57
+#: engine/payments/admin.py:18 engine/payments/models.py:69
msgid "transactions"
msgstr "Transakcje"
@@ -37,19 +37,19 @@ msgstr "Depozyt"
msgid "withdraw"
msgstr "Wycofać się"
-#: engine/payments/docs/drf/views.py:13
+#: engine/payments/docs/drf/views.py:17
msgid "deposit to balance"
msgstr "Wpłata na saldo"
-#: engine/payments/docs/drf/views.py:14
+#: engine/payments/docs/drf/views.py:18
msgid "deposit some money to balance"
msgstr "Wpłać trochę pieniędzy na saldo"
-#: engine/payments/docs/drf/views.py:29
+#: engine/payments/docs/drf/views.py:33
msgid "payment limits"
msgstr "Limity płatności"
-#: engine/payments/docs/drf/views.py:30
+#: engine/payments/docs/drf/views.py:35
msgid ""
"retrieve minimal and maximal allowed deposit amounts across available "
"gateways"
@@ -69,88 +69,88 @@ msgstr "Pobieranie pojedynczej transakcji (tylko do odczytu)"
msgid "Transaction UUID"
msgstr "UUID transakcji"
-#: engine/payments/models.py:36
+#: engine/payments/models.py:42
msgid "order to process after paid"
msgstr "Zamówienie do przetworzenia po opłaceniu"
-#: engine/payments/models.py:39
+#: engine/payments/models.py:45
msgid "processing details"
msgstr "Szczegóły przetwarzania"
-#: engine/payments/models.py:75
+#: engine/payments/models.py:91
msgid "balance"
msgstr "Równowaga"
-#: engine/payments/models.py:76
+#: engine/payments/models.py:92
msgid "balances"
msgstr "Wagi"
-#: engine/payments/models.py:86
+#: engine/payments/models.py:102
msgid "name"
msgstr "nazwa"
-#: engine/payments/models.py:91
+#: engine/payments/models.py:107
msgid "default currency"
msgstr "waluta domyślna"
-#: engine/payments/models.py:98
+#: engine/payments/models.py:114
msgid "currencies"
msgstr "waluty"
-#: engine/payments/models.py:100
+#: engine/payments/models.py:116
msgid "comma separated list of currencies supported by this gateway, "
msgstr "rozdzielana przecinkami lista walut obsługiwanych przez tę bramę,"
-#: engine/payments/models.py:106
+#: engine/payments/models.py:122
msgid "minimum transaction amount"
msgstr "minimalna kwota transakcji"
-#: engine/payments/models.py:109
+#: engine/payments/models.py:125
msgid "maximum transaction amount"
msgstr "maksymalna kwota transakcji"
-#: engine/payments/models.py:115
+#: engine/payments/models.py:131
msgid "daily limit"
msgstr "limit dzienny"
-#: engine/payments/models.py:116
+#: engine/payments/models.py:132
msgid "daily sum limit of transactions' amounts. 0 means no limit"
msgstr "dzienny limit sumy kwot transakcji. 0 oznacza brak limitu"
-#: engine/payments/models.py:122
+#: engine/payments/models.py:138
msgid "monthly limit"
msgstr "limit miesięczny"
-#: engine/payments/models.py:123
+#: engine/payments/models.py:139
msgid "monthly sum limit of transactions' amounts. 0 means no limit"
msgstr "miesięczny limit sumy kwot transakcji. 0 oznacza brak limitu"
-#: engine/payments/models.py:125
+#: engine/payments/models.py:142
msgid "priority"
msgstr "priorytet"
-#: engine/payments/models.py:126
+#: engine/payments/models.py:145
msgid "integration variables"
msgstr "zmienne integracji"
-#: engine/payments/models.py:132
+#: engine/payments/models.py:152
msgid "payment gateway"
msgstr "bramka płatności"
-#: engine/payments/models.py:133
+#: engine/payments/models.py:153
msgid "payment gateways"
msgstr "bramki płatności"
-#: engine/payments/models.py:169
+#: engine/payments/models.py:198
msgid "gateway integration path is not set"
msgstr "ścieżka integracji bramy nie jest ustawiona"
-#: engine/payments/models.py:174
+#: engine/payments/models.py:204
#, python-format
msgid "invalid integration path: %(path)s"
msgstr "Nieprawidłowa ścieżka integracji: %(path)s"
-#: engine/payments/signals.py:41
+#: engine/payments/signals.py:45
msgid "the transaction amount didn't fit into allowed limits: "
msgstr "Kwota transakcji nie mieściła się w dozwolonych limitach:"
@@ -205,12 +205,12 @@ msgstr "Wymagany jest dostawca, od którego można uzyskać stawki"
msgid "couldn't find provider {provider}"
msgstr "Nie można znaleźć dostawcy {provider}"
-#: engine/payments/utils/emailing.py:28
+#: engine/payments/utils/emailing.py:31
#, python-brace-format
msgid "{settings.PROJECT_NAME} | balance deposit"
msgstr "{settings.PROJECT_NAME} | depozyt salda"
-#: engine/payments/views.py:24
+#: engine/payments/views.py:28
msgid ""
"This class provides an API endpoint to handle deposit transactions.\n"
"It supports the creation of a deposit transaction after validating the "
@@ -224,7 +224,7 @@ msgstr ""
"jest odpowiednia odpowiedź. Po pomyślnej walidacji i wykonaniu dostarczana "
"jest odpowiedź ze szczegółami transakcji."
-#: engine/payments/views.py:50
+#: engine/payments/views.py:61
msgid ""
"Handles incoming callback requests to the API.\n"
"This class processes and routes incoming HTTP POST requests to the "
@@ -239,17 +239,17 @@ msgstr ""
"systemów zewnętrznych i dostarczania odpowiedniej odpowiedzi HTTP "
"wskazującej na sukces lub niepowodzenie."
-#: engine/payments/views.py:61
+#: engine/payments/views.py:75
#, python-brace-format
msgid "Transaction {transaction.uuid} has no gateway"
msgstr "Transakcja {transaction.uuid} nie ma bramki"
-#: engine/payments/views.py:64
+#: engine/payments/views.py:82
#, python-brace-format
msgid "Gateway {transaction.gateway} has no integration"
msgstr "Bramka {transaction.gateway} nie ma integracji"
-#: engine/payments/views.py:76
+#: engine/payments/views.py:96
msgid ""
"This endpoint returns minimal and maximal allowed deposit amounts across "
"available gateways."
diff --git a/engine/payments/locale/pt_BR/LC_MESSAGES/django.po b/engine/payments/locale/pt_BR/LC_MESSAGES/django.po
index a211de32..447dec29 100644
--- a/engine/payments/locale/pt_BR/LC_MESSAGES/django.po
+++ b/engine/payments/locale/pt_BR/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -13,11 +13,11 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: engine/payments/admin.py:17 engine/payments/models.py:56
+#: engine/payments/admin.py:17 engine/payments/models.py:68
msgid "transaction"
msgstr "Transação"
-#: engine/payments/admin.py:18 engine/payments/models.py:57
+#: engine/payments/admin.py:18 engine/payments/models.py:69
msgid "transactions"
msgstr "Transações"
@@ -37,19 +37,19 @@ msgstr "Deposit"
msgid "withdraw"
msgstr "Retirada"
-#: engine/payments/docs/drf/views.py:13
+#: engine/payments/docs/drf/views.py:17
msgid "deposit to balance"
msgstr "Depósito no saldo"
-#: engine/payments/docs/drf/views.py:14
+#: engine/payments/docs/drf/views.py:18
msgid "deposit some money to balance"
msgstr "Depositar algum dinheiro no saldo"
-#: engine/payments/docs/drf/views.py:29
+#: engine/payments/docs/drf/views.py:33
msgid "payment limits"
msgstr "Limites de pagamento"
-#: engine/payments/docs/drf/views.py:30
+#: engine/payments/docs/drf/views.py:35
msgid ""
"retrieve minimal and maximal allowed deposit amounts across available "
"gateways"
@@ -69,91 +69,91 @@ msgstr "Recuperar uma única transação (somente leitura)"
msgid "Transaction UUID"
msgstr "UUID da transação"
-#: engine/payments/models.py:36
+#: engine/payments/models.py:42
msgid "order to process after paid"
msgstr "Ordem a ser processada após o pagamento"
-#: engine/payments/models.py:39
+#: engine/payments/models.py:45
msgid "processing details"
msgstr "Detalhes do processamento"
-#: engine/payments/models.py:75
+#: engine/payments/models.py:91
msgid "balance"
msgstr "Equilíbrio"
-#: engine/payments/models.py:76
+#: engine/payments/models.py:92
msgid "balances"
msgstr "Balanças"
-#: engine/payments/models.py:86
+#: engine/payments/models.py:102
msgid "name"
msgstr "nome"
-#: engine/payments/models.py:91
+#: engine/payments/models.py:107
msgid "default currency"
msgstr "moeda padrão"
-#: engine/payments/models.py:98
+#: engine/payments/models.py:114
msgid "currencies"
msgstr "moedas"
-#: engine/payments/models.py:100
+#: engine/payments/models.py:116
msgid "comma separated list of currencies supported by this gateway, "
msgstr "lista separada por vírgulas das moedas aceitas por esse gateway,"
-#: engine/payments/models.py:106
+#: engine/payments/models.py:122
msgid "minimum transaction amount"
msgstr "valor mínimo da transação"
-#: engine/payments/models.py:109
+#: engine/payments/models.py:125
msgid "maximum transaction amount"
msgstr "valor máximo da transação"
-#: engine/payments/models.py:115
+#: engine/payments/models.py:131
msgid "daily limit"
msgstr "limite diário"
-#: engine/payments/models.py:116
+#: engine/payments/models.py:132
msgid "daily sum limit of transactions' amounts. 0 means no limit"
msgstr ""
"limite de soma diária dos valores das transações. 0 significa que não há "
"limite"
-#: engine/payments/models.py:122
+#: engine/payments/models.py:138
msgid "monthly limit"
msgstr "limite mensal"
-#: engine/payments/models.py:123
+#: engine/payments/models.py:139
msgid "monthly sum limit of transactions' amounts. 0 means no limit"
msgstr ""
"limite de soma mensal dos valores das transações. 0 significa sem limite"
-#: engine/payments/models.py:125
+#: engine/payments/models.py:142
msgid "priority"
msgstr "prioridade"
-#: engine/payments/models.py:126
+#: engine/payments/models.py:145
msgid "integration variables"
msgstr "variáveis de integração"
-#: engine/payments/models.py:132
+#: engine/payments/models.py:152
msgid "payment gateway"
msgstr "gateway de pagamento"
-#: engine/payments/models.py:133
+#: engine/payments/models.py:153
msgid "payment gateways"
msgstr "gateways de pagamento"
-#: engine/payments/models.py:169
+#: engine/payments/models.py:198
msgid "gateway integration path is not set"
msgstr "O caminho de integração do gateway não está definido"
-#: engine/payments/models.py:174
+#: engine/payments/models.py:204
#, python-format
msgid "invalid integration path: %(path)s"
msgstr "Caminho de integração inválido: %(path)s"
-#: engine/payments/signals.py:41
+#: engine/payments/signals.py:45
msgid "the transaction amount didn't fit into allowed limits: "
msgstr "O valor da transação não se enquadrava nos limites permitidos:"
@@ -207,12 +207,12 @@ msgstr "É necessário um provedor para obter as tarifas"
msgid "couldn't find provider {provider}"
msgstr "Não foi possível encontrar o provedor {provider}"
-#: engine/payments/utils/emailing.py:28
+#: engine/payments/utils/emailing.py:31
#, python-brace-format
msgid "{settings.PROJECT_NAME} | balance deposit"
msgstr "{settings.PROJECT_NAME} | depósito de saldo"
-#: engine/payments/views.py:24
+#: engine/payments/views.py:28
msgid ""
"This class provides an API endpoint to handle deposit transactions.\n"
"It supports the creation of a deposit transaction after validating the "
@@ -227,7 +227,7 @@ msgstr ""
"apropriada será retornada. Em caso de validação e execução bem-sucedidas, é "
"fornecida uma resposta com os detalhes da transação."
-#: engine/payments/views.py:50
+#: engine/payments/views.py:61
msgid ""
"Handles incoming callback requests to the API.\n"
"This class processes and routes incoming HTTP POST requests to the "
@@ -242,17 +242,17 @@ msgstr ""
"sistemas externos e fornecer uma resposta HTTP apropriada indicando sucesso "
"ou falha."
-#: engine/payments/views.py:61
+#: engine/payments/views.py:75
#, python-brace-format
msgid "Transaction {transaction.uuid} has no gateway"
msgstr "A transação {transaction.uuid} não tem gateway"
-#: engine/payments/views.py:64
+#: engine/payments/views.py:82
#, python-brace-format
msgid "Gateway {transaction.gateway} has no integration"
msgstr "O gateway {transaction.gateway} não tem integração"
-#: engine/payments/views.py:76
+#: engine/payments/views.py:96
msgid ""
"This endpoint returns minimal and maximal allowed deposit amounts across "
"available gateways."
diff --git a/engine/payments/locale/ro_RO/LC_MESSAGES/django.po b/engine/payments/locale/ro_RO/LC_MESSAGES/django.po
index 0c085abd..77cbd95f 100644
--- a/engine/payments/locale/ro_RO/LC_MESSAGES/django.po
+++ b/engine/payments/locale/ro_RO/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -13,11 +13,11 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: engine/payments/admin.py:17 engine/payments/models.py:56
+#: engine/payments/admin.py:17 engine/payments/models.py:68
msgid "transaction"
msgstr "Tranzacție"
-#: engine/payments/admin.py:18 engine/payments/models.py:57
+#: engine/payments/admin.py:18 engine/payments/models.py:69
msgid "transactions"
msgstr "Tranzacții"
@@ -37,19 +37,19 @@ msgstr "Depozit"
msgid "withdraw"
msgstr "Retragere"
-#: engine/payments/docs/drf/views.py:13
+#: engine/payments/docs/drf/views.py:17
msgid "deposit to balance"
msgstr "Depozit la sold"
-#: engine/payments/docs/drf/views.py:14
+#: engine/payments/docs/drf/views.py:18
msgid "deposit some money to balance"
msgstr "Depuneți niște bani la sold"
-#: engine/payments/docs/drf/views.py:29
+#: engine/payments/docs/drf/views.py:33
msgid "payment limits"
msgstr "Limite de plată"
-#: engine/payments/docs/drf/views.py:30
+#: engine/payments/docs/drf/views.py:35
msgid ""
"retrieve minimal and maximal allowed deposit amounts across available "
"gateways"
@@ -69,88 +69,88 @@ msgstr "Recuperează o singură tranzacție (numai citire)"
msgid "Transaction UUID"
msgstr "UUID al tranzacției"
-#: engine/payments/models.py:36
+#: engine/payments/models.py:42
msgid "order to process after paid"
msgstr "Ordin de procesare după plată"
-#: engine/payments/models.py:39
+#: engine/payments/models.py:45
msgid "processing details"
msgstr "Detalii de prelucrare"
-#: engine/payments/models.py:75
+#: engine/payments/models.py:91
msgid "balance"
msgstr "Echilibru"
-#: engine/payments/models.py:76
+#: engine/payments/models.py:92
msgid "balances"
msgstr "Balanță"
-#: engine/payments/models.py:86
+#: engine/payments/models.py:102
msgid "name"
msgstr "nume"
-#: engine/payments/models.py:91
+#: engine/payments/models.py:107
msgid "default currency"
msgstr "moneda implicită"
-#: engine/payments/models.py:98
+#: engine/payments/models.py:114
msgid "currencies"
msgstr "valute"
-#: engine/payments/models.py:100
+#: engine/payments/models.py:116
msgid "comma separated list of currencies supported by this gateway, "
msgstr "listă separată prin virgulă a valutelor acceptate de acest gateway,"
-#: engine/payments/models.py:106
+#: engine/payments/models.py:122
msgid "minimum transaction amount"
msgstr "valoarea minimă a tranzacției"
-#: engine/payments/models.py:109
+#: engine/payments/models.py:125
msgid "maximum transaction amount"
msgstr "valoarea maximă a tranzacției"
-#: engine/payments/models.py:115
+#: engine/payments/models.py:131
msgid "daily limit"
msgstr "limită zilnică"
-#: engine/payments/models.py:116
+#: engine/payments/models.py:132
msgid "daily sum limit of transactions' amounts. 0 means no limit"
msgstr "suma limită zilnică a sumelor tranzacțiilor. 0 înseamnă nicio limită"
-#: engine/payments/models.py:122
+#: engine/payments/models.py:138
msgid "monthly limit"
msgstr "limită lunară"
-#: engine/payments/models.py:123
+#: engine/payments/models.py:139
msgid "monthly sum limit of transactions' amounts. 0 means no limit"
msgstr "limita sumei lunare a sumelor tranzacțiilor. 0 înseamnă nicio limită"
-#: engine/payments/models.py:125
+#: engine/payments/models.py:142
msgid "priority"
msgstr "prioritate"
-#: engine/payments/models.py:126
+#: engine/payments/models.py:145
msgid "integration variables"
msgstr "variabile de integrare"
-#: engine/payments/models.py:132
+#: engine/payments/models.py:152
msgid "payment gateway"
msgstr "gateway de plată"
-#: engine/payments/models.py:133
+#: engine/payments/models.py:153
msgid "payment gateways"
msgstr "gateway-uri de plată"
-#: engine/payments/models.py:169
+#: engine/payments/models.py:198
msgid "gateway integration path is not set"
msgstr "calea de integrare a gateway-ului nu este setată"
-#: engine/payments/models.py:174
+#: engine/payments/models.py:204
#, python-format
msgid "invalid integration path: %(path)s"
msgstr "cale de integrare invalidă: %(path)s"
-#: engine/payments/signals.py:41
+#: engine/payments/signals.py:45
msgid "the transaction amount didn't fit into allowed limits: "
msgstr "Valoarea tranzacției nu s-a încadrat în limitele permise:"
@@ -204,12 +204,12 @@ msgstr "Este necesar un furnizor de la care să se obțină tarife"
msgid "couldn't find provider {provider}"
msgstr "Nu am putut găsi furnizorul {provider}"
-#: engine/payments/utils/emailing.py:28
+#: engine/payments/utils/emailing.py:31
#, python-brace-format
msgid "{settings.PROJECT_NAME} | balance deposit"
msgstr "{settings.PROJECT_NAME} | depozit sold"
-#: engine/payments/views.py:24
+#: engine/payments/views.py:28
msgid ""
"This class provides an API endpoint to handle deposit transactions.\n"
"It supports the creation of a deposit transaction after validating the "
@@ -224,7 +224,7 @@ msgstr ""
"corespunzător. La validarea și executarea cu succes, este furnizat un "
"răspuns cu detaliile tranzacției."
-#: engine/payments/views.py:50
+#: engine/payments/views.py:61
msgid ""
"Handles incoming callback requests to the API.\n"
"This class processes and routes incoming HTTP POST requests to the "
@@ -239,17 +239,17 @@ msgstr ""
"provenite de la sisteme externe și pentru a furniza un răspuns HTTP adecvat "
"care să indice succesul sau eșecul."
-#: engine/payments/views.py:61
+#: engine/payments/views.py:75
#, python-brace-format
msgid "Transaction {transaction.uuid} has no gateway"
msgstr "Tranzacția {transaction.uuid} nu are gateway"
-#: engine/payments/views.py:64
+#: engine/payments/views.py:82
#, python-brace-format
msgid "Gateway {transaction.gateway} has no integration"
msgstr "Gateway {transaction.gateway} nu are integrare"
-#: engine/payments/views.py:76
+#: engine/payments/views.py:96
msgid ""
"This endpoint returns minimal and maximal allowed deposit amounts across "
"available gateways."
diff --git a/engine/payments/locale/ru_RU/LC_MESSAGES/django.po b/engine/payments/locale/ru_RU/LC_MESSAGES/django.po
index 6e9af737..8104e1b6 100644
--- a/engine/payments/locale/ru_RU/LC_MESSAGES/django.po
+++ b/engine/payments/locale/ru_RU/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -13,11 +13,11 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: engine/payments/admin.py:17 engine/payments/models.py:56
+#: engine/payments/admin.py:17 engine/payments/models.py:68
msgid "transaction"
msgstr "Транзакция"
-#: engine/payments/admin.py:18 engine/payments/models.py:57
+#: engine/payments/admin.py:18 engine/payments/models.py:69
msgid "transactions"
msgstr "Транзакции"
@@ -37,19 +37,19 @@ msgstr "Депозит"
msgid "withdraw"
msgstr "Вывести"
-#: engine/payments/docs/drf/views.py:13
+#: engine/payments/docs/drf/views.py:17
msgid "deposit to balance"
msgstr "Депозит на баланс"
-#: engine/payments/docs/drf/views.py:14
+#: engine/payments/docs/drf/views.py:18
msgid "deposit some money to balance"
msgstr "Внесите немного денег на баланс"
-#: engine/payments/docs/drf/views.py:29
+#: engine/payments/docs/drf/views.py:33
msgid "payment limits"
msgstr "Ограничения по оплате"
-#: engine/payments/docs/drf/views.py:30
+#: engine/payments/docs/drf/views.py:35
msgid ""
"retrieve minimal and maximal allowed deposit amounts across available "
"gateways"
@@ -69,88 +69,88 @@ msgstr "Получение одной транзакции (только для
msgid "Transaction UUID"
msgstr "UUID транзакции"
-#: engine/payments/models.py:36
+#: engine/payments/models.py:42
msgid "order to process after paid"
msgstr "Заказ на обработку после оплаты"
-#: engine/payments/models.py:39
+#: engine/payments/models.py:45
msgid "processing details"
msgstr "Детали обработки"
-#: engine/payments/models.py:75
+#: engine/payments/models.py:91
msgid "balance"
msgstr "Баланс"
-#: engine/payments/models.py:76
+#: engine/payments/models.py:92
msgid "balances"
msgstr "Балансы"
-#: engine/payments/models.py:86
+#: engine/payments/models.py:102
msgid "name"
msgstr "имя"
-#: engine/payments/models.py:91
+#: engine/payments/models.py:107
msgid "default currency"
msgstr "валюта по умолчанию"
-#: engine/payments/models.py:98
+#: engine/payments/models.py:114
msgid "currencies"
msgstr "валюты"
-#: engine/payments/models.py:100
+#: engine/payments/models.py:116
msgid "comma separated list of currencies supported by this gateway, "
msgstr "список валют, поддерживаемых данным шлюзом, разделенный запятыми,"
-#: engine/payments/models.py:106
+#: engine/payments/models.py:122
msgid "minimum transaction amount"
msgstr "минимальная сумма транзакции"
-#: engine/payments/models.py:109
+#: engine/payments/models.py:125
msgid "maximum transaction amount"
msgstr "максимальная сумма транзакции"
-#: engine/payments/models.py:115
+#: engine/payments/models.py:131
msgid "daily limit"
msgstr "суточный лимит"
-#: engine/payments/models.py:116
+#: engine/payments/models.py:132
msgid "daily sum limit of transactions' amounts. 0 means no limit"
msgstr "суточный лимит сумм транзакций. 0 означает отсутствие лимита"
-#: engine/payments/models.py:122
+#: engine/payments/models.py:138
msgid "monthly limit"
msgstr "месячный лимит"
-#: engine/payments/models.py:123
+#: engine/payments/models.py:139
msgid "monthly sum limit of transactions' amounts. 0 means no limit"
msgstr "месячный лимит сумм транзакций. 0 означает отсутствие лимита"
-#: engine/payments/models.py:125
+#: engine/payments/models.py:142
msgid "priority"
msgstr "приоритет"
-#: engine/payments/models.py:126
+#: engine/payments/models.py:145
msgid "integration variables"
msgstr "интеграционные переменные"
-#: engine/payments/models.py:132
+#: engine/payments/models.py:152
msgid "payment gateway"
msgstr "платёжный шлюз"
-#: engine/payments/models.py:133
+#: engine/payments/models.py:153
msgid "payment gateways"
msgstr "платёжные шлюзы"
-#: engine/payments/models.py:169
+#: engine/payments/models.py:198
msgid "gateway integration path is not set"
msgstr "путь интеграции шлюза не установлен"
-#: engine/payments/models.py:174
+#: engine/payments/models.py:204
#, python-format
msgid "invalid integration path: %(path)s"
msgstr "Неверный путь интеграции: %(path)s"
-#: engine/payments/signals.py:41
+#: engine/payments/signals.py:45
msgid "the transaction amount didn't fit into allowed limits: "
msgstr "Сумма операции не укладывалась в допустимые лимиты:"
@@ -204,12 +204,12 @@ msgstr "Требуется поставщик, у которого можно п
msgid "couldn't find provider {provider}"
msgstr "Не удалось найти провайдера {provider}"
-#: engine/payments/utils/emailing.py:28
+#: engine/payments/utils/emailing.py:31
#, python-brace-format
msgid "{settings.PROJECT_NAME} | balance deposit"
msgstr "{settings.PROJECT_NAME} | вклад в баланс"
-#: engine/payments/views.py:24
+#: engine/payments/views.py:28
msgid ""
"This class provides an API endpoint to handle deposit transactions.\n"
"It supports the creation of a deposit transaction after validating the "
@@ -224,7 +224,7 @@ msgstr ""
"возвращается соответствующий ответ. При успешной проверке и выполнении "
"транзакции выдается ответ с деталями транзакции."
-#: engine/payments/views.py:50
+#: engine/payments/views.py:61
msgid ""
"Handles incoming callback requests to the API.\n"
"This class processes and routes incoming HTTP POST requests to the "
@@ -239,17 +239,17 @@ msgstr ""
"от внешних систем, и предоставления соответствующего HTTP-ответа, "
"указывающего на успех или неудачу."
-#: engine/payments/views.py:61
+#: engine/payments/views.py:75
#, python-brace-format
msgid "Transaction {transaction.uuid} has no gateway"
msgstr "Транзакция {transaction.uuid} не имеет шлюза"
-#: engine/payments/views.py:64
+#: engine/payments/views.py:82
#, python-brace-format
msgid "Gateway {transaction.gateway} has no integration"
msgstr "Шлюз {transaction.gateway} не имеет интеграции"
-#: engine/payments/views.py:76
+#: engine/payments/views.py:96
msgid ""
"This endpoint returns minimal and maximal allowed deposit amounts across "
"available gateways."
diff --git a/engine/payments/locale/sv_SE/LC_MESSAGES/django.po b/engine/payments/locale/sv_SE/LC_MESSAGES/django.po
index 45d157d7..f38fcf99 100644
--- a/engine/payments/locale/sv_SE/LC_MESSAGES/django.po
+++ b/engine/payments/locale/sv_SE/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -13,11 +13,11 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: engine/payments/admin.py:17 engine/payments/models.py:56
+#: engine/payments/admin.py:17 engine/payments/models.py:68
msgid "transaction"
msgstr "Transaktion"
-#: engine/payments/admin.py:18 engine/payments/models.py:57
+#: engine/payments/admin.py:18 engine/payments/models.py:69
msgid "transactions"
msgstr "Transaktioner"
@@ -37,19 +37,19 @@ msgstr "Insättning"
msgid "withdraw"
msgstr "Uttag"
-#: engine/payments/docs/drf/views.py:13
+#: engine/payments/docs/drf/views.py:17
msgid "deposit to balance"
msgstr "Insättning till saldo"
-#: engine/payments/docs/drf/views.py:14
+#: engine/payments/docs/drf/views.py:18
msgid "deposit some money to balance"
msgstr "Sätt in pengar på saldot"
-#: engine/payments/docs/drf/views.py:29
+#: engine/payments/docs/drf/views.py:33
msgid "payment limits"
msgstr "Betalningsgränser"
-#: engine/payments/docs/drf/views.py:30
+#: engine/payments/docs/drf/views.py:35
msgid ""
"retrieve minimal and maximal allowed deposit amounts across available "
"gateways"
@@ -69,90 +69,90 @@ msgstr "Hämta en enskild transaktion (skrivskyddad)"
msgid "Transaction UUID"
msgstr "Transaktionens UUID"
-#: engine/payments/models.py:36
+#: engine/payments/models.py:42
msgid "order to process after paid"
msgstr "Order att bearbeta efter betald"
-#: engine/payments/models.py:39
+#: engine/payments/models.py:45
msgid "processing details"
msgstr "Bearbetning av detaljer"
-#: engine/payments/models.py:75
+#: engine/payments/models.py:91
msgid "balance"
msgstr "Balans"
-#: engine/payments/models.py:76
+#: engine/payments/models.py:92
msgid "balances"
msgstr "Vågskålar"
-#: engine/payments/models.py:86
+#: engine/payments/models.py:102
msgid "name"
msgstr "namn"
-#: engine/payments/models.py:91
+#: engine/payments/models.py:107
msgid "default currency"
msgstr "standardvaluta"
-#: engine/payments/models.py:98
+#: engine/payments/models.py:114
msgid "currencies"
msgstr "valutor"
-#: engine/payments/models.py:100
+#: engine/payments/models.py:116
msgid "comma separated list of currencies supported by this gateway, "
msgstr "Kommaseparerad lista över valutor som stöds av denna gateway,"
-#: engine/payments/models.py:106
+#: engine/payments/models.py:122
msgid "minimum transaction amount"
msgstr "minsta transaktionsbelopp"
-#: engine/payments/models.py:109
+#: engine/payments/models.py:125
msgid "maximum transaction amount"
msgstr "högsta transaktionsbelopp"
-#: engine/payments/models.py:115
+#: engine/payments/models.py:131
msgid "daily limit"
msgstr "daglig gräns"
-#: engine/payments/models.py:116
+#: engine/payments/models.py:132
msgid "daily sum limit of transactions' amounts. 0 means no limit"
msgstr ""
"gräns för daglig summa av transaktionernas belopp. 0 betyder ingen gräns"
-#: engine/payments/models.py:122
+#: engine/payments/models.py:138
msgid "monthly limit"
msgstr "månadsgräns"
-#: engine/payments/models.py:123
+#: engine/payments/models.py:139
msgid "monthly sum limit of transactions' amounts. 0 means no limit"
msgstr ""
"månadsgräns för summan av transaktionernas belopp. 0 betyder ingen gräns"
-#: engine/payments/models.py:125
+#: engine/payments/models.py:142
msgid "priority"
msgstr "prioritet"
-#: engine/payments/models.py:126
+#: engine/payments/models.py:145
msgid "integration variables"
msgstr "integrationsvariabler"
-#: engine/payments/models.py:132
+#: engine/payments/models.py:152
msgid "payment gateway"
msgstr "Betalningsgateway"
-#: engine/payments/models.py:133
+#: engine/payments/models.py:153
msgid "payment gateways"
msgstr "Betalningsgateways"
-#: engine/payments/models.py:169
+#: engine/payments/models.py:198
msgid "gateway integration path is not set"
msgstr "Integrationsvägen för gateway är inte inställd"
-#: engine/payments/models.py:174
+#: engine/payments/models.py:204
#, python-format
msgid "invalid integration path: %(path)s"
msgstr "ogiltig integrationsväg: %(path)s"
-#: engine/payments/signals.py:41
+#: engine/payments/signals.py:45
msgid "the transaction amount didn't fit into allowed limits: "
msgstr "Transaktionsbeloppet passade inte in i de tillåtna gränserna:"
@@ -206,12 +206,12 @@ msgstr "En leverantör att få priser från krävs"
msgid "couldn't find provider {provider}"
msgstr "Kunde inte hitta leverantören {provider}"
-#: engine/payments/utils/emailing.py:28
+#: engine/payments/utils/emailing.py:31
#, python-brace-format
msgid "{settings.PROJECT_NAME} | balance deposit"
msgstr "{settings.PROJECT_NAME} | saldo insättning"
-#: engine/payments/views.py:24
+#: engine/payments/views.py:28
msgid ""
"This class provides an API endpoint to handle deposit transactions.\n"
"It supports the creation of a deposit transaction after validating the "
@@ -226,7 +226,7 @@ msgstr ""
"ett lämpligt svar. Vid lyckad validering och utförande ges ett svar med "
"transaktionsdetaljerna."
-#: engine/payments/views.py:50
+#: engine/payments/views.py:61
msgid ""
"Handles incoming callback requests to the API.\n"
"This class processes and routes incoming HTTP POST requests to the "
@@ -241,17 +241,17 @@ msgstr ""
"system och tillhandahålla ett lämpligt HTTP-svar som indikerar framgång "
"eller misslyckande."
-#: engine/payments/views.py:61
+#: engine/payments/views.py:75
#, python-brace-format
msgid "Transaction {transaction.uuid} has no gateway"
msgstr "Transaktion {transaction.uuid} har ingen gateway"
-#: engine/payments/views.py:64
+#: engine/payments/views.py:82
#, python-brace-format
msgid "Gateway {transaction.gateway} has no integration"
msgstr "Gateway {transaction.gateway} har ingen integration"
-#: engine/payments/views.py:76
+#: engine/payments/views.py:96
msgid ""
"This endpoint returns minimal and maximal allowed deposit amounts across "
"available gateways."
diff --git a/engine/payments/locale/th_TH/LC_MESSAGES/django.po b/engine/payments/locale/th_TH/LC_MESSAGES/django.po
index e1ec1dce..5c2bb328 100644
--- a/engine/payments/locale/th_TH/LC_MESSAGES/django.po
+++ b/engine/payments/locale/th_TH/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -13,11 +13,11 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: engine/payments/admin.py:17 engine/payments/models.py:56
+#: engine/payments/admin.py:17 engine/payments/models.py:68
msgid "transaction"
msgstr "ธุรกรรม"
-#: engine/payments/admin.py:18 engine/payments/models.py:57
+#: engine/payments/admin.py:18 engine/payments/models.py:69
msgid "transactions"
msgstr "ธุรกรรม"
@@ -37,19 +37,19 @@ msgstr "เงินฝาก"
msgid "withdraw"
msgstr "ถอน"
-#: engine/payments/docs/drf/views.py:13
+#: engine/payments/docs/drf/views.py:17
msgid "deposit to balance"
msgstr "ฝากเงินเพื่อปรับยอด"
-#: engine/payments/docs/drf/views.py:14
+#: engine/payments/docs/drf/views.py:18
msgid "deposit some money to balance"
msgstr "ฝากเงินเพื่อปรับยอด"
-#: engine/payments/docs/drf/views.py:29
+#: engine/payments/docs/drf/views.py:33
msgid "payment limits"
msgstr "ขีดจำกัดการชำระเงิน"
-#: engine/payments/docs/drf/views.py:30
+#: engine/payments/docs/drf/views.py:35
msgid ""
"retrieve minimal and maximal allowed deposit amounts across available "
"gateways"
@@ -67,88 +67,88 @@ msgstr "ดึงข้อมูลธุรกรรมเดียว (อ่
msgid "Transaction UUID"
msgstr "รหัส UUID ของธุรกรรม"
-#: engine/payments/models.py:36
+#: engine/payments/models.py:42
msgid "order to process after paid"
msgstr "คำสั่งซื้อเพื่อดำเนินการหลังจากชำระเงินแล้ว"
-#: engine/payments/models.py:39
+#: engine/payments/models.py:45
msgid "processing details"
msgstr "รายละเอียดการประมวลผล"
-#: engine/payments/models.py:75
+#: engine/payments/models.py:91
msgid "balance"
msgstr "สมดุล"
-#: engine/payments/models.py:76
+#: engine/payments/models.py:92
msgid "balances"
msgstr "สเกล"
-#: engine/payments/models.py:86
+#: engine/payments/models.py:102
msgid "name"
msgstr "ชื่อ"
-#: engine/payments/models.py:91
+#: engine/payments/models.py:107
msgid "default currency"
msgstr "สกุลเงินเริ่มต้น"
-#: engine/payments/models.py:98
+#: engine/payments/models.py:114
msgid "currencies"
msgstr "สกุลเงิน"
-#: engine/payments/models.py:100
+#: engine/payments/models.py:116
msgid "comma separated list of currencies supported by this gateway, "
msgstr "รายการสกุลเงินที่รองรับโดยเกตเวย์นี้ แยกด้วยเครื่องหมายจุลภาค"
-#: engine/payments/models.py:106
+#: engine/payments/models.py:122
msgid "minimum transaction amount"
msgstr "จำนวนเงินการทำรายการขั้นต่ำ"
-#: engine/payments/models.py:109
+#: engine/payments/models.py:125
msgid "maximum transaction amount"
msgstr "จำนวนเงินสูงสุดต่อรายการ"
-#: engine/payments/models.py:115
+#: engine/payments/models.py:131
msgid "daily limit"
msgstr "ขีดจำกัดรายวัน"
-#: engine/payments/models.py:116
+#: engine/payments/models.py:132
msgid "daily sum limit of transactions' amounts. 0 means no limit"
msgstr "ขีดจำกัดยอดรวมต่อวันของจำนวนเงินธุรกรรม 0 หมายถึงไม่มีขีดจำกัด"
-#: engine/payments/models.py:122
+#: engine/payments/models.py:138
msgid "monthly limit"
msgstr "วงเงินรายเดือน"
-#: engine/payments/models.py:123
+#: engine/payments/models.py:139
msgid "monthly sum limit of transactions' amounts. 0 means no limit"
msgstr "วงเงินรวมรายเดือนของจำนวนธุรกรรม 0 หมายถึงไม่มีขีดจำกัด"
-#: engine/payments/models.py:125
+#: engine/payments/models.py:142
msgid "priority"
msgstr "ลำดับความสำคัญ"
-#: engine/payments/models.py:126
+#: engine/payments/models.py:145
msgid "integration variables"
msgstr "ตัวแปรการรวม"
-#: engine/payments/models.py:132
+#: engine/payments/models.py:152
msgid "payment gateway"
msgstr "เกตเวย์การชำระเงิน"
-#: engine/payments/models.py:133
+#: engine/payments/models.py:153
msgid "payment gateways"
msgstr "เกตเวย์การชำระเงิน"
-#: engine/payments/models.py:169
+#: engine/payments/models.py:198
msgid "gateway integration path is not set"
msgstr "ไม่ได้ตั้งค่าเส้นทางการรวมเกตเวย์"
-#: engine/payments/models.py:174
+#: engine/payments/models.py:204
#, python-format
msgid "invalid integration path: %(path)s"
msgstr "เส้นทางบูรณาการไม่ถูกต้อง: %(path)s"
-#: engine/payments/signals.py:41
+#: engine/payments/signals.py:45
msgid "the transaction amount didn't fit into allowed limits: "
msgstr "จำนวนเงินในการทำธุรกรรมไม่ตรงกับวงเงินที่อนุญาต:"
@@ -200,12 +200,12 @@ msgstr "จำเป็นต้องมีผู้ให้บริการ
msgid "couldn't find provider {provider}"
msgstr "ไม่พบผู้ให้บริการ {provider}"
-#: engine/payments/utils/emailing.py:28
+#: engine/payments/utils/emailing.py:31
#, python-brace-format
msgid "{settings.PROJECT_NAME} | balance deposit"
msgstr "{settings.PROJECT_NAME} | ยอดเงินฝาก"
-#: engine/payments/views.py:24
+#: engine/payments/views.py:28
msgid ""
"This class provides an API endpoint to handle deposit transactions.\n"
"It supports the creation of a deposit transaction after validating the "
@@ -218,7 +218,7 @@ msgstr ""
"หากผู้ใช้ไม่ได้รับการยืนยันตัวตน ระบบจะตอบกลับด้วยข้อความที่เหมาะสม "
"หากการตรวจสอบข้อมูลและดำเนินการสำเร็จ ระบบจะตอบกลับพร้อมรายละเอียดของธุรกรรม"
-#: engine/payments/views.py:50
+#: engine/payments/views.py:61
msgid ""
"Handles incoming callback requests to the API.\n"
"This class processes and routes incoming HTTP POST requests to the "
@@ -231,17 +231,17 @@ msgstr ""
"มันถูกออกแบบมาเพื่อจัดการเหตุการณ์การโทรกลับที่มาจากระบบภายนอกและให้คำตอบ HTTP "
"ที่เหมาะสมซึ่งบ่งบอกถึงความสำเร็จหรือความล้มเหลว"
-#: engine/payments/views.py:61
+#: engine/payments/views.py:75
#, python-brace-format
msgid "Transaction {transaction.uuid} has no gateway"
msgstr "ธุรกรรม {transaction.uuid} ไม่มีเกตเวย์"
-#: engine/payments/views.py:64
+#: engine/payments/views.py:82
#, python-brace-format
msgid "Gateway {transaction.gateway} has no integration"
msgstr "เกตเวย์ {transaction.gateway} ไม่มีการรวมระบบ"
-#: engine/payments/views.py:76
+#: engine/payments/views.py:96
msgid ""
"This endpoint returns minimal and maximal allowed deposit amounts across "
"available gateways."
diff --git a/engine/payments/locale/tr_TR/LC_MESSAGES/django.po b/engine/payments/locale/tr_TR/LC_MESSAGES/django.po
index 0eb6fb28..e7797eef 100644
--- a/engine/payments/locale/tr_TR/LC_MESSAGES/django.po
+++ b/engine/payments/locale/tr_TR/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -13,11 +13,11 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: engine/payments/admin.py:17 engine/payments/models.py:56
+#: engine/payments/admin.py:17 engine/payments/models.py:68
msgid "transaction"
msgstr "İşlem"
-#: engine/payments/admin.py:18 engine/payments/models.py:57
+#: engine/payments/admin.py:18 engine/payments/models.py:69
msgid "transactions"
msgstr "İşlemler"
@@ -37,19 +37,19 @@ msgstr "Depozito"
msgid "withdraw"
msgstr "Geri Çekilme"
-#: engine/payments/docs/drf/views.py:13
+#: engine/payments/docs/drf/views.py:17
msgid "deposit to balance"
msgstr "Bakiyeye yatırma"
-#: engine/payments/docs/drf/views.py:14
+#: engine/payments/docs/drf/views.py:18
msgid "deposit some money to balance"
msgstr "Bakiye için biraz para yatırın"
-#: engine/payments/docs/drf/views.py:29
+#: engine/payments/docs/drf/views.py:33
msgid "payment limits"
msgstr "Ödeme limitleri"
-#: engine/payments/docs/drf/views.py:30
+#: engine/payments/docs/drf/views.py:35
msgid ""
"retrieve minimal and maximal allowed deposit amounts across available "
"gateways"
@@ -69,90 +69,90 @@ msgstr "Tek bir işlemi alma (salt okunur)"
msgid "Transaction UUID"
msgstr "İşlem UUID'si"
-#: engine/payments/models.py:36
+#: engine/payments/models.py:42
msgid "order to process after paid"
msgstr "Ödeme yapıldıktan sonra işleme alınacak sipariş"
-#: engine/payments/models.py:39
+#: engine/payments/models.py:45
msgid "processing details"
msgstr "İşleme ayrıntıları"
-#: engine/payments/models.py:75
+#: engine/payments/models.py:91
msgid "balance"
msgstr "Denge"
-#: engine/payments/models.py:76
+#: engine/payments/models.py:92
msgid "balances"
msgstr "Terazi"
-#: engine/payments/models.py:86
+#: engine/payments/models.py:102
msgid "name"
msgstr "isim"
-#: engine/payments/models.py:91
+#: engine/payments/models.py:107
msgid "default currency"
msgstr "varsayılan para birimi"
-#: engine/payments/models.py:98
+#: engine/payments/models.py:114
msgid "currencies"
msgstr "para birimleri"
-#: engine/payments/models.py:100
+#: engine/payments/models.py:116
msgid "comma separated list of currencies supported by this gateway, "
msgstr ""
"Bu ağ geçidi tarafından desteklenen para birimlerinin virgülle ayrılmış "
"listesi,"
-#: engine/payments/models.py:106
+#: engine/payments/models.py:122
msgid "minimum transaction amount"
msgstr "minimum işlem tutarı"
-#: engine/payments/models.py:109
+#: engine/payments/models.py:125
msgid "maximum transaction amount"
msgstr "maksimum işlem tutarı"
-#: engine/payments/models.py:115
+#: engine/payments/models.py:131
msgid "daily limit"
msgstr "günlük limit"
-#: engine/payments/models.py:116
+#: engine/payments/models.py:132
msgid "daily sum limit of transactions' amounts. 0 means no limit"
msgstr "işlem tutarlarının günlük toplam limiti. 0 limit yok anlamına gelir"
-#: engine/payments/models.py:122
+#: engine/payments/models.py:138
msgid "monthly limit"
msgstr "aylık limit"
-#: engine/payments/models.py:123
+#: engine/payments/models.py:139
msgid "monthly sum limit of transactions' amounts. 0 means no limit"
msgstr "işlem tutarlarının aylık toplam limiti. 0 limit yok anlamına gelir"
-#: engine/payments/models.py:125
+#: engine/payments/models.py:142
msgid "priority"
msgstr "öncelik"
-#: engine/payments/models.py:126
+#: engine/payments/models.py:145
msgid "integration variables"
msgstr "entegrasyon değişkenleri"
-#: engine/payments/models.py:132
+#: engine/payments/models.py:152
msgid "payment gateway"
msgstr "ödeme ağ geçidi"
-#: engine/payments/models.py:133
+#: engine/payments/models.py:153
msgid "payment gateways"
msgstr "ödeme ağ geçitleri"
-#: engine/payments/models.py:169
+#: engine/payments/models.py:198
msgid "gateway integration path is not set"
msgstr "ağ geçidi entegrasyon yolu ayarlanmamış"
-#: engine/payments/models.py:174
+#: engine/payments/models.py:204
#, python-format
msgid "invalid integration path: %(path)s"
msgstr "geçersiz entegrasyon yolu: %(path)s"
-#: engine/payments/signals.py:41
+#: engine/payments/signals.py:45
msgid "the transaction amount didn't fit into allowed limits: "
msgstr "İşlem tutarı izin verilen limitlere uymuyordu:"
@@ -207,12 +207,12 @@ msgstr "Fiyat almak için bir sağlayıcı gereklidir"
msgid "couldn't find provider {provider}"
msgstr "Sağlayıcı bulunamadı {provider}"
-#: engine/payments/utils/emailing.py:28
+#: engine/payments/utils/emailing.py:31
#, python-brace-format
msgid "{settings.PROJECT_NAME} | balance deposit"
msgstr "{settings.PROJECT_NAME} | bakiye depozitosu"
-#: engine/payments/views.py:24
+#: engine/payments/views.py:28
msgid ""
"This class provides an API endpoint to handle deposit transactions.\n"
"It supports the creation of a deposit transaction after validating the "
@@ -226,7 +226,7 @@ msgstr ""
"yanıt döndürülür. Doğrulama ve yürütme başarılı olduğunda, işlem "
"ayrıntılarını içeren bir yanıt sağlanır."
-#: engine/payments/views.py:50
+#: engine/payments/views.py:61
msgid ""
"Handles incoming callback requests to the API.\n"
"This class processes and routes incoming HTTP POST requests to the "
@@ -240,17 +240,17 @@ msgstr ""
"geri arama olaylarını işlemek ve başarı veya başarısızlığı gösteren uygun "
"bir HTTP yanıtı sağlamak için tasarlanmıştır."
-#: engine/payments/views.py:61
+#: engine/payments/views.py:75
#, python-brace-format
msgid "Transaction {transaction.uuid} has no gateway"
msgstr "İşlem {transaction.uuid}'ın ağ geçidi yok"
-#: engine/payments/views.py:64
+#: engine/payments/views.py:82
#, python-brace-format
msgid "Gateway {transaction.gateway} has no integration"
msgstr "Gateway {transaction.gateway} entegrasyona sahip değildir"
-#: engine/payments/views.py:76
+#: engine/payments/views.py:96
msgid ""
"This endpoint returns minimal and maximal allowed deposit amounts across "
"available gateways."
diff --git a/engine/payments/locale/vi_VN/LC_MESSAGES/django.po b/engine/payments/locale/vi_VN/LC_MESSAGES/django.po
index 23500cb9..1e18e334 100644
--- a/engine/payments/locale/vi_VN/LC_MESSAGES/django.po
+++ b/engine/payments/locale/vi_VN/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -13,11 +13,11 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: engine/payments/admin.py:17 engine/payments/models.py:56
+#: engine/payments/admin.py:17 engine/payments/models.py:68
msgid "transaction"
msgstr "Giao dịch"
-#: engine/payments/admin.py:18 engine/payments/models.py:57
+#: engine/payments/admin.py:18 engine/payments/models.py:69
msgid "transactions"
msgstr "Giao dịch"
@@ -37,19 +37,19 @@ msgstr "Tiền gửi"
msgid "withdraw"
msgstr "Rút tiền"
-#: engine/payments/docs/drf/views.py:13
+#: engine/payments/docs/drf/views.py:17
msgid "deposit to balance"
msgstr "Gửi tiền vào tài khoản"
-#: engine/payments/docs/drf/views.py:14
+#: engine/payments/docs/drf/views.py:18
msgid "deposit some money to balance"
msgstr "Gửi một số tiền để cân bằng."
-#: engine/payments/docs/drf/views.py:29
+#: engine/payments/docs/drf/views.py:33
msgid "payment limits"
msgstr "Giới hạn thanh toán"
-#: engine/payments/docs/drf/views.py:30
+#: engine/payments/docs/drf/views.py:35
msgid ""
"retrieve minimal and maximal allowed deposit amounts across available "
"gateways"
@@ -69,92 +69,92 @@ msgstr "Lấy một giao dịch duy nhất (chỉ đọc)"
msgid "Transaction UUID"
msgstr "Mã giao dịch UUID"
-#: engine/payments/models.py:36
+#: engine/payments/models.py:42
msgid "order to process after paid"
msgstr "Đơn hàng sẽ được xử lý sau khi thanh toán."
-#: engine/payments/models.py:39
+#: engine/payments/models.py:45
msgid "processing details"
msgstr "Chi tiết xử lý"
-#: engine/payments/models.py:75
+#: engine/payments/models.py:91
msgid "balance"
msgstr "Cân bằng"
-#: engine/payments/models.py:76
+#: engine/payments/models.py:92
msgid "balances"
msgstr "Cân"
-#: engine/payments/models.py:86
+#: engine/payments/models.py:102
msgid "name"
msgstr "tên"
-#: engine/payments/models.py:91
+#: engine/payments/models.py:107
msgid "default currency"
msgstr "Tiền tệ mặc định"
-#: engine/payments/models.py:98
+#: engine/payments/models.py:114
msgid "currencies"
msgstr "tiền tệ"
-#: engine/payments/models.py:100
+#: engine/payments/models.py:116
msgid "comma separated list of currencies supported by this gateway, "
msgstr ""
"Danh sách các loại tiền tệ được hỗ trợ bởi cổng thanh toán này, được phân "
"tách bằng dấu phẩy,"
-#: engine/payments/models.py:106
+#: engine/payments/models.py:122
msgid "minimum transaction amount"
msgstr "Số tiền giao dịch tối thiểu"
-#: engine/payments/models.py:109
+#: engine/payments/models.py:125
msgid "maximum transaction amount"
msgstr "Số tiền giao dịch tối đa"
-#: engine/payments/models.py:115
+#: engine/payments/models.py:131
msgid "daily limit"
msgstr "giới hạn hàng ngày"
-#: engine/payments/models.py:116
+#: engine/payments/models.py:132
msgid "daily sum limit of transactions' amounts. 0 means no limit"
msgstr ""
"Giới hạn tổng số tiền giao dịch hàng ngày. 0 có nghĩa là không có giới hạn."
-#: engine/payments/models.py:122
+#: engine/payments/models.py:138
msgid "monthly limit"
msgstr "giới hạn hàng tháng"
-#: engine/payments/models.py:123
+#: engine/payments/models.py:139
msgid "monthly sum limit of transactions' amounts. 0 means no limit"
msgstr ""
"Giới hạn tổng số tiền giao dịch hàng tháng. 0 có nghĩa là không có giới hạn."
-#: engine/payments/models.py:125
+#: engine/payments/models.py:142
msgid "priority"
msgstr "ưu tiên"
-#: engine/payments/models.py:126
+#: engine/payments/models.py:145
msgid "integration variables"
msgstr "biến tích phân"
-#: engine/payments/models.py:132
+#: engine/payments/models.py:152
msgid "payment gateway"
msgstr "cổng thanh toán"
-#: engine/payments/models.py:133
+#: engine/payments/models.py:153
msgid "payment gateways"
msgstr "Cổng thanh toán"
-#: engine/payments/models.py:169
+#: engine/payments/models.py:198
msgid "gateway integration path is not set"
msgstr "Đường dẫn tích hợp cổng không được thiết lập."
-#: engine/payments/models.py:174
+#: engine/payments/models.py:204
#, python-format
msgid "invalid integration path: %(path)s"
msgstr "Đường dẫn tích hợp không hợp lệ: %(path)s"
-#: engine/payments/signals.py:41
+#: engine/payments/signals.py:45
msgid "the transaction amount didn't fit into allowed limits: "
msgstr "Số tiền giao dịch không nằm trong giới hạn cho phép:"
@@ -208,12 +208,12 @@ msgstr "Cần có nhà cung cấp để lấy báo giá."
msgid "couldn't find provider {provider}"
msgstr "Không thể tìm thấy nhà cung cấp {provider}"
-#: engine/payments/utils/emailing.py:28
+#: engine/payments/utils/emailing.py:31
#, python-brace-format
msgid "{settings.PROJECT_NAME} | balance deposit"
msgstr "{settings.PROJECT_NAME} | Số dư tiền gửi"
-#: engine/payments/views.py:24
+#: engine/payments/views.py:28
msgid ""
"This class provides an API endpoint to handle deposit transactions.\n"
"It supports the creation of a deposit transaction after validating the "
@@ -227,7 +227,7 @@ msgstr ""
"thực và thực thi thành công, một phản hồi chứa chi tiết giao dịch sẽ được "
"cung cấp."
-#: engine/payments/views.py:50
+#: engine/payments/views.py:61
msgid ""
"Handles incoming callback requests to the API.\n"
"This class processes and routes incoming HTTP POST requests to the "
@@ -241,17 +241,17 @@ msgstr ""
"hệ thống bên ngoài và cung cấp phản hồi HTTP phù hợp để chỉ ra thành công "
"hoặc thất bại."
-#: engine/payments/views.py:61
+#: engine/payments/views.py:75
#, python-brace-format
msgid "Transaction {transaction.uuid} has no gateway"
msgstr "Giao dịch {transaction.uuid} không có cổng thanh toán."
-#: engine/payments/views.py:64
+#: engine/payments/views.py:82
#, python-brace-format
msgid "Gateway {transaction.gateway} has no integration"
msgstr "Cổng {transaction.gateway} không có tích hợp."
-#: engine/payments/views.py:76
+#: engine/payments/views.py:96
msgid ""
"This endpoint returns minimal and maximal allowed deposit amounts across "
"available gateways."
diff --git a/engine/payments/locale/zh_Hans/LC_MESSAGES/django.po b/engine/payments/locale/zh_Hans/LC_MESSAGES/django.po
index 0ef47948..24fa4516 100644
--- a/engine/payments/locale/zh_Hans/LC_MESSAGES/django.po
+++ b/engine/payments/locale/zh_Hans/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -13,11 +13,11 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: engine/payments/admin.py:17 engine/payments/models.py:56
+#: engine/payments/admin.py:17 engine/payments/models.py:68
msgid "transaction"
msgstr "交易"
-#: engine/payments/admin.py:18 engine/payments/models.py:57
+#: engine/payments/admin.py:18 engine/payments/models.py:69
msgid "transactions"
msgstr "交易"
@@ -37,19 +37,19 @@ msgstr "存款"
msgid "withdraw"
msgstr "退出"
-#: engine/payments/docs/drf/views.py:13
+#: engine/payments/docs/drf/views.py:17
msgid "deposit to balance"
msgstr "余额存款"
-#: engine/payments/docs/drf/views.py:14
+#: engine/payments/docs/drf/views.py:18
msgid "deposit some money to balance"
msgstr "为余额存入一些钱"
-#: engine/payments/docs/drf/views.py:29
+#: engine/payments/docs/drf/views.py:33
msgid "payment limits"
msgstr "支付限额"
-#: engine/payments/docs/drf/views.py:30
+#: engine/payments/docs/drf/views.py:35
msgid ""
"retrieve minimal and maximal allowed deposit amounts across available "
"gateways"
@@ -67,88 +67,88 @@ msgstr "检索单个事务(只读)"
msgid "Transaction UUID"
msgstr "事务 UUID"
-#: engine/payments/models.py:36
+#: engine/payments/models.py:42
msgid "order to process after paid"
msgstr "付款后处理订单"
-#: engine/payments/models.py:39
+#: engine/payments/models.py:45
msgid "processing details"
msgstr "处理细节"
-#: engine/payments/models.py:75
+#: engine/payments/models.py:91
msgid "balance"
msgstr "平衡"
-#: engine/payments/models.py:76
+#: engine/payments/models.py:92
msgid "balances"
msgstr "天平"
-#: engine/payments/models.py:86
+#: engine/payments/models.py:102
msgid "name"
msgstr "名字"
-#: engine/payments/models.py:91
+#: engine/payments/models.py:107
msgid "default currency"
msgstr "默认货币"
-#: engine/payments/models.py:98
+#: engine/payments/models.py:114
msgid "currencies"
msgstr "货币"
-#: engine/payments/models.py:100
+#: engine/payments/models.py:116
msgid "comma separated list of currencies supported by this gateway, "
msgstr "以逗号分隔的该网关支持的货币列表、"
-#: engine/payments/models.py:106
+#: engine/payments/models.py:122
msgid "minimum transaction amount"
msgstr "最低交易额"
-#: engine/payments/models.py:109
+#: engine/payments/models.py:125
msgid "maximum transaction amount"
msgstr "最高交易额"
-#: engine/payments/models.py:115
+#: engine/payments/models.py:131
msgid "daily limit"
msgstr "每日限额"
-#: engine/payments/models.py:116
+#: engine/payments/models.py:132
msgid "daily sum limit of transactions' amounts. 0 means no limit"
msgstr "交易金额的每日总限额。0 表示无限额"
-#: engine/payments/models.py:122
+#: engine/payments/models.py:138
msgid "monthly limit"
msgstr "月限额"
-#: engine/payments/models.py:123
+#: engine/payments/models.py:139
msgid "monthly sum limit of transactions' amounts. 0 means no limit"
msgstr "交易金额的月限额。0 表示无限额"
-#: engine/payments/models.py:125
+#: engine/payments/models.py:142
msgid "priority"
msgstr "优先权"
-#: engine/payments/models.py:126
+#: engine/payments/models.py:145
msgid "integration variables"
msgstr "整合变量"
-#: engine/payments/models.py:132
+#: engine/payments/models.py:152
msgid "payment gateway"
msgstr "支付网关"
-#: engine/payments/models.py:133
+#: engine/payments/models.py:153
msgid "payment gateways"
msgstr "支付网关"
-#: engine/payments/models.py:169
+#: engine/payments/models.py:198
msgid "gateway integration path is not set"
msgstr "网关集成路径未设置"
-#: engine/payments/models.py:174
+#: engine/payments/models.py:204
#, python-format
msgid "invalid integration path: %(path)s"
msgstr "集成路径无效:%(path)s"
-#: engine/payments/signals.py:41
+#: engine/payments/signals.py:45
msgid "the transaction amount didn't fit into allowed limits: "
msgstr "交易金额不符合允许的限额:"
@@ -202,12 +202,12 @@ msgstr "需要提供商提供费率"
msgid "couldn't find provider {provider}"
msgstr "找不到提供商 {provider}"
-#: engine/payments/utils/emailing.py:28
+#: engine/payments/utils/emailing.py:31
#, python-brace-format
msgid "{settings.PROJECT_NAME} | balance deposit"
msgstr "{settings.PROJECT_NAME}| 余额存款"
-#: engine/payments/views.py:24
+#: engine/payments/views.py:28
msgid ""
"This class provides an API endpoint to handle deposit transactions.\n"
"It supports the creation of a deposit transaction after validating the "
@@ -219,7 +219,7 @@ msgstr ""
"它支持在验证所提供的数据后创建存款交易。如果用户未通过身份验证,则会返回相应"
"的响应。如果验证和执行成功,则会提供包含交易详细信息的响应。"
-#: engine/payments/views.py:50
+#: engine/payments/views.py:61
msgid ""
"Handles incoming callback requests to the API.\n"
"This class processes and routes incoming HTTP POST requests to the "
@@ -232,17 +232,17 @@ msgstr ""
"理程序。该类旨在处理来自外部系统的回调事件,并提供适当的 HTTP 响应,说明成功"
"或失败。"
-#: engine/payments/views.py:61
+#: engine/payments/views.py:75
#, python-brace-format
msgid "Transaction {transaction.uuid} has no gateway"
msgstr "交易 {transaction.uuid} 没有网关"
-#: engine/payments/views.py:64
+#: engine/payments/views.py:82
#, python-brace-format
msgid "Gateway {transaction.gateway} has no integration"
msgstr "网关 {transaction.gateway} 没有集成"
-#: engine/payments/views.py:76
+#: engine/payments/views.py:96
msgid ""
"This endpoint returns minimal and maximal allowed deposit amounts across "
"available gateways."
diff --git a/engine/payments/managers.py b/engine/payments/managers.py
index 80148a1e..36a28f90 100644
--- a/engine/payments/managers.py
+++ b/engine/payments/managers.py
@@ -58,6 +58,6 @@ class GatewayQuerySet(QuerySet):
).order_by("-priority")
-class GatewayManager(Manager.from_queryset(GatewayQuerySet)): # type: ignore [misc]
+class GatewayManager(Manager.from_queryset(GatewayQuerySet)):
def get_queryset(self) -> QuerySet:
return super().get_queryset().can_be_used()
diff --git a/engine/payments/serializers.py b/engine/payments/serializers.py
index f2faac8c..4c89b6f6 100644
--- a/engine/payments/serializers.py
+++ b/engine/payments/serializers.py
@@ -4,17 +4,17 @@ from rest_framework.serializers import ModelSerializer, Serializer
from engine.payments.models import Transaction
-class DepositSerializer(Serializer): # type: ignore [type-arg]
+class DepositSerializer(Serializer):
amount = FloatField(required=True)
-class TransactionSerializer(ModelSerializer): # type: ignore [type-arg]
+class TransactionSerializer(ModelSerializer):
class Meta:
model = Transaction
fields = "__all__"
-class TransactionProcessSerializer(ModelSerializer): # type: ignore [type-arg]
+class TransactionProcessSerializer(ModelSerializer):
process = JSONField(required=True)
order_hr_id = SerializerMethodField(read_only=True, required=False)
order_uuid = SerializerMethodField(read_only=True, required=False)
@@ -31,6 +31,6 @@ class TransactionProcessSerializer(ModelSerializer): # type: ignore [type-arg]
read_only_fields = ("process", "order_hr_id", "order_uuid")
-class LimitsSerializer(Serializer): # type: ignore [type-arg]
+class LimitsSerializer(Serializer):
min_amount = FloatField(read_only=True)
max_amount = FloatField(read_only=True)
diff --git a/engine/payments/signals.py b/engine/payments/signals.py
index 32a55b8a..3aa05c04 100644
--- a/engine/payments/signals.py
+++ b/engine/payments/signals.py
@@ -38,7 +38,7 @@ def process_transaction_changes(
<= instance.amount
<= instance.gateway.maximum_transaction_amount
):
- gateway.process_transaction(instance) # type: ignore [union-attr]
+ gateway.process_transaction(instance)
else:
raise BadLimitsError(
_(
diff --git a/engine/payments/views.py b/engine/payments/views.py
index d63fff22..4afd4628 100644
--- a/engine/payments/views.py
+++ b/engine/payments/views.py
@@ -24,7 +24,7 @@ logger = logging.getLogger(__name__)
@extend_schema_view(**DEPOSIT_SCHEMA)
class DepositView(APIView):
- __doc__ = _( # type: ignore [assignment]
+ __doc__ = _(
"This class provides an API endpoint to handle deposit transactions.\n"
"It supports the creation of a deposit transaction after validating the "
"provided data. If the user is not authenticated, an appropriate response "
@@ -57,7 +57,7 @@ class DepositView(APIView):
@extend_schema(exclude=True)
class CallbackAPIView(APIView):
- __doc__ = _( # type: ignore [assignment]
+ __doc__ = _(
"Handles incoming callback requests to the API.\n"
"This class processes and routes incoming HTTP POST requests to the appropriate "
"pgateway handler based on the provided gateway parameter. It is designed to handle "
@@ -92,7 +92,7 @@ class CallbackAPIView(APIView):
@extend_schema_view(**LIMITS_SCHEMA)
class LimitsAPIView(APIView):
- __doc__ = _( # type: ignore [assignment]
+ __doc__ = _(
"This endpoint returns minimal and maximal allowed deposit amounts across available gateways."
)
diff --git a/engine/payments/viewsets.py b/engine/payments/viewsets.py
index 585ee39e..c8644bf0 100644
--- a/engine/payments/viewsets.py
+++ b/engine/payments/viewsets.py
@@ -9,8 +9,8 @@ from engine.payments.serializers import TransactionSerializer
@extend_schema_view(**TRANSACTION_SCHEMA)
-class TransactionViewSet(ReadOnlyModelViewSet): # type: ignore
- __doc__ = _( # type: ignore [assignment]
+class TransactionViewSet(ReadOnlyModelViewSet):
+ __doc__ = _(
"ViewSet for handling read-only operations on the Transaction model. "
"This class provides a read-only interface for interacting with transaction data. "
"It uses the TransactionSerializer for serializing and deserializing "
diff --git a/engine/vibes_auth/admin.py b/engine/vibes_auth/admin.py
index 8e393a30..0e2aad00 100644
--- a/engine/vibes_auth/admin.py
+++ b/engine/vibes_auth/admin.py
@@ -44,7 +44,7 @@ from engine.vibes_auth.models import (
)
-class BalanceInline(TabularInline): # type: ignore [type-arg]
+class BalanceInline(TabularInline):
model = Balance
can_delete = False
extra = 0
@@ -54,7 +54,7 @@ class BalanceInline(TabularInline): # type: ignore [type-arg]
icon = "fa-solid fa-wallet"
-class OrderInline(TabularInline): # type: ignore [type-arg]
+class OrderInline(TabularInline):
model = Order
extra = 0
verbose_name = _("order")
@@ -63,7 +63,7 @@ class OrderInline(TabularInline): # type: ignore [type-arg]
icon = "fa-solid fa-cart-shopping"
-class UserAdmin(ActivationActionsMixin, BaseUserAdmin, ModelAdmin): # type: ignore [misc, type-arg]
+class UserAdmin(ActivationActionsMixin, BaseUserAdmin, ModelAdmin):
inlines = (BalanceInline, OrderInline)
fieldsets = (
(None, {"fields": ("email", "password")}),
@@ -165,11 +165,11 @@ class ChatThreadAdmin(ModelAdmin):
readonly_fields = ("created", "modified")
@admin.action(description=_("Close selected threads"))
- def close_threads(self, request, queryset): # type: ignore[no-untyped-def]
+ def close_threads(self, request, queryset):
queryset.update(status=ThreadStatus.CLOSED)
@admin.action(description=_("Open selected threads"))
- def open_threads(self, request, queryset): # type: ignore[no-untyped-def]
+ def open_threads(self, request, queryset):
queryset.update(status=ThreadStatus.OPEN)
diff --git a/engine/vibes_auth/forms.py b/engine/vibes_auth/forms.py
index 26725eac..fba74eff 100644
--- a/engine/vibes_auth/forms.py
+++ b/engine/vibes_auth/forms.py
@@ -4,7 +4,7 @@ from engine.core.widgets import JSONTableWidget
from engine.vibes_auth.models import User
-class UserForm(UserChangeForm): # type: ignore [type-arg]
+class UserForm(UserChangeForm):
password = ReadOnlyPasswordHashField(label="Password")
class Meta:
diff --git a/engine/vibes_auth/locale/ar_AR/LC_MESSAGES/django.po b/engine/vibes_auth/locale/ar_AR/LC_MESSAGES/django.po
index 29ea7d82..e6f68839 100644
--- a/engine/vibes_auth/locale/ar_AR/LC_MESSAGES/django.po
+++ b/engine/vibes_auth/locale/ar_AR/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -14,7 +14,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: engine/vibes_auth/admin.py:51 engine/vibes_auth/admin.py:52
-#: engine/vibes_auth/graphene/object_types.py:46
+#: engine/vibes_auth/graphene/object_types.py:54
msgid "balance"
msgstr "الرصيد"
@@ -22,7 +22,7 @@ msgstr "الرصيد"
msgid "order"
msgstr "الطلب"
-#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:44
+#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:51
msgid "orders"
msgstr "الطلبات"
@@ -30,7 +30,7 @@ msgstr "الطلبات"
msgid "personal info"
msgstr "معلومات شخصية"
-#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:43
+#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:50
msgid "permissions"
msgstr "الأذونات"
@@ -42,15 +42,15 @@ msgstr "تواريخ مهمة"
msgid "additional info"
msgstr "معلومات إضافية"
-#: engine/vibes_auth/admin.py:128
+#: engine/vibes_auth/admin.py:135
msgid "You cannot jump over your head!"
msgstr "لا يمكنك القفز فوق رأسك!"
-#: engine/vibes_auth/admin.py:160
+#: engine/vibes_auth/admin.py:167
msgid "Close selected threads"
msgstr "إغلاق المواضيع المحددة"
-#: engine/vibes_auth/admin.py:164
+#: engine/vibes_auth/admin.py:171
msgid "Open selected threads"
msgstr "فتح المواضيع المحددة"
@@ -82,7 +82,7 @@ msgstr "النظام"
msgid "User messages entrypoint"
msgstr "نقطة إدخال رسائل المستخدم"
-#: engine/vibes_auth/docs/drf/messaging.py:18
+#: engine/vibes_auth/docs/drf/messaging.py:19
msgid ""
"Anonymous or authenticated non-staff users send messages. Also supports "
"action=ping."
@@ -90,11 +90,11 @@ msgstr ""
"يرسل المستخدمون المجهولون أو الموثقون من غير الموظفين رسائل. يدعم أيضًا "
"الإجراء=إرسال الرسائل."
-#: engine/vibes_auth/docs/drf/messaging.py:28
+#: engine/vibes_auth/docs/drf/messaging.py:30
msgid "Staff inbox control"
msgstr "التحكم في صندوق البريد الوارد للموظفين"
-#: engine/vibes_auth/docs/drf/messaging.py:29
+#: engine/vibes_auth/docs/drf/messaging.py:32
msgid ""
"Staff-only actions: list_open, assign, reply, close, ping. Unified event "
"payloads are emitted."
@@ -102,11 +102,11 @@ msgstr ""
"الإجراءات الخاصة بالموظفين فقط: سرد_افتتاح، وتعيين، ورد، وإغلاق، واستدعاء. "
"تنبعث حمولات الأحداث الموحدة."
-#: engine/vibes_auth/docs/drf/messaging.py:39
+#: engine/vibes_auth/docs/drf/messaging.py:43
msgid "Per-thread staff channel"
msgstr "قناة الموظفين لكل موضوع"
-#: engine/vibes_auth/docs/drf/messaging.py:40
+#: engine/vibes_auth/docs/drf/messaging.py:44
msgid "Reply, close, and ping within a specific thread."
msgstr "الرد، والإغلاق، وإجراء اختبار الاتصال ضمن سلسلة رسائل محددة."
@@ -134,7 +134,7 @@ msgstr "التحقق من الرمز المميز"
msgid "Verify a token (refresh or access)."
msgstr "التحقق من الرمز المميز (التحديث أو الوصول)."
-#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90
+#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:100
msgid "the token is valid"
msgstr "الرمز المميز صالح"
@@ -173,9 +173,9 @@ msgid "confirm a user's password reset"
msgstr "تأكيد إعادة تعيين كلمة مرور المستخدم"
#: engine/vibes_auth/docs/drf/viewsets.py:87
-#: engine/vibes_auth/graphene/mutations.py:317
-#: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101
-#: engine/vibes_auth/viewsets.py:84
+#: engine/vibes_auth/graphene/mutations.py:345
+#: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/viewsets.py:94
msgid "passwords do not match"
msgstr "كلمات المرور غير متطابقة"
@@ -183,108 +183,109 @@ msgstr "كلمات المرور غير متطابقة"
msgid "activate a user's account"
msgstr "تنشيط حساب مستخدم"
-#: engine/vibes_auth/docs/drf/viewsets.py:99
+#: engine/vibes_auth/docs/drf/viewsets.py:101
msgid "activation link is invalid or account already activated"
msgstr "رابط التفعيل غير صالح أو أن الحساب مفعل بالفعل"
-#: engine/vibes_auth/docs/drf/viewsets.py:107
+#: engine/vibes_auth/docs/drf/viewsets.py:111
msgid "merge client-stored recently viewed products"
msgstr "دمج المنتجات التي تم عرضها مؤخراً المخزنة لدى العميل"
-#: engine/vibes_auth/graphene/mutations.py:44
+#: engine/vibes_auth/graphene/mutations.py:47
msgid "the user's b64-encoded uuid who referred the new user to us."
msgstr "معرّف المستخدم الذي تم ترميزه بـ b64 الذي أحال المستخدم الجديد إلينا."
-#: engine/vibes_auth/graphene/mutations.py:64
+#: engine/vibes_auth/graphene/mutations.py:69
msgid "password too weak"
msgstr "كلمة المرور ضعيفة جداً"
-#: engine/vibes_auth/graphene/mutations.py:119
+#: engine/vibes_auth/graphene/mutations.py:129
msgid "malformed email"
msgstr "بريد إلكتروني مشوه"
-#: engine/vibes_auth/graphene/mutations.py:126
-#: engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/graphene/mutations.py:141
+#: engine/vibes_auth/serializers.py:117
#, python-brace-format
msgid "malformed phone number: {phone_number}"
msgstr "رقم هاتف مشوه: {phone_number}!"
-#: engine/vibes_auth/graphene/mutations.py:148
+#: engine/vibes_auth/graphene/mutations.py:166
#, python-brace-format
msgid "Invalid attribute format: {attribute_pair}"
msgstr "تنسيق السمة غير صالح: {attribute_pair}!"
-#: engine/vibes_auth/graphene/mutations.py:162
+#: engine/vibes_auth/graphene/mutations.py:183
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr "{name} غير موجود: {uuid}!"
-#: engine/vibes_auth/graphene/mutations.py:270
-#: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146
+#: engine/vibes_auth/graphene/mutations.py:298
+#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180
msgid "activation link is invalid!"
msgstr "رابط التفعيل غير صالح!"
-#: engine/vibes_auth/graphene/mutations.py:273
+#: engine/vibes_auth/graphene/mutations.py:301
msgid "account already activated..."
msgstr "تم تفعيل الحساب بالفعل..."
-#: engine/vibes_auth/graphene/mutations.py:280
-#: engine/vibes_auth/graphene/mutations.py:336
+#: engine/vibes_auth/graphene/mutations.py:308
+#: engine/vibes_auth/graphene/mutations.py:370
msgid "something went wrong: {e!s}"
msgstr "حدث خطأ ما: {e!s}"
-#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95
+#: engine/vibes_auth/graphene/mutations.py:352
+#: engine/vibes_auth/viewsets.py:106
msgid "token is invalid!"
msgstr "الرمز غير صالح!"
-#: engine/vibes_auth/graphene/object_types.py:40
+#: engine/vibes_auth/graphene/object_types.py:46
msgid ""
"the products this user has viewed most recently (max 48), in reverse‐"
"chronological order"
msgstr ""
"المنتجات التي شاهدها هذا المستخدم مؤخرًا (بحد أقصى 48)، بترتيب زمني عكسي."
-#: engine/vibes_auth/graphene/object_types.py:42
-#: engine/vibes_auth/models.py:185
+#: engine/vibes_auth/graphene/object_types.py:49
+#: engine/vibes_auth/models.py:209
msgid "groups"
msgstr "المجموعات"
-#: engine/vibes_auth/graphene/object_types.py:45
+#: engine/vibes_auth/graphene/object_types.py:52
msgid "wishlist"
msgstr "قائمة الرغبات"
-#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:70
+#: engine/vibes_auth/graphene/object_types.py:56 engine/vibes_auth/models.py:70
msgid "avatar"
msgstr "الصورة الرمزية"
-#: engine/vibes_auth/graphene/object_types.py:48
+#: engine/vibes_auth/graphene/object_types.py:58
msgid "attributes may be used to store custom data"
msgstr "يمكن استخدام السمات لتخزين البيانات المخصصة"
-#: engine/vibes_auth/graphene/object_types.py:50
+#: engine/vibes_auth/graphene/object_types.py:62
#, python-brace-format
msgid ""
"language is one of the {settings.LANGUAGES} with default {settings."
"LANGUAGE_CODE}"
msgstr "اللغة هي واحدة من {settings.LANGUAGES} مع {settings.LANGUAGE_CODE}"
-#: engine/vibes_auth/graphene/object_types.py:52
+#: engine/vibes_auth/graphene/object_types.py:66
msgid "address set"
msgstr "العناوين"
-#: engine/vibes_auth/messaging/services.py:49
+#: engine/vibes_auth/messaging/services.py:52
msgid "Valid email is required for anonymous chats."
msgstr "مطلوب بريد إلكتروني صالح للمحادثات المجهولة."
-#: engine/vibes_auth/messaging/services.py:57
+#: engine/vibes_auth/messaging/services.py:65
msgid "Message must be 1..1028 characters."
msgstr "يجب أن تتكون الرسالة من 1...1028 حرفاً."
-#: engine/vibes_auth/messaging/services.py:93
+#: engine/vibes_auth/messaging/services.py:105
msgid "We're searching for the operator to answer you already, hold by!"
msgstr "نحن نبحث عن عامل التشغيل للرد عليك بالفعل، انتظر!"
-#: engine/vibes_auth/messaging/services.py:136
+#: engine/vibes_auth/messaging/services.py:152
msgid "Assignee must be a staff user."
msgstr "يجب أن يكون المعين مستخدمًا من الموظفين."
@@ -353,71 +354,71 @@ msgstr "قم بإلغاء تحديد هذا بدلاً من حذف الحساب
msgid "is_subscribed"
msgstr "مشترك"
-#: engine/vibes_auth/models.py:87
+#: engine/vibes_auth/models.py:88
msgid "user's newsletter subscription status"
msgstr "حالة اشتراك المستخدم في النشرة الإخبارية"
-#: engine/vibes_auth/models.py:90
+#: engine/vibes_auth/models.py:92
msgid "activation token"
msgstr "رمز التفعيل"
-#: engine/vibes_auth/models.py:94
+#: engine/vibes_auth/models.py:101
msgid "attributes"
msgstr "السمات"
-#: engine/vibes_auth/models.py:133
+#: engine/vibes_auth/models.py:141
msgid "user"
msgstr "المستخدم"
-#: engine/vibes_auth/models.py:134
+#: engine/vibes_auth/models.py:142
msgid "users"
msgstr "المستخدمون"
-#: engine/vibes_auth/models.py:139
+#: engine/vibes_auth/models.py:149
msgid "For anonymous threads"
msgstr "بالنسبة للمواضيع المجهولة"
-#: engine/vibes_auth/models.py:153
+#: engine/vibes_auth/models.py:173
msgid "Chat thread"
msgstr "موضوع المحادثة"
-#: engine/vibes_auth/models.py:154
+#: engine/vibes_auth/models.py:174
msgid "Chat threads"
msgstr "خيوط الدردشة"
-#: engine/vibes_auth/models.py:159
+#: engine/vibes_auth/models.py:180
msgid "provide user or email for anonymous thread."
msgstr "توفير مستخدم أو بريد إلكتروني لموضوع مجهول."
-#: engine/vibes_auth/models.py:161
+#: engine/vibes_auth/models.py:183
msgid "assignee must be a staff user."
msgstr "يجب أن يكون المُحال إليه مستخدمًا من الموظفين."
-#: engine/vibes_auth/models.py:177
+#: engine/vibes_auth/models.py:201
msgid "Chat message"
msgstr "رسالة الدردشة"
-#: engine/vibes_auth/models.py:178
+#: engine/vibes_auth/models.py:202
msgid "Chat messages"
msgstr "رسائل المحادثة"
-#: engine/vibes_auth/models.py:184
+#: engine/vibes_auth/models.py:208
msgid "group"
msgstr "المجموعة"
-#: engine/vibes_auth/models.py:191
+#: engine/vibes_auth/models.py:215
msgid "outstanding token"
msgstr "الرمز المميز"
-#: engine/vibes_auth/models.py:192
+#: engine/vibes_auth/models.py:216
msgid "outstanding tokens"
msgstr "الرموز المميزة المعلقة"
-#: engine/vibes_auth/models.py:198
+#: engine/vibes_auth/models.py:222
msgid "blacklisted token"
msgstr "الرمز المميز المدرج في القائمة السوداء"
-#: engine/vibes_auth/models.py:199
+#: engine/vibes_auth/models.py:223
msgid "blacklisted tokens"
msgstr "الرموز المميزة المدرجة في القائمة السوداء"
@@ -425,37 +426,37 @@ msgstr "الرموز المميزة المدرجة في القائمة السو
msgid "attributes must be a dictionary"
msgstr "يجب أن تكون 'السمات' قاموسًا"
-#: engine/vibes_auth/serializers.py:93
+#: engine/vibes_auth/serializers.py:97
msgid "business identificator is required when registering as a business"
msgstr "مُعرِّف الأعمال مطلوب عند التسجيل كشركة تجارية"
-#: engine/vibes_auth/serializers.py:113
+#: engine/vibes_auth/serializers.py:127
#, python-brace-format
msgid "malformed email: {email}"
msgstr "بريد إلكتروني مشوه: {email}"
-#: engine/vibes_auth/serializers.py:134 engine/vibes_auth/serializers.py:159
-#: engine/vibes_auth/serializers.py:182 engine/vibes_auth/serializers.py:192
+#: engine/vibes_auth/serializers.py:150 engine/vibes_auth/serializers.py:175
+#: engine/vibes_auth/serializers.py:198 engine/vibes_auth/serializers.py:210
msgid "no active account"
msgstr "لم يتم العثور على حساب نشط"
-#: engine/vibes_auth/serializers.py:169
+#: engine/vibes_auth/serializers.py:185
msgid "must set token_class attribute on class."
msgstr "يجب تعيين سمة token_class على الفئة!"
-#: engine/vibes_auth/serializers.py:253
+#: engine/vibes_auth/serializers.py:271
msgid "token_blacklisted"
msgstr "تم إدراج الرمز المميز في القائمة السوداء"
-#: engine/vibes_auth/serializers.py:258
+#: engine/vibes_auth/serializers.py:276
msgid "invalid token"
msgstr "رمز غير صالح"
-#: engine/vibes_auth/serializers.py:268
+#: engine/vibes_auth/serializers.py:286
msgid "no user uuid claim present in token"
msgstr "لا توجد مطالبة معرف المستخدم في الرمز المميز"
-#: engine/vibes_auth/serializers.py:270
+#: engine/vibes_auth/serializers.py:288
msgid "user does not exist"
msgstr "المستخدم غير موجود"
@@ -555,7 +556,7 @@ msgstr "{settings.PROJECT_NAME} | تفعيل الحساب"
msgid "{settings.PROJECT_NAME} | Reset Password"
msgstr "{settings.PROJECT_NAME} | إعادة تعيين كلمة المرور"
-#: engine/vibes_auth/validators.py:13
+#: engine/vibes_auth/validators.py:15
msgid ""
"invalid phone number format. the number must be entered in the format: "
"\"+999999999\". up to 15 digits allowed."
@@ -563,7 +564,7 @@ msgstr ""
"تنسيق رقم الهاتف غير صالح. يجب إدخال الرقم بالصيغة: \"+999999999\". يُسمح "
"بإدخال 15 رقماً كحد أقصى."
-#: engine/vibes_auth/views.py:30
+#: engine/vibes_auth/views.py:34
msgid ""
"Represents a view for getting a pair of access and refresh tokens and user's "
"data. This view manages the process of handling token-based authentication "
@@ -577,7 +578,7 @@ msgstr ""
"الاعتماد المقدمة. وهو مبني على طريقة عرض الرمز المميز الأساسي ويضمن تحديد "
"المعدل المناسب للحماية من هجمات القوة الغاشمة."
-#: engine/vibes_auth/views.py:52
+#: engine/vibes_auth/views.py:58
msgid ""
"Handles refreshing of tokens for authentication purposes. This class is used "
"to provide functionality for token refresh operations as part of an "
@@ -590,7 +591,7 @@ msgstr ""
"طلب رمز محدث ضمن حدود المعدل المحدد. تعتمد طريقة العرض على أداة التسلسل "
"المرتبطة بها للتحقق من صحة مدخلات تحديث الرمز المميز وإنتاج مخرجات مناسبة."
-#: engine/vibes_auth/views.py:75
+#: engine/vibes_auth/views.py:83
msgid ""
"Represents a view for verifying JSON Web Tokens (JWT) using specific "
"serialization and validation logic. "
@@ -598,7 +599,7 @@ msgstr ""
"يمثل طريقة عرض للتحقق من رموز JSON Web Tokens (JWT) باستخدام تسلسل محدد "
"ومنطق التحقق من الصحة."
-#: engine/vibes_auth/views.py:92
+#: engine/vibes_auth/views.py:103
msgid "the token is invalid"
msgstr "الرمز المميز غير صالح"
@@ -617,10 +618,10 @@ msgstr ""
"تعمل هذه الفئة على توسيع mixins و GenericViewSet لمعالجة واجهة برمجة "
"التطبيقات القوية."
-#: engine/vibes_auth/viewsets.py:99
+#: engine/vibes_auth/viewsets.py:113
msgid "password reset successfully"
msgstr "تمت إعادة تعيين كلمة المرور بنجاح!"
-#: engine/vibes_auth/viewsets.py:132
+#: engine/vibes_auth/viewsets.py:161
msgid "account already activated!"
msgstr "لقد قمت بتفعيل الحساب بالفعل..."
diff --git a/engine/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.po b/engine/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.po
index 27286fd6..0410f973 100644
--- a/engine/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.po
+++ b/engine/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -14,7 +14,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: engine/vibes_auth/admin.py:51 engine/vibes_auth/admin.py:52
-#: engine/vibes_auth/graphene/object_types.py:46
+#: engine/vibes_auth/graphene/object_types.py:54
msgid "balance"
msgstr "Bilance"
@@ -22,7 +22,7 @@ msgstr "Bilance"
msgid "order"
msgstr "Objednávka"
-#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:44
+#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:51
msgid "orders"
msgstr "Objednávky"
@@ -30,7 +30,7 @@ msgstr "Objednávky"
msgid "personal info"
msgstr "Osobní informace"
-#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:43
+#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:50
msgid "permissions"
msgstr "Oprávnění"
@@ -42,15 +42,15 @@ msgstr "Důležitá data"
msgid "additional info"
msgstr "Další informace"
-#: engine/vibes_auth/admin.py:128
+#: engine/vibes_auth/admin.py:135
msgid "You cannot jump over your head!"
msgstr "Nemůžete skákat přes hlavu!"
-#: engine/vibes_auth/admin.py:160
+#: engine/vibes_auth/admin.py:167
msgid "Close selected threads"
msgstr "Zavřít vybraná vlákna"
-#: engine/vibes_auth/admin.py:164
+#: engine/vibes_auth/admin.py:171
msgid "Open selected threads"
msgstr "Otevřít vybraná vlákna"
@@ -82,7 +82,7 @@ msgstr "Systém"
msgid "User messages entrypoint"
msgstr "Vstupní bod uživatelských zpráv"
-#: engine/vibes_auth/docs/drf/messaging.py:18
+#: engine/vibes_auth/docs/drf/messaging.py:19
msgid ""
"Anonymous or authenticated non-staff users send messages. Also supports "
"action=ping."
@@ -90,11 +90,11 @@ msgstr ""
"Zprávy mohou posílat anonymní nebo ověření uživatelé, kteří nejsou "
"zaměstnanci. Podporuje také action=ping."
-#: engine/vibes_auth/docs/drf/messaging.py:28
+#: engine/vibes_auth/docs/drf/messaging.py:30
msgid "Staff inbox control"
msgstr "Kontrola schránek zaměstnanců"
-#: engine/vibes_auth/docs/drf/messaging.py:29
+#: engine/vibes_auth/docs/drf/messaging.py:32
msgid ""
"Staff-only actions: list_open, assign, reply, close, ping. Unified event "
"payloads are emitted."
@@ -102,11 +102,11 @@ msgstr ""
"Akce pouze pro zaměstnance: list_open, assign, reply, close, ping. Vysílají "
"se jednotné užitečné zatížení událostí."
-#: engine/vibes_auth/docs/drf/messaging.py:39
+#: engine/vibes_auth/docs/drf/messaging.py:43
msgid "Per-thread staff channel"
msgstr "Kanál pro zaměstnance na vlákno"
-#: engine/vibes_auth/docs/drf/messaging.py:40
+#: engine/vibes_auth/docs/drf/messaging.py:44
msgid "Reply, close, and ping within a specific thread."
msgstr "Odpovídat, zavírat a pingovat v rámci konkrétního vlákna."
@@ -134,7 +134,7 @@ msgstr "Ověření tokenu"
msgid "Verify a token (refresh or access)."
msgstr "Ověření tokenu (obnovení nebo přístup)."
-#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90
+#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:100
msgid "the token is valid"
msgstr "Token je platný"
@@ -171,9 +171,9 @@ msgid "confirm a user's password reset"
msgstr "Potvrzení obnovení hesla uživatele"
#: engine/vibes_auth/docs/drf/viewsets.py:87
-#: engine/vibes_auth/graphene/mutations.py:317
-#: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101
-#: engine/vibes_auth/viewsets.py:84
+#: engine/vibes_auth/graphene/mutations.py:345
+#: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/viewsets.py:94
msgid "passwords do not match"
msgstr "Hesla se neshodují"
@@ -181,61 +181,62 @@ msgstr "Hesla se neshodují"
msgid "activate a user's account"
msgstr "Aktivace účtu uživatele"
-#: engine/vibes_auth/docs/drf/viewsets.py:99
+#: engine/vibes_auth/docs/drf/viewsets.py:101
msgid "activation link is invalid or account already activated"
msgstr "Aktivační odkaz je neplatný nebo je účet již aktivován"
-#: engine/vibes_auth/docs/drf/viewsets.py:107
+#: engine/vibes_auth/docs/drf/viewsets.py:111
msgid "merge client-stored recently viewed products"
msgstr "Sloučení naposledy zobrazených produktů uložených u klienta"
-#: engine/vibes_auth/graphene/mutations.py:44
+#: engine/vibes_auth/graphene/mutations.py:47
msgid "the user's b64-encoded uuid who referred the new user to us."
msgstr "Uuid uživatele s kódem b64, který nám nového uživatele doporučil."
-#: engine/vibes_auth/graphene/mutations.py:64
+#: engine/vibes_auth/graphene/mutations.py:69
msgid "password too weak"
msgstr "Heslo je příliš slabé"
-#: engine/vibes_auth/graphene/mutations.py:119
+#: engine/vibes_auth/graphene/mutations.py:129
msgid "malformed email"
msgstr "Špatně formulovaný e-mail"
-#: engine/vibes_auth/graphene/mutations.py:126
-#: engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/graphene/mutations.py:141
+#: engine/vibes_auth/serializers.py:117
#, python-brace-format
msgid "malformed phone number: {phone_number}"
msgstr "Chybně zadané telefonní číslo: {phone_number}!"
-#: engine/vibes_auth/graphene/mutations.py:148
+#: engine/vibes_auth/graphene/mutations.py:166
#, python-brace-format
msgid "Invalid attribute format: {attribute_pair}"
msgstr "Nesprávný formát atributu: {attribute_pair}!"
-#: engine/vibes_auth/graphene/mutations.py:162
+#: engine/vibes_auth/graphene/mutations.py:183
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr "{name} neexistuje: {uuid}!"
-#: engine/vibes_auth/graphene/mutations.py:270
-#: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146
+#: engine/vibes_auth/graphene/mutations.py:298
+#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180
msgid "activation link is invalid!"
msgstr "Aktivační odkaz je neplatný!"
-#: engine/vibes_auth/graphene/mutations.py:273
+#: engine/vibes_auth/graphene/mutations.py:301
msgid "account already activated..."
msgstr "Účet byl již aktivován..."
-#: engine/vibes_auth/graphene/mutations.py:280
-#: engine/vibes_auth/graphene/mutations.py:336
+#: engine/vibes_auth/graphene/mutations.py:308
+#: engine/vibes_auth/graphene/mutations.py:370
msgid "something went wrong: {e!s}"
msgstr "Něco se pokazilo: {e!s}"
-#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95
+#: engine/vibes_auth/graphene/mutations.py:352
+#: engine/vibes_auth/viewsets.py:106
msgid "token is invalid!"
msgstr "Token je neplatný!"
-#: engine/vibes_auth/graphene/object_types.py:40
+#: engine/vibes_auth/graphene/object_types.py:46
msgid ""
"the products this user has viewed most recently (max 48), in reverse‐"
"chronological order"
@@ -243,24 +244,24 @@ msgstr ""
"Produkty, které si tento uživatel prohlížel naposledy (max. 48), seřazené v "
"opačném pořadí."
-#: engine/vibes_auth/graphene/object_types.py:42
-#: engine/vibes_auth/models.py:185
+#: engine/vibes_auth/graphene/object_types.py:49
+#: engine/vibes_auth/models.py:209
msgid "groups"
msgstr "Skupiny"
-#: engine/vibes_auth/graphene/object_types.py:45
+#: engine/vibes_auth/graphene/object_types.py:52
msgid "wishlist"
msgstr "Seznam přání"
-#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:70
+#: engine/vibes_auth/graphene/object_types.py:56 engine/vibes_auth/models.py:70
msgid "avatar"
msgstr "Avatar"
-#: engine/vibes_auth/graphene/object_types.py:48
+#: engine/vibes_auth/graphene/object_types.py:58
msgid "attributes may be used to store custom data"
msgstr "Atributy lze použít k uložení vlastních dat."
-#: engine/vibes_auth/graphene/object_types.py:50
+#: engine/vibes_auth/graphene/object_types.py:62
#, python-brace-format
msgid ""
"language is one of the {settings.LANGUAGES} with default {settings."
@@ -268,23 +269,23 @@ msgid ""
msgstr ""
"Jazyk je jeden z {settings.LANGUAGES} s výchozím {settings.LANGUAGE_CODE}"
-#: engine/vibes_auth/graphene/object_types.py:52
+#: engine/vibes_auth/graphene/object_types.py:66
msgid "address set"
msgstr "Adresy"
-#: engine/vibes_auth/messaging/services.py:49
+#: engine/vibes_auth/messaging/services.py:52
msgid "Valid email is required for anonymous chats."
msgstr "Pro anonymní chaty je vyžadován platný e-mail."
-#: engine/vibes_auth/messaging/services.py:57
+#: engine/vibes_auth/messaging/services.py:65
msgid "Message must be 1..1028 characters."
msgstr "Zpráva musí mít 1..1028 znaků."
-#: engine/vibes_auth/messaging/services.py:93
+#: engine/vibes_auth/messaging/services.py:105
msgid "We're searching for the operator to answer you already, hold by!"
msgstr "Už hledáme operátora, který vám odpoví, vydržte!"
-#: engine/vibes_auth/messaging/services.py:136
+#: engine/vibes_auth/messaging/services.py:152
msgid "Assignee must be a staff user."
msgstr "Příjemce musí být zaměstnanecký uživatel."
@@ -354,71 +355,71 @@ msgstr "Zrušení výběru této možnosti místo odstranění účtů"
msgid "is_subscribed"
msgstr "Je přihlášena k odběru"
-#: engine/vibes_auth/models.py:87
+#: engine/vibes_auth/models.py:88
msgid "user's newsletter subscription status"
msgstr "Stav odběru newsletteru uživatele"
-#: engine/vibes_auth/models.py:90
+#: engine/vibes_auth/models.py:92
msgid "activation token"
msgstr "Aktivační token"
-#: engine/vibes_auth/models.py:94
+#: engine/vibes_auth/models.py:101
msgid "attributes"
msgstr "Atributy"
-#: engine/vibes_auth/models.py:133
+#: engine/vibes_auth/models.py:141
msgid "user"
msgstr "Uživatel"
-#: engine/vibes_auth/models.py:134
+#: engine/vibes_auth/models.py:142
msgid "users"
msgstr "Uživatelé"
-#: engine/vibes_auth/models.py:139
+#: engine/vibes_auth/models.py:149
msgid "For anonymous threads"
msgstr "Pro anonymní vlákna"
-#: engine/vibes_auth/models.py:153
+#: engine/vibes_auth/models.py:173
msgid "Chat thread"
msgstr "Vlákno chatu"
-#: engine/vibes_auth/models.py:154
+#: engine/vibes_auth/models.py:174
msgid "Chat threads"
msgstr "Vlákna chatu"
-#: engine/vibes_auth/models.py:159
+#: engine/vibes_auth/models.py:180
msgid "provide user or email for anonymous thread."
msgstr "zadejte uživatele nebo e-mail pro anonymní vlákno."
-#: engine/vibes_auth/models.py:161
+#: engine/vibes_auth/models.py:183
msgid "assignee must be a staff user."
msgstr "Příjemce musí být personálním uživatelem."
-#: engine/vibes_auth/models.py:177
+#: engine/vibes_auth/models.py:201
msgid "Chat message"
msgstr "Zpráva na chatu"
-#: engine/vibes_auth/models.py:178
+#: engine/vibes_auth/models.py:202
msgid "Chat messages"
msgstr "Zprávy v chatu"
-#: engine/vibes_auth/models.py:184
+#: engine/vibes_auth/models.py:208
msgid "group"
msgstr "Skupina"
-#: engine/vibes_auth/models.py:191
+#: engine/vibes_auth/models.py:215
msgid "outstanding token"
msgstr "Vynikající žeton"
-#: engine/vibes_auth/models.py:192
+#: engine/vibes_auth/models.py:216
msgid "outstanding tokens"
msgstr "Nevyplacené žetony"
-#: engine/vibes_auth/models.py:198
+#: engine/vibes_auth/models.py:222
msgid "blacklisted token"
msgstr "Token na černé listině"
-#: engine/vibes_auth/models.py:199
+#: engine/vibes_auth/models.py:223
msgid "blacklisted tokens"
msgstr "Tokeny na černé listině"
@@ -426,37 +427,37 @@ msgstr "Tokeny na černé listině"
msgid "attributes must be a dictionary"
msgstr "`attributes` musí být slovník"
-#: engine/vibes_auth/serializers.py:93
+#: engine/vibes_auth/serializers.py:97
msgid "business identificator is required when registering as a business"
msgstr "Při registraci podniku je vyžadován identifikátor podniku."
-#: engine/vibes_auth/serializers.py:113
+#: engine/vibes_auth/serializers.py:127
#, python-brace-format
msgid "malformed email: {email}"
msgstr "nesprávně formulovaný e-mail: {email}"
-#: engine/vibes_auth/serializers.py:134 engine/vibes_auth/serializers.py:159
-#: engine/vibes_auth/serializers.py:182 engine/vibes_auth/serializers.py:192
+#: engine/vibes_auth/serializers.py:150 engine/vibes_auth/serializers.py:175
+#: engine/vibes_auth/serializers.py:198 engine/vibes_auth/serializers.py:210
msgid "no active account"
msgstr "Nebyl nalezen žádný aktivní účet"
-#: engine/vibes_auth/serializers.py:169
+#: engine/vibes_auth/serializers.py:185
msgid "must set token_class attribute on class."
msgstr "Musí být nastaven atribut token_class na třídě!"
-#: engine/vibes_auth/serializers.py:253
+#: engine/vibes_auth/serializers.py:271
msgid "token_blacklisted"
msgstr "Token na černé listině"
-#: engine/vibes_auth/serializers.py:258
+#: engine/vibes_auth/serializers.py:276
msgid "invalid token"
msgstr "Neplatný token"
-#: engine/vibes_auth/serializers.py:268
+#: engine/vibes_auth/serializers.py:286
msgid "no user uuid claim present in token"
msgstr "V tokenu není deklarace uuid uživatele"
-#: engine/vibes_auth/serializers.py:270
+#: engine/vibes_auth/serializers.py:288
msgid "user does not exist"
msgstr "Uživatel neexistuje"
@@ -557,7 +558,7 @@ msgstr "{settings.PROJECT_NAME} | Aktivovat účet"
msgid "{settings.PROJECT_NAME} | Reset Password"
msgstr "{settings.PROJECT_NAME} | Obnovit heslo"
-#: engine/vibes_auth/validators.py:13
+#: engine/vibes_auth/validators.py:15
msgid ""
"invalid phone number format. the number must be entered in the format: "
"\"+999999999\". up to 15 digits allowed."
@@ -565,7 +566,7 @@ msgstr ""
"Nesprávný formát telefonního čísla. Číslo musí být zadáno ve formátu: "
"\"+999999999\". Povoleno je až 15 číslic."
-#: engine/vibes_auth/views.py:30
+#: engine/vibes_auth/views.py:34
msgid ""
"Represents a view for getting a pair of access and refresh tokens and user's "
"data. This view manages the process of handling token-based authentication "
@@ -580,7 +581,7 @@ msgstr ""
"zobrazením tokenu a zajišťuje správné omezení rychlosti pro ochranu před "
"útoky hrubou silou."
-#: engine/vibes_auth/views.py:52
+#: engine/vibes_auth/views.py:58
msgid ""
"Handles refreshing of tokens for authentication purposes. This class is used "
"to provide functionality for token refresh operations as part of an "
@@ -594,7 +595,7 @@ msgstr ""
"limitů rychlosti. Zobrazení se spoléhá na přidružený serializér, který "
"ověřuje vstupy pro obnovení tokenu a vytváří příslušné výstupy."
-#: engine/vibes_auth/views.py:75
+#: engine/vibes_auth/views.py:83
msgid ""
"Represents a view for verifying JSON Web Tokens (JWT) using specific "
"serialization and validation logic. "
@@ -602,7 +603,7 @@ msgstr ""
"Představuje zobrazení pro ověřování webových tokenů JSON (JWT) pomocí "
"specifické serializační a validační logiky."
-#: engine/vibes_auth/views.py:92
+#: engine/vibes_auth/views.py:103
msgid "the token is invalid"
msgstr "Token je neplatný"
@@ -621,10 +622,10 @@ msgstr ""
"položek. Tato třída rozšiřuje mixiny a GenericViewSet pro robustní "
"zpracování API."
-#: engine/vibes_auth/viewsets.py:99
+#: engine/vibes_auth/viewsets.py:113
msgid "password reset successfully"
msgstr "Heslo bylo úspěšně resetováno!"
-#: engine/vibes_auth/viewsets.py:132
+#: engine/vibes_auth/viewsets.py:161
msgid "account already activated!"
msgstr "Účet jste již aktivovali..."
diff --git a/engine/vibes_auth/locale/da_DK/LC_MESSAGES/django.po b/engine/vibes_auth/locale/da_DK/LC_MESSAGES/django.po
index eafa1628..c57f8f61 100644
--- a/engine/vibes_auth/locale/da_DK/LC_MESSAGES/django.po
+++ b/engine/vibes_auth/locale/da_DK/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -14,7 +14,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: engine/vibes_auth/admin.py:51 engine/vibes_auth/admin.py:52
-#: engine/vibes_auth/graphene/object_types.py:46
+#: engine/vibes_auth/graphene/object_types.py:54
msgid "balance"
msgstr "Balance"
@@ -22,7 +22,7 @@ msgstr "Balance"
msgid "order"
msgstr "Bestil"
-#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:44
+#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:51
msgid "orders"
msgstr "Bestillinger"
@@ -30,7 +30,7 @@ msgstr "Bestillinger"
msgid "personal info"
msgstr "Personlig information"
-#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:43
+#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:50
msgid "permissions"
msgstr "Tilladelser"
@@ -42,15 +42,15 @@ msgstr "Vigtige datoer"
msgid "additional info"
msgstr "Yderligere information"
-#: engine/vibes_auth/admin.py:128
+#: engine/vibes_auth/admin.py:135
msgid "You cannot jump over your head!"
msgstr "Du kan ikke hoppe over hovedet!"
-#: engine/vibes_auth/admin.py:160
+#: engine/vibes_auth/admin.py:167
msgid "Close selected threads"
msgstr "Luk udvalgte tråde"
-#: engine/vibes_auth/admin.py:164
+#: engine/vibes_auth/admin.py:171
msgid "Open selected threads"
msgstr "Åbn udvalgte tråde"
@@ -82,7 +82,7 @@ msgstr "System"
msgid "User messages entrypoint"
msgstr "Indgangspunkt for brugermeddelelser"
-#: engine/vibes_auth/docs/drf/messaging.py:18
+#: engine/vibes_auth/docs/drf/messaging.py:19
msgid ""
"Anonymous or authenticated non-staff users send messages. Also supports "
"action=ping."
@@ -90,11 +90,11 @@ msgstr ""
"Anonyme eller godkendte ikke-ansatte brugere sender beskeder. Understøtter "
"også action=ping."
-#: engine/vibes_auth/docs/drf/messaging.py:28
+#: engine/vibes_auth/docs/drf/messaging.py:30
msgid "Staff inbox control"
msgstr "Kontrol af personalets indbakke"
-#: engine/vibes_auth/docs/drf/messaging.py:29
+#: engine/vibes_auth/docs/drf/messaging.py:32
msgid ""
"Staff-only actions: list_open, assign, reply, close, ping. Unified event "
"payloads are emitted."
@@ -102,11 +102,11 @@ msgstr ""
"Kun personalehandlinger: list_open, assign, reply, close, ping. Unified "
"event payloads udsendes."
-#: engine/vibes_auth/docs/drf/messaging.py:39
+#: engine/vibes_auth/docs/drf/messaging.py:43
msgid "Per-thread staff channel"
msgstr "Personalekanal pr. tråd"
-#: engine/vibes_auth/docs/drf/messaging.py:40
+#: engine/vibes_auth/docs/drf/messaging.py:44
msgid "Reply, close, and ping within a specific thread."
msgstr "Svar, luk og ping i en bestemt tråd."
@@ -134,7 +134,7 @@ msgstr "Bekræft et token"
msgid "Verify a token (refresh or access)."
msgstr "Bekræft et token (opdatering eller adgang)."
-#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90
+#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:100
msgid "the token is valid"
msgstr "Tokenet er gyldigt"
@@ -173,9 +173,9 @@ msgid "confirm a user's password reset"
msgstr "Bekræft nulstilling af en brugers adgangskode"
#: engine/vibes_auth/docs/drf/viewsets.py:87
-#: engine/vibes_auth/graphene/mutations.py:317
-#: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101
-#: engine/vibes_auth/viewsets.py:84
+#: engine/vibes_auth/graphene/mutations.py:345
+#: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/viewsets.py:94
msgid "passwords do not match"
msgstr "Adgangskoderne stemmer ikke overens"
@@ -183,61 +183,62 @@ msgstr "Adgangskoderne stemmer ikke overens"
msgid "activate a user's account"
msgstr "Aktivér en brugers konto"
-#: engine/vibes_auth/docs/drf/viewsets.py:99
+#: engine/vibes_auth/docs/drf/viewsets.py:101
msgid "activation link is invalid or account already activated"
msgstr "Aktiveringslinket er ugyldigt, eller kontoen er allerede aktiveret"
-#: engine/vibes_auth/docs/drf/viewsets.py:107
+#: engine/vibes_auth/docs/drf/viewsets.py:111
msgid "merge client-stored recently viewed products"
msgstr "Flet nyligt viste produkter, der er gemt af klienten"
-#: engine/vibes_auth/graphene/mutations.py:44
+#: engine/vibes_auth/graphene/mutations.py:47
msgid "the user's b64-encoded uuid who referred the new user to us."
msgstr "Brugerens b64-kodede uuid, som henviste den nye bruger til os."
-#: engine/vibes_auth/graphene/mutations.py:64
+#: engine/vibes_auth/graphene/mutations.py:69
msgid "password too weak"
msgstr "Adgangskoden er for svag"
-#: engine/vibes_auth/graphene/mutations.py:119
+#: engine/vibes_auth/graphene/mutations.py:129
msgid "malformed email"
msgstr "Misdannet e-mail"
-#: engine/vibes_auth/graphene/mutations.py:126
-#: engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/graphene/mutations.py:141
+#: engine/vibes_auth/serializers.py:117
#, python-brace-format
msgid "malformed phone number: {phone_number}"
msgstr "Misdannet telefonnummer: {phone_number}!"
-#: engine/vibes_auth/graphene/mutations.py:148
+#: engine/vibes_auth/graphene/mutations.py:166
#, python-brace-format
msgid "Invalid attribute format: {attribute_pair}"
msgstr "Ugyldigt attributformat: {attribute_pair}!"
-#: engine/vibes_auth/graphene/mutations.py:162
+#: engine/vibes_auth/graphene/mutations.py:183
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr "{name} findes ikke: {uuid}!"
-#: engine/vibes_auth/graphene/mutations.py:270
-#: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146
+#: engine/vibes_auth/graphene/mutations.py:298
+#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180
msgid "activation link is invalid!"
msgstr "Aktiveringslinket er ugyldigt!"
-#: engine/vibes_auth/graphene/mutations.py:273
+#: engine/vibes_auth/graphene/mutations.py:301
msgid "account already activated..."
msgstr "Kontoen er allerede aktiveret..."
-#: engine/vibes_auth/graphene/mutations.py:280
-#: engine/vibes_auth/graphene/mutations.py:336
+#: engine/vibes_auth/graphene/mutations.py:308
+#: engine/vibes_auth/graphene/mutations.py:370
msgid "something went wrong: {e!s}"
msgstr "Noget gik galt: {e!s}"
-#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95
+#: engine/vibes_auth/graphene/mutations.py:352
+#: engine/vibes_auth/viewsets.py:106
msgid "token is invalid!"
msgstr "Token er ugyldig!"
-#: engine/vibes_auth/graphene/object_types.py:40
+#: engine/vibes_auth/graphene/object_types.py:46
msgid ""
"the products this user has viewed most recently (max 48), in reverse‐"
"chronological order"
@@ -245,24 +246,24 @@ msgstr ""
"De produkter, som denne bruger har set for nylig (maks. 48), i omvendt "
"kronologisk rækkefølge."
-#: engine/vibes_auth/graphene/object_types.py:42
-#: engine/vibes_auth/models.py:185
+#: engine/vibes_auth/graphene/object_types.py:49
+#: engine/vibes_auth/models.py:209
msgid "groups"
msgstr "Grupper"
-#: engine/vibes_auth/graphene/object_types.py:45
+#: engine/vibes_auth/graphene/object_types.py:52
msgid "wishlist"
msgstr "Ønskeliste"
-#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:70
+#: engine/vibes_auth/graphene/object_types.py:56 engine/vibes_auth/models.py:70
msgid "avatar"
msgstr "Avatar"
-#: engine/vibes_auth/graphene/object_types.py:48
+#: engine/vibes_auth/graphene/object_types.py:58
msgid "attributes may be used to store custom data"
msgstr "Attributter kan bruges til at gemme brugerdefinerede data"
-#: engine/vibes_auth/graphene/object_types.py:50
+#: engine/vibes_auth/graphene/object_types.py:62
#, python-brace-format
msgid ""
"language is one of the {settings.LANGUAGES} with default {settings."
@@ -270,23 +271,23 @@ msgid ""
msgstr ""
"Sprog er en af {settings.LANGUAGES} med standard {settings.LANGUAGE_CODE}."
-#: engine/vibes_auth/graphene/object_types.py:52
+#: engine/vibes_auth/graphene/object_types.py:66
msgid "address set"
msgstr "Adresser"
-#: engine/vibes_auth/messaging/services.py:49
+#: engine/vibes_auth/messaging/services.py:52
msgid "Valid email is required for anonymous chats."
msgstr "Gyldig e-mail er påkrævet for anonyme chats."
-#: engine/vibes_auth/messaging/services.py:57
+#: engine/vibes_auth/messaging/services.py:65
msgid "Message must be 1..1028 characters."
msgstr "Beskeden skal bestå af 1..1028 tegn."
-#: engine/vibes_auth/messaging/services.py:93
+#: engine/vibes_auth/messaging/services.py:105
msgid "We're searching for the operator to answer you already, hold by!"
msgstr "Vi leder allerede efter en operatør, der kan svare dig, så vent!"
-#: engine/vibes_auth/messaging/services.py:136
+#: engine/vibes_auth/messaging/services.py:152
msgid "Assignee must be a staff user."
msgstr "Modtageren skal være en personalebruger."
@@ -356,71 +357,71 @@ msgstr "Fravælg dette i stedet for at slette konti"
msgid "is_subscribed"
msgstr "Er tilmeldt"
-#: engine/vibes_auth/models.py:87
+#: engine/vibes_auth/models.py:88
msgid "user's newsletter subscription status"
msgstr "Status for brugerens abonnement på nyhedsbrev"
-#: engine/vibes_auth/models.py:90
+#: engine/vibes_auth/models.py:92
msgid "activation token"
msgstr "Aktiveringstoken"
-#: engine/vibes_auth/models.py:94
+#: engine/vibes_auth/models.py:101
msgid "attributes"
msgstr "Egenskaber"
-#: engine/vibes_auth/models.py:133
+#: engine/vibes_auth/models.py:141
msgid "user"
msgstr "Bruger"
-#: engine/vibes_auth/models.py:134
+#: engine/vibes_auth/models.py:142
msgid "users"
msgstr "Brugere"
-#: engine/vibes_auth/models.py:139
+#: engine/vibes_auth/models.py:149
msgid "For anonymous threads"
msgstr "Til anonyme tråde"
-#: engine/vibes_auth/models.py:153
+#: engine/vibes_auth/models.py:173
msgid "Chat thread"
msgstr "Chat-tråd"
-#: engine/vibes_auth/models.py:154
+#: engine/vibes_auth/models.py:174
msgid "Chat threads"
msgstr "Chat-tråde"
-#: engine/vibes_auth/models.py:159
+#: engine/vibes_auth/models.py:180
msgid "provide user or email for anonymous thread."
msgstr "Angiv bruger eller e-mail for anonym tråd."
-#: engine/vibes_auth/models.py:161
+#: engine/vibes_auth/models.py:183
msgid "assignee must be a staff user."
msgstr "modtageren skal være en personalebruger."
-#: engine/vibes_auth/models.py:177
+#: engine/vibes_auth/models.py:201
msgid "Chat message"
msgstr "Chat-besked"
-#: engine/vibes_auth/models.py:178
+#: engine/vibes_auth/models.py:202
msgid "Chat messages"
msgstr "Chat-beskeder"
-#: engine/vibes_auth/models.py:184
+#: engine/vibes_auth/models.py:208
msgid "group"
msgstr "Gruppe"
-#: engine/vibes_auth/models.py:191
+#: engine/vibes_auth/models.py:215
msgid "outstanding token"
msgstr "Enestående token"
-#: engine/vibes_auth/models.py:192
+#: engine/vibes_auth/models.py:216
msgid "outstanding tokens"
msgstr "Udestående tokens"
-#: engine/vibes_auth/models.py:198
+#: engine/vibes_auth/models.py:222
msgid "blacklisted token"
msgstr "Sortlistet token"
-#: engine/vibes_auth/models.py:199
+#: engine/vibes_auth/models.py:223
msgid "blacklisted tokens"
msgstr "Sortlistede tokens"
@@ -428,38 +429,38 @@ msgstr "Sortlistede tokens"
msgid "attributes must be a dictionary"
msgstr "`attributes` skal være en ordbog"
-#: engine/vibes_auth/serializers.py:93
+#: engine/vibes_auth/serializers.py:97
msgid "business identificator is required when registering as a business"
msgstr ""
"Virksomhedsidentifikator er påkrævet, når man registrerer sig som virksomhed"
-#: engine/vibes_auth/serializers.py:113
+#: engine/vibes_auth/serializers.py:127
#, python-brace-format
msgid "malformed email: {email}"
msgstr "Misdannet e-mail: {email}."
-#: engine/vibes_auth/serializers.py:134 engine/vibes_auth/serializers.py:159
-#: engine/vibes_auth/serializers.py:182 engine/vibes_auth/serializers.py:192
+#: engine/vibes_auth/serializers.py:150 engine/vibes_auth/serializers.py:175
+#: engine/vibes_auth/serializers.py:198 engine/vibes_auth/serializers.py:210
msgid "no active account"
msgstr "Ingen aktiv konto fundet"
-#: engine/vibes_auth/serializers.py:169
+#: engine/vibes_auth/serializers.py:185
msgid "must set token_class attribute on class."
msgstr "Skal sætte token_class-attributten på klassen!"
-#: engine/vibes_auth/serializers.py:253
+#: engine/vibes_auth/serializers.py:271
msgid "token_blacklisted"
msgstr "Token blacklistet"
-#: engine/vibes_auth/serializers.py:258
+#: engine/vibes_auth/serializers.py:276
msgid "invalid token"
msgstr "Ugyldigt token"
-#: engine/vibes_auth/serializers.py:268
+#: engine/vibes_auth/serializers.py:286
msgid "no user uuid claim present in token"
msgstr "Ingen bruger-uuid-krav til stede i token"
-#: engine/vibes_auth/serializers.py:270
+#: engine/vibes_auth/serializers.py:288
msgid "user does not exist"
msgstr "Brugeren findes ikke"
@@ -559,7 +560,7 @@ msgstr "{settings.PROJECT_NAME} | Aktiver konto"
msgid "{settings.PROJECT_NAME} | Reset Password"
msgstr "{settings.PROJECT_NAME} | Nulstil adgangskode"
-#: engine/vibes_auth/validators.py:13
+#: engine/vibes_auth/validators.py:15
msgid ""
"invalid phone number format. the number must be entered in the format: "
"\"+999999999\". up to 15 digits allowed."
@@ -567,7 +568,7 @@ msgstr ""
"Ugyldigt telefonnummerformat. Nummeret skal indtastes i formatet: "
"\"+999999999\". Op til 15 cifre er tilladt."
-#: engine/vibes_auth/views.py:30
+#: engine/vibes_auth/views.py:34
msgid ""
"Represents a view for getting a pair of access and refresh tokens and user's "
"data. This view manages the process of handling token-based authentication "
@@ -582,7 +583,7 @@ msgstr ""
"oven på en basis-tokenvisning og sikrer korrekt hastighedsbegrænsning for at "
"beskytte mod brute force-angreb."
-#: engine/vibes_auth/views.py:52
+#: engine/vibes_auth/views.py:58
msgid ""
"Handles refreshing of tokens for authentication purposes. This class is used "
"to provide functionality for token refresh operations as part of an "
@@ -597,7 +598,7 @@ msgstr ""
"tilknyttede serializer til at validere tokenopdateringsinput og producere "
"passende output."
-#: engine/vibes_auth/views.py:75
+#: engine/vibes_auth/views.py:83
msgid ""
"Represents a view for verifying JSON Web Tokens (JWT) using specific "
"serialization and validation logic. "
@@ -605,7 +606,7 @@ msgstr ""
"Repræsenterer en visning til verificering af JSON Web Tokens (JWT) ved hjælp "
"af specifik serialiserings- og valideringslogik."
-#: engine/vibes_auth/views.py:92
+#: engine/vibes_auth/views.py:103
msgid "the token is invalid"
msgstr "Tokenet er ugyldigt"
@@ -624,10 +625,10 @@ msgstr ""
"sammenlægning af nyligt viste elementer. Denne klasse udvider mixins og "
"GenericViewSet til robust API-håndtering."
-#: engine/vibes_auth/viewsets.py:99
+#: engine/vibes_auth/viewsets.py:113
msgid "password reset successfully"
msgstr "Adgangskoden er blevet nulstillet med succes!"
-#: engine/vibes_auth/viewsets.py:132
+#: engine/vibes_auth/viewsets.py:161
msgid "account already activated!"
msgstr "Du har allerede aktiveret kontoen..."
diff --git a/engine/vibes_auth/locale/de_DE/LC_MESSAGES/django.po b/engine/vibes_auth/locale/de_DE/LC_MESSAGES/django.po
index 9cb64611..f2b56f07 100644
--- a/engine/vibes_auth/locale/de_DE/LC_MESSAGES/django.po
+++ b/engine/vibes_auth/locale/de_DE/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -14,7 +14,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: engine/vibes_auth/admin.py:51 engine/vibes_auth/admin.py:52
-#: engine/vibes_auth/graphene/object_types.py:46
+#: engine/vibes_auth/graphene/object_types.py:54
msgid "balance"
msgstr "Waage"
@@ -22,7 +22,7 @@ msgstr "Waage"
msgid "order"
msgstr "Bestellung"
-#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:44
+#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:51
msgid "orders"
msgstr "Bestellungen"
@@ -30,7 +30,7 @@ msgstr "Bestellungen"
msgid "personal info"
msgstr "Persönliche Informationen"
-#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:43
+#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:50
msgid "permissions"
msgstr "Erlaubnisse"
@@ -42,15 +42,15 @@ msgstr "Wichtige Termine"
msgid "additional info"
msgstr "Zusätzliche Informationen"
-#: engine/vibes_auth/admin.py:128
+#: engine/vibes_auth/admin.py:135
msgid "You cannot jump over your head!"
msgstr "Sie können nicht über Ihren Kopf springen!"
-#: engine/vibes_auth/admin.py:160
+#: engine/vibes_auth/admin.py:167
msgid "Close selected threads"
msgstr "Ausgewählte Threads schließen"
-#: engine/vibes_auth/admin.py:164
+#: engine/vibes_auth/admin.py:171
msgid "Open selected threads"
msgstr "Ausgewählte Themen öffnen"
@@ -82,7 +82,7 @@ msgstr "System"
msgid "User messages entrypoint"
msgstr "User messages entrypoint"
-#: engine/vibes_auth/docs/drf/messaging.py:18
+#: engine/vibes_auth/docs/drf/messaging.py:19
msgid ""
"Anonymous or authenticated non-staff users send messages. Also supports "
"action=ping."
@@ -90,11 +90,11 @@ msgstr ""
"Anonyme oder authentifizierte Benutzer, die nicht zum Personal gehören, "
"können Nachrichten senden. Unterstützt auch action=ping."
-#: engine/vibes_auth/docs/drf/messaging.py:28
+#: engine/vibes_auth/docs/drf/messaging.py:30
msgid "Staff inbox control"
msgstr "Kontrolle des Posteingangs der Mitarbeiter"
-#: engine/vibes_auth/docs/drf/messaging.py:29
+#: engine/vibes_auth/docs/drf/messaging.py:32
msgid ""
"Staff-only actions: list_open, assign, reply, close, ping. Unified event "
"payloads are emitted."
@@ -102,11 +102,11 @@ msgstr ""
"Nur für Mitarbeiter bestimmte Aktionen: list_open, assign, reply, close, "
"ping. Es werden einheitliche Ereignis-Payloads ausgesendet."
-#: engine/vibes_auth/docs/drf/messaging.py:39
+#: engine/vibes_auth/docs/drf/messaging.py:43
msgid "Per-thread staff channel"
msgstr "Personalkanal pro Thread"
-#: engine/vibes_auth/docs/drf/messaging.py:40
+#: engine/vibes_auth/docs/drf/messaging.py:44
msgid "Reply, close, and ping within a specific thread."
msgstr "Antworten, Schließen und Pingen innerhalb eines bestimmten Threads."
@@ -135,7 +135,7 @@ msgstr "Überprüfen eines Tokens"
msgid "Verify a token (refresh or access)."
msgstr "Überprüfen eines Tokens (Aktualisierung oder Zugriff)."
-#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90
+#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:100
msgid "the token is valid"
msgstr "Das Token ist gültig"
@@ -174,9 +174,9 @@ msgid "confirm a user's password reset"
msgstr "Bestätigen Sie das Zurücksetzen des Passworts eines Benutzers"
#: engine/vibes_auth/docs/drf/viewsets.py:87
-#: engine/vibes_auth/graphene/mutations.py:317
-#: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101
-#: engine/vibes_auth/viewsets.py:84
+#: engine/vibes_auth/graphene/mutations.py:345
+#: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/viewsets.py:94
msgid "passwords do not match"
msgstr "Passwörter stimmen nicht überein"
@@ -184,64 +184,65 @@ msgstr "Passwörter stimmen nicht überein"
msgid "activate a user's account"
msgstr "Aktivieren eines Benutzerkontos"
-#: engine/vibes_auth/docs/drf/viewsets.py:99
+#: engine/vibes_auth/docs/drf/viewsets.py:101
msgid "activation link is invalid or account already activated"
msgstr "Aktivierungslink ist ungültig oder Konto bereits aktiviert"
-#: engine/vibes_auth/docs/drf/viewsets.py:107
+#: engine/vibes_auth/docs/drf/viewsets.py:111
msgid "merge client-stored recently viewed products"
msgstr ""
"Zusammenführen der vom Kunden gespeicherten, zuletzt angesehenen Produkte"
-#: engine/vibes_auth/graphene/mutations.py:44
+#: engine/vibes_auth/graphene/mutations.py:47
msgid "the user's b64-encoded uuid who referred the new user to us."
msgstr ""
"Die b64-kodierte uuid des Benutzers, der den neuen Benutzer an uns verwiesen "
"hat."
-#: engine/vibes_auth/graphene/mutations.py:64
+#: engine/vibes_auth/graphene/mutations.py:69
msgid "password too weak"
msgstr "Das Passwort ist zu schwach"
-#: engine/vibes_auth/graphene/mutations.py:119
+#: engine/vibes_auth/graphene/mutations.py:129
msgid "malformed email"
msgstr "Fehlerhafte E-Mail"
-#: engine/vibes_auth/graphene/mutations.py:126
-#: engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/graphene/mutations.py:141
+#: engine/vibes_auth/serializers.py:117
#, python-brace-format
msgid "malformed phone number: {phone_number}"
msgstr "Missgebildete Telefonnummer: {phone_number}!"
-#: engine/vibes_auth/graphene/mutations.py:148
+#: engine/vibes_auth/graphene/mutations.py:166
#, python-brace-format
msgid "Invalid attribute format: {attribute_pair}"
msgstr "Ungültiges Attributformat: {attribute_pair}!"
-#: engine/vibes_auth/graphene/mutations.py:162
+#: engine/vibes_auth/graphene/mutations.py:183
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr "{name} existiert nicht: {uuid}!"
-#: engine/vibes_auth/graphene/mutations.py:270
-#: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146
+#: engine/vibes_auth/graphene/mutations.py:298
+#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180
msgid "activation link is invalid!"
msgstr "Der Aktivierungslink ist ungültig!"
-#: engine/vibes_auth/graphene/mutations.py:273
+#: engine/vibes_auth/graphene/mutations.py:301
msgid "account already activated..."
msgstr "Das Konto wurde bereits aktiviert..."
-#: engine/vibes_auth/graphene/mutations.py:280
-#: engine/vibes_auth/graphene/mutations.py:336
+#: engine/vibes_auth/graphene/mutations.py:308
+#: engine/vibes_auth/graphene/mutations.py:370
msgid "something went wrong: {e!s}"
msgstr "Etwas ist schief gelaufen: {e!s}"
-#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95
+#: engine/vibes_auth/graphene/mutations.py:352
+#: engine/vibes_auth/viewsets.py:106
msgid "token is invalid!"
msgstr "Token ist ungültig!"
-#: engine/vibes_auth/graphene/object_types.py:40
+#: engine/vibes_auth/graphene/object_types.py:46
msgid ""
"the products this user has viewed most recently (max 48), in reverse‐"
"chronological order"
@@ -249,25 +250,25 @@ msgstr ""
"Die Produkte, die dieser Benutzer zuletzt angesehen hat (maximal 48), in "
"umgekehrter chronologischer Reihenfolge."
-#: engine/vibes_auth/graphene/object_types.py:42
-#: engine/vibes_auth/models.py:185
+#: engine/vibes_auth/graphene/object_types.py:49
+#: engine/vibes_auth/models.py:209
msgid "groups"
msgstr "Gruppen"
-#: engine/vibes_auth/graphene/object_types.py:45
+#: engine/vibes_auth/graphene/object_types.py:52
msgid "wishlist"
msgstr "Wunschzettel"
-#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:70
+#: engine/vibes_auth/graphene/object_types.py:56 engine/vibes_auth/models.py:70
msgid "avatar"
msgstr "Avatar"
-#: engine/vibes_auth/graphene/object_types.py:48
+#: engine/vibes_auth/graphene/object_types.py:58
msgid "attributes may be used to store custom data"
msgstr ""
"Attribute können verwendet werden, um benutzerdefinierte Daten zu speichern"
-#: engine/vibes_auth/graphene/object_types.py:50
+#: engine/vibes_auth/graphene/object_types.py:62
#, python-brace-format
msgid ""
"language is one of the {settings.LANGUAGES} with default {settings."
@@ -276,25 +277,25 @@ msgstr ""
"Sprache ist eine der {settings.LANGUAGES} mit Voreinstellung {settings."
"LANGUAGE_CODE}"
-#: engine/vibes_auth/graphene/object_types.py:52
+#: engine/vibes_auth/graphene/object_types.py:66
msgid "address set"
msgstr "Adressen"
-#: engine/vibes_auth/messaging/services.py:49
+#: engine/vibes_auth/messaging/services.py:52
msgid "Valid email is required for anonymous chats."
msgstr "Für anonyme Chats ist eine gültige E-Mail erforderlich."
-#: engine/vibes_auth/messaging/services.py:57
+#: engine/vibes_auth/messaging/services.py:65
msgid "Message must be 1..1028 characters."
msgstr "Die Nachricht muss 1..1028 Zeichen lang sein."
-#: engine/vibes_auth/messaging/services.py:93
+#: engine/vibes_auth/messaging/services.py:105
msgid "We're searching for the operator to answer you already, hold by!"
msgstr ""
"Wir suchen bereits nach dem Operator, um Ihnen zu antworten, bleiben Sie "
"dran!"
-#: engine/vibes_auth/messaging/services.py:136
+#: engine/vibes_auth/messaging/services.py:152
msgid "Assignee must be a staff user."
msgstr "Der Abtretungsempfänger muss ein Mitarbeiter sein."
@@ -366,72 +367,72 @@ msgstr "Deaktivieren Sie diese Option, anstatt Konten zu löschen"
msgid "is_subscribed"
msgstr "Ist abonniert"
-#: engine/vibes_auth/models.py:87
+#: engine/vibes_auth/models.py:88
msgid "user's newsletter subscription status"
msgstr "Status des Newsletter-Abonnements des Benutzers"
-#: engine/vibes_auth/models.py:90
+#: engine/vibes_auth/models.py:92
msgid "activation token"
msgstr "Aktivierungs-Token"
-#: engine/vibes_auth/models.py:94
+#: engine/vibes_auth/models.py:101
msgid "attributes"
msgstr "Attribute"
-#: engine/vibes_auth/models.py:133
+#: engine/vibes_auth/models.py:141
msgid "user"
msgstr "Benutzer"
-#: engine/vibes_auth/models.py:134
+#: engine/vibes_auth/models.py:142
msgid "users"
msgstr "Benutzer"
-#: engine/vibes_auth/models.py:139
+#: engine/vibes_auth/models.py:149
msgid "For anonymous threads"
msgstr "Für anonyme Themen"
-#: engine/vibes_auth/models.py:153
+#: engine/vibes_auth/models.py:173
msgid "Chat thread"
msgstr "Chat-Thread"
-#: engine/vibes_auth/models.py:154
+#: engine/vibes_auth/models.py:174
msgid "Chat threads"
msgstr "Chat-Themen"
-#: engine/vibes_auth/models.py:159
+#: engine/vibes_auth/models.py:180
msgid "provide user or email for anonymous thread."
msgstr ""
"Geben Sie einen Benutzer oder eine E-Mail für einen anonymen Thread an."
-#: engine/vibes_auth/models.py:161
+#: engine/vibes_auth/models.py:183
msgid "assignee must be a staff user."
msgstr "Der Beauftragte muss ein Mitarbeiter sein."
-#: engine/vibes_auth/models.py:177
+#: engine/vibes_auth/models.py:201
msgid "Chat message"
msgstr "Chat-Nachricht"
-#: engine/vibes_auth/models.py:178
+#: engine/vibes_auth/models.py:202
msgid "Chat messages"
msgstr "Chat-Nachrichten"
-#: engine/vibes_auth/models.py:184
+#: engine/vibes_auth/models.py:208
msgid "group"
msgstr "Gruppe"
-#: engine/vibes_auth/models.py:191
+#: engine/vibes_auth/models.py:215
msgid "outstanding token"
msgstr "Hervorragende Wertmarke"
-#: engine/vibes_auth/models.py:192
+#: engine/vibes_auth/models.py:216
msgid "outstanding tokens"
msgstr "Ausstehende Wertmarken"
-#: engine/vibes_auth/models.py:198
+#: engine/vibes_auth/models.py:222
msgid "blacklisted token"
msgstr "Token auf der schwarzen Liste"
-#: engine/vibes_auth/models.py:199
+#: engine/vibes_auth/models.py:223
msgid "blacklisted tokens"
msgstr "Token auf der schwarzen Liste"
@@ -439,39 +440,39 @@ msgstr "Token auf der schwarzen Liste"
msgid "attributes must be a dictionary"
msgstr "Attribute\" muss ein Wörterbuch sein"
-#: engine/vibes_auth/serializers.py:93
+#: engine/vibes_auth/serializers.py:97
msgid "business identificator is required when registering as a business"
msgstr ""
"Die Unternehmenskennung ist erforderlich, wenn Sie sich als Unternehmen "
"registrieren lassen."
-#: engine/vibes_auth/serializers.py:113
+#: engine/vibes_auth/serializers.py:127
#, python-brace-format
msgid "malformed email: {email}"
msgstr "missgebildete E-Mail: {email}"
-#: engine/vibes_auth/serializers.py:134 engine/vibes_auth/serializers.py:159
-#: engine/vibes_auth/serializers.py:182 engine/vibes_auth/serializers.py:192
+#: engine/vibes_auth/serializers.py:150 engine/vibes_auth/serializers.py:175
+#: engine/vibes_auth/serializers.py:198 engine/vibes_auth/serializers.py:210
msgid "no active account"
msgstr "Kein aktives Konto gefunden"
-#: engine/vibes_auth/serializers.py:169
+#: engine/vibes_auth/serializers.py:185
msgid "must set token_class attribute on class."
msgstr "Das Attribut token_class muss auf class gesetzt werden!"
-#: engine/vibes_auth/serializers.py:253
+#: engine/vibes_auth/serializers.py:271
msgid "token_blacklisted"
msgstr "Token auf der schwarzen Liste"
-#: engine/vibes_auth/serializers.py:258
+#: engine/vibes_auth/serializers.py:276
msgid "invalid token"
msgstr "Ungültiges Token"
-#: engine/vibes_auth/serializers.py:268
+#: engine/vibes_auth/serializers.py:286
msgid "no user uuid claim present in token"
msgstr "Kein Benutzer uuid-Anspruch im Token vorhanden"
-#: engine/vibes_auth/serializers.py:270
+#: engine/vibes_auth/serializers.py:288
msgid "user does not exist"
msgstr "Benutzer existiert nicht"
@@ -572,7 +573,7 @@ msgstr "{settings.PROJECT_NAME} | Konto freischalten"
msgid "{settings.PROJECT_NAME} | Reset Password"
msgstr "{settings.PROJECT_NAME} | Passwort zurücksetzen"
-#: engine/vibes_auth/validators.py:13
+#: engine/vibes_auth/validators.py:15
msgid ""
"invalid phone number format. the number must be entered in the format: "
"\"+999999999\". up to 15 digits allowed."
@@ -580,7 +581,7 @@ msgstr ""
"Ungültiges Telefonnummernformat. Die Nummer muss in dem Format eingegeben "
"werden: \"+999999999\". Bis zu 15 Ziffern sind erlaubt."
-#: engine/vibes_auth/views.py:30
+#: engine/vibes_auth/views.py:34
msgid ""
"Represents a view for getting a pair of access and refresh tokens and user's "
"data. This view manages the process of handling token-based authentication "
@@ -596,7 +597,7 @@ msgstr ""
"Basis-Token-Ansicht auf und gewährleistet eine angemessene Ratenbegrenzung "
"zum Schutz vor Brute-Force-Angriffen."
-#: engine/vibes_auth/views.py:52
+#: engine/vibes_auth/views.py:58
msgid ""
"Handles refreshing of tokens for authentication purposes. This class is used "
"to provide functionality for token refresh operations as part of an "
@@ -612,7 +613,7 @@ msgstr ""
"um die Eingaben für die Token-Aktualisierung zu validieren und entsprechende "
"Ausgaben zu erzeugen."
-#: engine/vibes_auth/views.py:75
+#: engine/vibes_auth/views.py:83
msgid ""
"Represents a view for verifying JSON Web Tokens (JWT) using specific "
"serialization and validation logic. "
@@ -620,7 +621,7 @@ msgstr ""
"Stellt eine Ansicht zur Überprüfung von JSON-Web-Token (JWT) unter "
"Verwendung einer spezifischen Serialisierungs- und Validierungslogik dar."
-#: engine/vibes_auth/views.py:92
+#: engine/vibes_auth/views.py:103
msgid "the token is invalid"
msgstr "Das Token ist ungültig"
@@ -639,10 +640,10 @@ msgstr ""
"kürzlich angesehener Elemente verwalten. Diese Klasse erweitert die Mixins "
"und GenericViewSet für eine robuste API-Behandlung."
-#: engine/vibes_auth/viewsets.py:99
+#: engine/vibes_auth/viewsets.py:113
msgid "password reset successfully"
msgstr "Das Passwort wurde erfolgreich zurückgesetzt!"
-#: engine/vibes_auth/viewsets.py:132
+#: engine/vibes_auth/viewsets.py:161
msgid "account already activated!"
msgstr "Sie haben das Konto bereits aktiviert..."
diff --git a/engine/vibes_auth/locale/en_GB/LC_MESSAGES/django.po b/engine/vibes_auth/locale/en_GB/LC_MESSAGES/django.po
index 642bf8bc..57618682 100644
--- a/engine/vibes_auth/locale/en_GB/LC_MESSAGES/django.po
+++ b/engine/vibes_auth/locale/en_GB/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -18,7 +18,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: engine/vibes_auth/admin.py:51 engine/vibes_auth/admin.py:52
-#: engine/vibes_auth/graphene/object_types.py:46
+#: engine/vibes_auth/graphene/object_types.py:54
msgid "balance"
msgstr "Balance"
@@ -26,7 +26,7 @@ msgstr "Balance"
msgid "order"
msgstr "Order"
-#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:44
+#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:51
msgid "orders"
msgstr "Orders"
@@ -34,7 +34,7 @@ msgstr "Orders"
msgid "personal info"
msgstr "Personal Info"
-#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:43
+#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:50
msgid "permissions"
msgstr "Permissions"
@@ -46,15 +46,15 @@ msgstr "Important dates"
msgid "additional info"
msgstr "Additional Info"
-#: engine/vibes_auth/admin.py:128
+#: engine/vibes_auth/admin.py:135
msgid "You cannot jump over your head!"
msgstr "You cannot jump over your head!"
-#: engine/vibes_auth/admin.py:160
+#: engine/vibes_auth/admin.py:167
msgid "Close selected threads"
msgstr "Close selected threads"
-#: engine/vibes_auth/admin.py:164
+#: engine/vibes_auth/admin.py:171
msgid "Open selected threads"
msgstr "Open selected threads"
@@ -86,7 +86,7 @@ msgstr "System"
msgid "User messages entrypoint"
msgstr "User messages entrypoint"
-#: engine/vibes_auth/docs/drf/messaging.py:18
+#: engine/vibes_auth/docs/drf/messaging.py:19
msgid ""
"Anonymous or authenticated non-staff users send messages. Also supports "
"action=ping."
@@ -94,11 +94,11 @@ msgstr ""
"Anonymous or authenticated non-staff users send messages. Also supports "
"action=ping."
-#: engine/vibes_auth/docs/drf/messaging.py:28
+#: engine/vibes_auth/docs/drf/messaging.py:30
msgid "Staff inbox control"
msgstr "Staff inbox control"
-#: engine/vibes_auth/docs/drf/messaging.py:29
+#: engine/vibes_auth/docs/drf/messaging.py:32
msgid ""
"Staff-only actions: list_open, assign, reply, close, ping. Unified event "
"payloads are emitted."
@@ -106,11 +106,11 @@ msgstr ""
"Staff-only actions: list_open, assign, reply, close, ping. Unified event "
"payloads are emitted."
-#: engine/vibes_auth/docs/drf/messaging.py:39
+#: engine/vibes_auth/docs/drf/messaging.py:43
msgid "Per-thread staff channel"
msgstr "Per-thread staff channel"
-#: engine/vibes_auth/docs/drf/messaging.py:40
+#: engine/vibes_auth/docs/drf/messaging.py:44
msgid "Reply, close, and ping within a specific thread."
msgstr "Reply, close, and ping within a specific thread."
@@ -138,7 +138,7 @@ msgstr "Verify a token"
msgid "Verify a token (refresh or access)."
msgstr "Verify a token (refresh or access)."
-#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90
+#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:100
msgid "the token is valid"
msgstr "The token is valid"
@@ -175,9 +175,9 @@ msgid "confirm a user's password reset"
msgstr "Confirm a user's password reset"
#: engine/vibes_auth/docs/drf/viewsets.py:87
-#: engine/vibes_auth/graphene/mutations.py:317
-#: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101
-#: engine/vibes_auth/viewsets.py:84
+#: engine/vibes_auth/graphene/mutations.py:345
+#: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/viewsets.py:94
msgid "passwords do not match"
msgstr "Passwords do not match"
@@ -185,61 +185,62 @@ msgstr "Passwords do not match"
msgid "activate a user's account"
msgstr "Activate a user's account"
-#: engine/vibes_auth/docs/drf/viewsets.py:99
+#: engine/vibes_auth/docs/drf/viewsets.py:101
msgid "activation link is invalid or account already activated"
msgstr "Activation link is invalid or account already activated"
-#: engine/vibes_auth/docs/drf/viewsets.py:107
+#: engine/vibes_auth/docs/drf/viewsets.py:111
msgid "merge client-stored recently viewed products"
msgstr "Merge client-stored recently viewed products"
-#: engine/vibes_auth/graphene/mutations.py:44
+#: engine/vibes_auth/graphene/mutations.py:47
msgid "the user's b64-encoded uuid who referred the new user to us."
msgstr "The user's b64-encoded uuid who referred the new user to us."
-#: engine/vibes_auth/graphene/mutations.py:64
+#: engine/vibes_auth/graphene/mutations.py:69
msgid "password too weak"
msgstr "The password is too weak"
-#: engine/vibes_auth/graphene/mutations.py:119
+#: engine/vibes_auth/graphene/mutations.py:129
msgid "malformed email"
msgstr "Malformed email"
-#: engine/vibes_auth/graphene/mutations.py:126
-#: engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/graphene/mutations.py:141
+#: engine/vibes_auth/serializers.py:117
#, python-brace-format
msgid "malformed phone number: {phone_number}"
msgstr "Malformed phone number: {phone_number}!"
-#: engine/vibes_auth/graphene/mutations.py:148
+#: engine/vibes_auth/graphene/mutations.py:166
#, python-brace-format
msgid "Invalid attribute format: {attribute_pair}"
msgstr "Invalid attribute format: {attribute_pair}!"
-#: engine/vibes_auth/graphene/mutations.py:162
+#: engine/vibes_auth/graphene/mutations.py:183
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr "{name} does not exist: {uuid}!"
-#: engine/vibes_auth/graphene/mutations.py:270
-#: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146
+#: engine/vibes_auth/graphene/mutations.py:298
+#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180
msgid "activation link is invalid!"
msgstr "Activation link is invalid!"
-#: engine/vibes_auth/graphene/mutations.py:273
+#: engine/vibes_auth/graphene/mutations.py:301
msgid "account already activated..."
msgstr "Account has been already activated..."
-#: engine/vibes_auth/graphene/mutations.py:280
-#: engine/vibes_auth/graphene/mutations.py:336
+#: engine/vibes_auth/graphene/mutations.py:308
+#: engine/vibes_auth/graphene/mutations.py:370
msgid "something went wrong: {e!s}"
msgstr "Something went wrong: {e!s}"
-#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95
+#: engine/vibes_auth/graphene/mutations.py:352
+#: engine/vibes_auth/viewsets.py:106
msgid "token is invalid!"
msgstr "Token is invalid!"
-#: engine/vibes_auth/graphene/object_types.py:40
+#: engine/vibes_auth/graphene/object_types.py:46
msgid ""
"the products this user has viewed most recently (max 48), in reverse‐"
"chronological order"
@@ -247,24 +248,24 @@ msgstr ""
"The products this user has viewed most recently (max 48), in reverse-"
"chronological order."
-#: engine/vibes_auth/graphene/object_types.py:42
-#: engine/vibes_auth/models.py:185
+#: engine/vibes_auth/graphene/object_types.py:49
+#: engine/vibes_auth/models.py:209
msgid "groups"
msgstr "Groups"
-#: engine/vibes_auth/graphene/object_types.py:45
+#: engine/vibes_auth/graphene/object_types.py:52
msgid "wishlist"
msgstr "Wishlist"
-#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:70
+#: engine/vibes_auth/graphene/object_types.py:56 engine/vibes_auth/models.py:70
msgid "avatar"
msgstr "Avatar"
-#: engine/vibes_auth/graphene/object_types.py:48
+#: engine/vibes_auth/graphene/object_types.py:58
msgid "attributes may be used to store custom data"
msgstr "Attributes may be used to store custom data"
-#: engine/vibes_auth/graphene/object_types.py:50
+#: engine/vibes_auth/graphene/object_types.py:62
#, python-brace-format
msgid ""
"language is one of the {settings.LANGUAGES} with default {settings."
@@ -273,23 +274,23 @@ msgstr ""
"Language is one of the {settings.LANGUAGES} with default {settings."
"LANGUAGE_CODE}"
-#: engine/vibes_auth/graphene/object_types.py:52
+#: engine/vibes_auth/graphene/object_types.py:66
msgid "address set"
msgstr "Adresses"
-#: engine/vibes_auth/messaging/services.py:49
+#: engine/vibes_auth/messaging/services.py:52
msgid "Valid email is required for anonymous chats."
msgstr "Valid email is required for anonymous chats."
-#: engine/vibes_auth/messaging/services.py:57
+#: engine/vibes_auth/messaging/services.py:65
msgid "Message must be 1..1028 characters."
msgstr "Message must be 1..1028 characters."
-#: engine/vibes_auth/messaging/services.py:93
+#: engine/vibes_auth/messaging/services.py:105
msgid "We're searching for the operator to answer you already, hold by!"
msgstr "We're searching for the operator to answer you already, hold by!"
-#: engine/vibes_auth/messaging/services.py:136
+#: engine/vibes_auth/messaging/services.py:152
msgid "Assignee must be a staff user."
msgstr "Assignee must be a staff user."
@@ -359,71 +360,71 @@ msgstr "Unselect this instead of deleting accounts"
msgid "is_subscribed"
msgstr "Is subscribed"
-#: engine/vibes_auth/models.py:87
+#: engine/vibes_auth/models.py:88
msgid "user's newsletter subscription status"
msgstr "User's newsletter subscription status"
-#: engine/vibes_auth/models.py:90
+#: engine/vibes_auth/models.py:92
msgid "activation token"
msgstr "Activation token"
-#: engine/vibes_auth/models.py:94
+#: engine/vibes_auth/models.py:101
msgid "attributes"
msgstr "Attributes"
-#: engine/vibes_auth/models.py:133
+#: engine/vibes_auth/models.py:141
msgid "user"
msgstr "User"
-#: engine/vibes_auth/models.py:134
+#: engine/vibes_auth/models.py:142
msgid "users"
msgstr "Users"
-#: engine/vibes_auth/models.py:139
+#: engine/vibes_auth/models.py:149
msgid "For anonymous threads"
msgstr "For anonymous threads"
-#: engine/vibes_auth/models.py:153
+#: engine/vibes_auth/models.py:173
msgid "Chat thread"
msgstr "Chat thread"
-#: engine/vibes_auth/models.py:154
+#: engine/vibes_auth/models.py:174
msgid "Chat threads"
msgstr "Chat threads"
-#: engine/vibes_auth/models.py:159
+#: engine/vibes_auth/models.py:180
msgid "provide user or email for anonymous thread."
msgstr "provide user or email for anonymous thread."
-#: engine/vibes_auth/models.py:161
+#: engine/vibes_auth/models.py:183
msgid "assignee must be a staff user."
msgstr "assignee must be a staff user."
-#: engine/vibes_auth/models.py:177
+#: engine/vibes_auth/models.py:201
msgid "Chat message"
msgstr "Chat message"
-#: engine/vibes_auth/models.py:178
+#: engine/vibes_auth/models.py:202
msgid "Chat messages"
msgstr "Chat messages"
-#: engine/vibes_auth/models.py:184
+#: engine/vibes_auth/models.py:208
msgid "group"
msgstr "Group"
-#: engine/vibes_auth/models.py:191
+#: engine/vibes_auth/models.py:215
msgid "outstanding token"
msgstr "Outstanding token"
-#: engine/vibes_auth/models.py:192
+#: engine/vibes_auth/models.py:216
msgid "outstanding tokens"
msgstr "Outstanding tokens"
-#: engine/vibes_auth/models.py:198
+#: engine/vibes_auth/models.py:222
msgid "blacklisted token"
msgstr "Blacklisted token"
-#: engine/vibes_auth/models.py:199
+#: engine/vibes_auth/models.py:223
msgid "blacklisted tokens"
msgstr "Blacklisted tokens"
@@ -431,37 +432,37 @@ msgstr "Blacklisted tokens"
msgid "attributes must be a dictionary"
msgstr "`attributes` must be a dictionary"
-#: engine/vibes_auth/serializers.py:93
+#: engine/vibes_auth/serializers.py:97
msgid "business identificator is required when registering as a business"
msgstr "Business identificator is required when registering as a business"
-#: engine/vibes_auth/serializers.py:113
+#: engine/vibes_auth/serializers.py:127
#, python-brace-format
msgid "malformed email: {email}"
msgstr "malformed email: {email}"
-#: engine/vibes_auth/serializers.py:134 engine/vibes_auth/serializers.py:159
-#: engine/vibes_auth/serializers.py:182 engine/vibes_auth/serializers.py:192
+#: engine/vibes_auth/serializers.py:150 engine/vibes_auth/serializers.py:175
+#: engine/vibes_auth/serializers.py:198 engine/vibes_auth/serializers.py:210
msgid "no active account"
msgstr "No active account found"
-#: engine/vibes_auth/serializers.py:169
+#: engine/vibes_auth/serializers.py:185
msgid "must set token_class attribute on class."
msgstr "Must set token_class attribute on class!"
-#: engine/vibes_auth/serializers.py:253
+#: engine/vibes_auth/serializers.py:271
msgid "token_blacklisted"
msgstr "Token blacklisted"
-#: engine/vibes_auth/serializers.py:258
+#: engine/vibes_auth/serializers.py:276
msgid "invalid token"
msgstr "Invalid token"
-#: engine/vibes_auth/serializers.py:268
+#: engine/vibes_auth/serializers.py:286
msgid "no user uuid claim present in token"
msgstr "No user uuid claim present in token"
-#: engine/vibes_auth/serializers.py:270
+#: engine/vibes_auth/serializers.py:288
msgid "user does not exist"
msgstr "User does not exist"
@@ -561,7 +562,7 @@ msgstr "{settings.PROJECT_NAME} | Activate Account"
msgid "{settings.PROJECT_NAME} | Reset Password"
msgstr "{settings.PROJECT_NAME} | Reset Password"
-#: engine/vibes_auth/validators.py:13
+#: engine/vibes_auth/validators.py:15
msgid ""
"invalid phone number format. the number must be entered in the format: "
"\"+999999999\". up to 15 digits allowed."
@@ -569,7 +570,7 @@ msgstr ""
"Invalid phone number format. The number must be entered in the format: "
"\"+999999999\". Up to 15 digits allowed."
-#: engine/vibes_auth/views.py:30
+#: engine/vibes_auth/views.py:34
msgid ""
"Represents a view for getting a pair of access and refresh tokens and user's "
"data. This view manages the process of handling token-based authentication "
@@ -583,7 +584,7 @@ msgstr ""
"provided credentials. It is built on top of a base token view and ensures "
"proper rate limiting to protect against brute force attacks."
-#: engine/vibes_auth/views.py:52
+#: engine/vibes_auth/views.py:58
msgid ""
"Handles refreshing of tokens for authentication purposes. This class is used "
"to provide functionality for token refresh operations as part of an "
@@ -597,7 +598,7 @@ msgstr ""
"within defined rate limits. The view relies on the associated serializer to "
"validate token refresh inputs and produce appropriate outputs."
-#: engine/vibes_auth/views.py:75
+#: engine/vibes_auth/views.py:83
msgid ""
"Represents a view for verifying JSON Web Tokens (JWT) using specific "
"serialization and validation logic. "
@@ -605,7 +606,7 @@ msgstr ""
"Represents a view for verifying JSON Web Tokens (JWT) using specific "
"serialization and validation logic."
-#: engine/vibes_auth/views.py:92
+#: engine/vibes_auth/views.py:103
msgid "the token is invalid"
msgstr "The token is invalid"
@@ -623,10 +624,10 @@ msgstr ""
"avatar upload, account activation, and recently viewed items merging. This "
"class extends the mixins and GenericViewSet for robust API handling."
-#: engine/vibes_auth/viewsets.py:99
+#: engine/vibes_auth/viewsets.py:113
msgid "password reset successfully"
msgstr "Password has been reset successfully!"
-#: engine/vibes_auth/viewsets.py:132
+#: engine/vibes_auth/viewsets.py:161
msgid "account already activated!"
msgstr "You have already activated the account..."
diff --git a/engine/vibes_auth/locale/en_US/LC_MESSAGES/django.po b/engine/vibes_auth/locale/en_US/LC_MESSAGES/django.po
index c333ddf2..604b4db5 100644
--- a/engine/vibes_auth/locale/en_US/LC_MESSAGES/django.po
+++ b/engine/vibes_auth/locale/en_US/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -14,7 +14,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: engine/vibes_auth/admin.py:51 engine/vibes_auth/admin.py:52
-#: engine/vibes_auth/graphene/object_types.py:46
+#: engine/vibes_auth/graphene/object_types.py:54
msgid "balance"
msgstr "Balance"
@@ -22,7 +22,7 @@ msgstr "Balance"
msgid "order"
msgstr "Order"
-#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:44
+#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:51
msgid "orders"
msgstr "Orders"
@@ -30,7 +30,7 @@ msgstr "Orders"
msgid "personal info"
msgstr "Personal Info"
-#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:43
+#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:50
msgid "permissions"
msgstr "Permissions"
@@ -42,15 +42,15 @@ msgstr "Important dates"
msgid "additional info"
msgstr "Additional Info"
-#: engine/vibes_auth/admin.py:128
+#: engine/vibes_auth/admin.py:135
msgid "You cannot jump over your head!"
msgstr "You cannot jump over your head!"
-#: engine/vibes_auth/admin.py:160
+#: engine/vibes_auth/admin.py:167
msgid "Close selected threads"
msgstr "Close selected threads"
-#: engine/vibes_auth/admin.py:164
+#: engine/vibes_auth/admin.py:171
msgid "Open selected threads"
msgstr "Open selected threads"
@@ -82,7 +82,7 @@ msgstr "System"
msgid "User messages entrypoint"
msgstr "User messages entrypoint"
-#: engine/vibes_auth/docs/drf/messaging.py:18
+#: engine/vibes_auth/docs/drf/messaging.py:19
msgid ""
"Anonymous or authenticated non-staff users send messages. Also supports "
"action=ping."
@@ -90,11 +90,11 @@ msgstr ""
"Anonymous or authenticated non-staff users send messages. Also supports "
"action=ping."
-#: engine/vibes_auth/docs/drf/messaging.py:28
+#: engine/vibes_auth/docs/drf/messaging.py:30
msgid "Staff inbox control"
msgstr "Staff inbox control"
-#: engine/vibes_auth/docs/drf/messaging.py:29
+#: engine/vibes_auth/docs/drf/messaging.py:32
msgid ""
"Staff-only actions: list_open, assign, reply, close, ping. Unified event "
"payloads are emitted."
@@ -102,11 +102,11 @@ msgstr ""
"Staff-only actions: list_open, assign, reply, close, ping. Unified event "
"payloads are emitted."
-#: engine/vibes_auth/docs/drf/messaging.py:39
+#: engine/vibes_auth/docs/drf/messaging.py:43
msgid "Per-thread staff channel"
msgstr "Per-thread staff channel"
-#: engine/vibes_auth/docs/drf/messaging.py:40
+#: engine/vibes_auth/docs/drf/messaging.py:44
msgid "Reply, close, and ping within a specific thread."
msgstr "Reply, close, and ping within a specific thread."
@@ -134,7 +134,7 @@ msgstr "Verify a token"
msgid "Verify a token (refresh or access)."
msgstr "Verify a token (refresh or access)."
-#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90
+#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:100
msgid "the token is valid"
msgstr "The token is valid"
@@ -171,9 +171,9 @@ msgid "confirm a user's password reset"
msgstr "Confirm a user's password reset"
#: engine/vibes_auth/docs/drf/viewsets.py:87
-#: engine/vibes_auth/graphene/mutations.py:317
-#: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101
-#: engine/vibes_auth/viewsets.py:84
+#: engine/vibes_auth/graphene/mutations.py:345
+#: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/viewsets.py:94
msgid "passwords do not match"
msgstr "Passwords do not match"
@@ -181,61 +181,62 @@ msgstr "Passwords do not match"
msgid "activate a user's account"
msgstr "Activate a user's account"
-#: engine/vibes_auth/docs/drf/viewsets.py:99
+#: engine/vibes_auth/docs/drf/viewsets.py:101
msgid "activation link is invalid or account already activated"
msgstr "Activation link is invalid or account already activated"
-#: engine/vibes_auth/docs/drf/viewsets.py:107
+#: engine/vibes_auth/docs/drf/viewsets.py:111
msgid "merge client-stored recently viewed products"
msgstr "Merge client-stored recently viewed products"
-#: engine/vibes_auth/graphene/mutations.py:44
+#: engine/vibes_auth/graphene/mutations.py:47
msgid "the user's b64-encoded uuid who referred the new user to us."
msgstr "The user's b64-encoded uuid who referred the new user to us."
-#: engine/vibes_auth/graphene/mutations.py:64
+#: engine/vibes_auth/graphene/mutations.py:69
msgid "password too weak"
msgstr "The password is too weak"
-#: engine/vibes_auth/graphene/mutations.py:119
+#: engine/vibes_auth/graphene/mutations.py:129
msgid "malformed email"
msgstr "Malformed email"
-#: engine/vibes_auth/graphene/mutations.py:126
-#: engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/graphene/mutations.py:141
+#: engine/vibes_auth/serializers.py:117
#, python-brace-format
msgid "malformed phone number: {phone_number}"
msgstr "Malformed phone number: {phone_number}!"
-#: engine/vibes_auth/graphene/mutations.py:148
+#: engine/vibes_auth/graphene/mutations.py:166
#, python-brace-format
msgid "Invalid attribute format: {attribute_pair}"
msgstr "Invalid attribute format: {attribute_pair}!"
-#: engine/vibes_auth/graphene/mutations.py:162
+#: engine/vibes_auth/graphene/mutations.py:183
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr "{name} does not exist: {uuid}!"
-#: engine/vibes_auth/graphene/mutations.py:270
-#: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146
+#: engine/vibes_auth/graphene/mutations.py:298
+#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180
msgid "activation link is invalid!"
msgstr "Activation link is invalid!"
-#: engine/vibes_auth/graphene/mutations.py:273
+#: engine/vibes_auth/graphene/mutations.py:301
msgid "account already activated..."
msgstr "Account has been already activated..."
-#: engine/vibes_auth/graphene/mutations.py:280
-#: engine/vibes_auth/graphene/mutations.py:336
+#: engine/vibes_auth/graphene/mutations.py:308
+#: engine/vibes_auth/graphene/mutations.py:370
msgid "something went wrong: {e!s}"
msgstr "Something went wrong: {e!s}"
-#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95
+#: engine/vibes_auth/graphene/mutations.py:352
+#: engine/vibes_auth/viewsets.py:106
msgid "token is invalid!"
msgstr "Token is invalid!"
-#: engine/vibes_auth/graphene/object_types.py:40
+#: engine/vibes_auth/graphene/object_types.py:46
msgid ""
"the products this user has viewed most recently (max 48), in reverse‐"
"chronological order"
@@ -243,24 +244,24 @@ msgstr ""
"The products this user has viewed most recently (max 48), in reverse-"
"chronological order."
-#: engine/vibes_auth/graphene/object_types.py:42
-#: engine/vibes_auth/models.py:185
+#: engine/vibes_auth/graphene/object_types.py:49
+#: engine/vibes_auth/models.py:209
msgid "groups"
msgstr "Groups"
-#: engine/vibes_auth/graphene/object_types.py:45
+#: engine/vibes_auth/graphene/object_types.py:52
msgid "wishlist"
msgstr "Wishlist"
-#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:70
+#: engine/vibes_auth/graphene/object_types.py:56 engine/vibes_auth/models.py:70
msgid "avatar"
msgstr "Avatar"
-#: engine/vibes_auth/graphene/object_types.py:48
+#: engine/vibes_auth/graphene/object_types.py:58
msgid "attributes may be used to store custom data"
msgstr "Attributes may be used to store custom data"
-#: engine/vibes_auth/graphene/object_types.py:50
+#: engine/vibes_auth/graphene/object_types.py:62
#, python-brace-format
msgid ""
"language is one of the {settings.LANGUAGES} with default {settings."
@@ -269,23 +270,23 @@ msgstr ""
"Language is one of the {settings.LANGUAGES} with default {settings."
"LANGUAGE_CODE}"
-#: engine/vibes_auth/graphene/object_types.py:52
+#: engine/vibes_auth/graphene/object_types.py:66
msgid "address set"
msgstr "Adresses"
-#: engine/vibes_auth/messaging/services.py:49
+#: engine/vibes_auth/messaging/services.py:52
msgid "Valid email is required for anonymous chats."
msgstr "Valid email is required for anonymous chats."
-#: engine/vibes_auth/messaging/services.py:57
+#: engine/vibes_auth/messaging/services.py:65
msgid "Message must be 1..1028 characters."
msgstr "Message must be 1..1028 characters."
-#: engine/vibes_auth/messaging/services.py:93
+#: engine/vibes_auth/messaging/services.py:105
msgid "We're searching for the operator to answer you already, hold by!"
msgstr "We're searching for the operator to answer you already, hold by!"
-#: engine/vibes_auth/messaging/services.py:136
+#: engine/vibes_auth/messaging/services.py:152
msgid "Assignee must be a staff user."
msgstr "Assignee must be a staff user."
@@ -355,71 +356,71 @@ msgstr "Unselect this instead of deleting accounts"
msgid "is_subscribed"
msgstr "Is subscribed"
-#: engine/vibes_auth/models.py:87
+#: engine/vibes_auth/models.py:88
msgid "user's newsletter subscription status"
msgstr "User's newsletter subscription status"
-#: engine/vibes_auth/models.py:90
+#: engine/vibes_auth/models.py:92
msgid "activation token"
msgstr "Activation token"
-#: engine/vibes_auth/models.py:94
+#: engine/vibes_auth/models.py:101
msgid "attributes"
msgstr "Attributes"
-#: engine/vibes_auth/models.py:133
+#: engine/vibes_auth/models.py:141
msgid "user"
msgstr "User"
-#: engine/vibes_auth/models.py:134
+#: engine/vibes_auth/models.py:142
msgid "users"
msgstr "Users"
-#: engine/vibes_auth/models.py:139
+#: engine/vibes_auth/models.py:149
msgid "For anonymous threads"
msgstr "For anonymous threads"
-#: engine/vibes_auth/models.py:153
+#: engine/vibes_auth/models.py:173
msgid "Chat thread"
msgstr "Chat thread"
-#: engine/vibes_auth/models.py:154
+#: engine/vibes_auth/models.py:174
msgid "Chat threads"
msgstr "Chat threads"
-#: engine/vibes_auth/models.py:159
+#: engine/vibes_auth/models.py:180
msgid "provide user or email for anonymous thread."
msgstr "provide user or email for anonymous thread."
-#: engine/vibes_auth/models.py:161
+#: engine/vibes_auth/models.py:183
msgid "assignee must be a staff user."
msgstr "assignee must be a staff user."
-#: engine/vibes_auth/models.py:177
+#: engine/vibes_auth/models.py:201
msgid "Chat message"
msgstr "Chat message"
-#: engine/vibes_auth/models.py:178
+#: engine/vibes_auth/models.py:202
msgid "Chat messages"
msgstr "Chat messages"
-#: engine/vibes_auth/models.py:184
+#: engine/vibes_auth/models.py:208
msgid "group"
msgstr "Group"
-#: engine/vibes_auth/models.py:191
+#: engine/vibes_auth/models.py:215
msgid "outstanding token"
msgstr "Outstanding token"
-#: engine/vibes_auth/models.py:192
+#: engine/vibes_auth/models.py:216
msgid "outstanding tokens"
msgstr "Outstanding tokens"
-#: engine/vibes_auth/models.py:198
+#: engine/vibes_auth/models.py:222
msgid "blacklisted token"
msgstr "Blacklisted token"
-#: engine/vibes_auth/models.py:199
+#: engine/vibes_auth/models.py:223
msgid "blacklisted tokens"
msgstr "Blacklisted tokens"
@@ -427,37 +428,37 @@ msgstr "Blacklisted tokens"
msgid "attributes must be a dictionary"
msgstr "`attributes` must be a dictionary"
-#: engine/vibes_auth/serializers.py:93
+#: engine/vibes_auth/serializers.py:97
msgid "business identificator is required when registering as a business"
msgstr "Business identificator is required when registering as a business"
-#: engine/vibes_auth/serializers.py:113
+#: engine/vibes_auth/serializers.py:127
#, python-brace-format
msgid "malformed email: {email}"
msgstr "malformed email: {email}"
-#: engine/vibes_auth/serializers.py:134 engine/vibes_auth/serializers.py:159
-#: engine/vibes_auth/serializers.py:182 engine/vibes_auth/serializers.py:192
+#: engine/vibes_auth/serializers.py:150 engine/vibes_auth/serializers.py:175
+#: engine/vibes_auth/serializers.py:198 engine/vibes_auth/serializers.py:210
msgid "no active account"
msgstr "No active account found"
-#: engine/vibes_auth/serializers.py:169
+#: engine/vibes_auth/serializers.py:185
msgid "must set token_class attribute on class."
msgstr "Must set token_class attribute on class!"
-#: engine/vibes_auth/serializers.py:253
+#: engine/vibes_auth/serializers.py:271
msgid "token_blacklisted"
msgstr "Token blacklisted"
-#: engine/vibes_auth/serializers.py:258
+#: engine/vibes_auth/serializers.py:276
msgid "invalid token"
msgstr "Invalid token"
-#: engine/vibes_auth/serializers.py:268
+#: engine/vibes_auth/serializers.py:286
msgid "no user uuid claim present in token"
msgstr "No user uuid claim present in token"
-#: engine/vibes_auth/serializers.py:270
+#: engine/vibes_auth/serializers.py:288
msgid "user does not exist"
msgstr "User does not exist"
@@ -557,7 +558,7 @@ msgstr "{settings.PROJECT_NAME} | Activate Account"
msgid "{settings.PROJECT_NAME} | Reset Password"
msgstr "{settings.PROJECT_NAME} | Reset Password"
-#: engine/vibes_auth/validators.py:13
+#: engine/vibes_auth/validators.py:15
msgid ""
"invalid phone number format. the number must be entered in the format: "
"\"+999999999\". up to 15 digits allowed."
@@ -565,7 +566,7 @@ msgstr ""
"Invalid phone number format. The number must be entered in the format: "
"\"+999999999\". Up to 15 digits allowed."
-#: engine/vibes_auth/views.py:30
+#: engine/vibes_auth/views.py:34
msgid ""
"Represents a view for getting a pair of access and refresh tokens and user's "
"data. This view manages the process of handling token-based authentication "
@@ -579,7 +580,7 @@ msgstr ""
"provided credentials. It is built on top of a base token view and ensures "
"proper rate limiting to protect against brute force attacks."
-#: engine/vibes_auth/views.py:52
+#: engine/vibes_auth/views.py:58
msgid ""
"Handles refreshing of tokens for authentication purposes. This class is used "
"to provide functionality for token refresh operations as part of an "
@@ -593,7 +594,7 @@ msgstr ""
"within defined rate limits. The view relies on the associated serializer to "
"validate token refresh inputs and produce appropriate outputs."
-#: engine/vibes_auth/views.py:75
+#: engine/vibes_auth/views.py:83
msgid ""
"Represents a view for verifying JSON Web Tokens (JWT) using specific "
"serialization and validation logic. "
@@ -601,7 +602,7 @@ msgstr ""
"Represents a view for verifying JSON Web Tokens (JWT) using specific "
"serialization and validation logic."
-#: engine/vibes_auth/views.py:92
+#: engine/vibes_auth/views.py:103
msgid "the token is invalid"
msgstr "The token is invalid"
@@ -619,10 +620,10 @@ msgstr ""
"avatar upload, account activation, and recently viewed items merging. This "
"class extends the mixins and GenericViewSet for robust API handling."
-#: engine/vibes_auth/viewsets.py:99
+#: engine/vibes_auth/viewsets.py:113
msgid "password reset successfully"
msgstr "Password has been reset successfully!"
-#: engine/vibes_auth/viewsets.py:132
+#: engine/vibes_auth/viewsets.py:161
msgid "account already activated!"
msgstr "You have already activated the account..."
diff --git a/engine/vibes_auth/locale/es_ES/LC_MESSAGES/django.po b/engine/vibes_auth/locale/es_ES/LC_MESSAGES/django.po
index 845df14d..9cef0a55 100644
--- a/engine/vibes_auth/locale/es_ES/LC_MESSAGES/django.po
+++ b/engine/vibes_auth/locale/es_ES/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -14,7 +14,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: engine/vibes_auth/admin.py:51 engine/vibes_auth/admin.py:52
-#: engine/vibes_auth/graphene/object_types.py:46
+#: engine/vibes_auth/graphene/object_types.py:54
msgid "balance"
msgstr "Saldo"
@@ -22,7 +22,7 @@ msgstr "Saldo"
msgid "order"
msgstr "Pida"
-#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:44
+#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:51
msgid "orders"
msgstr "Pedidos"
@@ -30,7 +30,7 @@ msgstr "Pedidos"
msgid "personal info"
msgstr "Información personal"
-#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:43
+#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:50
msgid "permissions"
msgstr "Permisos"
@@ -42,15 +42,15 @@ msgstr "Fechas importantes"
msgid "additional info"
msgstr "Información adicional"
-#: engine/vibes_auth/admin.py:128
+#: engine/vibes_auth/admin.py:135
msgid "You cannot jump over your head!"
msgstr "¡No puedes saltar por encima de tu cabeza!"
-#: engine/vibes_auth/admin.py:160
+#: engine/vibes_auth/admin.py:167
msgid "Close selected threads"
msgstr "Cerrar los hilos seleccionados"
-#: engine/vibes_auth/admin.py:164
+#: engine/vibes_auth/admin.py:171
msgid "Open selected threads"
msgstr "Abrir los hilos seleccionados"
@@ -82,7 +82,7 @@ msgstr "Sistema"
msgid "User messages entrypoint"
msgstr "Punto de entrada de mensajes de usuario"
-#: engine/vibes_auth/docs/drf/messaging.py:18
+#: engine/vibes_auth/docs/drf/messaging.py:19
msgid ""
"Anonymous or authenticated non-staff users send messages. Also supports "
"action=ping."
@@ -90,11 +90,11 @@ msgstr ""
"Los usuarios anónimos o autenticados no pertenecientes al personal envían "
"mensajes. También admite action=ping."
-#: engine/vibes_auth/docs/drf/messaging.py:28
+#: engine/vibes_auth/docs/drf/messaging.py:30
msgid "Staff inbox control"
msgstr "Control de la bandeja de entrada del personal"
-#: engine/vibes_auth/docs/drf/messaging.py:29
+#: engine/vibes_auth/docs/drf/messaging.py:32
msgid ""
"Staff-only actions: list_open, assign, reply, close, ping. Unified event "
"payloads are emitted."
@@ -102,11 +102,11 @@ msgstr ""
"Acciones exclusivas del personal: list_open, assign, reply, close, ping. Se "
"emiten cargas útiles de eventos unificadas."
-#: engine/vibes_auth/docs/drf/messaging.py:39
+#: engine/vibes_auth/docs/drf/messaging.py:43
msgid "Per-thread staff channel"
msgstr "Canal de personal por hilo"
-#: engine/vibes_auth/docs/drf/messaging.py:40
+#: engine/vibes_auth/docs/drf/messaging.py:44
msgid "Reply, close, and ping within a specific thread."
msgstr "Responder, cerrar y hacer ping dentro de un hilo específico."
@@ -134,7 +134,7 @@ msgstr "Verificar un token"
msgid "Verify a token (refresh or access)."
msgstr "Verificar un token (actualización o acceso)."
-#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90
+#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:100
msgid "the token is valid"
msgstr "El token es válido"
@@ -173,9 +173,9 @@ msgid "confirm a user's password reset"
msgstr "Confirmar el restablecimiento de la contraseña de un usuario"
#: engine/vibes_auth/docs/drf/viewsets.py:87
-#: engine/vibes_auth/graphene/mutations.py:317
-#: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101
-#: engine/vibes_auth/viewsets.py:84
+#: engine/vibes_auth/graphene/mutations.py:345
+#: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/viewsets.py:94
msgid "passwords do not match"
msgstr "Las contraseñas no coinciden"
@@ -183,62 +183,63 @@ msgstr "Las contraseñas no coinciden"
msgid "activate a user's account"
msgstr "Activar la cuenta de un usuario"
-#: engine/vibes_auth/docs/drf/viewsets.py:99
+#: engine/vibes_auth/docs/drf/viewsets.py:101
msgid "activation link is invalid or account already activated"
msgstr "El enlace de activación no es válido o la cuenta ya está activada"
-#: engine/vibes_auth/docs/drf/viewsets.py:107
+#: engine/vibes_auth/docs/drf/viewsets.py:111
msgid "merge client-stored recently viewed products"
msgstr "Fusionar productos vistos recientemente almacenados por el cliente"
-#: engine/vibes_auth/graphene/mutations.py:44
+#: engine/vibes_auth/graphene/mutations.py:47
msgid "the user's b64-encoded uuid who referred the new user to us."
msgstr ""
"El uuid codificado en b64 del usuario que nos ha remitido al nuevo usuario."
-#: engine/vibes_auth/graphene/mutations.py:64
+#: engine/vibes_auth/graphene/mutations.py:69
msgid "password too weak"
msgstr "La contraseña es demasiado débil"
-#: engine/vibes_auth/graphene/mutations.py:119
+#: engine/vibes_auth/graphene/mutations.py:129
msgid "malformed email"
msgstr "Correo electrónico malformado"
-#: engine/vibes_auth/graphene/mutations.py:126
-#: engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/graphene/mutations.py:141
+#: engine/vibes_auth/serializers.py:117
#, python-brace-format
msgid "malformed phone number: {phone_number}"
msgstr "Número de teléfono malformado: ¡{phone_number}!"
-#: engine/vibes_auth/graphene/mutations.py:148
+#: engine/vibes_auth/graphene/mutations.py:166
#, python-brace-format
msgid "Invalid attribute format: {attribute_pair}"
msgstr "Formato de atributo no válido: ¡{attribute_pair}!"
-#: engine/vibes_auth/graphene/mutations.py:162
+#: engine/vibes_auth/graphene/mutations.py:183
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr "{name} no existe: ¡{uuid}!"
-#: engine/vibes_auth/graphene/mutations.py:270
-#: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146
+#: engine/vibes_auth/graphene/mutations.py:298
+#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180
msgid "activation link is invalid!"
msgstr "El enlace de activación no es válido."
-#: engine/vibes_auth/graphene/mutations.py:273
+#: engine/vibes_auth/graphene/mutations.py:301
msgid "account already activated..."
msgstr "La cuenta ya ha sido activada..."
-#: engine/vibes_auth/graphene/mutations.py:280
-#: engine/vibes_auth/graphene/mutations.py:336
+#: engine/vibes_auth/graphene/mutations.py:308
+#: engine/vibes_auth/graphene/mutations.py:370
msgid "something went wrong: {e!s}"
msgstr "Algo salió mal: {e!s}."
-#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95
+#: engine/vibes_auth/graphene/mutations.py:352
+#: engine/vibes_auth/viewsets.py:106
msgid "token is invalid!"
msgstr "¡La ficha no es válida!"
-#: engine/vibes_auth/graphene/object_types.py:40
+#: engine/vibes_auth/graphene/object_types.py:46
msgid ""
"the products this user has viewed most recently (max 48), in reverse‐"
"chronological order"
@@ -246,24 +247,24 @@ msgstr ""
"Los productos que este usuario ha visto más recientemente (máx. 48), en "
"orden cronológico inverso."
-#: engine/vibes_auth/graphene/object_types.py:42
-#: engine/vibes_auth/models.py:185
+#: engine/vibes_auth/graphene/object_types.py:49
+#: engine/vibes_auth/models.py:209
msgid "groups"
msgstr "Grupos"
-#: engine/vibes_auth/graphene/object_types.py:45
+#: engine/vibes_auth/graphene/object_types.py:52
msgid "wishlist"
msgstr "Lista de deseos"
-#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:70
+#: engine/vibes_auth/graphene/object_types.py:56 engine/vibes_auth/models.py:70
msgid "avatar"
msgstr "Avatar"
-#: engine/vibes_auth/graphene/object_types.py:48
+#: engine/vibes_auth/graphene/object_types.py:58
msgid "attributes may be used to store custom data"
msgstr "Los atributos pueden utilizarse para almacenar datos personalizados"
-#: engine/vibes_auth/graphene/object_types.py:50
+#: engine/vibes_auth/graphene/object_types.py:62
#, python-brace-format
msgid ""
"language is one of the {settings.LANGUAGES} with default {settings."
@@ -272,23 +273,23 @@ msgstr ""
"El idioma es uno de los {settings.LANGUAGES} con {settings.LANGUAGE_CODE} "
"por defecto"
-#: engine/vibes_auth/graphene/object_types.py:52
+#: engine/vibes_auth/graphene/object_types.py:66
msgid "address set"
msgstr "Direcciones"
-#: engine/vibes_auth/messaging/services.py:49
+#: engine/vibes_auth/messaging/services.py:52
msgid "Valid email is required for anonymous chats."
msgstr "Se requiere un correo electrónico válido para los chats anónimos."
-#: engine/vibes_auth/messaging/services.py:57
+#: engine/vibes_auth/messaging/services.py:65
msgid "Message must be 1..1028 characters."
msgstr "El mensaje debe tener 1..1028 caracteres."
-#: engine/vibes_auth/messaging/services.py:93
+#: engine/vibes_auth/messaging/services.py:105
msgid "We're searching for the operator to answer you already, hold by!"
msgstr "Ya estamos buscando al operador que le responda, ¡espera!"
-#: engine/vibes_auth/messaging/services.py:136
+#: engine/vibes_auth/messaging/services.py:152
msgid "Assignee must be a staff user."
msgstr "El cesionario debe ser un usuario del personal."
@@ -359,71 +360,71 @@ msgstr "Deseleccione esta opción en lugar de eliminar cuentas"
msgid "is_subscribed"
msgstr "Está suscrito"
-#: engine/vibes_auth/models.py:87
+#: engine/vibes_auth/models.py:88
msgid "user's newsletter subscription status"
msgstr "Estado de suscripción del usuario al boletín"
-#: engine/vibes_auth/models.py:90
+#: engine/vibes_auth/models.py:92
msgid "activation token"
msgstr "Ficha de activación"
-#: engine/vibes_auth/models.py:94
+#: engine/vibes_auth/models.py:101
msgid "attributes"
msgstr "Atributos"
-#: engine/vibes_auth/models.py:133
+#: engine/vibes_auth/models.py:141
msgid "user"
msgstr "Usuario"
-#: engine/vibes_auth/models.py:134
+#: engine/vibes_auth/models.py:142
msgid "users"
msgstr "Usuarios"
-#: engine/vibes_auth/models.py:139
+#: engine/vibes_auth/models.py:149
msgid "For anonymous threads"
msgstr "Para hilos anónimos"
-#: engine/vibes_auth/models.py:153
+#: engine/vibes_auth/models.py:173
msgid "Chat thread"
msgstr "Hilo de conversación"
-#: engine/vibes_auth/models.py:154
+#: engine/vibes_auth/models.py:174
msgid "Chat threads"
msgstr "Hilos de chat"
-#: engine/vibes_auth/models.py:159
+#: engine/vibes_auth/models.py:180
msgid "provide user or email for anonymous thread."
msgstr "proporcionar usuario o email para hilo anónimo."
-#: engine/vibes_auth/models.py:161
+#: engine/vibes_auth/models.py:183
msgid "assignee must be a staff user."
msgstr "El cesionario debe ser un usuario del personal."
-#: engine/vibes_auth/models.py:177
+#: engine/vibes_auth/models.py:201
msgid "Chat message"
msgstr "Mensaje de chat"
-#: engine/vibes_auth/models.py:178
+#: engine/vibes_auth/models.py:202
msgid "Chat messages"
msgstr "Mensajes de chat"
-#: engine/vibes_auth/models.py:184
+#: engine/vibes_auth/models.py:208
msgid "group"
msgstr "Grupo"
-#: engine/vibes_auth/models.py:191
+#: engine/vibes_auth/models.py:215
msgid "outstanding token"
msgstr "Ficha pendiente"
-#: engine/vibes_auth/models.py:192
+#: engine/vibes_auth/models.py:216
msgid "outstanding tokens"
msgstr "Fichas pendientes"
-#: engine/vibes_auth/models.py:198
+#: engine/vibes_auth/models.py:222
msgid "blacklisted token"
msgstr "Ficha en la lista negra"
-#: engine/vibes_auth/models.py:199
+#: engine/vibes_auth/models.py:223
msgid "blacklisted tokens"
msgstr "Fichas en la lista negra"
@@ -431,37 +432,37 @@ msgstr "Fichas en la lista negra"
msgid "attributes must be a dictionary"
msgstr "`attributes` debe ser un diccionario"
-#: engine/vibes_auth/serializers.py:93
+#: engine/vibes_auth/serializers.py:97
msgid "business identificator is required when registering as a business"
msgstr "El identificador de empresa es necesario para registrarse como empresa"
-#: engine/vibes_auth/serializers.py:113
+#: engine/vibes_auth/serializers.py:127
#, python-brace-format
msgid "malformed email: {email}"
msgstr "correo electrónico malformado: {email}"
-#: engine/vibes_auth/serializers.py:134 engine/vibes_auth/serializers.py:159
-#: engine/vibes_auth/serializers.py:182 engine/vibes_auth/serializers.py:192
+#: engine/vibes_auth/serializers.py:150 engine/vibes_auth/serializers.py:175
+#: engine/vibes_auth/serializers.py:198 engine/vibes_auth/serializers.py:210
msgid "no active account"
msgstr "No se ha encontrado ninguna cuenta activa"
-#: engine/vibes_auth/serializers.py:169
+#: engine/vibes_auth/serializers.py:185
msgid "must set token_class attribute on class."
msgstr "Debe establecer el atributo token_class en la clase."
-#: engine/vibes_auth/serializers.py:253
+#: engine/vibes_auth/serializers.py:271
msgid "token_blacklisted"
msgstr "Ficha en la lista negra"
-#: engine/vibes_auth/serializers.py:258
+#: engine/vibes_auth/serializers.py:276
msgid "invalid token"
msgstr "Token no válido"
-#: engine/vibes_auth/serializers.py:268
+#: engine/vibes_auth/serializers.py:286
msgid "no user uuid claim present in token"
msgstr "No user uuid claim present in token"
-#: engine/vibes_auth/serializers.py:270
+#: engine/vibes_auth/serializers.py:288
msgid "user does not exist"
msgstr "El usuario no existe"
@@ -561,7 +562,7 @@ msgstr "{settings.PROJECT_NAME} | Activar cuenta"
msgid "{settings.PROJECT_NAME} | Reset Password"
msgstr "{settings.PROJECT_NAME} | Restablecer contraseña"
-#: engine/vibes_auth/validators.py:13
+#: engine/vibes_auth/validators.py:15
msgid ""
"invalid phone number format. the number must be entered in the format: "
"\"+999999999\". up to 15 digits allowed."
@@ -569,7 +570,7 @@ msgstr ""
"Formato de número de teléfono no válido. El número debe introducirse con el "
"formato \"+999999999\". Se permiten hasta 15 dígitos."
-#: engine/vibes_auth/views.py:30
+#: engine/vibes_auth/views.py:34
msgid ""
"Represents a view for getting a pair of access and refresh tokens and user's "
"data. This view manages the process of handling token-based authentication "
@@ -584,7 +585,7 @@ msgstr ""
"construye sobre una vista de token base y asegura una limitación de tasa "
"adecuada para proteger contra ataques de fuerza bruta."
-#: engine/vibes_auth/views.py:52
+#: engine/vibes_auth/views.py:58
msgid ""
"Handles refreshing of tokens for authentication purposes. This class is used "
"to provide functionality for token refresh operations as part of an "
@@ -599,7 +600,7 @@ msgstr ""
"velocidad definidos. La vista depende del serializador asociado para validar "
"las entradas de actualización de tokens y producir las salidas apropiadas."
-#: engine/vibes_auth/views.py:75
+#: engine/vibes_auth/views.py:83
msgid ""
"Represents a view for verifying JSON Web Tokens (JWT) using specific "
"serialization and validation logic. "
@@ -607,7 +608,7 @@ msgstr ""
"Representa una vista para verificar tokens web JSON (JWT) utilizando una "
"lógica específica de serialización y validación."
-#: engine/vibes_auth/views.py:92
+#: engine/vibes_auth/views.py:103
msgid "the token is invalid"
msgstr "El token no es válido"
@@ -627,10 +628,10 @@ msgstr ""
"recientemente. Esta clase extiende los mixins y GenericViewSet para un "
"manejo robusto de la API."
-#: engine/vibes_auth/viewsets.py:99
+#: engine/vibes_auth/viewsets.py:113
msgid "password reset successfully"
msgstr "La contraseña se ha restablecido correctamente."
-#: engine/vibes_auth/viewsets.py:132
+#: engine/vibes_auth/viewsets.py:161
msgid "account already activated!"
msgstr "Ya ha activado la cuenta..."
diff --git a/engine/vibes_auth/locale/fa_IR/LC_MESSAGES/django.po b/engine/vibes_auth/locale/fa_IR/LC_MESSAGES/django.po
index 8952e39c..196ddce5 100644
--- a/engine/vibes_auth/locale/fa_IR/LC_MESSAGES/django.po
+++ b/engine/vibes_auth/locale/fa_IR/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
#: engine/vibes_auth/admin.py:51 engine/vibes_auth/admin.py:52
-#: engine/vibes_auth/graphene/object_types.py:46
+#: engine/vibes_auth/graphene/object_types.py:54
msgid "balance"
msgstr ""
@@ -25,7 +25,7 @@ msgstr ""
msgid "order"
msgstr ""
-#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:44
+#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:51
msgid "orders"
msgstr ""
@@ -33,7 +33,7 @@ msgstr ""
msgid "personal info"
msgstr ""
-#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:43
+#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:50
msgid "permissions"
msgstr ""
@@ -45,15 +45,15 @@ msgstr ""
msgid "additional info"
msgstr ""
-#: engine/vibes_auth/admin.py:128
+#: engine/vibes_auth/admin.py:135
msgid "You cannot jump over your head!"
msgstr ""
-#: engine/vibes_auth/admin.py:160
+#: engine/vibes_auth/admin.py:167
msgid "Close selected threads"
msgstr ""
-#: engine/vibes_auth/admin.py:164
+#: engine/vibes_auth/admin.py:171
msgid "Open selected threads"
msgstr ""
@@ -85,27 +85,27 @@ msgstr ""
msgid "User messages entrypoint"
msgstr ""
-#: engine/vibes_auth/docs/drf/messaging.py:18
+#: engine/vibes_auth/docs/drf/messaging.py:19
msgid ""
"Anonymous or authenticated non-staff users send messages. Also supports "
"action=ping."
msgstr ""
-#: engine/vibes_auth/docs/drf/messaging.py:28
+#: engine/vibes_auth/docs/drf/messaging.py:30
msgid "Staff inbox control"
msgstr ""
-#: engine/vibes_auth/docs/drf/messaging.py:29
+#: engine/vibes_auth/docs/drf/messaging.py:32
msgid ""
"Staff-only actions: list_open, assign, reply, close, ping. Unified event "
"payloads are emitted."
msgstr ""
-#: engine/vibes_auth/docs/drf/messaging.py:39
+#: engine/vibes_auth/docs/drf/messaging.py:43
msgid "Per-thread staff channel"
msgstr ""
-#: engine/vibes_auth/docs/drf/messaging.py:40
+#: engine/vibes_auth/docs/drf/messaging.py:44
msgid "Reply, close, and ping within a specific thread."
msgstr ""
@@ -133,7 +133,7 @@ msgstr ""
msgid "Verify a token (refresh or access)."
msgstr ""
-#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90
+#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:100
msgid "the token is valid"
msgstr ""
@@ -170,9 +170,9 @@ msgid "confirm a user's password reset"
msgstr ""
#: engine/vibes_auth/docs/drf/viewsets.py:87
-#: engine/vibes_auth/graphene/mutations.py:317
-#: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101
-#: engine/vibes_auth/viewsets.py:84
+#: engine/vibes_auth/graphene/mutations.py:345
+#: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/viewsets.py:94
msgid "passwords do not match"
msgstr ""
@@ -180,107 +180,108 @@ msgstr ""
msgid "activate a user's account"
msgstr ""
-#: engine/vibes_auth/docs/drf/viewsets.py:99
+#: engine/vibes_auth/docs/drf/viewsets.py:101
msgid "activation link is invalid or account already activated"
msgstr ""
-#: engine/vibes_auth/docs/drf/viewsets.py:107
+#: engine/vibes_auth/docs/drf/viewsets.py:111
msgid "merge client-stored recently viewed products"
msgstr ""
-#: engine/vibes_auth/graphene/mutations.py:44
+#: engine/vibes_auth/graphene/mutations.py:47
msgid "the user's b64-encoded uuid who referred the new user to us."
msgstr ""
-#: engine/vibes_auth/graphene/mutations.py:64
+#: engine/vibes_auth/graphene/mutations.py:69
msgid "password too weak"
msgstr ""
-#: engine/vibes_auth/graphene/mutations.py:119
+#: engine/vibes_auth/graphene/mutations.py:129
msgid "malformed email"
msgstr ""
-#: engine/vibes_auth/graphene/mutations.py:126
-#: engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/graphene/mutations.py:141
+#: engine/vibes_auth/serializers.py:117
#, python-brace-format
msgid "malformed phone number: {phone_number}"
msgstr ""
-#: engine/vibes_auth/graphene/mutations.py:148
+#: engine/vibes_auth/graphene/mutations.py:166
#, python-brace-format
msgid "Invalid attribute format: {attribute_pair}"
msgstr ""
-#: engine/vibes_auth/graphene/mutations.py:162
+#: engine/vibes_auth/graphene/mutations.py:183
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr ""
-#: engine/vibes_auth/graphene/mutations.py:270
-#: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146
+#: engine/vibes_auth/graphene/mutations.py:298
+#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180
msgid "activation link is invalid!"
msgstr ""
-#: engine/vibes_auth/graphene/mutations.py:273
+#: engine/vibes_auth/graphene/mutations.py:301
msgid "account already activated..."
msgstr ""
-#: engine/vibes_auth/graphene/mutations.py:280
-#: engine/vibes_auth/graphene/mutations.py:336
+#: engine/vibes_auth/graphene/mutations.py:308
+#: engine/vibes_auth/graphene/mutations.py:370
msgid "something went wrong: {e!s}"
msgstr ""
-#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95
+#: engine/vibes_auth/graphene/mutations.py:352
+#: engine/vibes_auth/viewsets.py:106
msgid "token is invalid!"
msgstr ""
-#: engine/vibes_auth/graphene/object_types.py:40
+#: engine/vibes_auth/graphene/object_types.py:46
msgid ""
"the products this user has viewed most recently (max 48), in reverse‐"
"chronological order"
msgstr ""
-#: engine/vibes_auth/graphene/object_types.py:42
-#: engine/vibes_auth/models.py:185
+#: engine/vibes_auth/graphene/object_types.py:49
+#: engine/vibes_auth/models.py:209
msgid "groups"
msgstr ""
-#: engine/vibes_auth/graphene/object_types.py:45
+#: engine/vibes_auth/graphene/object_types.py:52
msgid "wishlist"
msgstr ""
-#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:70
+#: engine/vibes_auth/graphene/object_types.py:56 engine/vibes_auth/models.py:70
msgid "avatar"
msgstr ""
-#: engine/vibes_auth/graphene/object_types.py:48
+#: engine/vibes_auth/graphene/object_types.py:58
msgid "attributes may be used to store custom data"
msgstr ""
-#: engine/vibes_auth/graphene/object_types.py:50
+#: engine/vibes_auth/graphene/object_types.py:62
#, python-brace-format
msgid ""
"language is one of the {settings.LANGUAGES} with default {settings."
"LANGUAGE_CODE}"
msgstr ""
-#: engine/vibes_auth/graphene/object_types.py:52
+#: engine/vibes_auth/graphene/object_types.py:66
msgid "address set"
msgstr ""
-#: engine/vibes_auth/messaging/services.py:49
+#: engine/vibes_auth/messaging/services.py:52
msgid "Valid email is required for anonymous chats."
msgstr ""
-#: engine/vibes_auth/messaging/services.py:57
+#: engine/vibes_auth/messaging/services.py:65
msgid "Message must be 1..1028 characters."
msgstr ""
-#: engine/vibes_auth/messaging/services.py:93
+#: engine/vibes_auth/messaging/services.py:105
msgid "We're searching for the operator to answer you already, hold by!"
msgstr ""
-#: engine/vibes_auth/messaging/services.py:136
+#: engine/vibes_auth/messaging/services.py:152
msgid "Assignee must be a staff user."
msgstr ""
@@ -343,71 +344,71 @@ msgstr ""
msgid "is_subscribed"
msgstr ""
-#: engine/vibes_auth/models.py:87
+#: engine/vibes_auth/models.py:88
msgid "user's newsletter subscription status"
msgstr ""
-#: engine/vibes_auth/models.py:90
+#: engine/vibes_auth/models.py:92
msgid "activation token"
msgstr ""
-#: engine/vibes_auth/models.py:94
+#: engine/vibes_auth/models.py:101
msgid "attributes"
msgstr ""
-#: engine/vibes_auth/models.py:133
+#: engine/vibes_auth/models.py:141
msgid "user"
msgstr ""
-#: engine/vibes_auth/models.py:134
+#: engine/vibes_auth/models.py:142
msgid "users"
msgstr ""
-#: engine/vibes_auth/models.py:139
+#: engine/vibes_auth/models.py:149
msgid "For anonymous threads"
msgstr ""
-#: engine/vibes_auth/models.py:153
+#: engine/vibes_auth/models.py:173
msgid "Chat thread"
msgstr ""
-#: engine/vibes_auth/models.py:154
+#: engine/vibes_auth/models.py:174
msgid "Chat threads"
msgstr ""
-#: engine/vibes_auth/models.py:159
+#: engine/vibes_auth/models.py:180
msgid "provide user or email for anonymous thread."
msgstr ""
-#: engine/vibes_auth/models.py:161
+#: engine/vibes_auth/models.py:183
msgid "assignee must be a staff user."
msgstr ""
-#: engine/vibes_auth/models.py:177
+#: engine/vibes_auth/models.py:201
msgid "Chat message"
msgstr ""
-#: engine/vibes_auth/models.py:178
+#: engine/vibes_auth/models.py:202
msgid "Chat messages"
msgstr ""
-#: engine/vibes_auth/models.py:184
+#: engine/vibes_auth/models.py:208
msgid "group"
msgstr ""
-#: engine/vibes_auth/models.py:191
+#: engine/vibes_auth/models.py:215
msgid "outstanding token"
msgstr ""
-#: engine/vibes_auth/models.py:192
+#: engine/vibes_auth/models.py:216
msgid "outstanding tokens"
msgstr ""
-#: engine/vibes_auth/models.py:198
+#: engine/vibes_auth/models.py:222
msgid "blacklisted token"
msgstr ""
-#: engine/vibes_auth/models.py:199
+#: engine/vibes_auth/models.py:223
msgid "blacklisted tokens"
msgstr ""
@@ -415,37 +416,37 @@ msgstr ""
msgid "attributes must be a dictionary"
msgstr ""
-#: engine/vibes_auth/serializers.py:93
+#: engine/vibes_auth/serializers.py:97
msgid "business identificator is required when registering as a business"
msgstr ""
-#: engine/vibes_auth/serializers.py:113
+#: engine/vibes_auth/serializers.py:127
#, python-brace-format
msgid "malformed email: {email}"
msgstr ""
-#: engine/vibes_auth/serializers.py:134 engine/vibes_auth/serializers.py:159
-#: engine/vibes_auth/serializers.py:182 engine/vibes_auth/serializers.py:192
+#: engine/vibes_auth/serializers.py:150 engine/vibes_auth/serializers.py:175
+#: engine/vibes_auth/serializers.py:198 engine/vibes_auth/serializers.py:210
msgid "no active account"
msgstr ""
-#: engine/vibes_auth/serializers.py:169
+#: engine/vibes_auth/serializers.py:185
msgid "must set token_class attribute on class."
msgstr ""
-#: engine/vibes_auth/serializers.py:253
+#: engine/vibes_auth/serializers.py:271
msgid "token_blacklisted"
msgstr ""
-#: engine/vibes_auth/serializers.py:258
+#: engine/vibes_auth/serializers.py:276
msgid "invalid token"
msgstr ""
-#: engine/vibes_auth/serializers.py:268
+#: engine/vibes_auth/serializers.py:286
msgid "no user uuid claim present in token"
msgstr ""
-#: engine/vibes_auth/serializers.py:270
+#: engine/vibes_auth/serializers.py:288
msgid "user does not exist"
msgstr ""
@@ -535,13 +536,13 @@ msgstr ""
msgid "{settings.PROJECT_NAME} | Reset Password"
msgstr ""
-#: engine/vibes_auth/validators.py:13
+#: engine/vibes_auth/validators.py:15
msgid ""
"invalid phone number format. the number must be entered in the format: "
"\"+999999999\". up to 15 digits allowed."
msgstr ""
-#: engine/vibes_auth/views.py:30
+#: engine/vibes_auth/views.py:34
msgid ""
"Represents a view for getting a pair of access and refresh tokens and user's "
"data. This view manages the process of handling token-based authentication "
@@ -550,7 +551,7 @@ msgid ""
"proper rate limiting to protect against brute force attacks."
msgstr ""
-#: engine/vibes_auth/views.py:52
+#: engine/vibes_auth/views.py:58
msgid ""
"Handles refreshing of tokens for authentication purposes. This class is used "
"to provide functionality for token refresh operations as part of an "
@@ -559,13 +560,13 @@ msgid ""
"validate token refresh inputs and produce appropriate outputs."
msgstr ""
-#: engine/vibes_auth/views.py:75
+#: engine/vibes_auth/views.py:83
msgid ""
"Represents a view for verifying JSON Web Tokens (JWT) using specific "
"serialization and validation logic. "
msgstr ""
-#: engine/vibes_auth/views.py:92
+#: engine/vibes_auth/views.py:103
msgid "the token is invalid"
msgstr ""
@@ -578,10 +579,10 @@ msgid ""
"class extends the mixins and GenericViewSet for robust API handling."
msgstr ""
-#: engine/vibes_auth/viewsets.py:99
+#: engine/vibes_auth/viewsets.py:113
msgid "password reset successfully"
msgstr ""
-#: engine/vibes_auth/viewsets.py:132
+#: engine/vibes_auth/viewsets.py:161
msgid "account already activated!"
msgstr ""
diff --git a/engine/vibes_auth/locale/fr_FR/LC_MESSAGES/django.po b/engine/vibes_auth/locale/fr_FR/LC_MESSAGES/django.po
index a80e9c04..a268d7f8 100644
--- a/engine/vibes_auth/locale/fr_FR/LC_MESSAGES/django.po
+++ b/engine/vibes_auth/locale/fr_FR/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -14,7 +14,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: engine/vibes_auth/admin.py:51 engine/vibes_auth/admin.py:52
-#: engine/vibes_auth/graphene/object_types.py:46
+#: engine/vibes_auth/graphene/object_types.py:54
msgid "balance"
msgstr "Balance"
@@ -22,7 +22,7 @@ msgstr "Balance"
msgid "order"
msgstr "Commande"
-#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:44
+#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:51
msgid "orders"
msgstr "Commandes"
@@ -30,7 +30,7 @@ msgstr "Commandes"
msgid "personal info"
msgstr "Informations personnelles"
-#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:43
+#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:50
msgid "permissions"
msgstr "Permissions"
@@ -42,15 +42,15 @@ msgstr "Important dates"
msgid "additional info"
msgstr "Informations complémentaires"
-#: engine/vibes_auth/admin.py:128
+#: engine/vibes_auth/admin.py:135
msgid "You cannot jump over your head!"
msgstr "Vous ne pouvez pas sauter par-dessus votre tête !"
-#: engine/vibes_auth/admin.py:160
+#: engine/vibes_auth/admin.py:167
msgid "Close selected threads"
msgstr "Fermer les fils sélectionnés"
-#: engine/vibes_auth/admin.py:164
+#: engine/vibes_auth/admin.py:171
msgid "Open selected threads"
msgstr "Ouvrir les fils sélectionnés"
@@ -82,7 +82,7 @@ msgstr "Système"
msgid "User messages entrypoint"
msgstr "User messages entrypoint"
-#: engine/vibes_auth/docs/drf/messaging.py:18
+#: engine/vibes_auth/docs/drf/messaging.py:19
msgid ""
"Anonymous or authenticated non-staff users send messages. Also supports "
"action=ping."
@@ -90,11 +90,11 @@ msgstr ""
"Les utilisateurs anonymes ou authentifiés qui ne font pas partie du "
"personnel envoient des messages. Supporte également l'action=ping."
-#: engine/vibes_auth/docs/drf/messaging.py:28
+#: engine/vibes_auth/docs/drf/messaging.py:30
msgid "Staff inbox control"
msgstr "Contrôle de la boîte de réception du personnel"
-#: engine/vibes_auth/docs/drf/messaging.py:29
+#: engine/vibes_auth/docs/drf/messaging.py:32
msgid ""
"Staff-only actions: list_open, assign, reply, close, ping. Unified event "
"payloads are emitted."
@@ -102,11 +102,11 @@ msgstr ""
"Actions réservées au personnel : list_open, assign, reply, close, ping. Des "
"charges utiles d'événements unifiés sont émises."
-#: engine/vibes_auth/docs/drf/messaging.py:39
+#: engine/vibes_auth/docs/drf/messaging.py:43
msgid "Per-thread staff channel"
msgstr "Canal du personnel par fil"
-#: engine/vibes_auth/docs/drf/messaging.py:40
+#: engine/vibes_auth/docs/drf/messaging.py:44
msgid "Reply, close, and ping within a specific thread."
msgstr ""
"Répondre, fermer et faire un ping dans un fil de discussion spécifique."
@@ -137,7 +137,7 @@ msgstr "Vérifier un jeton"
msgid "Verify a token (refresh or access)."
msgstr "Vérifier un jeton (rafraîchissement ou accès)."
-#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90
+#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:100
msgid "the token is valid"
msgstr "Le jeton est valide"
@@ -176,9 +176,9 @@ msgid "confirm a user's password reset"
msgstr "Confirmer la réinitialisation du mot de passe d'un utilisateur"
#: engine/vibes_auth/docs/drf/viewsets.py:87
-#: engine/vibes_auth/graphene/mutations.py:317
-#: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101
-#: engine/vibes_auth/viewsets.py:84
+#: engine/vibes_auth/graphene/mutations.py:345
+#: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/viewsets.py:94
msgid "passwords do not match"
msgstr "Les mots de passe ne correspondent pas"
@@ -186,63 +186,64 @@ msgstr "Les mots de passe ne correspondent pas"
msgid "activate a user's account"
msgstr "Activer le compte d'un utilisateur"
-#: engine/vibes_auth/docs/drf/viewsets.py:99
+#: engine/vibes_auth/docs/drf/viewsets.py:101
msgid "activation link is invalid or account already activated"
msgstr "Le lien d'activation n'est pas valide ou le compte est déjà activé"
-#: engine/vibes_auth/docs/drf/viewsets.py:107
+#: engine/vibes_auth/docs/drf/viewsets.py:111
msgid "merge client-stored recently viewed products"
msgstr "Fusionner les produits récemment consultés stockés par le client"
-#: engine/vibes_auth/graphene/mutations.py:44
+#: engine/vibes_auth/graphene/mutations.py:47
msgid "the user's b64-encoded uuid who referred the new user to us."
msgstr ""
"L'uuid b64-encodé de l'utilisateur qui nous a recommandé le nouvel "
"utilisateur."
-#: engine/vibes_auth/graphene/mutations.py:64
+#: engine/vibes_auth/graphene/mutations.py:69
msgid "password too weak"
msgstr "Le mot de passe est trop faible"
-#: engine/vibes_auth/graphene/mutations.py:119
+#: engine/vibes_auth/graphene/mutations.py:129
msgid "malformed email"
msgstr "Courriel malformé"
-#: engine/vibes_auth/graphene/mutations.py:126
-#: engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/graphene/mutations.py:141
+#: engine/vibes_auth/serializers.py:117
#, python-brace-format
msgid "malformed phone number: {phone_number}"
msgstr "Numéro de téléphone malformé : {phone_number} !"
-#: engine/vibes_auth/graphene/mutations.py:148
+#: engine/vibes_auth/graphene/mutations.py:166
#, python-brace-format
msgid "Invalid attribute format: {attribute_pair}"
msgstr "Format d'attribut non valide : {attribute_pair} !"
-#: engine/vibes_auth/graphene/mutations.py:162
+#: engine/vibes_auth/graphene/mutations.py:183
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr "{name} n'existe pas : {uuid} !"
-#: engine/vibes_auth/graphene/mutations.py:270
-#: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146
+#: engine/vibes_auth/graphene/mutations.py:298
+#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180
msgid "activation link is invalid!"
msgstr "Le lien d'activation n'est pas valide !"
-#: engine/vibes_auth/graphene/mutations.py:273
+#: engine/vibes_auth/graphene/mutations.py:301
msgid "account already activated..."
msgstr "Le compte a déjà été activé..."
-#: engine/vibes_auth/graphene/mutations.py:280
-#: engine/vibes_auth/graphene/mutations.py:336
+#: engine/vibes_auth/graphene/mutations.py:308
+#: engine/vibes_auth/graphene/mutations.py:370
msgid "something went wrong: {e!s}"
msgstr "Quelque chose a mal tourné : {e!s}"
-#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95
+#: engine/vibes_auth/graphene/mutations.py:352
+#: engine/vibes_auth/viewsets.py:106
msgid "token is invalid!"
msgstr "Le jeton n'est pas valide !"
-#: engine/vibes_auth/graphene/object_types.py:40
+#: engine/vibes_auth/graphene/object_types.py:46
msgid ""
"the products this user has viewed most recently (max 48), in reverse‐"
"chronological order"
@@ -250,25 +251,25 @@ msgstr ""
"Les produits que cet utilisateur a consultés le plus récemment (max 48), par "
"ordre chronologique inverse."
-#: engine/vibes_auth/graphene/object_types.py:42
-#: engine/vibes_auth/models.py:185
+#: engine/vibes_auth/graphene/object_types.py:49
+#: engine/vibes_auth/models.py:209
msgid "groups"
msgstr "Groupes"
-#: engine/vibes_auth/graphene/object_types.py:45
+#: engine/vibes_auth/graphene/object_types.py:52
msgid "wishlist"
msgstr "Liste de souhaits"
-#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:70
+#: engine/vibes_auth/graphene/object_types.py:56 engine/vibes_auth/models.py:70
msgid "avatar"
msgstr "Avatar"
-#: engine/vibes_auth/graphene/object_types.py:48
+#: engine/vibes_auth/graphene/object_types.py:58
msgid "attributes may be used to store custom data"
msgstr ""
"Les attributs peuvent être utilisés pour stocker des données personnalisées."
-#: engine/vibes_auth/graphene/object_types.py:50
+#: engine/vibes_auth/graphene/object_types.py:62
#, python-brace-format
msgid ""
"language is one of the {settings.LANGUAGES} with default {settings."
@@ -277,24 +278,24 @@ msgstr ""
"La langue est l'une des {settings.LANGUAGES} avec la valeur par défaut "
"{settings.LANGUAGE_CODE}."
-#: engine/vibes_auth/graphene/object_types.py:52
+#: engine/vibes_auth/graphene/object_types.py:66
msgid "address set"
msgstr "Adresses"
-#: engine/vibes_auth/messaging/services.py:49
+#: engine/vibes_auth/messaging/services.py:52
msgid "Valid email is required for anonymous chats."
msgstr "Une adresse électronique valide est requise pour les chats anonymes."
-#: engine/vibes_auth/messaging/services.py:57
+#: engine/vibes_auth/messaging/services.py:65
msgid "Message must be 1..1028 characters."
msgstr "Le message doit comporter de 1 à 1028 caractères."
-#: engine/vibes_auth/messaging/services.py:93
+#: engine/vibes_auth/messaging/services.py:105
msgid "We're searching for the operator to answer you already, hold by!"
msgstr ""
"Nous sommes en train de chercher l'opérateur pour vous répondre, attendez !"
-#: engine/vibes_auth/messaging/services.py:136
+#: engine/vibes_auth/messaging/services.py:152
msgid "Assignee must be a staff user."
msgstr "Le destinataire doit être un utilisateur du personnel."
@@ -366,73 +367,73 @@ msgstr "Désélectionner cette option au lieu de supprimer des comptes"
msgid "is_subscribed"
msgstr "Est abonné"
-#: engine/vibes_auth/models.py:87
+#: engine/vibes_auth/models.py:88
msgid "user's newsletter subscription status"
msgstr "Statut de l'abonnement à la lettre d'information de l'utilisateur"
-#: engine/vibes_auth/models.py:90
+#: engine/vibes_auth/models.py:92
msgid "activation token"
msgstr "Jeton d'activation"
-#: engine/vibes_auth/models.py:94
+#: engine/vibes_auth/models.py:101
msgid "attributes"
msgstr "Attributs"
-#: engine/vibes_auth/models.py:133
+#: engine/vibes_auth/models.py:141
msgid "user"
msgstr "Utilisateur"
-#: engine/vibes_auth/models.py:134
+#: engine/vibes_auth/models.py:142
msgid "users"
msgstr "Utilisateurs"
-#: engine/vibes_auth/models.py:139
+#: engine/vibes_auth/models.py:149
msgid "For anonymous threads"
msgstr "Pour les fils de discussion anonymes"
-#: engine/vibes_auth/models.py:153
+#: engine/vibes_auth/models.py:173
msgid "Chat thread"
msgstr "Fil de discussion"
-#: engine/vibes_auth/models.py:154
+#: engine/vibes_auth/models.py:174
msgid "Chat threads"
msgstr "Fils de discussion"
-#: engine/vibes_auth/models.py:159
+#: engine/vibes_auth/models.py:180
msgid "provide user or email for anonymous thread."
msgstr ""
"Indiquer l'utilisateur ou l'adresse électronique pour le fil de discussion "
"anonyme."
-#: engine/vibes_auth/models.py:161
+#: engine/vibes_auth/models.py:183
msgid "assignee must be a staff user."
msgstr "L'attributaire doit être un utilisateur du personnel."
-#: engine/vibes_auth/models.py:177
+#: engine/vibes_auth/models.py:201
msgid "Chat message"
msgstr "Message de chat"
-#: engine/vibes_auth/models.py:178
+#: engine/vibes_auth/models.py:202
msgid "Chat messages"
msgstr "Messages de chat"
-#: engine/vibes_auth/models.py:184
+#: engine/vibes_auth/models.py:208
msgid "group"
msgstr "Groupe"
-#: engine/vibes_auth/models.py:191
+#: engine/vibes_auth/models.py:215
msgid "outstanding token"
msgstr "Jeton exceptionnel"
-#: engine/vibes_auth/models.py:192
+#: engine/vibes_auth/models.py:216
msgid "outstanding tokens"
msgstr "Jetons en circulation"
-#: engine/vibes_auth/models.py:198
+#: engine/vibes_auth/models.py:222
msgid "blacklisted token"
msgstr "Jeton sur liste noire"
-#: engine/vibes_auth/models.py:199
+#: engine/vibes_auth/models.py:223
msgid "blacklisted tokens"
msgstr "Jetons sur liste noire"
@@ -440,39 +441,39 @@ msgstr "Jetons sur liste noire"
msgid "attributes must be a dictionary"
msgstr "`attributes` doit être un dictionnaire"
-#: engine/vibes_auth/serializers.py:93
+#: engine/vibes_auth/serializers.py:97
msgid "business identificator is required when registering as a business"
msgstr ""
"L'identifiant de l'entreprise est requis lors de l'enregistrement de "
"l'entreprise."
-#: engine/vibes_auth/serializers.py:113
+#: engine/vibes_auth/serializers.py:127
#, python-brace-format
msgid "malformed email: {email}"
msgstr "email malformé : {email}"
-#: engine/vibes_auth/serializers.py:134 engine/vibes_auth/serializers.py:159
-#: engine/vibes_auth/serializers.py:182 engine/vibes_auth/serializers.py:192
+#: engine/vibes_auth/serializers.py:150 engine/vibes_auth/serializers.py:175
+#: engine/vibes_auth/serializers.py:198 engine/vibes_auth/serializers.py:210
msgid "no active account"
msgstr "Aucun compte actif trouvé"
-#: engine/vibes_auth/serializers.py:169
+#: engine/vibes_auth/serializers.py:185
msgid "must set token_class attribute on class."
msgstr "L'attribut token_class doit être défini sur la classe !"
-#: engine/vibes_auth/serializers.py:253
+#: engine/vibes_auth/serializers.py:271
msgid "token_blacklisted"
msgstr "Token sur liste noire"
-#: engine/vibes_auth/serializers.py:258
+#: engine/vibes_auth/serializers.py:276
msgid "invalid token"
msgstr "Jeton non valide"
-#: engine/vibes_auth/serializers.py:268
+#: engine/vibes_auth/serializers.py:286
msgid "no user uuid claim present in token"
msgstr "Aucune revendication d'uuid d'utilisateur n'est présente dans le jeton"
-#: engine/vibes_auth/serializers.py:270
+#: engine/vibes_auth/serializers.py:288
msgid "user does not exist"
msgstr "L'utilisateur n'existe pas"
@@ -574,7 +575,7 @@ msgstr "{settings.PROJECT_NAME} | Activer le compte"
msgid "{settings.PROJECT_NAME} | Reset Password"
msgstr "{settings.PROJECT_NAME} | Réinitialiser le mot de passe"
-#: engine/vibes_auth/validators.py:13
+#: engine/vibes_auth/validators.py:15
msgid ""
"invalid phone number format. the number must be entered in the format: "
"\"+999999999\". up to 15 digits allowed."
@@ -582,7 +583,7 @@ msgstr ""
"Format de numéro de téléphone non valide. Le numéro doit être saisi au "
"format : \"+999999999\". Un maximum de 15 chiffres est autorisé."
-#: engine/vibes_auth/views.py:30
+#: engine/vibes_auth/views.py:34
msgid ""
"Represents a view for getting a pair of access and refresh tokens and user's "
"data. This view manages the process of handling token-based authentication "
@@ -598,7 +599,7 @@ msgstr ""
"vue de jeton de base et assure une limitation de taux appropriée pour se "
"protéger contre les attaques par force brute."
-#: engine/vibes_auth/views.py:52
+#: engine/vibes_auth/views.py:58
msgid ""
"Handles refreshing of tokens for authentication purposes. This class is used "
"to provide functionality for token refresh operations as part of an "
@@ -614,7 +615,7 @@ msgstr ""
"valider les entrées de rafraîchissement de jeton et produire les sorties "
"appropriées."
-#: engine/vibes_auth/views.py:75
+#: engine/vibes_auth/views.py:83
msgid ""
"Represents a view for verifying JSON Web Tokens (JWT) using specific "
"serialization and validation logic. "
@@ -622,7 +623,7 @@ msgstr ""
"Représente une vue permettant de vérifier les jetons Web JSON (JWT) à l'aide "
"d'une logique de sérialisation et de validation spécifique."
-#: engine/vibes_auth/views.py:92
+#: engine/vibes_auth/views.py:103
msgid "the token is invalid"
msgstr "Le jeton n'est pas valide"
@@ -642,10 +643,10 @@ msgstr ""
"éléments récemment consultés. Cette classe étend les mixins et "
"GenericViewSet pour une gestion robuste de l'API."
-#: engine/vibes_auth/viewsets.py:99
+#: engine/vibes_auth/viewsets.py:113
msgid "password reset successfully"
msgstr "Le mot de passe a été réinitialisé avec succès !"
-#: engine/vibes_auth/viewsets.py:132
+#: engine/vibes_auth/viewsets.py:161
msgid "account already activated!"
msgstr "Vous avez déjà activé le compte..."
diff --git a/engine/vibes_auth/locale/he_IL/LC_MESSAGES/django.po b/engine/vibes_auth/locale/he_IL/LC_MESSAGES/django.po
index 197945df..363dd670 100644
--- a/engine/vibes_auth/locale/he_IL/LC_MESSAGES/django.po
+++ b/engine/vibes_auth/locale/he_IL/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -14,7 +14,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: engine/vibes_auth/admin.py:51 engine/vibes_auth/admin.py:52
-#: engine/vibes_auth/graphene/object_types.py:46
+#: engine/vibes_auth/graphene/object_types.py:54
msgid "balance"
msgstr "מאזניים"
@@ -22,7 +22,7 @@ msgstr "מאזניים"
msgid "order"
msgstr "הזמנה"
-#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:44
+#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:51
msgid "orders"
msgstr "הזמנות"
@@ -30,7 +30,7 @@ msgstr "הזמנות"
msgid "personal info"
msgstr "מידע אישי"
-#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:43
+#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:50
msgid "permissions"
msgstr "הרשאות"
@@ -42,15 +42,15 @@ msgstr "תאריכים חשובים"
msgid "additional info"
msgstr "מידע נוסף"
-#: engine/vibes_auth/admin.py:128
+#: engine/vibes_auth/admin.py:135
msgid "You cannot jump over your head!"
msgstr "אי אפשר לקפוץ מעל הראש!"
-#: engine/vibes_auth/admin.py:160
+#: engine/vibes_auth/admin.py:167
msgid "Close selected threads"
msgstr "סגור את השרשורים הנבחרים"
-#: engine/vibes_auth/admin.py:164
+#: engine/vibes_auth/admin.py:171
msgid "Open selected threads"
msgstr "פתח את השרשורים הנבחרים"
@@ -82,7 +82,7 @@ msgstr "מערכת"
msgid "User messages entrypoint"
msgstr "נקודת כניסה להודעות משתמשים"
-#: engine/vibes_auth/docs/drf/messaging.py:18
+#: engine/vibes_auth/docs/drf/messaging.py:19
msgid ""
"Anonymous or authenticated non-staff users send messages. Also supports "
"action=ping."
@@ -90,11 +90,11 @@ msgstr ""
"משתמשים אנונימיים או מאומתים שאינם עובדים שולחים הודעות. תומך גם "
"ב-action=ping."
-#: engine/vibes_auth/docs/drf/messaging.py:28
+#: engine/vibes_auth/docs/drf/messaging.py:30
msgid "Staff inbox control"
msgstr "בקרת תיבת הדואר הנכנס של הצוות"
-#: engine/vibes_auth/docs/drf/messaging.py:29
+#: engine/vibes_auth/docs/drf/messaging.py:32
msgid ""
"Staff-only actions: list_open, assign, reply, close, ping. Unified event "
"payloads are emitted."
@@ -102,11 +102,11 @@ msgstr ""
"פעולות המיועדות לצוות בלבד: list_open, assign, reply, close, ping. נשלחים "
"מטעני אירועים מאוחדים."
-#: engine/vibes_auth/docs/drf/messaging.py:39
+#: engine/vibes_auth/docs/drf/messaging.py:43
msgid "Per-thread staff channel"
msgstr "ערוץ צוות לכל שרשור"
-#: engine/vibes_auth/docs/drf/messaging.py:40
+#: engine/vibes_auth/docs/drf/messaging.py:44
msgid "Reply, close, and ping within a specific thread."
msgstr "השב, סגור ושלח הודעת פינג בתוך שרשור ספציפי."
@@ -134,7 +134,7 @@ msgstr "אמת אסימון"
msgid "Verify a token (refresh or access)."
msgstr "אמת אסימון (רענן או גש)."
-#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90
+#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:100
msgid "the token is valid"
msgstr "האסימון תקף"
@@ -171,9 +171,9 @@ msgid "confirm a user's password reset"
msgstr "אשר את איפוס הסיסמה של המשתמש"
#: engine/vibes_auth/docs/drf/viewsets.py:87
-#: engine/vibes_auth/graphene/mutations.py:317
-#: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101
-#: engine/vibes_auth/viewsets.py:84
+#: engine/vibes_auth/graphene/mutations.py:345
+#: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/viewsets.py:94
msgid "passwords do not match"
msgstr "הסיסמאות אינן תואמות"
@@ -181,84 +181,85 @@ msgstr "הסיסמאות אינן תואמות"
msgid "activate a user's account"
msgstr "הפעל חשבון משתמש"
-#: engine/vibes_auth/docs/drf/viewsets.py:99
+#: engine/vibes_auth/docs/drf/viewsets.py:101
msgid "activation link is invalid or account already activated"
msgstr "קישור ההפעלה אינו תקף או שהחשבון כבר הופעל"
-#: engine/vibes_auth/docs/drf/viewsets.py:107
+#: engine/vibes_auth/docs/drf/viewsets.py:111
msgid "merge client-stored recently viewed products"
msgstr "מיזוג מוצרים שנצפו לאחרונה המאוחסנים אצל הלקוח"
-#: engine/vibes_auth/graphene/mutations.py:44
+#: engine/vibes_auth/graphene/mutations.py:47
msgid "the user's b64-encoded uuid who referred the new user to us."
msgstr "ה-uuid המקודד ב-b64 של המשתמש שהפנה אלינו את המשתמש החדש."
-#: engine/vibes_auth/graphene/mutations.py:64
+#: engine/vibes_auth/graphene/mutations.py:69
msgid "password too weak"
msgstr "הסיסמה חלשה מדי"
-#: engine/vibes_auth/graphene/mutations.py:119
+#: engine/vibes_auth/graphene/mutations.py:129
msgid "malformed email"
msgstr "דוא\"ל פגום"
-#: engine/vibes_auth/graphene/mutations.py:126
-#: engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/graphene/mutations.py:141
+#: engine/vibes_auth/serializers.py:117
#, python-brace-format
msgid "malformed phone number: {phone_number}"
msgstr "מספר טלפון שגוי: {phone_number}!"
-#: engine/vibes_auth/graphene/mutations.py:148
+#: engine/vibes_auth/graphene/mutations.py:166
#, python-brace-format
msgid "Invalid attribute format: {attribute_pair}"
msgstr "פורמט תכונה לא חוקי: {attribute_pair}!"
-#: engine/vibes_auth/graphene/mutations.py:162
+#: engine/vibes_auth/graphene/mutations.py:183
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr "{name} אינו קיים: {uuid}!"
-#: engine/vibes_auth/graphene/mutations.py:270
-#: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146
+#: engine/vibes_auth/graphene/mutations.py:298
+#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180
msgid "activation link is invalid!"
msgstr "קישור ההפעלה אינו תקף!"
-#: engine/vibes_auth/graphene/mutations.py:273
+#: engine/vibes_auth/graphene/mutations.py:301
msgid "account already activated..."
msgstr "החשבון כבר הופעל..."
-#: engine/vibes_auth/graphene/mutations.py:280
-#: engine/vibes_auth/graphene/mutations.py:336
+#: engine/vibes_auth/graphene/mutations.py:308
+#: engine/vibes_auth/graphene/mutations.py:370
msgid "something went wrong: {e!s}"
msgstr "משהו השתבש: {e!s}"
-#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95
+#: engine/vibes_auth/graphene/mutations.py:352
+#: engine/vibes_auth/viewsets.py:106
msgid "token is invalid!"
msgstr "האסימון אינו חוקי!"
-#: engine/vibes_auth/graphene/object_types.py:40
+#: engine/vibes_auth/graphene/object_types.py:46
msgid ""
"the products this user has viewed most recently (max 48), in reverse‐"
"chronological order"
msgstr "המוצרים שהמשתמש צפה בהם לאחרונה (מקסימום 48), בסדר כרונולוגי הפוך."
-#: engine/vibes_auth/graphene/object_types.py:42
-#: engine/vibes_auth/models.py:185
+#: engine/vibes_auth/graphene/object_types.py:49
+#: engine/vibes_auth/models.py:209
msgid "groups"
msgstr "קבוצות"
-#: engine/vibes_auth/graphene/object_types.py:45
+#: engine/vibes_auth/graphene/object_types.py:52
msgid "wishlist"
msgstr "רשימת משאלות"
-#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:70
+#: engine/vibes_auth/graphene/object_types.py:56 engine/vibes_auth/models.py:70
msgid "avatar"
msgstr "אוואטר"
-#: engine/vibes_auth/graphene/object_types.py:48
+#: engine/vibes_auth/graphene/object_types.py:58
msgid "attributes may be used to store custom data"
msgstr "ניתן להשתמש בתכונות לאחסון נתונים מותאמים אישית"
-#: engine/vibes_auth/graphene/object_types.py:50
+#: engine/vibes_auth/graphene/object_types.py:62
#, python-brace-format
msgid ""
"language is one of the {settings.LANGUAGES} with default {settings."
@@ -266,23 +267,23 @@ msgid ""
msgstr ""
"השפה היא אחת ה-{settings.LANGUAGES} עם ברירת מחדל {settings.LANGUAGE_CODE}"
-#: engine/vibes_auth/graphene/object_types.py:52
+#: engine/vibes_auth/graphene/object_types.py:66
msgid "address set"
msgstr "כתובות"
-#: engine/vibes_auth/messaging/services.py:49
+#: engine/vibes_auth/messaging/services.py:52
msgid "Valid email is required for anonymous chats."
msgstr "נדרש כתובת דוא\"ל תקפה לצ'אטים אנונימיים."
-#: engine/vibes_auth/messaging/services.py:57
+#: engine/vibes_auth/messaging/services.py:65
msgid "Message must be 1..1028 characters."
msgstr "ההודעה חייבת להכיל בין 1 ל-1028 תווים."
-#: engine/vibes_auth/messaging/services.py:93
+#: engine/vibes_auth/messaging/services.py:105
msgid "We're searching for the operator to answer you already, hold by!"
msgstr "אנו מחפשים את המפעיל שיענה לך, אנא המתן!"
-#: engine/vibes_auth/messaging/services.py:136
+#: engine/vibes_auth/messaging/services.py:152
msgid "Assignee must be a staff user."
msgstr "המקבל חייב להיות משתמש צוות."
@@ -350,71 +351,71 @@ msgstr "בטל את הבחירה במקום למחוק חשבונות"
msgid "is_subscribed"
msgstr "מנוי"
-#: engine/vibes_auth/models.py:87
+#: engine/vibes_auth/models.py:88
msgid "user's newsletter subscription status"
msgstr "סטטוס המנוי לניוזלטר של המשתמש"
-#: engine/vibes_auth/models.py:90
+#: engine/vibes_auth/models.py:92
msgid "activation token"
msgstr "אסימון הפעלה"
-#: engine/vibes_auth/models.py:94
+#: engine/vibes_auth/models.py:101
msgid "attributes"
msgstr "תכונות"
-#: engine/vibes_auth/models.py:133
+#: engine/vibes_auth/models.py:141
msgid "user"
msgstr "משתמש"
-#: engine/vibes_auth/models.py:134
+#: engine/vibes_auth/models.py:142
msgid "users"
msgstr "משתמשים"
-#: engine/vibes_auth/models.py:139
+#: engine/vibes_auth/models.py:149
msgid "For anonymous threads"
msgstr "לשרשורים אנונימיים"
-#: engine/vibes_auth/models.py:153
+#: engine/vibes_auth/models.py:173
msgid "Chat thread"
msgstr "שרשור צ'אט"
-#: engine/vibes_auth/models.py:154
+#: engine/vibes_auth/models.py:174
msgid "Chat threads"
msgstr "שרשורי צ'אט"
-#: engine/vibes_auth/models.py:159
+#: engine/vibes_auth/models.py:180
msgid "provide user or email for anonymous thread."
msgstr "ציין משתמש או דוא\"ל עבור שרשור אנונימי."
-#: engine/vibes_auth/models.py:161
+#: engine/vibes_auth/models.py:183
msgid "assignee must be a staff user."
msgstr "המקבל חייב להיות משתמש צוות."
-#: engine/vibes_auth/models.py:177
+#: engine/vibes_auth/models.py:201
msgid "Chat message"
msgstr "הודעת צ'אט"
-#: engine/vibes_auth/models.py:178
+#: engine/vibes_auth/models.py:202
msgid "Chat messages"
msgstr "הודעות צ'אט"
-#: engine/vibes_auth/models.py:184
+#: engine/vibes_auth/models.py:208
msgid "group"
msgstr "קבוצה"
-#: engine/vibes_auth/models.py:191
+#: engine/vibes_auth/models.py:215
msgid "outstanding token"
msgstr "אסימון יוצא מן הכלל"
-#: engine/vibes_auth/models.py:192
+#: engine/vibes_auth/models.py:216
msgid "outstanding tokens"
msgstr "אסימונים מצטיינים"
-#: engine/vibes_auth/models.py:198
+#: engine/vibes_auth/models.py:222
msgid "blacklisted token"
msgstr "אסימון ברשימה השחורה"
-#: engine/vibes_auth/models.py:199
+#: engine/vibes_auth/models.py:223
msgid "blacklisted tokens"
msgstr "אסימונים ברשימה השחורה"
@@ -422,37 +423,37 @@ msgstr "אסימונים ברשימה השחורה"
msgid "attributes must be a dictionary"
msgstr "`attributes` חייב להיות מילון"
-#: engine/vibes_auth/serializers.py:93
+#: engine/vibes_auth/serializers.py:97
msgid "business identificator is required when registering as a business"
msgstr "יש צורך במזהה עסקי בעת רישום כעסק"
-#: engine/vibes_auth/serializers.py:113
+#: engine/vibes_auth/serializers.py:127
#, python-brace-format
msgid "malformed email: {email}"
msgstr "דוא\"ל פגום: {email}"
-#: engine/vibes_auth/serializers.py:134 engine/vibes_auth/serializers.py:159
-#: engine/vibes_auth/serializers.py:182 engine/vibes_auth/serializers.py:192
+#: engine/vibes_auth/serializers.py:150 engine/vibes_auth/serializers.py:175
+#: engine/vibes_auth/serializers.py:198 engine/vibes_auth/serializers.py:210
msgid "no active account"
msgstr "לא נמצא חשבון פעיל"
-#: engine/vibes_auth/serializers.py:169
+#: engine/vibes_auth/serializers.py:185
msgid "must set token_class attribute on class."
msgstr "יש להגדיר את התכונה token_class בכיתה!"
-#: engine/vibes_auth/serializers.py:253
+#: engine/vibes_auth/serializers.py:271
msgid "token_blacklisted"
msgstr "אסימון ברשימה השחורה"
-#: engine/vibes_auth/serializers.py:258
+#: engine/vibes_auth/serializers.py:276
msgid "invalid token"
msgstr "אסימון לא חוקי"
-#: engine/vibes_auth/serializers.py:268
+#: engine/vibes_auth/serializers.py:286
msgid "no user uuid claim present in token"
msgstr "אין תביעה uuid של משתמש נוכחת באסימון"
-#: engine/vibes_auth/serializers.py:270
+#: engine/vibes_auth/serializers.py:288
msgid "user does not exist"
msgstr "המשתמש אינו קיים"
@@ -548,7 +549,7 @@ msgstr "{settings.PROJECT_NAME} | הפעל חשבון"
msgid "{settings.PROJECT_NAME} | Reset Password"
msgstr "{settings.PROJECT_NAME} | איפוס סיסמה"
-#: engine/vibes_auth/validators.py:13
+#: engine/vibes_auth/validators.py:15
msgid ""
"invalid phone number format. the number must be entered in the format: "
"\"+999999999\". up to 15 digits allowed."
@@ -556,7 +557,7 @@ msgstr ""
"פורמט מספר טלפון לא חוקי. יש להזין את המספר בפורמט: \"+999999999\". מותר "
"להזין עד 15 ספרות."
-#: engine/vibes_auth/views.py:30
+#: engine/vibes_auth/views.py:34
msgid ""
"Represents a view for getting a pair of access and refresh tokens and user's "
"data. This view manages the process of handling token-based authentication "
@@ -569,7 +570,7 @@ msgstr ""
"(גישה ורענון) באמצעות אישורים שסופקו. היא בנויה על גבי תצוגת אסימון בסיסית "
"ומבטיחה הגבלת קצב נאותה כדי להגן מפני התקפות כוח ברוט."
-#: engine/vibes_auth/views.py:52
+#: engine/vibes_auth/views.py:58
msgid ""
"Handles refreshing of tokens for authentication purposes. This class is used "
"to provide functionality for token refresh operations as part of an "
@@ -582,7 +583,7 @@ msgstr ""
"אסימון רענן בתוך מגבלות קצב מוגדרות. התצוגה מסתמכת על הסריאלייזר המשויך כדי "
"לאמת קלטות רענון אסימונים ולייצר פלט מתאים."
-#: engine/vibes_auth/views.py:75
+#: engine/vibes_auth/views.py:83
msgid ""
"Represents a view for verifying JSON Web Tokens (JWT) using specific "
"serialization and validation logic. "
@@ -590,7 +591,7 @@ msgstr ""
"מייצג תצוגה לאימות אסימוני JSON Web Tokens (JWT) באמצעות לוגיקת סידוריות "
"ואימות ספציפית."
-#: engine/vibes_auth/views.py:92
+#: engine/vibes_auth/views.py:103
msgid "the token is invalid"
msgstr "האסימון אינו חוקי"
@@ -607,10 +608,10 @@ msgstr ""
"אווטאר, הפעלת חשבון ומיזוג פריטים שנצפו לאחרונה. מחלקה זו מרחיבה את mixins "
"ו-GenericViewSet לטיפול חזק ב-API."
-#: engine/vibes_auth/viewsets.py:99
+#: engine/vibes_auth/viewsets.py:113
msgid "password reset successfully"
msgstr "הסיסמה אופסה בהצלחה!"
-#: engine/vibes_auth/viewsets.py:132
+#: engine/vibes_auth/viewsets.py:161
msgid "account already activated!"
msgstr "כבר הפעלת את החשבון..."
diff --git a/engine/vibes_auth/locale/hi_IN/LC_MESSAGES/django.po b/engine/vibes_auth/locale/hi_IN/LC_MESSAGES/django.po
index 5d358f84..3ca2b03e 100644
--- a/engine/vibes_auth/locale/hi_IN/LC_MESSAGES/django.po
+++ b/engine/vibes_auth/locale/hi_IN/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: LANGUAGE \n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
#: engine/vibes_auth/admin.py:51 engine/vibes_auth/admin.py:52
-#: engine/vibes_auth/graphene/object_types.py:46
+#: engine/vibes_auth/graphene/object_types.py:54
msgid "balance"
msgstr ""
@@ -25,7 +25,7 @@ msgstr ""
msgid "order"
msgstr ""
-#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:44
+#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:51
msgid "orders"
msgstr ""
@@ -33,7 +33,7 @@ msgstr ""
msgid "personal info"
msgstr ""
-#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:43
+#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:50
msgid "permissions"
msgstr ""
@@ -45,15 +45,15 @@ msgstr ""
msgid "additional info"
msgstr ""
-#: engine/vibes_auth/admin.py:128
+#: engine/vibes_auth/admin.py:135
msgid "You cannot jump over your head!"
msgstr ""
-#: engine/vibes_auth/admin.py:160
+#: engine/vibes_auth/admin.py:167
msgid "Close selected threads"
msgstr ""
-#: engine/vibes_auth/admin.py:164
+#: engine/vibes_auth/admin.py:171
msgid "Open selected threads"
msgstr ""
@@ -85,27 +85,27 @@ msgstr ""
msgid "User messages entrypoint"
msgstr ""
-#: engine/vibes_auth/docs/drf/messaging.py:18
+#: engine/vibes_auth/docs/drf/messaging.py:19
msgid ""
"Anonymous or authenticated non-staff users send messages. Also supports "
"action=ping."
msgstr ""
-#: engine/vibes_auth/docs/drf/messaging.py:28
+#: engine/vibes_auth/docs/drf/messaging.py:30
msgid "Staff inbox control"
msgstr ""
-#: engine/vibes_auth/docs/drf/messaging.py:29
+#: engine/vibes_auth/docs/drf/messaging.py:32
msgid ""
"Staff-only actions: list_open, assign, reply, close, ping. Unified event "
"payloads are emitted."
msgstr ""
-#: engine/vibes_auth/docs/drf/messaging.py:39
+#: engine/vibes_auth/docs/drf/messaging.py:43
msgid "Per-thread staff channel"
msgstr ""
-#: engine/vibes_auth/docs/drf/messaging.py:40
+#: engine/vibes_auth/docs/drf/messaging.py:44
msgid "Reply, close, and ping within a specific thread."
msgstr ""
@@ -133,7 +133,7 @@ msgstr ""
msgid "Verify a token (refresh or access)."
msgstr ""
-#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90
+#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:100
msgid "the token is valid"
msgstr ""
@@ -170,9 +170,9 @@ msgid "confirm a user's password reset"
msgstr ""
#: engine/vibes_auth/docs/drf/viewsets.py:87
-#: engine/vibes_auth/graphene/mutations.py:317
-#: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101
-#: engine/vibes_auth/viewsets.py:84
+#: engine/vibes_auth/graphene/mutations.py:345
+#: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/viewsets.py:94
msgid "passwords do not match"
msgstr ""
@@ -180,107 +180,108 @@ msgstr ""
msgid "activate a user's account"
msgstr ""
-#: engine/vibes_auth/docs/drf/viewsets.py:99
+#: engine/vibes_auth/docs/drf/viewsets.py:101
msgid "activation link is invalid or account already activated"
msgstr ""
-#: engine/vibes_auth/docs/drf/viewsets.py:107
+#: engine/vibes_auth/docs/drf/viewsets.py:111
msgid "merge client-stored recently viewed products"
msgstr ""
-#: engine/vibes_auth/graphene/mutations.py:44
+#: engine/vibes_auth/graphene/mutations.py:47
msgid "the user's b64-encoded uuid who referred the new user to us."
msgstr ""
-#: engine/vibes_auth/graphene/mutations.py:64
+#: engine/vibes_auth/graphene/mutations.py:69
msgid "password too weak"
msgstr ""
-#: engine/vibes_auth/graphene/mutations.py:119
+#: engine/vibes_auth/graphene/mutations.py:129
msgid "malformed email"
msgstr ""
-#: engine/vibes_auth/graphene/mutations.py:126
-#: engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/graphene/mutations.py:141
+#: engine/vibes_auth/serializers.py:117
#, python-brace-format
msgid "malformed phone number: {phone_number}"
msgstr ""
-#: engine/vibes_auth/graphene/mutations.py:148
+#: engine/vibes_auth/graphene/mutations.py:166
#, python-brace-format
msgid "Invalid attribute format: {attribute_pair}"
msgstr ""
-#: engine/vibes_auth/graphene/mutations.py:162
+#: engine/vibes_auth/graphene/mutations.py:183
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr ""
-#: engine/vibes_auth/graphene/mutations.py:270
-#: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146
+#: engine/vibes_auth/graphene/mutations.py:298
+#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180
msgid "activation link is invalid!"
msgstr ""
-#: engine/vibes_auth/graphene/mutations.py:273
+#: engine/vibes_auth/graphene/mutations.py:301
msgid "account already activated..."
msgstr ""
-#: engine/vibes_auth/graphene/mutations.py:280
-#: engine/vibes_auth/graphene/mutations.py:336
+#: engine/vibes_auth/graphene/mutations.py:308
+#: engine/vibes_auth/graphene/mutations.py:370
msgid "something went wrong: {e!s}"
msgstr ""
-#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95
+#: engine/vibes_auth/graphene/mutations.py:352
+#: engine/vibes_auth/viewsets.py:106
msgid "token is invalid!"
msgstr ""
-#: engine/vibes_auth/graphene/object_types.py:40
+#: engine/vibes_auth/graphene/object_types.py:46
msgid ""
"the products this user has viewed most recently (max 48), in reverse‐"
"chronological order"
msgstr ""
-#: engine/vibes_auth/graphene/object_types.py:42
-#: engine/vibes_auth/models.py:185
+#: engine/vibes_auth/graphene/object_types.py:49
+#: engine/vibes_auth/models.py:209
msgid "groups"
msgstr ""
-#: engine/vibes_auth/graphene/object_types.py:45
+#: engine/vibes_auth/graphene/object_types.py:52
msgid "wishlist"
msgstr ""
-#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:70
+#: engine/vibes_auth/graphene/object_types.py:56 engine/vibes_auth/models.py:70
msgid "avatar"
msgstr ""
-#: engine/vibes_auth/graphene/object_types.py:48
+#: engine/vibes_auth/graphene/object_types.py:58
msgid "attributes may be used to store custom data"
msgstr ""
-#: engine/vibes_auth/graphene/object_types.py:50
+#: engine/vibes_auth/graphene/object_types.py:62
#, python-brace-format
msgid ""
"language is one of the {settings.LANGUAGES} with default {settings."
"LANGUAGE_CODE}"
msgstr ""
-#: engine/vibes_auth/graphene/object_types.py:52
+#: engine/vibes_auth/graphene/object_types.py:66
msgid "address set"
msgstr ""
-#: engine/vibes_auth/messaging/services.py:49
+#: engine/vibes_auth/messaging/services.py:52
msgid "Valid email is required for anonymous chats."
msgstr ""
-#: engine/vibes_auth/messaging/services.py:57
+#: engine/vibes_auth/messaging/services.py:65
msgid "Message must be 1..1028 characters."
msgstr ""
-#: engine/vibes_auth/messaging/services.py:93
+#: engine/vibes_auth/messaging/services.py:105
msgid "We're searching for the operator to answer you already, hold by!"
msgstr ""
-#: engine/vibes_auth/messaging/services.py:136
+#: engine/vibes_auth/messaging/services.py:152
msgid "Assignee must be a staff user."
msgstr ""
@@ -343,71 +344,71 @@ msgstr ""
msgid "is_subscribed"
msgstr ""
-#: engine/vibes_auth/models.py:87
+#: engine/vibes_auth/models.py:88
msgid "user's newsletter subscription status"
msgstr ""
-#: engine/vibes_auth/models.py:90
+#: engine/vibes_auth/models.py:92
msgid "activation token"
msgstr ""
-#: engine/vibes_auth/models.py:94
+#: engine/vibes_auth/models.py:101
msgid "attributes"
msgstr ""
-#: engine/vibes_auth/models.py:133
+#: engine/vibes_auth/models.py:141
msgid "user"
msgstr ""
-#: engine/vibes_auth/models.py:134
+#: engine/vibes_auth/models.py:142
msgid "users"
msgstr ""
-#: engine/vibes_auth/models.py:139
+#: engine/vibes_auth/models.py:149
msgid "For anonymous threads"
msgstr ""
-#: engine/vibes_auth/models.py:153
+#: engine/vibes_auth/models.py:173
msgid "Chat thread"
msgstr ""
-#: engine/vibes_auth/models.py:154
+#: engine/vibes_auth/models.py:174
msgid "Chat threads"
msgstr ""
-#: engine/vibes_auth/models.py:159
+#: engine/vibes_auth/models.py:180
msgid "provide user or email for anonymous thread."
msgstr ""
-#: engine/vibes_auth/models.py:161
+#: engine/vibes_auth/models.py:183
msgid "assignee must be a staff user."
msgstr ""
-#: engine/vibes_auth/models.py:177
+#: engine/vibes_auth/models.py:201
msgid "Chat message"
msgstr ""
-#: engine/vibes_auth/models.py:178
+#: engine/vibes_auth/models.py:202
msgid "Chat messages"
msgstr ""
-#: engine/vibes_auth/models.py:184
+#: engine/vibes_auth/models.py:208
msgid "group"
msgstr ""
-#: engine/vibes_auth/models.py:191
+#: engine/vibes_auth/models.py:215
msgid "outstanding token"
msgstr ""
-#: engine/vibes_auth/models.py:192
+#: engine/vibes_auth/models.py:216
msgid "outstanding tokens"
msgstr ""
-#: engine/vibes_auth/models.py:198
+#: engine/vibes_auth/models.py:222
msgid "blacklisted token"
msgstr ""
-#: engine/vibes_auth/models.py:199
+#: engine/vibes_auth/models.py:223
msgid "blacklisted tokens"
msgstr ""
@@ -415,37 +416,37 @@ msgstr ""
msgid "attributes must be a dictionary"
msgstr ""
-#: engine/vibes_auth/serializers.py:93
+#: engine/vibes_auth/serializers.py:97
msgid "business identificator is required when registering as a business"
msgstr ""
-#: engine/vibes_auth/serializers.py:113
+#: engine/vibes_auth/serializers.py:127
#, python-brace-format
msgid "malformed email: {email}"
msgstr ""
-#: engine/vibes_auth/serializers.py:134 engine/vibes_auth/serializers.py:159
-#: engine/vibes_auth/serializers.py:182 engine/vibes_auth/serializers.py:192
+#: engine/vibes_auth/serializers.py:150 engine/vibes_auth/serializers.py:175
+#: engine/vibes_auth/serializers.py:198 engine/vibes_auth/serializers.py:210
msgid "no active account"
msgstr ""
-#: engine/vibes_auth/serializers.py:169
+#: engine/vibes_auth/serializers.py:185
msgid "must set token_class attribute on class."
msgstr ""
-#: engine/vibes_auth/serializers.py:253
+#: engine/vibes_auth/serializers.py:271
msgid "token_blacklisted"
msgstr ""
-#: engine/vibes_auth/serializers.py:258
+#: engine/vibes_auth/serializers.py:276
msgid "invalid token"
msgstr ""
-#: engine/vibes_auth/serializers.py:268
+#: engine/vibes_auth/serializers.py:286
msgid "no user uuid claim present in token"
msgstr ""
-#: engine/vibes_auth/serializers.py:270
+#: engine/vibes_auth/serializers.py:288
msgid "user does not exist"
msgstr ""
@@ -535,13 +536,13 @@ msgstr ""
msgid "{settings.PROJECT_NAME} | Reset Password"
msgstr ""
-#: engine/vibes_auth/validators.py:13
+#: engine/vibes_auth/validators.py:15
msgid ""
"invalid phone number format. the number must be entered in the format: "
"\"+999999999\". up to 15 digits allowed."
msgstr ""
-#: engine/vibes_auth/views.py:30
+#: engine/vibes_auth/views.py:34
msgid ""
"Represents a view for getting a pair of access and refresh tokens and user's "
"data. This view manages the process of handling token-based authentication "
@@ -550,7 +551,7 @@ msgid ""
"proper rate limiting to protect against brute force attacks."
msgstr ""
-#: engine/vibes_auth/views.py:52
+#: engine/vibes_auth/views.py:58
msgid ""
"Handles refreshing of tokens for authentication purposes. This class is used "
"to provide functionality for token refresh operations as part of an "
@@ -559,13 +560,13 @@ msgid ""
"validate token refresh inputs and produce appropriate outputs."
msgstr ""
-#: engine/vibes_auth/views.py:75
+#: engine/vibes_auth/views.py:83
msgid ""
"Represents a view for verifying JSON Web Tokens (JWT) using specific "
"serialization and validation logic. "
msgstr ""
-#: engine/vibes_auth/views.py:92
+#: engine/vibes_auth/views.py:103
msgid "the token is invalid"
msgstr ""
@@ -578,10 +579,10 @@ msgid ""
"class extends the mixins and GenericViewSet for robust API handling."
msgstr ""
-#: engine/vibes_auth/viewsets.py:99
+#: engine/vibes_auth/viewsets.py:113
msgid "password reset successfully"
msgstr ""
-#: engine/vibes_auth/viewsets.py:132
+#: engine/vibes_auth/viewsets.py:161
msgid "account already activated!"
msgstr ""
diff --git a/engine/vibes_auth/locale/hr_HR/LC_MESSAGES/django.po b/engine/vibes_auth/locale/hr_HR/LC_MESSAGES/django.po
index 8952e39c..196ddce5 100644
--- a/engine/vibes_auth/locale/hr_HR/LC_MESSAGES/django.po
+++ b/engine/vibes_auth/locale/hr_HR/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
#: engine/vibes_auth/admin.py:51 engine/vibes_auth/admin.py:52
-#: engine/vibes_auth/graphene/object_types.py:46
+#: engine/vibes_auth/graphene/object_types.py:54
msgid "balance"
msgstr ""
@@ -25,7 +25,7 @@ msgstr ""
msgid "order"
msgstr ""
-#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:44
+#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:51
msgid "orders"
msgstr ""
@@ -33,7 +33,7 @@ msgstr ""
msgid "personal info"
msgstr ""
-#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:43
+#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:50
msgid "permissions"
msgstr ""
@@ -45,15 +45,15 @@ msgstr ""
msgid "additional info"
msgstr ""
-#: engine/vibes_auth/admin.py:128
+#: engine/vibes_auth/admin.py:135
msgid "You cannot jump over your head!"
msgstr ""
-#: engine/vibes_auth/admin.py:160
+#: engine/vibes_auth/admin.py:167
msgid "Close selected threads"
msgstr ""
-#: engine/vibes_auth/admin.py:164
+#: engine/vibes_auth/admin.py:171
msgid "Open selected threads"
msgstr ""
@@ -85,27 +85,27 @@ msgstr ""
msgid "User messages entrypoint"
msgstr ""
-#: engine/vibes_auth/docs/drf/messaging.py:18
+#: engine/vibes_auth/docs/drf/messaging.py:19
msgid ""
"Anonymous or authenticated non-staff users send messages. Also supports "
"action=ping."
msgstr ""
-#: engine/vibes_auth/docs/drf/messaging.py:28
+#: engine/vibes_auth/docs/drf/messaging.py:30
msgid "Staff inbox control"
msgstr ""
-#: engine/vibes_auth/docs/drf/messaging.py:29
+#: engine/vibes_auth/docs/drf/messaging.py:32
msgid ""
"Staff-only actions: list_open, assign, reply, close, ping. Unified event "
"payloads are emitted."
msgstr ""
-#: engine/vibes_auth/docs/drf/messaging.py:39
+#: engine/vibes_auth/docs/drf/messaging.py:43
msgid "Per-thread staff channel"
msgstr ""
-#: engine/vibes_auth/docs/drf/messaging.py:40
+#: engine/vibes_auth/docs/drf/messaging.py:44
msgid "Reply, close, and ping within a specific thread."
msgstr ""
@@ -133,7 +133,7 @@ msgstr ""
msgid "Verify a token (refresh or access)."
msgstr ""
-#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90
+#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:100
msgid "the token is valid"
msgstr ""
@@ -170,9 +170,9 @@ msgid "confirm a user's password reset"
msgstr ""
#: engine/vibes_auth/docs/drf/viewsets.py:87
-#: engine/vibes_auth/graphene/mutations.py:317
-#: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101
-#: engine/vibes_auth/viewsets.py:84
+#: engine/vibes_auth/graphene/mutations.py:345
+#: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/viewsets.py:94
msgid "passwords do not match"
msgstr ""
@@ -180,107 +180,108 @@ msgstr ""
msgid "activate a user's account"
msgstr ""
-#: engine/vibes_auth/docs/drf/viewsets.py:99
+#: engine/vibes_auth/docs/drf/viewsets.py:101
msgid "activation link is invalid or account already activated"
msgstr ""
-#: engine/vibes_auth/docs/drf/viewsets.py:107
+#: engine/vibes_auth/docs/drf/viewsets.py:111
msgid "merge client-stored recently viewed products"
msgstr ""
-#: engine/vibes_auth/graphene/mutations.py:44
+#: engine/vibes_auth/graphene/mutations.py:47
msgid "the user's b64-encoded uuid who referred the new user to us."
msgstr ""
-#: engine/vibes_auth/graphene/mutations.py:64
+#: engine/vibes_auth/graphene/mutations.py:69
msgid "password too weak"
msgstr ""
-#: engine/vibes_auth/graphene/mutations.py:119
+#: engine/vibes_auth/graphene/mutations.py:129
msgid "malformed email"
msgstr ""
-#: engine/vibes_auth/graphene/mutations.py:126
-#: engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/graphene/mutations.py:141
+#: engine/vibes_auth/serializers.py:117
#, python-brace-format
msgid "malformed phone number: {phone_number}"
msgstr ""
-#: engine/vibes_auth/graphene/mutations.py:148
+#: engine/vibes_auth/graphene/mutations.py:166
#, python-brace-format
msgid "Invalid attribute format: {attribute_pair}"
msgstr ""
-#: engine/vibes_auth/graphene/mutations.py:162
+#: engine/vibes_auth/graphene/mutations.py:183
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr ""
-#: engine/vibes_auth/graphene/mutations.py:270
-#: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146
+#: engine/vibes_auth/graphene/mutations.py:298
+#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180
msgid "activation link is invalid!"
msgstr ""
-#: engine/vibes_auth/graphene/mutations.py:273
+#: engine/vibes_auth/graphene/mutations.py:301
msgid "account already activated..."
msgstr ""
-#: engine/vibes_auth/graphene/mutations.py:280
-#: engine/vibes_auth/graphene/mutations.py:336
+#: engine/vibes_auth/graphene/mutations.py:308
+#: engine/vibes_auth/graphene/mutations.py:370
msgid "something went wrong: {e!s}"
msgstr ""
-#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95
+#: engine/vibes_auth/graphene/mutations.py:352
+#: engine/vibes_auth/viewsets.py:106
msgid "token is invalid!"
msgstr ""
-#: engine/vibes_auth/graphene/object_types.py:40
+#: engine/vibes_auth/graphene/object_types.py:46
msgid ""
"the products this user has viewed most recently (max 48), in reverse‐"
"chronological order"
msgstr ""
-#: engine/vibes_auth/graphene/object_types.py:42
-#: engine/vibes_auth/models.py:185
+#: engine/vibes_auth/graphene/object_types.py:49
+#: engine/vibes_auth/models.py:209
msgid "groups"
msgstr ""
-#: engine/vibes_auth/graphene/object_types.py:45
+#: engine/vibes_auth/graphene/object_types.py:52
msgid "wishlist"
msgstr ""
-#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:70
+#: engine/vibes_auth/graphene/object_types.py:56 engine/vibes_auth/models.py:70
msgid "avatar"
msgstr ""
-#: engine/vibes_auth/graphene/object_types.py:48
+#: engine/vibes_auth/graphene/object_types.py:58
msgid "attributes may be used to store custom data"
msgstr ""
-#: engine/vibes_auth/graphene/object_types.py:50
+#: engine/vibes_auth/graphene/object_types.py:62
#, python-brace-format
msgid ""
"language is one of the {settings.LANGUAGES} with default {settings."
"LANGUAGE_CODE}"
msgstr ""
-#: engine/vibes_auth/graphene/object_types.py:52
+#: engine/vibes_auth/graphene/object_types.py:66
msgid "address set"
msgstr ""
-#: engine/vibes_auth/messaging/services.py:49
+#: engine/vibes_auth/messaging/services.py:52
msgid "Valid email is required for anonymous chats."
msgstr ""
-#: engine/vibes_auth/messaging/services.py:57
+#: engine/vibes_auth/messaging/services.py:65
msgid "Message must be 1..1028 characters."
msgstr ""
-#: engine/vibes_auth/messaging/services.py:93
+#: engine/vibes_auth/messaging/services.py:105
msgid "We're searching for the operator to answer you already, hold by!"
msgstr ""
-#: engine/vibes_auth/messaging/services.py:136
+#: engine/vibes_auth/messaging/services.py:152
msgid "Assignee must be a staff user."
msgstr ""
@@ -343,71 +344,71 @@ msgstr ""
msgid "is_subscribed"
msgstr ""
-#: engine/vibes_auth/models.py:87
+#: engine/vibes_auth/models.py:88
msgid "user's newsletter subscription status"
msgstr ""
-#: engine/vibes_auth/models.py:90
+#: engine/vibes_auth/models.py:92
msgid "activation token"
msgstr ""
-#: engine/vibes_auth/models.py:94
+#: engine/vibes_auth/models.py:101
msgid "attributes"
msgstr ""
-#: engine/vibes_auth/models.py:133
+#: engine/vibes_auth/models.py:141
msgid "user"
msgstr ""
-#: engine/vibes_auth/models.py:134
+#: engine/vibes_auth/models.py:142
msgid "users"
msgstr ""
-#: engine/vibes_auth/models.py:139
+#: engine/vibes_auth/models.py:149
msgid "For anonymous threads"
msgstr ""
-#: engine/vibes_auth/models.py:153
+#: engine/vibes_auth/models.py:173
msgid "Chat thread"
msgstr ""
-#: engine/vibes_auth/models.py:154
+#: engine/vibes_auth/models.py:174
msgid "Chat threads"
msgstr ""
-#: engine/vibes_auth/models.py:159
+#: engine/vibes_auth/models.py:180
msgid "provide user or email for anonymous thread."
msgstr ""
-#: engine/vibes_auth/models.py:161
+#: engine/vibes_auth/models.py:183
msgid "assignee must be a staff user."
msgstr ""
-#: engine/vibes_auth/models.py:177
+#: engine/vibes_auth/models.py:201
msgid "Chat message"
msgstr ""
-#: engine/vibes_auth/models.py:178
+#: engine/vibes_auth/models.py:202
msgid "Chat messages"
msgstr ""
-#: engine/vibes_auth/models.py:184
+#: engine/vibes_auth/models.py:208
msgid "group"
msgstr ""
-#: engine/vibes_auth/models.py:191
+#: engine/vibes_auth/models.py:215
msgid "outstanding token"
msgstr ""
-#: engine/vibes_auth/models.py:192
+#: engine/vibes_auth/models.py:216
msgid "outstanding tokens"
msgstr ""
-#: engine/vibes_auth/models.py:198
+#: engine/vibes_auth/models.py:222
msgid "blacklisted token"
msgstr ""
-#: engine/vibes_auth/models.py:199
+#: engine/vibes_auth/models.py:223
msgid "blacklisted tokens"
msgstr ""
@@ -415,37 +416,37 @@ msgstr ""
msgid "attributes must be a dictionary"
msgstr ""
-#: engine/vibes_auth/serializers.py:93
+#: engine/vibes_auth/serializers.py:97
msgid "business identificator is required when registering as a business"
msgstr ""
-#: engine/vibes_auth/serializers.py:113
+#: engine/vibes_auth/serializers.py:127
#, python-brace-format
msgid "malformed email: {email}"
msgstr ""
-#: engine/vibes_auth/serializers.py:134 engine/vibes_auth/serializers.py:159
-#: engine/vibes_auth/serializers.py:182 engine/vibes_auth/serializers.py:192
+#: engine/vibes_auth/serializers.py:150 engine/vibes_auth/serializers.py:175
+#: engine/vibes_auth/serializers.py:198 engine/vibes_auth/serializers.py:210
msgid "no active account"
msgstr ""
-#: engine/vibes_auth/serializers.py:169
+#: engine/vibes_auth/serializers.py:185
msgid "must set token_class attribute on class."
msgstr ""
-#: engine/vibes_auth/serializers.py:253
+#: engine/vibes_auth/serializers.py:271
msgid "token_blacklisted"
msgstr ""
-#: engine/vibes_auth/serializers.py:258
+#: engine/vibes_auth/serializers.py:276
msgid "invalid token"
msgstr ""
-#: engine/vibes_auth/serializers.py:268
+#: engine/vibes_auth/serializers.py:286
msgid "no user uuid claim present in token"
msgstr ""
-#: engine/vibes_auth/serializers.py:270
+#: engine/vibes_auth/serializers.py:288
msgid "user does not exist"
msgstr ""
@@ -535,13 +536,13 @@ msgstr ""
msgid "{settings.PROJECT_NAME} | Reset Password"
msgstr ""
-#: engine/vibes_auth/validators.py:13
+#: engine/vibes_auth/validators.py:15
msgid ""
"invalid phone number format. the number must be entered in the format: "
"\"+999999999\". up to 15 digits allowed."
msgstr ""
-#: engine/vibes_auth/views.py:30
+#: engine/vibes_auth/views.py:34
msgid ""
"Represents a view for getting a pair of access and refresh tokens and user's "
"data. This view manages the process of handling token-based authentication "
@@ -550,7 +551,7 @@ msgid ""
"proper rate limiting to protect against brute force attacks."
msgstr ""
-#: engine/vibes_auth/views.py:52
+#: engine/vibes_auth/views.py:58
msgid ""
"Handles refreshing of tokens for authentication purposes. This class is used "
"to provide functionality for token refresh operations as part of an "
@@ -559,13 +560,13 @@ msgid ""
"validate token refresh inputs and produce appropriate outputs."
msgstr ""
-#: engine/vibes_auth/views.py:75
+#: engine/vibes_auth/views.py:83
msgid ""
"Represents a view for verifying JSON Web Tokens (JWT) using specific "
"serialization and validation logic. "
msgstr ""
-#: engine/vibes_auth/views.py:92
+#: engine/vibes_auth/views.py:103
msgid "the token is invalid"
msgstr ""
@@ -578,10 +579,10 @@ msgid ""
"class extends the mixins and GenericViewSet for robust API handling."
msgstr ""
-#: engine/vibes_auth/viewsets.py:99
+#: engine/vibes_auth/viewsets.py:113
msgid "password reset successfully"
msgstr ""
-#: engine/vibes_auth/viewsets.py:132
+#: engine/vibes_auth/viewsets.py:161
msgid "account already activated!"
msgstr ""
diff --git a/engine/vibes_auth/locale/id_ID/LC_MESSAGES/django.po b/engine/vibes_auth/locale/id_ID/LC_MESSAGES/django.po
index 2d46f19f..09695ee1 100644
--- a/engine/vibes_auth/locale/id_ID/LC_MESSAGES/django.po
+++ b/engine/vibes_auth/locale/id_ID/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -14,7 +14,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: engine/vibes_auth/admin.py:51 engine/vibes_auth/admin.py:52
-#: engine/vibes_auth/graphene/object_types.py:46
+#: engine/vibes_auth/graphene/object_types.py:54
msgid "balance"
msgstr "Keseimbangan"
@@ -22,7 +22,7 @@ msgstr "Keseimbangan"
msgid "order"
msgstr "Pesan"
-#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:44
+#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:51
msgid "orders"
msgstr "Pesanan"
@@ -30,7 +30,7 @@ msgstr "Pesanan"
msgid "personal info"
msgstr "Informasi Pribadi"
-#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:43
+#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:50
msgid "permissions"
msgstr "Izin"
@@ -42,15 +42,15 @@ msgstr "Tanggal-tanggal penting"
msgid "additional info"
msgstr "Informasi Tambahan"
-#: engine/vibes_auth/admin.py:128
+#: engine/vibes_auth/admin.py:135
msgid "You cannot jump over your head!"
msgstr "Anda tidak bisa melompati kepala Anda!"
-#: engine/vibes_auth/admin.py:160
+#: engine/vibes_auth/admin.py:167
msgid "Close selected threads"
msgstr "Menutup utas yang dipilih"
-#: engine/vibes_auth/admin.py:164
+#: engine/vibes_auth/admin.py:171
msgid "Open selected threads"
msgstr "Buka utas yang dipilih"
@@ -82,7 +82,7 @@ msgstr "Sistem"
msgid "User messages entrypoint"
msgstr "Titik masuk pesan pengguna"
-#: engine/vibes_auth/docs/drf/messaging.py:18
+#: engine/vibes_auth/docs/drf/messaging.py:19
msgid ""
"Anonymous or authenticated non-staff users send messages. Also supports "
"action=ping."
@@ -90,11 +90,11 @@ msgstr ""
"Pengguna anonim atau pengguna nonstaf yang diautentikasi mengirim pesan. "
"Juga mendukung action=ping."
-#: engine/vibes_auth/docs/drf/messaging.py:28
+#: engine/vibes_auth/docs/drf/messaging.py:30
msgid "Staff inbox control"
msgstr "Kontrol kotak masuk staf"
-#: engine/vibes_auth/docs/drf/messaging.py:29
+#: engine/vibes_auth/docs/drf/messaging.py:32
msgid ""
"Staff-only actions: list_open, assign, reply, close, ping. Unified event "
"payloads are emitted."
@@ -102,11 +102,11 @@ msgstr ""
"Tindakan khusus staf: daftar_buka, tetapkan, balas, tutup, ping. Muatan "
"peristiwa terpadu dipancarkan."
-#: engine/vibes_auth/docs/drf/messaging.py:39
+#: engine/vibes_auth/docs/drf/messaging.py:43
msgid "Per-thread staff channel"
msgstr "Saluran staf per utas"
-#: engine/vibes_auth/docs/drf/messaging.py:40
+#: engine/vibes_auth/docs/drf/messaging.py:44
msgid "Reply, close, and ping within a specific thread."
msgstr "Membalas, menutup, dan melakukan ping di dalam utas tertentu."
@@ -134,7 +134,7 @@ msgstr "Verifikasi token"
msgid "Verify a token (refresh or access)."
msgstr "Verifikasi token (penyegaran atau akses)."
-#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90
+#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:100
msgid "the token is valid"
msgstr "Token tersebut valid"
@@ -173,9 +173,9 @@ msgid "confirm a user's password reset"
msgstr "Mengonfirmasi pengaturan ulang kata sandi pengguna"
#: engine/vibes_auth/docs/drf/viewsets.py:87
-#: engine/vibes_auth/graphene/mutations.py:317
-#: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101
-#: engine/vibes_auth/viewsets.py:84
+#: engine/vibes_auth/graphene/mutations.py:345
+#: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/viewsets.py:94
msgid "passwords do not match"
msgstr "Kata sandi tidak cocok"
@@ -183,62 +183,63 @@ msgstr "Kata sandi tidak cocok"
msgid "activate a user's account"
msgstr "Mengaktifkan akun pengguna"
-#: engine/vibes_auth/docs/drf/viewsets.py:99
+#: engine/vibes_auth/docs/drf/viewsets.py:101
msgid "activation link is invalid or account already activated"
msgstr "Tautan aktivasi tidak valid atau akun sudah diaktifkan"
-#: engine/vibes_auth/docs/drf/viewsets.py:107
+#: engine/vibes_auth/docs/drf/viewsets.py:111
msgid "merge client-stored recently viewed products"
msgstr "Menggabungkan produk yang baru saja dilihat yang disimpan klien"
-#: engine/vibes_auth/graphene/mutations.py:44
+#: engine/vibes_auth/graphene/mutations.py:47
msgid "the user's b64-encoded uuid who referred the new user to us."
msgstr ""
"UID pengguna yang dikodekan b64 yang merujuk pengguna baru kepada kami."
-#: engine/vibes_auth/graphene/mutations.py:64
+#: engine/vibes_auth/graphene/mutations.py:69
msgid "password too weak"
msgstr "Kata sandi terlalu lemah"
-#: engine/vibes_auth/graphene/mutations.py:119
+#: engine/vibes_auth/graphene/mutations.py:129
msgid "malformed email"
msgstr "Email yang salah"
-#: engine/vibes_auth/graphene/mutations.py:126
-#: engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/graphene/mutations.py:141
+#: engine/vibes_auth/serializers.py:117
#, python-brace-format
msgid "malformed phone number: {phone_number}"
msgstr "Nomor telepon rusak: {phone_number}!"
-#: engine/vibes_auth/graphene/mutations.py:148
+#: engine/vibes_auth/graphene/mutations.py:166
#, python-brace-format
msgid "Invalid attribute format: {attribute_pair}"
msgstr "Format atribut tidak valid: {attribute_pair}!"
-#: engine/vibes_auth/graphene/mutations.py:162
+#: engine/vibes_auth/graphene/mutations.py:183
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr "{name} tidak ada: {uuid}!"
-#: engine/vibes_auth/graphene/mutations.py:270
-#: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146
+#: engine/vibes_auth/graphene/mutations.py:298
+#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180
msgid "activation link is invalid!"
msgstr "Tautan aktivasi tidak valid!"
-#: engine/vibes_auth/graphene/mutations.py:273
+#: engine/vibes_auth/graphene/mutations.py:301
msgid "account already activated..."
msgstr "Akun sudah diaktifkan..."
-#: engine/vibes_auth/graphene/mutations.py:280
-#: engine/vibes_auth/graphene/mutations.py:336
+#: engine/vibes_auth/graphene/mutations.py:308
+#: engine/vibes_auth/graphene/mutations.py:370
msgid "something went wrong: {e!s}"
msgstr "Ada yang tidak beres: {e!s}"
-#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95
+#: engine/vibes_auth/graphene/mutations.py:352
+#: engine/vibes_auth/viewsets.py:106
msgid "token is invalid!"
msgstr "Token tidak valid!"
-#: engine/vibes_auth/graphene/object_types.py:40
+#: engine/vibes_auth/graphene/object_types.py:46
msgid ""
"the products this user has viewed most recently (max 48), in reverse‐"
"chronological order"
@@ -246,24 +247,24 @@ msgstr ""
"Produk yang terakhir dilihat pengguna ini (maksimal 48), dalam urutan "
"kronologis terbalik."
-#: engine/vibes_auth/graphene/object_types.py:42
-#: engine/vibes_auth/models.py:185
+#: engine/vibes_auth/graphene/object_types.py:49
+#: engine/vibes_auth/models.py:209
msgid "groups"
msgstr "Grup"
-#: engine/vibes_auth/graphene/object_types.py:45
+#: engine/vibes_auth/graphene/object_types.py:52
msgid "wishlist"
msgstr "Daftar keinginan"
-#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:70
+#: engine/vibes_auth/graphene/object_types.py:56 engine/vibes_auth/models.py:70
msgid "avatar"
msgstr "Avatar"
-#: engine/vibes_auth/graphene/object_types.py:48
+#: engine/vibes_auth/graphene/object_types.py:58
msgid "attributes may be used to store custom data"
msgstr "Atribut dapat digunakan untuk menyimpan data khusus"
-#: engine/vibes_auth/graphene/object_types.py:50
+#: engine/vibes_auth/graphene/object_types.py:62
#, python-brace-format
msgid ""
"language is one of the {settings.LANGUAGES} with default {settings."
@@ -272,23 +273,23 @@ msgstr ""
"Bahasa adalah salah satu dari {settings.LANGUAGES} dengan default {settings."
"LANGUAGE_CODE}"
-#: engine/vibes_auth/graphene/object_types.py:52
+#: engine/vibes_auth/graphene/object_types.py:66
msgid "address set"
msgstr "Alamat"
-#: engine/vibes_auth/messaging/services.py:49
+#: engine/vibes_auth/messaging/services.py:52
msgid "Valid email is required for anonymous chats."
msgstr "Email yang valid diperlukan untuk obrolan anonim."
-#: engine/vibes_auth/messaging/services.py:57
+#: engine/vibes_auth/messaging/services.py:65
msgid "Message must be 1..1028 characters."
msgstr "Pesan harus terdiri dari 1..1028 karakter."
-#: engine/vibes_auth/messaging/services.py:93
+#: engine/vibes_auth/messaging/services.py:105
msgid "We're searching for the operator to answer you already, hold by!"
msgstr "Kami sedang mencari operator untuk menjawab Anda, tunggu sebentar!"
-#: engine/vibes_auth/messaging/services.py:136
+#: engine/vibes_auth/messaging/services.py:152
msgid "Assignee must be a staff user."
msgstr "Penerima tugas haruslah seorang staf pengguna."
@@ -359,71 +360,71 @@ msgstr "Batalkan pilihan ini alih-alih menghapus akun"
msgid "is_subscribed"
msgstr "Sudah berlangganan"
-#: engine/vibes_auth/models.py:87
+#: engine/vibes_auth/models.py:88
msgid "user's newsletter subscription status"
msgstr "Status berlangganan buletin pengguna"
-#: engine/vibes_auth/models.py:90
+#: engine/vibes_auth/models.py:92
msgid "activation token"
msgstr "Token aktivasi"
-#: engine/vibes_auth/models.py:94
+#: engine/vibes_auth/models.py:101
msgid "attributes"
msgstr "Atribut"
-#: engine/vibes_auth/models.py:133
+#: engine/vibes_auth/models.py:141
msgid "user"
msgstr "Pengguna"
-#: engine/vibes_auth/models.py:134
+#: engine/vibes_auth/models.py:142
msgid "users"
msgstr "Pengguna"
-#: engine/vibes_auth/models.py:139
+#: engine/vibes_auth/models.py:149
msgid "For anonymous threads"
msgstr "Untuk utas anonim"
-#: engine/vibes_auth/models.py:153
+#: engine/vibes_auth/models.py:173
msgid "Chat thread"
msgstr "Utas obrolan"
-#: engine/vibes_auth/models.py:154
+#: engine/vibes_auth/models.py:174
msgid "Chat threads"
msgstr "Utas obrolan"
-#: engine/vibes_auth/models.py:159
+#: engine/vibes_auth/models.py:180
msgid "provide user or email for anonymous thread."
msgstr "menyediakan pengguna atau email untuk utas anonim."
-#: engine/vibes_auth/models.py:161
+#: engine/vibes_auth/models.py:183
msgid "assignee must be a staff user."
msgstr "Penerima tugas haruslah seorang staf pengguna."
-#: engine/vibes_auth/models.py:177
+#: engine/vibes_auth/models.py:201
msgid "Chat message"
msgstr "Pesan obrolan"
-#: engine/vibes_auth/models.py:178
+#: engine/vibes_auth/models.py:202
msgid "Chat messages"
msgstr "Pesan obrolan"
-#: engine/vibes_auth/models.py:184
+#: engine/vibes_auth/models.py:208
msgid "group"
msgstr "Kelompok"
-#: engine/vibes_auth/models.py:191
+#: engine/vibes_auth/models.py:215
msgid "outstanding token"
msgstr "Token yang luar biasa"
-#: engine/vibes_auth/models.py:192
+#: engine/vibes_auth/models.py:216
msgid "outstanding tokens"
msgstr "Token yang beredar"
-#: engine/vibes_auth/models.py:198
+#: engine/vibes_auth/models.py:222
msgid "blacklisted token"
msgstr "Token yang masuk daftar hitam"
-#: engine/vibes_auth/models.py:199
+#: engine/vibes_auth/models.py:223
msgid "blacklisted tokens"
msgstr "Token yang masuk daftar hitam"
@@ -431,37 +432,37 @@ msgstr "Token yang masuk daftar hitam"
msgid "attributes must be a dictionary"
msgstr "Atribut `atribut` harus berupa sebuah kamus"
-#: engine/vibes_auth/serializers.py:93
+#: engine/vibes_auth/serializers.py:97
msgid "business identificator is required when registering as a business"
msgstr "Pengenal bisnis diperlukan saat mendaftar sebagai bisnis"
-#: engine/vibes_auth/serializers.py:113
+#: engine/vibes_auth/serializers.py:127
#, python-brace-format
msgid "malformed email: {email}"
msgstr "email rusak: {email}"
-#: engine/vibes_auth/serializers.py:134 engine/vibes_auth/serializers.py:159
-#: engine/vibes_auth/serializers.py:182 engine/vibes_auth/serializers.py:192
+#: engine/vibes_auth/serializers.py:150 engine/vibes_auth/serializers.py:175
+#: engine/vibes_auth/serializers.py:198 engine/vibes_auth/serializers.py:210
msgid "no active account"
msgstr "Tidak ditemukan akun aktif"
-#: engine/vibes_auth/serializers.py:169
+#: engine/vibes_auth/serializers.py:185
msgid "must set token_class attribute on class."
msgstr "Harus menetapkan atribut token_class pada kelas!"
-#: engine/vibes_auth/serializers.py:253
+#: engine/vibes_auth/serializers.py:271
msgid "token_blacklisted"
msgstr "Daftar hitam token"
-#: engine/vibes_auth/serializers.py:258
+#: engine/vibes_auth/serializers.py:276
msgid "invalid token"
msgstr "Token tidak valid"
-#: engine/vibes_auth/serializers.py:268
+#: engine/vibes_auth/serializers.py:286
msgid "no user uuid claim present in token"
msgstr "Tidak ada klaim uuid pengguna yang ada dalam token"
-#: engine/vibes_auth/serializers.py:270
+#: engine/vibes_auth/serializers.py:288
msgid "user does not exist"
msgstr "Pengguna tidak ada"
@@ -562,7 +563,7 @@ msgstr "{settings.PROJECT_NAME} | Aktifkan Akun"
msgid "{settings.PROJECT_NAME} | Reset Password"
msgstr "{settings.PROJECT_NAME} | Atur Ulang Kata Sandi"
-#: engine/vibes_auth/validators.py:13
+#: engine/vibes_auth/validators.py:15
msgid ""
"invalid phone number format. the number must be entered in the format: "
"\"+999999999\". up to 15 digits allowed."
@@ -570,7 +571,7 @@ msgstr ""
"Format nomor telepon tidak valid. Nomor harus dimasukkan dalam format: "
"\"+999999999\". Maksimal 15 digit."
-#: engine/vibes_auth/views.py:30
+#: engine/vibes_auth/views.py:34
msgid ""
"Represents a view for getting a pair of access and refresh tokens and user's "
"data. This view manages the process of handling token-based authentication "
@@ -585,7 +586,7 @@ msgstr ""
"tampilan token dasar dan memastikan pembatasan laju yang tepat untuk "
"melindungi dari serangan brute force."
-#: engine/vibes_auth/views.py:52
+#: engine/vibes_auth/views.py:58
msgid ""
"Handles refreshing of tokens for authentication purposes. This class is used "
"to provide functionality for token refresh operations as part of an "
@@ -600,7 +601,7 @@ msgstr ""
"bergantung pada serializer terkait untuk memvalidasi input penyegaran token "
"dan menghasilkan output yang sesuai."
-#: engine/vibes_auth/views.py:75
+#: engine/vibes_auth/views.py:83
msgid ""
"Represents a view for verifying JSON Web Tokens (JWT) using specific "
"serialization and validation logic. "
@@ -608,7 +609,7 @@ msgstr ""
"Merupakan tampilan untuk memverifikasi JSON Web Token (JWT) menggunakan "
"serialisasi dan logika validasi tertentu."
-#: engine/vibes_auth/views.py:92
+#: engine/vibes_auth/views.py:103
msgid "the token is invalid"
msgstr "Token tidak valid"
@@ -627,10 +628,10 @@ msgstr ""
"penggabungan item yang baru dilihat. Kelas ini memperluas mixin dan "
"GenericViewSet untuk penanganan API yang kuat."
-#: engine/vibes_auth/viewsets.py:99
+#: engine/vibes_auth/viewsets.py:113
msgid "password reset successfully"
msgstr "Kata sandi telah berhasil diatur ulang!"
-#: engine/vibes_auth/viewsets.py:132
+#: engine/vibes_auth/viewsets.py:161
msgid "account already activated!"
msgstr "Anda telah mengaktifkan akun..."
diff --git a/engine/vibes_auth/locale/it_IT/LC_MESSAGES/django.po b/engine/vibes_auth/locale/it_IT/LC_MESSAGES/django.po
index 5c676c0f..04c2e00b 100644
--- a/engine/vibes_auth/locale/it_IT/LC_MESSAGES/django.po
+++ b/engine/vibes_auth/locale/it_IT/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -14,7 +14,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: engine/vibes_auth/admin.py:51 engine/vibes_auth/admin.py:52
-#: engine/vibes_auth/graphene/object_types.py:46
+#: engine/vibes_auth/graphene/object_types.py:54
msgid "balance"
msgstr "Equilibrio"
@@ -22,7 +22,7 @@ msgstr "Equilibrio"
msgid "order"
msgstr "Ordine"
-#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:44
+#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:51
msgid "orders"
msgstr "Ordini"
@@ -30,7 +30,7 @@ msgstr "Ordini"
msgid "personal info"
msgstr "Informazioni personali"
-#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:43
+#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:50
msgid "permissions"
msgstr "Permessi"
@@ -42,15 +42,15 @@ msgstr "Date importanti"
msgid "additional info"
msgstr "Ulteriori informazioni"
-#: engine/vibes_auth/admin.py:128
+#: engine/vibes_auth/admin.py:135
msgid "You cannot jump over your head!"
msgstr "Non si può saltare sopra la testa!"
-#: engine/vibes_auth/admin.py:160
+#: engine/vibes_auth/admin.py:167
msgid "Close selected threads"
msgstr "Chiudere le filettature selezionate"
-#: engine/vibes_auth/admin.py:164
+#: engine/vibes_auth/admin.py:171
msgid "Open selected threads"
msgstr "Aprire le discussioni selezionate"
@@ -82,7 +82,7 @@ msgstr "Sistema"
msgid "User messages entrypoint"
msgstr "Punto di ingresso dei messaggi dell'utente"
-#: engine/vibes_auth/docs/drf/messaging.py:18
+#: engine/vibes_auth/docs/drf/messaging.py:19
msgid ""
"Anonymous or authenticated non-staff users send messages. Also supports "
"action=ping."
@@ -90,11 +90,11 @@ msgstr ""
"Gli utenti anonimi o autenticati non appartenenti al personale inviano "
"messaggi. Supporta anche action=ping."
-#: engine/vibes_auth/docs/drf/messaging.py:28
+#: engine/vibes_auth/docs/drf/messaging.py:30
msgid "Staff inbox control"
msgstr "Controllo della casella di posta del personale"
-#: engine/vibes_auth/docs/drf/messaging.py:29
+#: engine/vibes_auth/docs/drf/messaging.py:32
msgid ""
"Staff-only actions: list_open, assign, reply, close, ping. Unified event "
"payloads are emitted."
@@ -102,11 +102,11 @@ msgstr ""
"Azioni solo per il personale: list_open, assign, reply, close, ping. Vengono "
"emessi payload di eventi unificati."
-#: engine/vibes_auth/docs/drf/messaging.py:39
+#: engine/vibes_auth/docs/drf/messaging.py:43
msgid "Per-thread staff channel"
msgstr "Canale del personale per thread"
-#: engine/vibes_auth/docs/drf/messaging.py:40
+#: engine/vibes_auth/docs/drf/messaging.py:44
msgid "Reply, close, and ping within a specific thread."
msgstr ""
"Rispondere, chiudere e inviare ping all'interno di una discussione specifica."
@@ -136,7 +136,7 @@ msgstr "Verifica di un token"
msgid "Verify a token (refresh or access)."
msgstr "Verifica di un token (aggiornamento o accesso)."
-#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90
+#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:100
msgid "the token is valid"
msgstr "Il token è valido"
@@ -175,9 +175,9 @@ msgid "confirm a user's password reset"
msgstr "Confermare la reimpostazione della password di un utente"
#: engine/vibes_auth/docs/drf/viewsets.py:87
-#: engine/vibes_auth/graphene/mutations.py:317
-#: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101
-#: engine/vibes_auth/viewsets.py:84
+#: engine/vibes_auth/graphene/mutations.py:345
+#: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/viewsets.py:94
msgid "passwords do not match"
msgstr "Le password non corrispondono"
@@ -185,61 +185,62 @@ msgstr "Le password non corrispondono"
msgid "activate a user's account"
msgstr "Attivare l'account di un utente"
-#: engine/vibes_auth/docs/drf/viewsets.py:99
+#: engine/vibes_auth/docs/drf/viewsets.py:101
msgid "activation link is invalid or account already activated"
msgstr "Il link di attivazione non è valido o l'account è già stato attivato."
-#: engine/vibes_auth/docs/drf/viewsets.py:107
+#: engine/vibes_auth/docs/drf/viewsets.py:111
msgid "merge client-stored recently viewed products"
msgstr "Unire i prodotti memorizzati dal cliente e visti di recente"
-#: engine/vibes_auth/graphene/mutations.py:44
+#: engine/vibes_auth/graphene/mutations.py:47
msgid "the user's b64-encoded uuid who referred the new user to us."
msgstr "L'uuid b64-encoded dell'utente che ci ha segnalato il nuovo utente."
-#: engine/vibes_auth/graphene/mutations.py:64
+#: engine/vibes_auth/graphene/mutations.py:69
msgid "password too weak"
msgstr "La password è troppo debole"
-#: engine/vibes_auth/graphene/mutations.py:119
+#: engine/vibes_auth/graphene/mutations.py:129
msgid "malformed email"
msgstr "Email malformata"
-#: engine/vibes_auth/graphene/mutations.py:126
-#: engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/graphene/mutations.py:141
+#: engine/vibes_auth/serializers.py:117
#, python-brace-format
msgid "malformed phone number: {phone_number}"
msgstr "Numero di telefono malformato: {phone_number}!"
-#: engine/vibes_auth/graphene/mutations.py:148
+#: engine/vibes_auth/graphene/mutations.py:166
#, python-brace-format
msgid "Invalid attribute format: {attribute_pair}"
msgstr "Formato attributo non valido: {attribute_pair}!"
-#: engine/vibes_auth/graphene/mutations.py:162
+#: engine/vibes_auth/graphene/mutations.py:183
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr "{name} non esiste: {uuid}!"
-#: engine/vibes_auth/graphene/mutations.py:270
-#: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146
+#: engine/vibes_auth/graphene/mutations.py:298
+#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180
msgid "activation link is invalid!"
msgstr "Il link di attivazione non è valido!"
-#: engine/vibes_auth/graphene/mutations.py:273
+#: engine/vibes_auth/graphene/mutations.py:301
msgid "account already activated..."
msgstr "L'account è già stato attivato..."
-#: engine/vibes_auth/graphene/mutations.py:280
-#: engine/vibes_auth/graphene/mutations.py:336
+#: engine/vibes_auth/graphene/mutations.py:308
+#: engine/vibes_auth/graphene/mutations.py:370
msgid "something went wrong: {e!s}"
msgstr "Qualcosa è andato storto: {e!s}"
-#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95
+#: engine/vibes_auth/graphene/mutations.py:352
+#: engine/vibes_auth/viewsets.py:106
msgid "token is invalid!"
msgstr "Il gettone non è valido!"
-#: engine/vibes_auth/graphene/object_types.py:40
+#: engine/vibes_auth/graphene/object_types.py:46
msgid ""
"the products this user has viewed most recently (max 48), in reverse‐"
"chronological order"
@@ -247,25 +248,25 @@ msgstr ""
"I prodotti che questo utente ha visualizzato più di recente (max 48), in "
"ordine cronologico inverso."
-#: engine/vibes_auth/graphene/object_types.py:42
-#: engine/vibes_auth/models.py:185
+#: engine/vibes_auth/graphene/object_types.py:49
+#: engine/vibes_auth/models.py:209
msgid "groups"
msgstr "Gruppi"
-#: engine/vibes_auth/graphene/object_types.py:45
+#: engine/vibes_auth/graphene/object_types.py:52
msgid "wishlist"
msgstr "Lista dei desideri"
-#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:70
+#: engine/vibes_auth/graphene/object_types.py:56 engine/vibes_auth/models.py:70
msgid "avatar"
msgstr "Avatar"
-#: engine/vibes_auth/graphene/object_types.py:48
+#: engine/vibes_auth/graphene/object_types.py:58
msgid "attributes may be used to store custom data"
msgstr ""
"Gli attributi possono essere utilizzati per memorizzare dati personalizzati"
-#: engine/vibes_auth/graphene/object_types.py:50
+#: engine/vibes_auth/graphene/object_types.py:62
#, python-brace-format
msgid ""
"language is one of the {settings.LANGUAGES} with default {settings."
@@ -274,23 +275,23 @@ msgstr ""
"La lingua è una delle {settings.LANGUAGES} con il codice predefinito "
"{settings.LANGUAGE_CODE}."
-#: engine/vibes_auth/graphene/object_types.py:52
+#: engine/vibes_auth/graphene/object_types.py:66
msgid "address set"
msgstr "Indirizzi"
-#: engine/vibes_auth/messaging/services.py:49
+#: engine/vibes_auth/messaging/services.py:52
msgid "Valid email is required for anonymous chats."
msgstr "Per le chat anonime è necessario un indirizzo e-mail valido."
-#: engine/vibes_auth/messaging/services.py:57
+#: engine/vibes_auth/messaging/services.py:65
msgid "Message must be 1..1028 characters."
msgstr "Il messaggio deve essere di 1...1028 caratteri."
-#: engine/vibes_auth/messaging/services.py:93
+#: engine/vibes_auth/messaging/services.py:105
msgid "We're searching for the operator to answer you already, hold by!"
msgstr "Stiamo già cercando l'operatore per rispondervi, restate in attesa!"
-#: engine/vibes_auth/messaging/services.py:136
+#: engine/vibes_auth/messaging/services.py:152
msgid "Assignee must be a staff user."
msgstr "Il destinatario deve essere un utente del personale."
@@ -361,71 +362,71 @@ msgstr "Deselezionare questa opzione invece di eliminare gli account"
msgid "is_subscribed"
msgstr "È iscritto"
-#: engine/vibes_auth/models.py:87
+#: engine/vibes_auth/models.py:88
msgid "user's newsletter subscription status"
msgstr "Stato di iscrizione alla newsletter dell'utente"
-#: engine/vibes_auth/models.py:90
+#: engine/vibes_auth/models.py:92
msgid "activation token"
msgstr "Token di attivazione"
-#: engine/vibes_auth/models.py:94
+#: engine/vibes_auth/models.py:101
msgid "attributes"
msgstr "Attributi"
-#: engine/vibes_auth/models.py:133
+#: engine/vibes_auth/models.py:141
msgid "user"
msgstr "Utente"
-#: engine/vibes_auth/models.py:134
+#: engine/vibes_auth/models.py:142
msgid "users"
msgstr "Utenti"
-#: engine/vibes_auth/models.py:139
+#: engine/vibes_auth/models.py:149
msgid "For anonymous threads"
msgstr "Per le discussioni anonime"
-#: engine/vibes_auth/models.py:153
+#: engine/vibes_auth/models.py:173
msgid "Chat thread"
msgstr "Filo della chat"
-#: engine/vibes_auth/models.py:154
+#: engine/vibes_auth/models.py:174
msgid "Chat threads"
msgstr "Filo conduttore della chat"
-#: engine/vibes_auth/models.py:159
+#: engine/vibes_auth/models.py:180
msgid "provide user or email for anonymous thread."
msgstr "fornire l'utente o l'e-mail per il thread anonimo."
-#: engine/vibes_auth/models.py:161
+#: engine/vibes_auth/models.py:183
msgid "assignee must be a staff user."
msgstr "L'assegnatario deve essere un utente del personale."
-#: engine/vibes_auth/models.py:177
+#: engine/vibes_auth/models.py:201
msgid "Chat message"
msgstr "Messaggio di chat"
-#: engine/vibes_auth/models.py:178
+#: engine/vibes_auth/models.py:202
msgid "Chat messages"
msgstr "Messaggi di chat"
-#: engine/vibes_auth/models.py:184
+#: engine/vibes_auth/models.py:208
msgid "group"
msgstr "Gruppo"
-#: engine/vibes_auth/models.py:191
+#: engine/vibes_auth/models.py:215
msgid "outstanding token"
msgstr "Gettone eccezionale"
-#: engine/vibes_auth/models.py:192
+#: engine/vibes_auth/models.py:216
msgid "outstanding tokens"
msgstr "Gettoni in sospeso"
-#: engine/vibes_auth/models.py:198
+#: engine/vibes_auth/models.py:222
msgid "blacklisted token"
msgstr "Token in lista nera"
-#: engine/vibes_auth/models.py:199
+#: engine/vibes_auth/models.py:223
msgid "blacklisted tokens"
msgstr "Gettoni nella lista nera"
@@ -433,39 +434,39 @@ msgstr "Gettoni nella lista nera"
msgid "attributes must be a dictionary"
msgstr "`attributi` deve essere un dizionario"
-#: engine/vibes_auth/serializers.py:93
+#: engine/vibes_auth/serializers.py:97
msgid "business identificator is required when registering as a business"
msgstr ""
"L'identificativo dell'azienda è necessario quando ci si registra come "
"azienda."
-#: engine/vibes_auth/serializers.py:113
+#: engine/vibes_auth/serializers.py:127
#, python-brace-format
msgid "malformed email: {email}"
msgstr "email malformata: {email}"
-#: engine/vibes_auth/serializers.py:134 engine/vibes_auth/serializers.py:159
-#: engine/vibes_auth/serializers.py:182 engine/vibes_auth/serializers.py:192
+#: engine/vibes_auth/serializers.py:150 engine/vibes_auth/serializers.py:175
+#: engine/vibes_auth/serializers.py:198 engine/vibes_auth/serializers.py:210
msgid "no active account"
msgstr "Nessun conto attivo trovato"
-#: engine/vibes_auth/serializers.py:169
+#: engine/vibes_auth/serializers.py:185
msgid "must set token_class attribute on class."
msgstr "Deve essere impostato l'attributo token_class sulla classe!"
-#: engine/vibes_auth/serializers.py:253
+#: engine/vibes_auth/serializers.py:271
msgid "token_blacklisted"
msgstr "Token nella lista nera"
-#: engine/vibes_auth/serializers.py:258
+#: engine/vibes_auth/serializers.py:276
msgid "invalid token"
msgstr "Token non valido"
-#: engine/vibes_auth/serializers.py:268
+#: engine/vibes_auth/serializers.py:286
msgid "no user uuid claim present in token"
msgstr "Nessuna richiesta di uuid utente presente nel token"
-#: engine/vibes_auth/serializers.py:270
+#: engine/vibes_auth/serializers.py:288
msgid "user does not exist"
msgstr "L'utente non esiste"
@@ -565,7 +566,7 @@ msgstr "{settings.PROJECT_NAME} | Attiva l'account"
msgid "{settings.PROJECT_NAME} | Reset Password"
msgstr "{settings.PROJECT_NAME} | Reimpostare la password"
-#: engine/vibes_auth/validators.py:13
+#: engine/vibes_auth/validators.py:15
msgid ""
"invalid phone number format. the number must be entered in the format: "
"\"+999999999\". up to 15 digits allowed."
@@ -573,7 +574,7 @@ msgstr ""
"Formato del numero di telefono non valido. Il numero deve essere inserito "
"nel formato: \"+999999999\". Sono consentite fino a 15 cifre."
-#: engine/vibes_auth/views.py:30
+#: engine/vibes_auth/views.py:34
msgid ""
"Represents a view for getting a pair of access and refresh tokens and user's "
"data. This view manages the process of handling token-based authentication "
@@ -589,7 +590,7 @@ msgstr ""
"un'adeguata limitazione della velocità per proteggere dagli attacchi brute "
"force."
-#: engine/vibes_auth/views.py:52
+#: engine/vibes_auth/views.py:58
msgid ""
"Handles refreshing of tokens for authentication purposes. This class is used "
"to provide functionality for token refresh operations as part of an "
@@ -604,7 +605,7 @@ msgstr ""
"vista si affida al serializzatore associato per convalidare gli input di "
"aggiornamento dei token e produrre output appropriati."
-#: engine/vibes_auth/views.py:75
+#: engine/vibes_auth/views.py:83
msgid ""
"Represents a view for verifying JSON Web Tokens (JWT) using specific "
"serialization and validation logic. "
@@ -612,7 +613,7 @@ msgstr ""
"Rappresenta una vista per la verifica dei JSON Web Token (JWT), utilizzando "
"una specifica logica di serializzazione e validazione."
-#: engine/vibes_auth/views.py:92
+#: engine/vibes_auth/views.py:103
msgid "the token is invalid"
msgstr "Il token non è valido"
@@ -632,10 +633,10 @@ msgstr ""
"elementi visti di recente. Questa classe estende i mixin e GenericViewSet "
"per una gestione robusta delle API."
-#: engine/vibes_auth/viewsets.py:99
+#: engine/vibes_auth/viewsets.py:113
msgid "password reset successfully"
msgstr "La password è stata reimpostata con successo!"
-#: engine/vibes_auth/viewsets.py:132
+#: engine/vibes_auth/viewsets.py:161
msgid "account already activated!"
msgstr "Avete già attivato l'account..."
diff --git a/engine/vibes_auth/locale/ja_JP/LC_MESSAGES/django.po b/engine/vibes_auth/locale/ja_JP/LC_MESSAGES/django.po
index 99f9089f..53dd2583 100644
--- a/engine/vibes_auth/locale/ja_JP/LC_MESSAGES/django.po
+++ b/engine/vibes_auth/locale/ja_JP/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -14,7 +14,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: engine/vibes_auth/admin.py:51 engine/vibes_auth/admin.py:52
-#: engine/vibes_auth/graphene/object_types.py:46
+#: engine/vibes_auth/graphene/object_types.py:54
msgid "balance"
msgstr "バランス"
@@ -22,7 +22,7 @@ msgstr "バランス"
msgid "order"
msgstr "オーダー"
-#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:44
+#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:51
msgid "orders"
msgstr "受注状況"
@@ -30,7 +30,7 @@ msgstr "受注状況"
msgid "personal info"
msgstr "個人情報"
-#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:43
+#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:50
msgid "permissions"
msgstr "アクセス許可"
@@ -42,15 +42,15 @@ msgstr "重要な日程"
msgid "additional info"
msgstr "追加情報"
-#: engine/vibes_auth/admin.py:128
+#: engine/vibes_auth/admin.py:135
msgid "You cannot jump over your head!"
msgstr "頭上を飛び越えることはできない!"
-#: engine/vibes_auth/admin.py:160
+#: engine/vibes_auth/admin.py:167
msgid "Close selected threads"
msgstr "選択したスレッドを閉じる"
-#: engine/vibes_auth/admin.py:164
+#: engine/vibes_auth/admin.py:171
msgid "Open selected threads"
msgstr "選択したスレッドを開く"
@@ -82,7 +82,7 @@ msgstr "システム"
msgid "User messages entrypoint"
msgstr "ユーザーメッセージのエントリーポイント"
-#: engine/vibes_auth/docs/drf/messaging.py:18
+#: engine/vibes_auth/docs/drf/messaging.py:19
msgid ""
"Anonymous or authenticated non-staff users send messages. Also supports "
"action=ping."
@@ -90,11 +90,11 @@ msgstr ""
"匿名または認証されたスタッフ以外のユーザーがメッセージを送信。action=pingもサ"
"ポートしています。"
-#: engine/vibes_auth/docs/drf/messaging.py:28
+#: engine/vibes_auth/docs/drf/messaging.py:30
msgid "Staff inbox control"
msgstr "スタッフの受信トレイ管理"
-#: engine/vibes_auth/docs/drf/messaging.py:29
+#: engine/vibes_auth/docs/drf/messaging.py:32
msgid ""
"Staff-only actions: list_open, assign, reply, close, ping. Unified event "
"payloads are emitted."
@@ -102,11 +102,11 @@ msgstr ""
"スタッフのみのアクション: list_open、assign、reply、close、ping。統一されたイ"
"ベントペイロードが発行されます。"
-#: engine/vibes_auth/docs/drf/messaging.py:39
+#: engine/vibes_auth/docs/drf/messaging.py:43
msgid "Per-thread staff channel"
msgstr "スレッドごとのスタッフチャンネル"
-#: engine/vibes_auth/docs/drf/messaging.py:40
+#: engine/vibes_auth/docs/drf/messaging.py:44
msgid "Reply, close, and ping within a specific thread."
msgstr "特定のスレッド内での返信、クローズ、Ping送信。"
@@ -134,7 +134,7 @@ msgstr "トークンの検証"
msgid "Verify a token (refresh or access)."
msgstr "トークンを確認する(リフレッシュまたはアクセス)。"
-#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90
+#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:100
msgid "the token is valid"
msgstr "トークンは有効です"
@@ -171,9 +171,9 @@ msgid "confirm a user's password reset"
msgstr "ユーザーのパスワード・リセットを確認する"
#: engine/vibes_auth/docs/drf/viewsets.py:87
-#: engine/vibes_auth/graphene/mutations.py:317
-#: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101
-#: engine/vibes_auth/viewsets.py:84
+#: engine/vibes_auth/graphene/mutations.py:345
+#: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/viewsets.py:94
msgid "passwords do not match"
msgstr "パスワードが一致しない"
@@ -181,86 +181,87 @@ msgstr "パスワードが一致しない"
msgid "activate a user's account"
msgstr "ユーザーアカウントの有効化"
-#: engine/vibes_auth/docs/drf/viewsets.py:99
+#: engine/vibes_auth/docs/drf/viewsets.py:101
msgid "activation link is invalid or account already activated"
msgstr ""
"アクティベーションリンクが無効であるか、アカウントがすでにアクティベーション"
"されています。"
-#: engine/vibes_auth/docs/drf/viewsets.py:107
+#: engine/vibes_auth/docs/drf/viewsets.py:111
msgid "merge client-stored recently viewed products"
msgstr "クライアントが最近閲覧した商品をマージする"
-#: engine/vibes_auth/graphene/mutations.py:44
+#: engine/vibes_auth/graphene/mutations.py:47
msgid "the user's b64-encoded uuid who referred the new user to us."
msgstr "新規ユーザーを紹介したユーザーのb64エンコードされたuuid。"
-#: engine/vibes_auth/graphene/mutations.py:64
+#: engine/vibes_auth/graphene/mutations.py:69
msgid "password too weak"
msgstr "パスワードが弱すぎる"
-#: engine/vibes_auth/graphene/mutations.py:119
+#: engine/vibes_auth/graphene/mutations.py:129
msgid "malformed email"
msgstr "不正な電子メール"
-#: engine/vibes_auth/graphene/mutations.py:126
-#: engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/graphene/mutations.py:141
+#: engine/vibes_auth/serializers.py:117
#, python-brace-format
msgid "malformed phone number: {phone_number}"
msgstr "電話番号が不正です:{phone_number}!"
-#: engine/vibes_auth/graphene/mutations.py:148
+#: engine/vibes_auth/graphene/mutations.py:166
#, python-brace-format
msgid "Invalid attribute format: {attribute_pair}"
msgstr "無効な属性形式です:{attribute_pair}です!"
-#: engine/vibes_auth/graphene/mutations.py:162
+#: engine/vibes_auth/graphene/mutations.py:183
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr "{name}は存在しません:{uuid}が存在しません!"
-#: engine/vibes_auth/graphene/mutations.py:270
-#: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146
+#: engine/vibes_auth/graphene/mutations.py:298
+#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180
msgid "activation link is invalid!"
msgstr "アクティベーションリンクが無効です!"
-#: engine/vibes_auth/graphene/mutations.py:273
+#: engine/vibes_auth/graphene/mutations.py:301
msgid "account already activated..."
msgstr "アカウントはすでに有効になっています..."
-#: engine/vibes_auth/graphene/mutations.py:280
-#: engine/vibes_auth/graphene/mutations.py:336
+#: engine/vibes_auth/graphene/mutations.py:308
+#: engine/vibes_auth/graphene/mutations.py:370
msgid "something went wrong: {e!s}"
msgstr "何かが間違っていた:{e!s}"
-#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95
+#: engine/vibes_auth/graphene/mutations.py:352
+#: engine/vibes_auth/viewsets.py:106
msgid "token is invalid!"
msgstr "トークンが無効です!"
-#: engine/vibes_auth/graphene/object_types.py:40
+#: engine/vibes_auth/graphene/object_types.py:46
msgid ""
"the products this user has viewed most recently (max 48), in reverse‐"
"chronological order"
msgstr "このユーザーが最近閲覧した商品(最大48件)を逆順に表示します。"
-#: engine/vibes_auth/graphene/object_types.py:42
-#: engine/vibes_auth/models.py:185
+#: engine/vibes_auth/graphene/object_types.py:49
+#: engine/vibes_auth/models.py:209
msgid "groups"
msgstr "グループ"
-#: engine/vibes_auth/graphene/object_types.py:45
+#: engine/vibes_auth/graphene/object_types.py:52
msgid "wishlist"
msgstr "ウィッシュリスト"
-#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:70
+#: engine/vibes_auth/graphene/object_types.py:56 engine/vibes_auth/models.py:70
msgid "avatar"
msgstr "アバター"
-#: engine/vibes_auth/graphene/object_types.py:48
+#: engine/vibes_auth/graphene/object_types.py:58
msgid "attributes may be used to store custom data"
msgstr "属性は、カスタム・データを保存するために使用することができる。"
-#: engine/vibes_auth/graphene/object_types.py:50
+#: engine/vibes_auth/graphene/object_types.py:62
#, python-brace-format
msgid ""
"language is one of the {settings.LANGUAGES} with default {settings."
@@ -269,23 +270,23 @@ msgstr ""
"言語は {settings.LANGUAGES} のいずれかで、デフォルトは {settings."
"LANGUAGE_CODE} です。"
-#: engine/vibes_auth/graphene/object_types.py:52
+#: engine/vibes_auth/graphene/object_types.py:66
msgid "address set"
msgstr "住所"
-#: engine/vibes_auth/messaging/services.py:49
+#: engine/vibes_auth/messaging/services.py:52
msgid "Valid email is required for anonymous chats."
msgstr "匿名チャットには有効なEメールが必要です。"
-#: engine/vibes_auth/messaging/services.py:57
+#: engine/vibes_auth/messaging/services.py:65
msgid "Message must be 1..1028 characters."
msgstr "メッセージは1〜1028文字でなければならない。"
-#: engine/vibes_auth/messaging/services.py:93
+#: engine/vibes_auth/messaging/services.py:105
msgid "We're searching for the operator to answer you already, hold by!"
msgstr "今、オペレーターを探しているところです!"
-#: engine/vibes_auth/messaging/services.py:136
+#: engine/vibes_auth/messaging/services.py:152
msgid "Assignee must be a staff user."
msgstr "担当者はスタッフユーザーでなければなりません。"
@@ -354,71 +355,71 @@ msgstr "アカウントを削除する代わりに、この選択を解除する
msgid "is_subscribed"
msgstr "購読中"
-#: engine/vibes_auth/models.py:87
+#: engine/vibes_auth/models.py:88
msgid "user's newsletter subscription status"
msgstr "ユーザーのニュースレター購読状況"
-#: engine/vibes_auth/models.py:90
+#: engine/vibes_auth/models.py:92
msgid "activation token"
msgstr "アクティベーション・トークン"
-#: engine/vibes_auth/models.py:94
+#: engine/vibes_auth/models.py:101
msgid "attributes"
msgstr "属性"
-#: engine/vibes_auth/models.py:133
+#: engine/vibes_auth/models.py:141
msgid "user"
msgstr "ユーザー"
-#: engine/vibes_auth/models.py:134
+#: engine/vibes_auth/models.py:142
msgid "users"
msgstr "ユーザー"
-#: engine/vibes_auth/models.py:139
+#: engine/vibes_auth/models.py:149
msgid "For anonymous threads"
msgstr "匿名スレッドの場合"
-#: engine/vibes_auth/models.py:153
+#: engine/vibes_auth/models.py:173
msgid "Chat thread"
msgstr "チャットスレッド"
-#: engine/vibes_auth/models.py:154
+#: engine/vibes_auth/models.py:174
msgid "Chat threads"
msgstr "チャットスレッド"
-#: engine/vibes_auth/models.py:159
+#: engine/vibes_auth/models.py:180
msgid "provide user or email for anonymous thread."
msgstr "匿名スレッドの場合は、ユーザーまたは電子メールを入力してください。"
-#: engine/vibes_auth/models.py:161
+#: engine/vibes_auth/models.py:183
msgid "assignee must be a staff user."
msgstr "担当者はスタッフユーザーでなければならない。"
-#: engine/vibes_auth/models.py:177
+#: engine/vibes_auth/models.py:201
msgid "Chat message"
msgstr "チャットメッセージ"
-#: engine/vibes_auth/models.py:178
+#: engine/vibes_auth/models.py:202
msgid "Chat messages"
msgstr "チャットメッセージ"
-#: engine/vibes_auth/models.py:184
+#: engine/vibes_auth/models.py:208
msgid "group"
msgstr "グループ"
-#: engine/vibes_auth/models.py:191
+#: engine/vibes_auth/models.py:215
msgid "outstanding token"
msgstr "卓越したトークン"
-#: engine/vibes_auth/models.py:192
+#: engine/vibes_auth/models.py:216
msgid "outstanding tokens"
msgstr "トークン残高"
-#: engine/vibes_auth/models.py:198
+#: engine/vibes_auth/models.py:222
msgid "blacklisted token"
msgstr "ブラックリストトークン"
-#: engine/vibes_auth/models.py:199
+#: engine/vibes_auth/models.py:223
msgid "blacklisted tokens"
msgstr "ブラックリストに載ったトークン"
@@ -426,37 +427,37 @@ msgstr "ブラックリストに載ったトークン"
msgid "attributes must be a dictionary"
msgstr "attributes`は辞書でなければならない。"
-#: engine/vibes_auth/serializers.py:93
+#: engine/vibes_auth/serializers.py:97
msgid "business identificator is required when registering as a business"
msgstr "事業者登録の際には、事業者識別情報が必要です。"
-#: engine/vibes_auth/serializers.py:113
+#: engine/vibes_auth/serializers.py:127
#, python-brace-format
msgid "malformed email: {email}"
msgstr "不正な電子メール:{email}"
-#: engine/vibes_auth/serializers.py:134 engine/vibes_auth/serializers.py:159
-#: engine/vibes_auth/serializers.py:182 engine/vibes_auth/serializers.py:192
+#: engine/vibes_auth/serializers.py:150 engine/vibes_auth/serializers.py:175
+#: engine/vibes_auth/serializers.py:198 engine/vibes_auth/serializers.py:210
msgid "no active account"
msgstr "アクティブなアカウントが見つかりません"
-#: engine/vibes_auth/serializers.py:169
+#: engine/vibes_auth/serializers.py:185
msgid "must set token_class attribute on class."
msgstr "クラスにtoken_class属性を設定する必要があります!"
-#: engine/vibes_auth/serializers.py:253
+#: engine/vibes_auth/serializers.py:271
msgid "token_blacklisted"
msgstr "トークンのブラックリスト入り"
-#: engine/vibes_auth/serializers.py:258
+#: engine/vibes_auth/serializers.py:276
msgid "invalid token"
msgstr "無効なトークン"
-#: engine/vibes_auth/serializers.py:268
+#: engine/vibes_auth/serializers.py:286
msgid "no user uuid claim present in token"
msgstr "トークンにユーザー uuid クレームが存在しない"
-#: engine/vibes_auth/serializers.py:270
+#: engine/vibes_auth/serializers.py:288
msgid "user does not exist"
msgstr "ユーザーが存在しない"
@@ -557,7 +558,7 @@ msgstr "{settings.PROJECT_NAME}| アカウントの有効化| アカウント
msgid "{settings.PROJECT_NAME} | Reset Password"
msgstr "{settings.PROJECT_NAME}| パスワードのリセット"
-#: engine/vibes_auth/validators.py:13
+#: engine/vibes_auth/validators.py:15
msgid ""
"invalid phone number format. the number must be entered in the format: "
"\"+999999999\". up to 15 digits allowed."
@@ -565,7 +566,7 @@ msgstr ""
"電話番号の形式が無効です。電話番号は次の形式で入力してください:"
"\"+999999999\".15桁まで入力可能です。"
-#: engine/vibes_auth/views.py:30
+#: engine/vibes_auth/views.py:34
msgid ""
"Represents a view for getting a pair of access and refresh tokens and user's "
"data. This view manages the process of handling token-based authentication "
@@ -579,7 +580,7 @@ msgstr ""
"スの認証を処理するプロセスを管理します。ベースのトークンビューの上に構築さ"
"れ、ブルートフォース攻撃から保護するために適切なレート制限を保証します。"
-#: engine/vibes_auth/views.py:52
+#: engine/vibes_auth/views.py:58
msgid ""
"Handles refreshing of tokens for authentication purposes. This class is used "
"to provide functionality for token refresh operations as part of an "
@@ -593,7 +594,7 @@ msgstr ""
"求できるようにします。ビューは、トークン更新の入力を検証して適切な出力を行う"
"ために、 関連するシリアライザに依存します。"
-#: engine/vibes_auth/views.py:75
+#: engine/vibes_auth/views.py:83
msgid ""
"Represents a view for verifying JSON Web Tokens (JWT) using specific "
"serialization and validation logic. "
@@ -601,7 +602,7 @@ msgstr ""
"特定のシリアライズと検証ロジックを使用して JSON ウェブトークン (JWT) を検証す"
"るビューを表します。"
-#: engine/vibes_auth/views.py:92
+#: engine/vibes_auth/views.py:103
msgid "the token is invalid"
msgstr "トークンが無効"
@@ -619,10 +620,10 @@ msgstr ""
"関連のデータを管理するアクションのセットを提供します。このクラスは、堅牢なAPI"
"ハンドリングのためにミキシンとGenericViewSetを拡張します。"
-#: engine/vibes_auth/viewsets.py:99
+#: engine/vibes_auth/viewsets.py:113
msgid "password reset successfully"
msgstr "パスワードのリセットに成功しました!"
-#: engine/vibes_auth/viewsets.py:132
+#: engine/vibes_auth/viewsets.py:161
msgid "account already activated!"
msgstr "あなたはすでにアカウントを有効にしています..."
diff --git a/engine/vibes_auth/locale/kk_KZ/LC_MESSAGES/django.po b/engine/vibes_auth/locale/kk_KZ/LC_MESSAGES/django.po
index 5d358f84..3ca2b03e 100644
--- a/engine/vibes_auth/locale/kk_KZ/LC_MESSAGES/django.po
+++ b/engine/vibes_auth/locale/kk_KZ/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: LANGUAGE \n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
#: engine/vibes_auth/admin.py:51 engine/vibes_auth/admin.py:52
-#: engine/vibes_auth/graphene/object_types.py:46
+#: engine/vibes_auth/graphene/object_types.py:54
msgid "balance"
msgstr ""
@@ -25,7 +25,7 @@ msgstr ""
msgid "order"
msgstr ""
-#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:44
+#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:51
msgid "orders"
msgstr ""
@@ -33,7 +33,7 @@ msgstr ""
msgid "personal info"
msgstr ""
-#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:43
+#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:50
msgid "permissions"
msgstr ""
@@ -45,15 +45,15 @@ msgstr ""
msgid "additional info"
msgstr ""
-#: engine/vibes_auth/admin.py:128
+#: engine/vibes_auth/admin.py:135
msgid "You cannot jump over your head!"
msgstr ""
-#: engine/vibes_auth/admin.py:160
+#: engine/vibes_auth/admin.py:167
msgid "Close selected threads"
msgstr ""
-#: engine/vibes_auth/admin.py:164
+#: engine/vibes_auth/admin.py:171
msgid "Open selected threads"
msgstr ""
@@ -85,27 +85,27 @@ msgstr ""
msgid "User messages entrypoint"
msgstr ""
-#: engine/vibes_auth/docs/drf/messaging.py:18
+#: engine/vibes_auth/docs/drf/messaging.py:19
msgid ""
"Anonymous or authenticated non-staff users send messages. Also supports "
"action=ping."
msgstr ""
-#: engine/vibes_auth/docs/drf/messaging.py:28
+#: engine/vibes_auth/docs/drf/messaging.py:30
msgid "Staff inbox control"
msgstr ""
-#: engine/vibes_auth/docs/drf/messaging.py:29
+#: engine/vibes_auth/docs/drf/messaging.py:32
msgid ""
"Staff-only actions: list_open, assign, reply, close, ping. Unified event "
"payloads are emitted."
msgstr ""
-#: engine/vibes_auth/docs/drf/messaging.py:39
+#: engine/vibes_auth/docs/drf/messaging.py:43
msgid "Per-thread staff channel"
msgstr ""
-#: engine/vibes_auth/docs/drf/messaging.py:40
+#: engine/vibes_auth/docs/drf/messaging.py:44
msgid "Reply, close, and ping within a specific thread."
msgstr ""
@@ -133,7 +133,7 @@ msgstr ""
msgid "Verify a token (refresh or access)."
msgstr ""
-#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90
+#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:100
msgid "the token is valid"
msgstr ""
@@ -170,9 +170,9 @@ msgid "confirm a user's password reset"
msgstr ""
#: engine/vibes_auth/docs/drf/viewsets.py:87
-#: engine/vibes_auth/graphene/mutations.py:317
-#: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101
-#: engine/vibes_auth/viewsets.py:84
+#: engine/vibes_auth/graphene/mutations.py:345
+#: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/viewsets.py:94
msgid "passwords do not match"
msgstr ""
@@ -180,107 +180,108 @@ msgstr ""
msgid "activate a user's account"
msgstr ""
-#: engine/vibes_auth/docs/drf/viewsets.py:99
+#: engine/vibes_auth/docs/drf/viewsets.py:101
msgid "activation link is invalid or account already activated"
msgstr ""
-#: engine/vibes_auth/docs/drf/viewsets.py:107
+#: engine/vibes_auth/docs/drf/viewsets.py:111
msgid "merge client-stored recently viewed products"
msgstr ""
-#: engine/vibes_auth/graphene/mutations.py:44
+#: engine/vibes_auth/graphene/mutations.py:47
msgid "the user's b64-encoded uuid who referred the new user to us."
msgstr ""
-#: engine/vibes_auth/graphene/mutations.py:64
+#: engine/vibes_auth/graphene/mutations.py:69
msgid "password too weak"
msgstr ""
-#: engine/vibes_auth/graphene/mutations.py:119
+#: engine/vibes_auth/graphene/mutations.py:129
msgid "malformed email"
msgstr ""
-#: engine/vibes_auth/graphene/mutations.py:126
-#: engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/graphene/mutations.py:141
+#: engine/vibes_auth/serializers.py:117
#, python-brace-format
msgid "malformed phone number: {phone_number}"
msgstr ""
-#: engine/vibes_auth/graphene/mutations.py:148
+#: engine/vibes_auth/graphene/mutations.py:166
#, python-brace-format
msgid "Invalid attribute format: {attribute_pair}"
msgstr ""
-#: engine/vibes_auth/graphene/mutations.py:162
+#: engine/vibes_auth/graphene/mutations.py:183
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr ""
-#: engine/vibes_auth/graphene/mutations.py:270
-#: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146
+#: engine/vibes_auth/graphene/mutations.py:298
+#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180
msgid "activation link is invalid!"
msgstr ""
-#: engine/vibes_auth/graphene/mutations.py:273
+#: engine/vibes_auth/graphene/mutations.py:301
msgid "account already activated..."
msgstr ""
-#: engine/vibes_auth/graphene/mutations.py:280
-#: engine/vibes_auth/graphene/mutations.py:336
+#: engine/vibes_auth/graphene/mutations.py:308
+#: engine/vibes_auth/graphene/mutations.py:370
msgid "something went wrong: {e!s}"
msgstr ""
-#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95
+#: engine/vibes_auth/graphene/mutations.py:352
+#: engine/vibes_auth/viewsets.py:106
msgid "token is invalid!"
msgstr ""
-#: engine/vibes_auth/graphene/object_types.py:40
+#: engine/vibes_auth/graphene/object_types.py:46
msgid ""
"the products this user has viewed most recently (max 48), in reverse‐"
"chronological order"
msgstr ""
-#: engine/vibes_auth/graphene/object_types.py:42
-#: engine/vibes_auth/models.py:185
+#: engine/vibes_auth/graphene/object_types.py:49
+#: engine/vibes_auth/models.py:209
msgid "groups"
msgstr ""
-#: engine/vibes_auth/graphene/object_types.py:45
+#: engine/vibes_auth/graphene/object_types.py:52
msgid "wishlist"
msgstr ""
-#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:70
+#: engine/vibes_auth/graphene/object_types.py:56 engine/vibes_auth/models.py:70
msgid "avatar"
msgstr ""
-#: engine/vibes_auth/graphene/object_types.py:48
+#: engine/vibes_auth/graphene/object_types.py:58
msgid "attributes may be used to store custom data"
msgstr ""
-#: engine/vibes_auth/graphene/object_types.py:50
+#: engine/vibes_auth/graphene/object_types.py:62
#, python-brace-format
msgid ""
"language is one of the {settings.LANGUAGES} with default {settings."
"LANGUAGE_CODE}"
msgstr ""
-#: engine/vibes_auth/graphene/object_types.py:52
+#: engine/vibes_auth/graphene/object_types.py:66
msgid "address set"
msgstr ""
-#: engine/vibes_auth/messaging/services.py:49
+#: engine/vibes_auth/messaging/services.py:52
msgid "Valid email is required for anonymous chats."
msgstr ""
-#: engine/vibes_auth/messaging/services.py:57
+#: engine/vibes_auth/messaging/services.py:65
msgid "Message must be 1..1028 characters."
msgstr ""
-#: engine/vibes_auth/messaging/services.py:93
+#: engine/vibes_auth/messaging/services.py:105
msgid "We're searching for the operator to answer you already, hold by!"
msgstr ""
-#: engine/vibes_auth/messaging/services.py:136
+#: engine/vibes_auth/messaging/services.py:152
msgid "Assignee must be a staff user."
msgstr ""
@@ -343,71 +344,71 @@ msgstr ""
msgid "is_subscribed"
msgstr ""
-#: engine/vibes_auth/models.py:87
+#: engine/vibes_auth/models.py:88
msgid "user's newsletter subscription status"
msgstr ""
-#: engine/vibes_auth/models.py:90
+#: engine/vibes_auth/models.py:92
msgid "activation token"
msgstr ""
-#: engine/vibes_auth/models.py:94
+#: engine/vibes_auth/models.py:101
msgid "attributes"
msgstr ""
-#: engine/vibes_auth/models.py:133
+#: engine/vibes_auth/models.py:141
msgid "user"
msgstr ""
-#: engine/vibes_auth/models.py:134
+#: engine/vibes_auth/models.py:142
msgid "users"
msgstr ""
-#: engine/vibes_auth/models.py:139
+#: engine/vibes_auth/models.py:149
msgid "For anonymous threads"
msgstr ""
-#: engine/vibes_auth/models.py:153
+#: engine/vibes_auth/models.py:173
msgid "Chat thread"
msgstr ""
-#: engine/vibes_auth/models.py:154
+#: engine/vibes_auth/models.py:174
msgid "Chat threads"
msgstr ""
-#: engine/vibes_auth/models.py:159
+#: engine/vibes_auth/models.py:180
msgid "provide user or email for anonymous thread."
msgstr ""
-#: engine/vibes_auth/models.py:161
+#: engine/vibes_auth/models.py:183
msgid "assignee must be a staff user."
msgstr ""
-#: engine/vibes_auth/models.py:177
+#: engine/vibes_auth/models.py:201
msgid "Chat message"
msgstr ""
-#: engine/vibes_auth/models.py:178
+#: engine/vibes_auth/models.py:202
msgid "Chat messages"
msgstr ""
-#: engine/vibes_auth/models.py:184
+#: engine/vibes_auth/models.py:208
msgid "group"
msgstr ""
-#: engine/vibes_auth/models.py:191
+#: engine/vibes_auth/models.py:215
msgid "outstanding token"
msgstr ""
-#: engine/vibes_auth/models.py:192
+#: engine/vibes_auth/models.py:216
msgid "outstanding tokens"
msgstr ""
-#: engine/vibes_auth/models.py:198
+#: engine/vibes_auth/models.py:222
msgid "blacklisted token"
msgstr ""
-#: engine/vibes_auth/models.py:199
+#: engine/vibes_auth/models.py:223
msgid "blacklisted tokens"
msgstr ""
@@ -415,37 +416,37 @@ msgstr ""
msgid "attributes must be a dictionary"
msgstr ""
-#: engine/vibes_auth/serializers.py:93
+#: engine/vibes_auth/serializers.py:97
msgid "business identificator is required when registering as a business"
msgstr ""
-#: engine/vibes_auth/serializers.py:113
+#: engine/vibes_auth/serializers.py:127
#, python-brace-format
msgid "malformed email: {email}"
msgstr ""
-#: engine/vibes_auth/serializers.py:134 engine/vibes_auth/serializers.py:159
-#: engine/vibes_auth/serializers.py:182 engine/vibes_auth/serializers.py:192
+#: engine/vibes_auth/serializers.py:150 engine/vibes_auth/serializers.py:175
+#: engine/vibes_auth/serializers.py:198 engine/vibes_auth/serializers.py:210
msgid "no active account"
msgstr ""
-#: engine/vibes_auth/serializers.py:169
+#: engine/vibes_auth/serializers.py:185
msgid "must set token_class attribute on class."
msgstr ""
-#: engine/vibes_auth/serializers.py:253
+#: engine/vibes_auth/serializers.py:271
msgid "token_blacklisted"
msgstr ""
-#: engine/vibes_auth/serializers.py:258
+#: engine/vibes_auth/serializers.py:276
msgid "invalid token"
msgstr ""
-#: engine/vibes_auth/serializers.py:268
+#: engine/vibes_auth/serializers.py:286
msgid "no user uuid claim present in token"
msgstr ""
-#: engine/vibes_auth/serializers.py:270
+#: engine/vibes_auth/serializers.py:288
msgid "user does not exist"
msgstr ""
@@ -535,13 +536,13 @@ msgstr ""
msgid "{settings.PROJECT_NAME} | Reset Password"
msgstr ""
-#: engine/vibes_auth/validators.py:13
+#: engine/vibes_auth/validators.py:15
msgid ""
"invalid phone number format. the number must be entered in the format: "
"\"+999999999\". up to 15 digits allowed."
msgstr ""
-#: engine/vibes_auth/views.py:30
+#: engine/vibes_auth/views.py:34
msgid ""
"Represents a view for getting a pair of access and refresh tokens and user's "
"data. This view manages the process of handling token-based authentication "
@@ -550,7 +551,7 @@ msgid ""
"proper rate limiting to protect against brute force attacks."
msgstr ""
-#: engine/vibes_auth/views.py:52
+#: engine/vibes_auth/views.py:58
msgid ""
"Handles refreshing of tokens for authentication purposes. This class is used "
"to provide functionality for token refresh operations as part of an "
@@ -559,13 +560,13 @@ msgid ""
"validate token refresh inputs and produce appropriate outputs."
msgstr ""
-#: engine/vibes_auth/views.py:75
+#: engine/vibes_auth/views.py:83
msgid ""
"Represents a view for verifying JSON Web Tokens (JWT) using specific "
"serialization and validation logic. "
msgstr ""
-#: engine/vibes_auth/views.py:92
+#: engine/vibes_auth/views.py:103
msgid "the token is invalid"
msgstr ""
@@ -578,10 +579,10 @@ msgid ""
"class extends the mixins and GenericViewSet for robust API handling."
msgstr ""
-#: engine/vibes_auth/viewsets.py:99
+#: engine/vibes_auth/viewsets.py:113
msgid "password reset successfully"
msgstr ""
-#: engine/vibes_auth/viewsets.py:132
+#: engine/vibes_auth/viewsets.py:161
msgid "account already activated!"
msgstr ""
diff --git a/engine/vibes_auth/locale/ko_KR/LC_MESSAGES/django.po b/engine/vibes_auth/locale/ko_KR/LC_MESSAGES/django.po
index e6283369..c8e90169 100644
--- a/engine/vibes_auth/locale/ko_KR/LC_MESSAGES/django.po
+++ b/engine/vibes_auth/locale/ko_KR/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -14,7 +14,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: engine/vibes_auth/admin.py:51 engine/vibes_auth/admin.py:52
-#: engine/vibes_auth/graphene/object_types.py:46
+#: engine/vibes_auth/graphene/object_types.py:54
msgid "balance"
msgstr "잔액"
@@ -22,7 +22,7 @@ msgstr "잔액"
msgid "order"
msgstr "주문"
-#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:44
+#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:51
msgid "orders"
msgstr "주문"
@@ -30,7 +30,7 @@ msgstr "주문"
msgid "personal info"
msgstr "개인 정보"
-#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:43
+#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:50
msgid "permissions"
msgstr "권한"
@@ -42,15 +42,15 @@ msgstr "중요한 날짜"
msgid "additional info"
msgstr "추가 정보"
-#: engine/vibes_auth/admin.py:128
+#: engine/vibes_auth/admin.py:135
msgid "You cannot jump over your head!"
msgstr "머리 위로 점프할 수 없습니다!"
-#: engine/vibes_auth/admin.py:160
+#: engine/vibes_auth/admin.py:167
msgid "Close selected threads"
msgstr "선택한 스레드 닫기"
-#: engine/vibes_auth/admin.py:164
+#: engine/vibes_auth/admin.py:171
msgid "Open selected threads"
msgstr "선택한 스레드 열기"
@@ -82,18 +82,18 @@ msgstr "시스템"
msgid "User messages entrypoint"
msgstr "사용자 메시지 진입점"
-#: engine/vibes_auth/docs/drf/messaging.py:18
+#: engine/vibes_auth/docs/drf/messaging.py:19
msgid ""
"Anonymous or authenticated non-staff users send messages. Also supports "
"action=ping."
msgstr ""
"익명 또는 인증된 비직원 사용자가 메시지를 보냅니다. action=ping도 지원합니다."
-#: engine/vibes_auth/docs/drf/messaging.py:28
+#: engine/vibes_auth/docs/drf/messaging.py:30
msgid "Staff inbox control"
msgstr "직원 받은 편지함 제어"
-#: engine/vibes_auth/docs/drf/messaging.py:29
+#: engine/vibes_auth/docs/drf/messaging.py:32
msgid ""
"Staff-only actions: list_open, assign, reply, close, ping. Unified event "
"payloads are emitted."
@@ -101,11 +101,11 @@ msgstr ""
"직원 전용 작업: 목록 열기, 할당하기, 답장하기, 닫기, 핑하기. 통합 이벤트 페이"
"로드가 전송됩니다."
-#: engine/vibes_auth/docs/drf/messaging.py:39
+#: engine/vibes_auth/docs/drf/messaging.py:43
msgid "Per-thread staff channel"
msgstr "스레드별 직원 채널"
-#: engine/vibes_auth/docs/drf/messaging.py:40
+#: engine/vibes_auth/docs/drf/messaging.py:44
msgid "Reply, close, and ping within a specific thread."
msgstr "특정 스레드 내에서 댓글 달기, 닫기, 핑하기."
@@ -133,7 +133,7 @@ msgstr "토큰 확인"
msgid "Verify a token (refresh or access)."
msgstr "토큰을 확인합니다(새로 고침 또는 액세스)."
-#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90
+#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:100
msgid "the token is valid"
msgstr "토큰이 유효합니다."
@@ -170,9 +170,9 @@ msgid "confirm a user's password reset"
msgstr "사용자의 비밀번호 재설정 확인"
#: engine/vibes_auth/docs/drf/viewsets.py:87
-#: engine/vibes_auth/graphene/mutations.py:317
-#: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101
-#: engine/vibes_auth/viewsets.py:84
+#: engine/vibes_auth/graphene/mutations.py:345
+#: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/viewsets.py:94
msgid "passwords do not match"
msgstr "비밀번호가 일치하지 않습니다."
@@ -180,84 +180,85 @@ msgstr "비밀번호가 일치하지 않습니다."
msgid "activate a user's account"
msgstr "사용자 계정 활성화하기"
-#: engine/vibes_auth/docs/drf/viewsets.py:99
+#: engine/vibes_auth/docs/drf/viewsets.py:101
msgid "activation link is invalid or account already activated"
msgstr "활성화 링크가 유효하지 않거나 계정이 이미 활성화되어 있습니다."
-#: engine/vibes_auth/docs/drf/viewsets.py:107
+#: engine/vibes_auth/docs/drf/viewsets.py:111
msgid "merge client-stored recently viewed products"
msgstr "클라이언트가 저장한 최근 본 제품 병합"
-#: engine/vibes_auth/graphene/mutations.py:44
+#: engine/vibes_auth/graphene/mutations.py:47
msgid "the user's b64-encoded uuid who referred the new user to us."
msgstr "새 사용자를 추천한 사용자의 b64로 인코딩된 UUID입니다."
-#: engine/vibes_auth/graphene/mutations.py:64
+#: engine/vibes_auth/graphene/mutations.py:69
msgid "password too weak"
msgstr "비밀번호가 너무 약합니다."
-#: engine/vibes_auth/graphene/mutations.py:119
+#: engine/vibes_auth/graphene/mutations.py:129
msgid "malformed email"
msgstr "잘못된 이메일"
-#: engine/vibes_auth/graphene/mutations.py:126
-#: engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/graphene/mutations.py:141
+#: engine/vibes_auth/serializers.py:117
#, python-brace-format
msgid "malformed phone number: {phone_number}"
msgstr "잘못된 전화 번호입니다: {phone_number}!"
-#: engine/vibes_auth/graphene/mutations.py:148
+#: engine/vibes_auth/graphene/mutations.py:166
#, python-brace-format
msgid "Invalid attribute format: {attribute_pair}"
msgstr "잘못된 속성 형식입니다: {attribute_pair}!"
-#: engine/vibes_auth/graphene/mutations.py:162
+#: engine/vibes_auth/graphene/mutations.py:183
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr "{name}가 존재하지 않습니다: {uuid}!"
-#: engine/vibes_auth/graphene/mutations.py:270
-#: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146
+#: engine/vibes_auth/graphene/mutations.py:298
+#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180
msgid "activation link is invalid!"
msgstr "활성화 링크가 유효하지 않습니다!"
-#: engine/vibes_auth/graphene/mutations.py:273
+#: engine/vibes_auth/graphene/mutations.py:301
msgid "account already activated..."
msgstr "계정이 이미 활성화되었습니다..."
-#: engine/vibes_auth/graphene/mutations.py:280
-#: engine/vibes_auth/graphene/mutations.py:336
+#: engine/vibes_auth/graphene/mutations.py:308
+#: engine/vibes_auth/graphene/mutations.py:370
msgid "something went wrong: {e!s}"
msgstr "문제가 발생했습니다: {e!s}"
-#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95
+#: engine/vibes_auth/graphene/mutations.py:352
+#: engine/vibes_auth/viewsets.py:106
msgid "token is invalid!"
msgstr "토큰이 유효하지 않습니다!"
-#: engine/vibes_auth/graphene/object_types.py:40
+#: engine/vibes_auth/graphene/object_types.py:46
msgid ""
"the products this user has viewed most recently (max 48), in reverse‐"
"chronological order"
msgstr "이 사용자가 가장 최근에 본 제품(최대 48개)을 시간 역순으로 표시합니다."
-#: engine/vibes_auth/graphene/object_types.py:42
-#: engine/vibes_auth/models.py:185
+#: engine/vibes_auth/graphene/object_types.py:49
+#: engine/vibes_auth/models.py:209
msgid "groups"
msgstr "그룹"
-#: engine/vibes_auth/graphene/object_types.py:45
+#: engine/vibes_auth/graphene/object_types.py:52
msgid "wishlist"
msgstr "위시리스트"
-#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:70
+#: engine/vibes_auth/graphene/object_types.py:56 engine/vibes_auth/models.py:70
msgid "avatar"
msgstr "아바타"
-#: engine/vibes_auth/graphene/object_types.py:48
+#: engine/vibes_auth/graphene/object_types.py:58
msgid "attributes may be used to store custom data"
msgstr "속성을 사용하여 사용자 지정 데이터를 저장할 수 있습니다."
-#: engine/vibes_auth/graphene/object_types.py:50
+#: engine/vibes_auth/graphene/object_types.py:62
#, python-brace-format
msgid ""
"language is one of the {settings.LANGUAGES} with default {settings."
@@ -266,23 +267,23 @@ msgstr ""
"언어는 {settings.LANGUAGES} 중 하나이며 기본값은 {settings.LANGUAGE_CODE}입니"
"다."
-#: engine/vibes_auth/graphene/object_types.py:52
+#: engine/vibes_auth/graphene/object_types.py:66
msgid "address set"
msgstr "주소"
-#: engine/vibes_auth/messaging/services.py:49
+#: engine/vibes_auth/messaging/services.py:52
msgid "Valid email is required for anonymous chats."
msgstr "익명 채팅을 하려면 유효한 이메일이 필요합니다."
-#: engine/vibes_auth/messaging/services.py:57
+#: engine/vibes_auth/messaging/services.py:65
msgid "Message must be 1..1028 characters."
msgstr "메시지는 1...1028자여야 합니다."
-#: engine/vibes_auth/messaging/services.py:93
+#: engine/vibes_auth/messaging/services.py:105
msgid "We're searching for the operator to answer you already, hold by!"
msgstr "이미 응답할 교환원을 찾고 있으니 잠시만 기다려주세요!"
-#: engine/vibes_auth/messaging/services.py:136
+#: engine/vibes_auth/messaging/services.py:152
msgid "Assignee must be a staff user."
msgstr "양수인은 직원 사용자이어야 합니다."
@@ -351,71 +352,71 @@ msgstr "계정을 삭제하는 대신 이 옵션을 선택 해제합니다."
msgid "is_subscribed"
msgstr "구독 중"
-#: engine/vibes_auth/models.py:87
+#: engine/vibes_auth/models.py:88
msgid "user's newsletter subscription status"
msgstr "사용자의 뉴스레터 구독 상태"
-#: engine/vibes_auth/models.py:90
+#: engine/vibes_auth/models.py:92
msgid "activation token"
msgstr "활성화 토큰"
-#: engine/vibes_auth/models.py:94
+#: engine/vibes_auth/models.py:101
msgid "attributes"
msgstr "속성"
-#: engine/vibes_auth/models.py:133
+#: engine/vibes_auth/models.py:141
msgid "user"
msgstr "사용자"
-#: engine/vibes_auth/models.py:134
+#: engine/vibes_auth/models.py:142
msgid "users"
msgstr "사용자"
-#: engine/vibes_auth/models.py:139
+#: engine/vibes_auth/models.py:149
msgid "For anonymous threads"
msgstr "익명 스레드의 경우"
-#: engine/vibes_auth/models.py:153
+#: engine/vibes_auth/models.py:173
msgid "Chat thread"
msgstr "채팅 스레드"
-#: engine/vibes_auth/models.py:154
+#: engine/vibes_auth/models.py:174
msgid "Chat threads"
msgstr "채팅 스레드"
-#: engine/vibes_auth/models.py:159
+#: engine/vibes_auth/models.py:180
msgid "provide user or email for anonymous thread."
msgstr "익명 스레드에 사용자 또는 이메일을 입력합니다."
-#: engine/vibes_auth/models.py:161
+#: engine/vibes_auth/models.py:183
msgid "assignee must be a staff user."
msgstr "양수인은 직원 사용자여야 합니다."
-#: engine/vibes_auth/models.py:177
+#: engine/vibes_auth/models.py:201
msgid "Chat message"
msgstr "채팅 메시지"
-#: engine/vibes_auth/models.py:178
+#: engine/vibes_auth/models.py:202
msgid "Chat messages"
msgstr "채팅 메시지"
-#: engine/vibes_auth/models.py:184
+#: engine/vibes_auth/models.py:208
msgid "group"
msgstr "그룹"
-#: engine/vibes_auth/models.py:191
+#: engine/vibes_auth/models.py:215
msgid "outstanding token"
msgstr "뛰어난 토큰"
-#: engine/vibes_auth/models.py:192
+#: engine/vibes_auth/models.py:216
msgid "outstanding tokens"
msgstr "우수 토큰"
-#: engine/vibes_auth/models.py:198
+#: engine/vibes_auth/models.py:222
msgid "blacklisted token"
msgstr "블랙리스트에 오른 토큰"
-#: engine/vibes_auth/models.py:199
+#: engine/vibes_auth/models.py:223
msgid "blacklisted tokens"
msgstr "블랙리스트에 오른 토큰"
@@ -423,37 +424,37 @@ msgstr "블랙리스트에 오른 토큰"
msgid "attributes must be a dictionary"
msgstr "'속성'은 사전이어야 합니다."
-#: engine/vibes_auth/serializers.py:93
+#: engine/vibes_auth/serializers.py:97
msgid "business identificator is required when registering as a business"
msgstr "사업자 등록 시 사업자 식별자는 필수입니다."
-#: engine/vibes_auth/serializers.py:113
+#: engine/vibes_auth/serializers.py:127
#, python-brace-format
msgid "malformed email: {email}"
msgstr "잘못된 이메일입니다: {email}"
-#: engine/vibes_auth/serializers.py:134 engine/vibes_auth/serializers.py:159
-#: engine/vibes_auth/serializers.py:182 engine/vibes_auth/serializers.py:192
+#: engine/vibes_auth/serializers.py:150 engine/vibes_auth/serializers.py:175
+#: engine/vibes_auth/serializers.py:198 engine/vibes_auth/serializers.py:210
msgid "no active account"
msgstr "활성 계정을 찾을 수 없습니다."
-#: engine/vibes_auth/serializers.py:169
+#: engine/vibes_auth/serializers.py:185
msgid "must set token_class attribute on class."
msgstr "클래스에서 토큰_클래스 속성을 설정해야 합니다!"
-#: engine/vibes_auth/serializers.py:253
+#: engine/vibes_auth/serializers.py:271
msgid "token_blacklisted"
msgstr "토큰 블랙리스트"
-#: engine/vibes_auth/serializers.py:258
+#: engine/vibes_auth/serializers.py:276
msgid "invalid token"
msgstr "잘못된 토큰"
-#: engine/vibes_auth/serializers.py:268
+#: engine/vibes_auth/serializers.py:286
msgid "no user uuid claim present in token"
msgstr "토큰에 사용자 UUID 클레임이 없습니다."
-#: engine/vibes_auth/serializers.py:270
+#: engine/vibes_auth/serializers.py:288
msgid "user does not exist"
msgstr "사용자가 존재하지 않습니다."
@@ -553,7 +554,7 @@ msgstr "{settings.PROJECT_NAME} | 계정 활성화"
msgid "{settings.PROJECT_NAME} | Reset Password"
msgstr "{settings.PROJECT_NAME} | 비밀번호 재설정"
-#: engine/vibes_auth/validators.py:13
+#: engine/vibes_auth/validators.py:15
msgid ""
"invalid phone number format. the number must be entered in the format: "
"\"+999999999\". up to 15 digits allowed."
@@ -561,7 +562,7 @@ msgstr ""
"잘못된 전화번호 형식입니다. 번호는 다음과 같은 형식으로 입력해야 합니다: "
"\"+999999999\". 최대 15자리까지 입력할 수 있습니다."
-#: engine/vibes_auth/views.py:30
+#: engine/vibes_auth/views.py:34
msgid ""
"Represents a view for getting a pair of access and refresh tokens and user's "
"data. This view manages the process of handling token-based authentication "
@@ -575,7 +576,7 @@ msgstr ""
"다. 기본 토큰 보기 위에 구축되며 무차별 암호 대입 공격으로부터 보호하기 위해 "
"적절한 속도 제한을 보장합니다."
-#: engine/vibes_auth/views.py:52
+#: engine/vibes_auth/views.py:58
msgid ""
"Handles refreshing of tokens for authentication purposes. This class is used "
"to provide functionality for token refresh operations as part of an "
@@ -589,7 +590,7 @@ msgstr ""
"기는 연결된 직렬화기에 의존하여 토큰 새로 고침 입력의 유효성을 검사하고 적절"
"한 출력을 생성합니다."
-#: engine/vibes_auth/views.py:75
+#: engine/vibes_auth/views.py:83
msgid ""
"Represents a view for verifying JSON Web Tokens (JWT) using specific "
"serialization and validation logic. "
@@ -597,7 +598,7 @@ msgstr ""
"특정 직렬화 및 유효성 검사 로직을 사용하여 JSON 웹 토큰(JWT)을 확인하기 위한 "
"보기를 나타냅니다."
-#: engine/vibes_auth/views.py:92
+#: engine/vibes_auth/views.py:103
msgid "the token is invalid"
msgstr "토큰이 유효하지 않습니다."
@@ -615,10 +616,10 @@ msgstr ""
"작업을 제공합니다. 이 클래스는 강력한 API 처리를 위해 믹스인 및 "
"GenericViewSet을 확장합니다."
-#: engine/vibes_auth/viewsets.py:99
+#: engine/vibes_auth/viewsets.py:113
msgid "password reset successfully"
msgstr "비밀번호가 성공적으로 재설정되었습니다!"
-#: engine/vibes_auth/viewsets.py:132
+#: engine/vibes_auth/viewsets.py:161
msgid "account already activated!"
msgstr "이미 계정을 활성화하셨습니다..."
diff --git a/engine/vibes_auth/locale/nl_NL/LC_MESSAGES/django.po b/engine/vibes_auth/locale/nl_NL/LC_MESSAGES/django.po
index 1a739c5e..ab058c44 100644
--- a/engine/vibes_auth/locale/nl_NL/LC_MESSAGES/django.po
+++ b/engine/vibes_auth/locale/nl_NL/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -14,7 +14,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: engine/vibes_auth/admin.py:51 engine/vibes_auth/admin.py:52
-#: engine/vibes_auth/graphene/object_types.py:46
+#: engine/vibes_auth/graphene/object_types.py:54
msgid "balance"
msgstr "Saldo"
@@ -22,7 +22,7 @@ msgstr "Saldo"
msgid "order"
msgstr "Bestel"
-#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:44
+#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:51
msgid "orders"
msgstr "Bestellingen"
@@ -30,7 +30,7 @@ msgstr "Bestellingen"
msgid "personal info"
msgstr "Persoonlijke info"
-#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:43
+#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:50
msgid "permissions"
msgstr "Rechten"
@@ -42,15 +42,15 @@ msgstr "Belangrijke data"
msgid "additional info"
msgstr "Extra info"
-#: engine/vibes_auth/admin.py:128
+#: engine/vibes_auth/admin.py:135
msgid "You cannot jump over your head!"
msgstr "Je kunt niet over je hoofd springen!"
-#: engine/vibes_auth/admin.py:160
+#: engine/vibes_auth/admin.py:167
msgid "Close selected threads"
msgstr "Geselecteerde threads sluiten"
-#: engine/vibes_auth/admin.py:164
+#: engine/vibes_auth/admin.py:171
msgid "Open selected threads"
msgstr "Geselecteerde draden openen"
@@ -82,7 +82,7 @@ msgstr "Systeem"
msgid "User messages entrypoint"
msgstr "Invoerpunt voor gebruikersberichten"
-#: engine/vibes_auth/docs/drf/messaging.py:18
+#: engine/vibes_auth/docs/drf/messaging.py:19
msgid ""
"Anonymous or authenticated non-staff users send messages. Also supports "
"action=ping."
@@ -90,11 +90,11 @@ msgstr ""
"Anonieme of geauthenticeerde niet-medewerkers kunnen berichten versturen. "
"Ondersteunt ook action=ping."
-#: engine/vibes_auth/docs/drf/messaging.py:28
+#: engine/vibes_auth/docs/drf/messaging.py:30
msgid "Staff inbox control"
msgstr "Beheer inbox personeel"
-#: engine/vibes_auth/docs/drf/messaging.py:29
+#: engine/vibes_auth/docs/drf/messaging.py:32
msgid ""
"Staff-only actions: list_open, assign, reply, close, ping. Unified event "
"payloads are emitted."
@@ -102,11 +102,11 @@ msgstr ""
"Alleen voor personeel: list_open, assign, reply, close, ping. Unified event "
"payloads worden uitgezonden."
-#: engine/vibes_auth/docs/drf/messaging.py:39
+#: engine/vibes_auth/docs/drf/messaging.py:43
msgid "Per-thread staff channel"
msgstr "Personeelskanaal per draad"
-#: engine/vibes_auth/docs/drf/messaging.py:40
+#: engine/vibes_auth/docs/drf/messaging.py:44
msgid "Reply, close, and ping within a specific thread."
msgstr "Antwoorden, sluiten en pingen binnen een specifieke thread."
@@ -134,7 +134,7 @@ msgstr "Een token verifiëren"
msgid "Verify a token (refresh or access)."
msgstr "Een token verifiëren (verversen of toegang)."
-#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90
+#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:100
msgid "the token is valid"
msgstr "The token is valid"
@@ -173,9 +173,9 @@ msgid "confirm a user's password reset"
msgstr "Bevestig het resetten van het wachtwoord van een gebruiker"
#: engine/vibes_auth/docs/drf/viewsets.py:87
-#: engine/vibes_auth/graphene/mutations.py:317
-#: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101
-#: engine/vibes_auth/viewsets.py:84
+#: engine/vibes_auth/graphene/mutations.py:345
+#: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/viewsets.py:94
msgid "passwords do not match"
msgstr "Wachtwoorden komen niet overeen"
@@ -183,63 +183,64 @@ msgstr "Wachtwoorden komen niet overeen"
msgid "activate a user's account"
msgstr "Een gebruikersaccount activeren"
-#: engine/vibes_auth/docs/drf/viewsets.py:99
+#: engine/vibes_auth/docs/drf/viewsets.py:101
msgid "activation link is invalid or account already activated"
msgstr "Activeringslink is ongeldig of account is al geactiveerd"
-#: engine/vibes_auth/docs/drf/viewsets.py:107
+#: engine/vibes_auth/docs/drf/viewsets.py:111
msgid "merge client-stored recently viewed products"
msgstr "Laatst bekeken producten samenvoegen"
-#: engine/vibes_auth/graphene/mutations.py:44
+#: engine/vibes_auth/graphene/mutations.py:47
msgid "the user's b64-encoded uuid who referred the new user to us."
msgstr ""
"De b64-gecodeerde uuid van de gebruiker die de nieuwe gebruiker naar ons "
"heeft doorverwezen."
-#: engine/vibes_auth/graphene/mutations.py:64
+#: engine/vibes_auth/graphene/mutations.py:69
msgid "password too weak"
msgstr "Het wachtwoord is te zwak"
-#: engine/vibes_auth/graphene/mutations.py:119
+#: engine/vibes_auth/graphene/mutations.py:129
msgid "malformed email"
msgstr "Misvormde e-mail"
-#: engine/vibes_auth/graphene/mutations.py:126
-#: engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/graphene/mutations.py:141
+#: engine/vibes_auth/serializers.py:117
#, python-brace-format
msgid "malformed phone number: {phone_number}"
msgstr "Misvormd telefoonnummer: {phone_number}!"
-#: engine/vibes_auth/graphene/mutations.py:148
+#: engine/vibes_auth/graphene/mutations.py:166
#, python-brace-format
msgid "Invalid attribute format: {attribute_pair}"
msgstr "Ongeldig attribuutformaat: {attribute_pair}!"
-#: engine/vibes_auth/graphene/mutations.py:162
+#: engine/vibes_auth/graphene/mutations.py:183
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr "{name} bestaat niet: {uuid}!"
-#: engine/vibes_auth/graphene/mutations.py:270
-#: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146
+#: engine/vibes_auth/graphene/mutations.py:298
+#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180
msgid "activation link is invalid!"
msgstr "Activeringslink is ongeldig!"
-#: engine/vibes_auth/graphene/mutations.py:273
+#: engine/vibes_auth/graphene/mutations.py:301
msgid "account already activated..."
msgstr "Account is al geactiveerd..."
-#: engine/vibes_auth/graphene/mutations.py:280
-#: engine/vibes_auth/graphene/mutations.py:336
+#: engine/vibes_auth/graphene/mutations.py:308
+#: engine/vibes_auth/graphene/mutations.py:370
msgid "something went wrong: {e!s}"
msgstr "Er ging iets mis: {e!s}"
-#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95
+#: engine/vibes_auth/graphene/mutations.py:352
+#: engine/vibes_auth/viewsets.py:106
msgid "token is invalid!"
msgstr "Token is invalid!"
-#: engine/vibes_auth/graphene/object_types.py:40
+#: engine/vibes_auth/graphene/object_types.py:46
msgid ""
"the products this user has viewed most recently (max 48), in reverse‐"
"chronological order"
@@ -247,24 +248,24 @@ msgstr ""
"De producten die deze gebruiker het laatst heeft bekeken (max 48), in "
"omgekeerd-chronologische volgorde."
-#: engine/vibes_auth/graphene/object_types.py:42
-#: engine/vibes_auth/models.py:185
+#: engine/vibes_auth/graphene/object_types.py:49
+#: engine/vibes_auth/models.py:209
msgid "groups"
msgstr "Groepen"
-#: engine/vibes_auth/graphene/object_types.py:45
+#: engine/vibes_auth/graphene/object_types.py:52
msgid "wishlist"
msgstr "Verlanglijst"
-#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:70
+#: engine/vibes_auth/graphene/object_types.py:56 engine/vibes_auth/models.py:70
msgid "avatar"
msgstr "Avatar"
-#: engine/vibes_auth/graphene/object_types.py:48
+#: engine/vibes_auth/graphene/object_types.py:58
msgid "attributes may be used to store custom data"
msgstr "Attributen kunnen worden gebruikt om aangepaste gegevens op te slaan"
-#: engine/vibes_auth/graphene/object_types.py:50
+#: engine/vibes_auth/graphene/object_types.py:62
#, python-brace-format
msgid ""
"language is one of the {settings.LANGUAGES} with default {settings."
@@ -273,24 +274,24 @@ msgstr ""
"Taal is een van de {settings.LANGUAGES} met standaard {settings."
"LANGUAGE_CODE}"
-#: engine/vibes_auth/graphene/object_types.py:52
+#: engine/vibes_auth/graphene/object_types.py:66
msgid "address set"
msgstr "Adressen"
-#: engine/vibes_auth/messaging/services.py:49
+#: engine/vibes_auth/messaging/services.py:52
msgid "Valid email is required for anonymous chats."
msgstr "Voor anonieme chats is een geldig e-mailadres vereist."
-#: engine/vibes_auth/messaging/services.py:57
+#: engine/vibes_auth/messaging/services.py:65
msgid "Message must be 1..1028 characters."
msgstr "Bericht moet 1..1028 tekens bevatten."
-#: engine/vibes_auth/messaging/services.py:93
+#: engine/vibes_auth/messaging/services.py:105
msgid "We're searching for the operator to answer you already, hold by!"
msgstr ""
"We zijn al op zoek naar de operator om je antwoord te geven, wacht even!"
-#: engine/vibes_auth/messaging/services.py:136
+#: engine/vibes_auth/messaging/services.py:152
msgid "Assignee must be a staff user."
msgstr "De toegewezen gebruiker moet een personeelsgebruiker zijn."
@@ -361,71 +362,71 @@ msgstr "Deselecteer dit in plaats van accounts te verwijderen"
msgid "is_subscribed"
msgstr "Is geabonneerd"
-#: engine/vibes_auth/models.py:87
+#: engine/vibes_auth/models.py:88
msgid "user's newsletter subscription status"
msgstr "Inschrijvingsstatus nieuwsbrief gebruiker"
-#: engine/vibes_auth/models.py:90
+#: engine/vibes_auth/models.py:92
msgid "activation token"
msgstr "Activeringstoken"
-#: engine/vibes_auth/models.py:94
+#: engine/vibes_auth/models.py:101
msgid "attributes"
msgstr "Attributen"
-#: engine/vibes_auth/models.py:133
+#: engine/vibes_auth/models.py:141
msgid "user"
msgstr "Gebruiker"
-#: engine/vibes_auth/models.py:134
+#: engine/vibes_auth/models.py:142
msgid "users"
msgstr "Gebruikers"
-#: engine/vibes_auth/models.py:139
+#: engine/vibes_auth/models.py:149
msgid "For anonymous threads"
msgstr "Voor anonieme threads"
-#: engine/vibes_auth/models.py:153
+#: engine/vibes_auth/models.py:173
msgid "Chat thread"
msgstr "Draadje chatten"
-#: engine/vibes_auth/models.py:154
+#: engine/vibes_auth/models.py:174
msgid "Chat threads"
msgstr "Gespreksonderwerpen"
-#: engine/vibes_auth/models.py:159
+#: engine/vibes_auth/models.py:180
msgid "provide user or email for anonymous thread."
msgstr "gebruiker of e-mail opgeven voor anonieme thread."
-#: engine/vibes_auth/models.py:161
+#: engine/vibes_auth/models.py:183
msgid "assignee must be a staff user."
msgstr "De toegewezen gebruiker moet een personeelsgebruiker zijn."
-#: engine/vibes_auth/models.py:177
+#: engine/vibes_auth/models.py:201
msgid "Chat message"
msgstr "Chatbericht"
-#: engine/vibes_auth/models.py:178
+#: engine/vibes_auth/models.py:202
msgid "Chat messages"
msgstr "Chatberichten"
-#: engine/vibes_auth/models.py:184
+#: engine/vibes_auth/models.py:208
msgid "group"
msgstr "Groep"
-#: engine/vibes_auth/models.py:191
+#: engine/vibes_auth/models.py:215
msgid "outstanding token"
msgstr "Uitstekende penning"
-#: engine/vibes_auth/models.py:192
+#: engine/vibes_auth/models.py:216
msgid "outstanding tokens"
msgstr "Uitstaande tokens"
-#: engine/vibes_auth/models.py:198
+#: engine/vibes_auth/models.py:222
msgid "blacklisted token"
msgstr "Token op zwarte lijst"
-#: engine/vibes_auth/models.py:199
+#: engine/vibes_auth/models.py:223
msgid "blacklisted tokens"
msgstr "Tokens op de zwarte lijst"
@@ -433,37 +434,37 @@ msgstr "Tokens op de zwarte lijst"
msgid "attributes must be a dictionary"
msgstr "`attributen` moet een woordenboek zijn"
-#: engine/vibes_auth/serializers.py:93
+#: engine/vibes_auth/serializers.py:97
msgid "business identificator is required when registering as a business"
msgstr "Bedrijfsidentificator is vereist bij registratie als bedrijf"
-#: engine/vibes_auth/serializers.py:113
+#: engine/vibes_auth/serializers.py:127
#, python-brace-format
msgid "malformed email: {email}"
msgstr "misvormde e-mail: {email}"
-#: engine/vibes_auth/serializers.py:134 engine/vibes_auth/serializers.py:159
-#: engine/vibes_auth/serializers.py:182 engine/vibes_auth/serializers.py:192
+#: engine/vibes_auth/serializers.py:150 engine/vibes_auth/serializers.py:175
+#: engine/vibes_auth/serializers.py:198 engine/vibes_auth/serializers.py:210
msgid "no active account"
msgstr "Geen actieve account gevonden"
-#: engine/vibes_auth/serializers.py:169
+#: engine/vibes_auth/serializers.py:185
msgid "must set token_class attribute on class."
msgstr "Moet token_class attribuut instellen op klasse!"
-#: engine/vibes_auth/serializers.py:253
+#: engine/vibes_auth/serializers.py:271
msgid "token_blacklisted"
msgstr "Token op zwarte lijst"
-#: engine/vibes_auth/serializers.py:258
+#: engine/vibes_auth/serializers.py:276
msgid "invalid token"
msgstr "Invalid token"
-#: engine/vibes_auth/serializers.py:268
+#: engine/vibes_auth/serializers.py:286
msgid "no user uuid claim present in token"
msgstr "Geen gebruiker uuid claim aanwezig in token"
-#: engine/vibes_auth/serializers.py:270
+#: engine/vibes_auth/serializers.py:288
msgid "user does not exist"
msgstr "Gebruiker bestaat niet"
@@ -563,7 +564,7 @@ msgstr "{settings.PROJECT_NAME} | Account activeren"
msgid "{settings.PROJECT_NAME} | Reset Password"
msgstr "{settings.PROJECT_NAME} | Wachtwoord opnieuw instellen"
-#: engine/vibes_auth/validators.py:13
+#: engine/vibes_auth/validators.py:15
msgid ""
"invalid phone number format. the number must be entered in the format: "
"\"+999999999\". up to 15 digits allowed."
@@ -571,7 +572,7 @@ msgstr ""
"Ongeldig formaat telefoonnummer. Het nummer moet worden ingevoerd in de "
"indeling: \"+999999999\". Maximaal 15 cijfers toegestaan."
-#: engine/vibes_auth/views.py:30
+#: engine/vibes_auth/views.py:34
msgid ""
"Represents a view for getting a pair of access and refresh tokens and user's "
"data. This view manages the process of handling token-based authentication "
@@ -586,7 +587,7 @@ msgstr ""
"verstrekte referenties. Het is gebouwd bovenop een basis token view en zorgt "
"voor een goede rate limiting om te beschermen tegen brute force aanvallen."
-#: engine/vibes_auth/views.py:52
+#: engine/vibes_auth/views.py:58
msgid ""
"Handles refreshing of tokens for authentication purposes. This class is used "
"to provide functionality for token refresh operations as part of an "
@@ -601,7 +602,7 @@ msgstr ""
"op de bijbehorende serializer om inputs voor het verversen van tokens te "
"valideren en de juiste output te produceren."
-#: engine/vibes_auth/views.py:75
+#: engine/vibes_auth/views.py:83
msgid ""
"Represents a view for verifying JSON Web Tokens (JWT) using specific "
"serialization and validation logic. "
@@ -609,7 +610,7 @@ msgstr ""
"Vertegenwoordigt een weergave voor het verifiëren van JSON Web Tokens (JWT) "
"met behulp van specifieke serialisatie- en validatielogica."
-#: engine/vibes_auth/views.py:92
+#: engine/vibes_auth/views.py:103
msgid "the token is invalid"
msgstr "Het token is ongeldig"
@@ -628,10 +629,10 @@ msgstr ""
"bekeken items samenvoegen. Deze klasse breidt de mixins en GenericViewSet "
"uit voor robuuste API afhandeling."
-#: engine/vibes_auth/viewsets.py:99
+#: engine/vibes_auth/viewsets.py:113
msgid "password reset successfully"
msgstr "Wachtwoord is succesvol gereset!"
-#: engine/vibes_auth/viewsets.py:132
+#: engine/vibes_auth/viewsets.py:161
msgid "account already activated!"
msgstr "Je hebt de account al geactiveerd..."
diff --git a/engine/vibes_auth/locale/no_NO/LC_MESSAGES/django.po b/engine/vibes_auth/locale/no_NO/LC_MESSAGES/django.po
index 24555923..6b1c4ce1 100644
--- a/engine/vibes_auth/locale/no_NO/LC_MESSAGES/django.po
+++ b/engine/vibes_auth/locale/no_NO/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -14,7 +14,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: engine/vibes_auth/admin.py:51 engine/vibes_auth/admin.py:52
-#: engine/vibes_auth/graphene/object_types.py:46
+#: engine/vibes_auth/graphene/object_types.py:54
msgid "balance"
msgstr "Balanse"
@@ -22,7 +22,7 @@ msgstr "Balanse"
msgid "order"
msgstr "Bestilling"
-#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:44
+#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:51
msgid "orders"
msgstr "Bestillinger"
@@ -30,7 +30,7 @@ msgstr "Bestillinger"
msgid "personal info"
msgstr "Personlig informasjon"
-#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:43
+#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:50
msgid "permissions"
msgstr "Tillatelser"
@@ -42,15 +42,15 @@ msgstr "Viktige datoer"
msgid "additional info"
msgstr "Ytterligere informasjon"
-#: engine/vibes_auth/admin.py:128
+#: engine/vibes_auth/admin.py:135
msgid "You cannot jump over your head!"
msgstr "Du kan ikke hoppe over hodet!"
-#: engine/vibes_auth/admin.py:160
+#: engine/vibes_auth/admin.py:167
msgid "Close selected threads"
msgstr "Lukk utvalgte tråder"
-#: engine/vibes_auth/admin.py:164
+#: engine/vibes_auth/admin.py:171
msgid "Open selected threads"
msgstr "Åpne utvalgte tråder"
@@ -82,7 +82,7 @@ msgstr "System"
msgid "User messages entrypoint"
msgstr "Inngangspunkt for brukermeldinger"
-#: engine/vibes_auth/docs/drf/messaging.py:18
+#: engine/vibes_auth/docs/drf/messaging.py:19
msgid ""
"Anonymous or authenticated non-staff users send messages. Also supports "
"action=ping."
@@ -90,11 +90,11 @@ msgstr ""
"Anonyme eller autentiserte ikke-ansatte brukere kan sende meldinger. Støtter "
"også action=ping."
-#: engine/vibes_auth/docs/drf/messaging.py:28
+#: engine/vibes_auth/docs/drf/messaging.py:30
msgid "Staff inbox control"
msgstr "Kontroll av personalets innboks"
-#: engine/vibes_auth/docs/drf/messaging.py:29
+#: engine/vibes_auth/docs/drf/messaging.py:32
msgid ""
"Staff-only actions: list_open, assign, reply, close, ping. Unified event "
"payloads are emitted."
@@ -102,11 +102,11 @@ msgstr ""
"Kun personalhandlinger: list_open, assign, reply, close, ping. Unified event "
"payloads sendes ut."
-#: engine/vibes_auth/docs/drf/messaging.py:39
+#: engine/vibes_auth/docs/drf/messaging.py:43
msgid "Per-thread staff channel"
msgstr "Medarbeiderkanal per tråd"
-#: engine/vibes_auth/docs/drf/messaging.py:40
+#: engine/vibes_auth/docs/drf/messaging.py:44
msgid "Reply, close, and ping within a specific thread."
msgstr "Svar, lukk og ping i en bestemt tråd."
@@ -134,7 +134,7 @@ msgstr "Bekreft et token"
msgid "Verify a token (refresh or access)."
msgstr "Bekreft et token (oppdatering eller tilgang)."
-#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90
+#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:100
msgid "the token is valid"
msgstr "Tokenet er gyldig"
@@ -173,9 +173,9 @@ msgid "confirm a user's password reset"
msgstr "Bekreft tilbakestilling av en brukers passord"
#: engine/vibes_auth/docs/drf/viewsets.py:87
-#: engine/vibes_auth/graphene/mutations.py:317
-#: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101
-#: engine/vibes_auth/viewsets.py:84
+#: engine/vibes_auth/graphene/mutations.py:345
+#: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/viewsets.py:94
msgid "passwords do not match"
msgstr "Passordene stemmer ikke overens"
@@ -183,61 +183,62 @@ msgstr "Passordene stemmer ikke overens"
msgid "activate a user's account"
msgstr "Aktiver en brukers konto"
-#: engine/vibes_auth/docs/drf/viewsets.py:99
+#: engine/vibes_auth/docs/drf/viewsets.py:101
msgid "activation link is invalid or account already activated"
msgstr "Aktiveringslenken er ugyldig eller kontoen er allerede aktivert"
-#: engine/vibes_auth/docs/drf/viewsets.py:107
+#: engine/vibes_auth/docs/drf/viewsets.py:111
msgid "merge client-stored recently viewed products"
msgstr "Slå sammen nylig viste produkter lagret hos kunden"
-#: engine/vibes_auth/graphene/mutations.py:44
+#: engine/vibes_auth/graphene/mutations.py:47
msgid "the user's b64-encoded uuid who referred the new user to us."
msgstr "Brukerens b64-kodede uuid som henviste den nye brukeren til oss."
-#: engine/vibes_auth/graphene/mutations.py:64
+#: engine/vibes_auth/graphene/mutations.py:69
msgid "password too weak"
msgstr "Passordet er for svakt"
-#: engine/vibes_auth/graphene/mutations.py:119
+#: engine/vibes_auth/graphene/mutations.py:129
msgid "malformed email"
msgstr "Feilaktig e-post"
-#: engine/vibes_auth/graphene/mutations.py:126
-#: engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/graphene/mutations.py:141
+#: engine/vibes_auth/serializers.py:117
#, python-brace-format
msgid "malformed phone number: {phone_number}"
msgstr "Feilaktig telefonnummer: {phone_number}!"
-#: engine/vibes_auth/graphene/mutations.py:148
+#: engine/vibes_auth/graphene/mutations.py:166
#, python-brace-format
msgid "Invalid attribute format: {attribute_pair}"
msgstr "Ugyldig attributtformat: {attribute_pair}!"
-#: engine/vibes_auth/graphene/mutations.py:162
+#: engine/vibes_auth/graphene/mutations.py:183
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr "{name} eksisterer ikke: {uuid}!"
-#: engine/vibes_auth/graphene/mutations.py:270
-#: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146
+#: engine/vibes_auth/graphene/mutations.py:298
+#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180
msgid "activation link is invalid!"
msgstr "Aktiveringslenken er ugyldig!"
-#: engine/vibes_auth/graphene/mutations.py:273
+#: engine/vibes_auth/graphene/mutations.py:301
msgid "account already activated..."
msgstr "Kontoen er allerede aktivert..."
-#: engine/vibes_auth/graphene/mutations.py:280
-#: engine/vibes_auth/graphene/mutations.py:336
+#: engine/vibes_auth/graphene/mutations.py:308
+#: engine/vibes_auth/graphene/mutations.py:370
msgid "something went wrong: {e!s}"
msgstr "Noe gikk galt: {e!s}"
-#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95
+#: engine/vibes_auth/graphene/mutations.py:352
+#: engine/vibes_auth/viewsets.py:106
msgid "token is invalid!"
msgstr "Tokenet er ugyldig!"
-#: engine/vibes_auth/graphene/object_types.py:40
+#: engine/vibes_auth/graphene/object_types.py:46
msgid ""
"the products this user has viewed most recently (max 48), in reverse‐"
"chronological order"
@@ -245,24 +246,24 @@ msgstr ""
"Produktene som denne brukeren har sett på sist (maks. 48), i omvendt "
"kronologisk rekkefølge."
-#: engine/vibes_auth/graphene/object_types.py:42
-#: engine/vibes_auth/models.py:185
+#: engine/vibes_auth/graphene/object_types.py:49
+#: engine/vibes_auth/models.py:209
msgid "groups"
msgstr "Grupper"
-#: engine/vibes_auth/graphene/object_types.py:45
+#: engine/vibes_auth/graphene/object_types.py:52
msgid "wishlist"
msgstr "Ønskeliste"
-#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:70
+#: engine/vibes_auth/graphene/object_types.py:56 engine/vibes_auth/models.py:70
msgid "avatar"
msgstr "Avatar"
-#: engine/vibes_auth/graphene/object_types.py:48
+#: engine/vibes_auth/graphene/object_types.py:58
msgid "attributes may be used to store custom data"
msgstr "Attributter kan brukes til å lagre egendefinerte data"
-#: engine/vibes_auth/graphene/object_types.py:50
+#: engine/vibes_auth/graphene/object_types.py:62
#, python-brace-format
msgid ""
"language is one of the {settings.LANGUAGES} with default {settings."
@@ -270,23 +271,23 @@ msgid ""
msgstr ""
"Språket er en av {settings.LANGUAGES} med standard {settings.LANGUAGE_CODE}."
-#: engine/vibes_auth/graphene/object_types.py:52
+#: engine/vibes_auth/graphene/object_types.py:66
msgid "address set"
msgstr "Adresser"
-#: engine/vibes_auth/messaging/services.py:49
+#: engine/vibes_auth/messaging/services.py:52
msgid "Valid email is required for anonymous chats."
msgstr "Gyldig e-post kreves for anonyme chatter."
-#: engine/vibes_auth/messaging/services.py:57
+#: engine/vibes_auth/messaging/services.py:65
msgid "Message must be 1..1028 characters."
msgstr "Meldingen må bestå av 1..1028 tegn."
-#: engine/vibes_auth/messaging/services.py:93
+#: engine/vibes_auth/messaging/services.py:105
msgid "We're searching for the operator to answer you already, hold by!"
msgstr "Vi leter etter operatøren som kan svare deg allerede, vent litt!"
-#: engine/vibes_auth/messaging/services.py:136
+#: engine/vibes_auth/messaging/services.py:152
msgid "Assignee must be a staff user."
msgstr "Mottaker må være en ansatt bruker."
@@ -356,71 +357,71 @@ msgstr "Fjern dette valget i stedet for å slette kontoer"
msgid "is_subscribed"
msgstr "Er abonnert"
-#: engine/vibes_auth/models.py:87
+#: engine/vibes_auth/models.py:88
msgid "user's newsletter subscription status"
msgstr "Status for brukerens abonnement på nyhetsbrev"
-#: engine/vibes_auth/models.py:90
+#: engine/vibes_auth/models.py:92
msgid "activation token"
msgstr "Aktiveringstoken"
-#: engine/vibes_auth/models.py:94
+#: engine/vibes_auth/models.py:101
msgid "attributes"
msgstr "Egenskaper"
-#: engine/vibes_auth/models.py:133
+#: engine/vibes_auth/models.py:141
msgid "user"
msgstr "Bruker"
-#: engine/vibes_auth/models.py:134
+#: engine/vibes_auth/models.py:142
msgid "users"
msgstr "Brukere"
-#: engine/vibes_auth/models.py:139
+#: engine/vibes_auth/models.py:149
msgid "For anonymous threads"
msgstr "For anonyme tråder"
-#: engine/vibes_auth/models.py:153
+#: engine/vibes_auth/models.py:173
msgid "Chat thread"
msgstr "Chat-tråd"
-#: engine/vibes_auth/models.py:154
+#: engine/vibes_auth/models.py:174
msgid "Chat threads"
msgstr "Chat-tråder"
-#: engine/vibes_auth/models.py:159
+#: engine/vibes_auth/models.py:180
msgid "provide user or email for anonymous thread."
msgstr "oppgi bruker eller e-post for anonym tråd."
-#: engine/vibes_auth/models.py:161
+#: engine/vibes_auth/models.py:183
msgid "assignee must be a staff user."
msgstr "mottakeren må være en personalbruker."
-#: engine/vibes_auth/models.py:177
+#: engine/vibes_auth/models.py:201
msgid "Chat message"
msgstr "Chat-melding"
-#: engine/vibes_auth/models.py:178
+#: engine/vibes_auth/models.py:202
msgid "Chat messages"
msgstr "Chat-meldinger"
-#: engine/vibes_auth/models.py:184
+#: engine/vibes_auth/models.py:208
msgid "group"
msgstr "Gruppe"
-#: engine/vibes_auth/models.py:191
+#: engine/vibes_auth/models.py:215
msgid "outstanding token"
msgstr "Enestående symbol"
-#: engine/vibes_auth/models.py:192
+#: engine/vibes_auth/models.py:216
msgid "outstanding tokens"
msgstr "Outstanding tokens"
-#: engine/vibes_auth/models.py:198
+#: engine/vibes_auth/models.py:222
msgid "blacklisted token"
msgstr "Svartelistet token"
-#: engine/vibes_auth/models.py:199
+#: engine/vibes_auth/models.py:223
msgid "blacklisted tokens"
msgstr "Svartelistede tokens"
@@ -428,38 +429,38 @@ msgstr "Svartelistede tokens"
msgid "attributes must be a dictionary"
msgstr "`attributter` må være en ordbok"
-#: engine/vibes_auth/serializers.py:93
+#: engine/vibes_auth/serializers.py:97
msgid "business identificator is required when registering as a business"
msgstr ""
"Virksomhetsidentifikator er påkrevd når du registrerer deg som virksomhet"
-#: engine/vibes_auth/serializers.py:113
+#: engine/vibes_auth/serializers.py:127
#, python-brace-format
msgid "malformed email: {email}"
msgstr "misdannet e-post: {email}"
-#: engine/vibes_auth/serializers.py:134 engine/vibes_auth/serializers.py:159
-#: engine/vibes_auth/serializers.py:182 engine/vibes_auth/serializers.py:192
+#: engine/vibes_auth/serializers.py:150 engine/vibes_auth/serializers.py:175
+#: engine/vibes_auth/serializers.py:198 engine/vibes_auth/serializers.py:210
msgid "no active account"
msgstr "Ingen aktiv konto funnet"
-#: engine/vibes_auth/serializers.py:169
+#: engine/vibes_auth/serializers.py:185
msgid "must set token_class attribute on class."
msgstr "Må sette token_class-attributtet på klassen!"
-#: engine/vibes_auth/serializers.py:253
+#: engine/vibes_auth/serializers.py:271
msgid "token_blacklisted"
msgstr "Token svartelistet"
-#: engine/vibes_auth/serializers.py:258
+#: engine/vibes_auth/serializers.py:276
msgid "invalid token"
msgstr "Ugyldig token"
-#: engine/vibes_auth/serializers.py:268
+#: engine/vibes_auth/serializers.py:286
msgid "no user uuid claim present in token"
msgstr "Ingen bruker-uuid-krav i tokenet"
-#: engine/vibes_auth/serializers.py:270
+#: engine/vibes_auth/serializers.py:288
msgid "user does not exist"
msgstr "Brukeren eksisterer ikke"
@@ -559,7 +560,7 @@ msgstr "{settings.PROJECT_NAME} | Aktiver konto"
msgid "{settings.PROJECT_NAME} | Reset Password"
msgstr "{settings.PROJECT_NAME} | Tilbakestill passord"
-#: engine/vibes_auth/validators.py:13
+#: engine/vibes_auth/validators.py:15
msgid ""
"invalid phone number format. the number must be entered in the format: "
"\"+999999999\". up to 15 digits allowed."
@@ -567,7 +568,7 @@ msgstr ""
"Ugyldig telefonnummerformat. Nummeret må legges inn i formatet: "
"\"+999999999\". Opptil 15 sifre er tillatt."
-#: engine/vibes_auth/views.py:30
+#: engine/vibes_auth/views.py:34
msgid ""
"Represents a view for getting a pair of access and refresh tokens and user's "
"data. This view manages the process of handling token-based authentication "
@@ -582,7 +583,7 @@ msgstr ""
"av en grunnleggende token-visning og sørger for riktig hastighetsbegrensning "
"for å beskytte mot brute force-angrep."
-#: engine/vibes_auth/views.py:52
+#: engine/vibes_auth/views.py:58
msgid ""
"Handles refreshing of tokens for authentication purposes. This class is used "
"to provide functionality for token refresh operations as part of an "
@@ -597,7 +598,7 @@ msgstr ""
"tilknyttede serialisatoren for å validere tokenoppdateringsinnganger og "
"produsere passende utganger."
-#: engine/vibes_auth/views.py:75
+#: engine/vibes_auth/views.py:83
msgid ""
"Represents a view for verifying JSON Web Tokens (JWT) using specific "
"serialization and validation logic. "
@@ -605,7 +606,7 @@ msgstr ""
"Representerer en visning for verifisering av JSON Web Tokens (JWT) ved hjelp "
"av spesifikk serialiserings- og valideringslogikk."
-#: engine/vibes_auth/views.py:92
+#: engine/vibes_auth/views.py:103
msgid "the token is invalid"
msgstr "Tokenet er ugyldig"
@@ -624,10 +625,10 @@ msgstr ""
"og sammenslåing av nylig viste elementer. Denne klassen utvider mixins og "
"GenericViewSet for robust API-håndtering."
-#: engine/vibes_auth/viewsets.py:99
+#: engine/vibes_auth/viewsets.py:113
msgid "password reset successfully"
msgstr "Passordet har blitt tilbakestilt!"
-#: engine/vibes_auth/viewsets.py:132
+#: engine/vibes_auth/viewsets.py:161
msgid "account already activated!"
msgstr "Du har allerede aktivert kontoen..."
diff --git a/engine/vibes_auth/locale/pl_PL/LC_MESSAGES/django.po b/engine/vibes_auth/locale/pl_PL/LC_MESSAGES/django.po
index 921ab4d8..a7b21e73 100644
--- a/engine/vibes_auth/locale/pl_PL/LC_MESSAGES/django.po
+++ b/engine/vibes_auth/locale/pl_PL/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -14,7 +14,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: engine/vibes_auth/admin.py:51 engine/vibes_auth/admin.py:52
-#: engine/vibes_auth/graphene/object_types.py:46
+#: engine/vibes_auth/graphene/object_types.py:54
msgid "balance"
msgstr "Równowaga"
@@ -22,7 +22,7 @@ msgstr "Równowaga"
msgid "order"
msgstr "Zamówienie"
-#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:44
+#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:51
msgid "orders"
msgstr "Zamówienia"
@@ -30,7 +30,7 @@ msgstr "Zamówienia"
msgid "personal info"
msgstr "Informacje osobiste"
-#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:43
+#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:50
msgid "permissions"
msgstr "Uprawnienia"
@@ -42,15 +42,15 @@ msgstr "Ważne daty"
msgid "additional info"
msgstr "Dodatkowe informacje"
-#: engine/vibes_auth/admin.py:128
+#: engine/vibes_auth/admin.py:135
msgid "You cannot jump over your head!"
msgstr "Nie możesz skakać na główkę!"
-#: engine/vibes_auth/admin.py:160
+#: engine/vibes_auth/admin.py:167
msgid "Close selected threads"
msgstr "Zamykanie wybranych wątków"
-#: engine/vibes_auth/admin.py:164
+#: engine/vibes_auth/admin.py:171
msgid "Open selected threads"
msgstr "Otwieranie wybranych wątków"
@@ -82,7 +82,7 @@ msgstr "System"
msgid "User messages entrypoint"
msgstr "Punkt wejścia komunikatów użytkownika"
-#: engine/vibes_auth/docs/drf/messaging.py:18
+#: engine/vibes_auth/docs/drf/messaging.py:19
msgid ""
"Anonymous or authenticated non-staff users send messages. Also supports "
"action=ping."
@@ -90,11 +90,11 @@ msgstr ""
"Anonimowi lub uwierzytelnieni użytkownicy spoza personelu wysyłają "
"wiadomości. Obsługuje również action=ping."
-#: engine/vibes_auth/docs/drf/messaging.py:28
+#: engine/vibes_auth/docs/drf/messaging.py:30
msgid "Staff inbox control"
msgstr "Kontrola skrzynki odbiorczej pracowników"
-#: engine/vibes_auth/docs/drf/messaging.py:29
+#: engine/vibes_auth/docs/drf/messaging.py:32
msgid ""
"Staff-only actions: list_open, assign, reply, close, ping. Unified event "
"payloads are emitted."
@@ -102,11 +102,11 @@ msgstr ""
"Akcje tylko dla personelu: list_open, assign, reply, close, ping. Emitowane "
"są ujednolicone ładunki zdarzeń."
-#: engine/vibes_auth/docs/drf/messaging.py:39
+#: engine/vibes_auth/docs/drf/messaging.py:43
msgid "Per-thread staff channel"
msgstr "Kanał dla pracowników wątku"
-#: engine/vibes_auth/docs/drf/messaging.py:40
+#: engine/vibes_auth/docs/drf/messaging.py:44
msgid "Reply, close, and ping within a specific thread."
msgstr "Odpowiadanie, zamykanie i pingowanie w ramach określonego wątku."
@@ -134,7 +134,7 @@ msgstr "Weryfikacja tokena"
msgid "Verify a token (refresh or access)."
msgstr "Weryfikacja tokena (odświeżenie lub dostęp)."
-#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90
+#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:100
msgid "the token is valid"
msgstr "Token jest ważny"
@@ -173,9 +173,9 @@ msgid "confirm a user's password reset"
msgstr "Potwierdzenie zresetowania hasła użytkownika"
#: engine/vibes_auth/docs/drf/viewsets.py:87
-#: engine/vibes_auth/graphene/mutations.py:317
-#: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101
-#: engine/vibes_auth/viewsets.py:84
+#: engine/vibes_auth/graphene/mutations.py:345
+#: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/viewsets.py:94
msgid "passwords do not match"
msgstr "Hasła nie są zgodne"
@@ -183,63 +183,64 @@ msgstr "Hasła nie są zgodne"
msgid "activate a user's account"
msgstr "Aktywacja konta użytkownika"
-#: engine/vibes_auth/docs/drf/viewsets.py:99
+#: engine/vibes_auth/docs/drf/viewsets.py:101
msgid "activation link is invalid or account already activated"
msgstr "Link aktywacyjny jest nieprawidłowy lub konto zostało już aktywowane."
-#: engine/vibes_auth/docs/drf/viewsets.py:107
+#: engine/vibes_auth/docs/drf/viewsets.py:111
msgid "merge client-stored recently viewed products"
msgstr "Scalanie ostatnio oglądanych produktów przechowywanych przez klienta"
-#: engine/vibes_auth/graphene/mutations.py:44
+#: engine/vibes_auth/graphene/mutations.py:47
msgid "the user's b64-encoded uuid who referred the new user to us."
msgstr ""
"Zakodowany w b64 identyfikator uuid użytkownika, który polecił nam nowego "
"użytkownika."
-#: engine/vibes_auth/graphene/mutations.py:64
+#: engine/vibes_auth/graphene/mutations.py:69
msgid "password too weak"
msgstr "Hasło jest zbyt słabe"
-#: engine/vibes_auth/graphene/mutations.py:119
+#: engine/vibes_auth/graphene/mutations.py:129
msgid "malformed email"
msgstr "Zniekształcona wiadomość e-mail"
-#: engine/vibes_auth/graphene/mutations.py:126
-#: engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/graphene/mutations.py:141
+#: engine/vibes_auth/serializers.py:117
#, python-brace-format
msgid "malformed phone number: {phone_number}"
msgstr "Zniekształcony numer telefonu: {phone_number}!"
-#: engine/vibes_auth/graphene/mutations.py:148
+#: engine/vibes_auth/graphene/mutations.py:166
#, python-brace-format
msgid "Invalid attribute format: {attribute_pair}"
msgstr "Nieprawidłowy format atrybutu: {attribute_pair}!"
-#: engine/vibes_auth/graphene/mutations.py:162
+#: engine/vibes_auth/graphene/mutations.py:183
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr "{name} nie istnieje: {uuid}!"
-#: engine/vibes_auth/graphene/mutations.py:270
-#: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146
+#: engine/vibes_auth/graphene/mutations.py:298
+#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180
msgid "activation link is invalid!"
msgstr "Link aktywacyjny jest nieprawidłowy!"
-#: engine/vibes_auth/graphene/mutations.py:273
+#: engine/vibes_auth/graphene/mutations.py:301
msgid "account already activated..."
msgstr "Konto zostało już aktywowane..."
-#: engine/vibes_auth/graphene/mutations.py:280
-#: engine/vibes_auth/graphene/mutations.py:336
+#: engine/vibes_auth/graphene/mutations.py:308
+#: engine/vibes_auth/graphene/mutations.py:370
msgid "something went wrong: {e!s}"
msgstr "Coś poszło nie tak: {e!s}"
-#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95
+#: engine/vibes_auth/graphene/mutations.py:352
+#: engine/vibes_auth/viewsets.py:106
msgid "token is invalid!"
msgstr "Token jest nieprawidłowy!"
-#: engine/vibes_auth/graphene/object_types.py:40
+#: engine/vibes_auth/graphene/object_types.py:46
msgid ""
"the products this user has viewed most recently (max 48), in reverse‐"
"chronological order"
@@ -247,24 +248,24 @@ msgstr ""
"Produkty ostatnio przeglądane przez tego użytkownika (maks. 48), w "
"kolejności odwrotnej do chronologicznej."
-#: engine/vibes_auth/graphene/object_types.py:42
-#: engine/vibes_auth/models.py:185
+#: engine/vibes_auth/graphene/object_types.py:49
+#: engine/vibes_auth/models.py:209
msgid "groups"
msgstr "Grupy"
-#: engine/vibes_auth/graphene/object_types.py:45
+#: engine/vibes_auth/graphene/object_types.py:52
msgid "wishlist"
msgstr "Lista życzeń"
-#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:70
+#: engine/vibes_auth/graphene/object_types.py:56 engine/vibes_auth/models.py:70
msgid "avatar"
msgstr "Awatar"
-#: engine/vibes_auth/graphene/object_types.py:48
+#: engine/vibes_auth/graphene/object_types.py:58
msgid "attributes may be used to store custom data"
msgstr "Atrybuty mogą być używane do przechowywania niestandardowych danych"
-#: engine/vibes_auth/graphene/object_types.py:50
+#: engine/vibes_auth/graphene/object_types.py:62
#, python-brace-format
msgid ""
"language is one of the {settings.LANGUAGES} with default {settings."
@@ -273,23 +274,23 @@ msgstr ""
"Język jest jednym z {settings.LANGUAGES} z domyślnym {settings."
"LANGUAGE_CODE}."
-#: engine/vibes_auth/graphene/object_types.py:52
+#: engine/vibes_auth/graphene/object_types.py:66
msgid "address set"
msgstr "Adresy"
-#: engine/vibes_auth/messaging/services.py:49
+#: engine/vibes_auth/messaging/services.py:52
msgid "Valid email is required for anonymous chats."
msgstr "W przypadku czatów anonimowych wymagany jest prawidłowy adres e-mail."
-#: engine/vibes_auth/messaging/services.py:57
+#: engine/vibes_auth/messaging/services.py:65
msgid "Message must be 1..1028 characters."
msgstr "Wiadomość musi zawierać od 1 do 1028 znaków."
-#: engine/vibes_auth/messaging/services.py:93
+#: engine/vibes_auth/messaging/services.py:105
msgid "We're searching for the operator to answer you already, hold by!"
msgstr "Szukamy operatora, który już ci odpowie, zaczekaj!"
-#: engine/vibes_auth/messaging/services.py:136
+#: engine/vibes_auth/messaging/services.py:152
msgid "Assignee must be a staff user."
msgstr "Odbiorca musi być użytkownikiem personelu."
@@ -360,71 +361,71 @@ msgstr "Odznacz to zamiast usuwać konta"
msgid "is_subscribed"
msgstr "Jest subskrybowany"
-#: engine/vibes_auth/models.py:87
+#: engine/vibes_auth/models.py:88
msgid "user's newsletter subscription status"
msgstr "Status subskrypcji newslettera użytkownika"
-#: engine/vibes_auth/models.py:90
+#: engine/vibes_auth/models.py:92
msgid "activation token"
msgstr "Token aktywacyjny"
-#: engine/vibes_auth/models.py:94
+#: engine/vibes_auth/models.py:101
msgid "attributes"
msgstr "Atrybuty"
-#: engine/vibes_auth/models.py:133
+#: engine/vibes_auth/models.py:141
msgid "user"
msgstr "Użytkownik"
-#: engine/vibes_auth/models.py:134
+#: engine/vibes_auth/models.py:142
msgid "users"
msgstr "Użytkownicy"
-#: engine/vibes_auth/models.py:139
+#: engine/vibes_auth/models.py:149
msgid "For anonymous threads"
msgstr "Dla wątków anonimowych"
-#: engine/vibes_auth/models.py:153
+#: engine/vibes_auth/models.py:173
msgid "Chat thread"
msgstr "Wątek czatu"
-#: engine/vibes_auth/models.py:154
+#: engine/vibes_auth/models.py:174
msgid "Chat threads"
msgstr "Wątki czatu"
-#: engine/vibes_auth/models.py:159
+#: engine/vibes_auth/models.py:180
msgid "provide user or email for anonymous thread."
msgstr "Podaj użytkownika lub adres e-mail dla anonimowego wątku."
-#: engine/vibes_auth/models.py:161
+#: engine/vibes_auth/models.py:183
msgid "assignee must be a staff user."
msgstr "cesjonariusz musi być użytkownikiem personelu."
-#: engine/vibes_auth/models.py:177
+#: engine/vibes_auth/models.py:201
msgid "Chat message"
msgstr "Wiadomość na czacie"
-#: engine/vibes_auth/models.py:178
+#: engine/vibes_auth/models.py:202
msgid "Chat messages"
msgstr "Wiadomości czatu"
-#: engine/vibes_auth/models.py:184
+#: engine/vibes_auth/models.py:208
msgid "group"
msgstr "Grupa"
-#: engine/vibes_auth/models.py:191
+#: engine/vibes_auth/models.py:215
msgid "outstanding token"
msgstr "Wyjątkowy token"
-#: engine/vibes_auth/models.py:192
+#: engine/vibes_auth/models.py:216
msgid "outstanding tokens"
msgstr "Zaległe tokeny"
-#: engine/vibes_auth/models.py:198
+#: engine/vibes_auth/models.py:222
msgid "blacklisted token"
msgstr "Token na czarnej liście"
-#: engine/vibes_auth/models.py:199
+#: engine/vibes_auth/models.py:223
msgid "blacklisted tokens"
msgstr "Tokeny znajdujące się na czarnej liście"
@@ -432,37 +433,37 @@ msgstr "Tokeny znajdujące się na czarnej liście"
msgid "attributes must be a dictionary"
msgstr "`attributes` musi być słownikiem"
-#: engine/vibes_auth/serializers.py:93
+#: engine/vibes_auth/serializers.py:97
msgid "business identificator is required when registering as a business"
msgstr "Identyfikator firmy jest wymagany podczas rejestracji jako firma"
-#: engine/vibes_auth/serializers.py:113
+#: engine/vibes_auth/serializers.py:127
#, python-brace-format
msgid "malformed email: {email}"
msgstr "źle sformatowana wiadomość e-mail: {email}"
-#: engine/vibes_auth/serializers.py:134 engine/vibes_auth/serializers.py:159
-#: engine/vibes_auth/serializers.py:182 engine/vibes_auth/serializers.py:192
+#: engine/vibes_auth/serializers.py:150 engine/vibes_auth/serializers.py:175
+#: engine/vibes_auth/serializers.py:198 engine/vibes_auth/serializers.py:210
msgid "no active account"
msgstr "Nie znaleziono aktywnego konta"
-#: engine/vibes_auth/serializers.py:169
+#: engine/vibes_auth/serializers.py:185
msgid "must set token_class attribute on class."
msgstr "Należy ustawić atrybut token_class na klasie!"
-#: engine/vibes_auth/serializers.py:253
+#: engine/vibes_auth/serializers.py:271
msgid "token_blacklisted"
msgstr "Token na czarnej liście"
-#: engine/vibes_auth/serializers.py:258
+#: engine/vibes_auth/serializers.py:276
msgid "invalid token"
msgstr "Nieprawidłowy token"
-#: engine/vibes_auth/serializers.py:268
+#: engine/vibes_auth/serializers.py:286
msgid "no user uuid claim present in token"
msgstr "Brak oświadczenia uuid użytkownika w tokenie"
-#: engine/vibes_auth/serializers.py:270
+#: engine/vibes_auth/serializers.py:288
msgid "user does not exist"
msgstr "Użytkownik nie istnieje"
@@ -562,7 +563,7 @@ msgstr "{settings.PROJECT_NAME} | Aktywuj konto"
msgid "{settings.PROJECT_NAME} | Reset Password"
msgstr "{settings.PROJECT_NAME} | Resetuj hasło"
-#: engine/vibes_auth/validators.py:13
+#: engine/vibes_auth/validators.py:15
msgid ""
"invalid phone number format. the number must be entered in the format: "
"\"+999999999\". up to 15 digits allowed."
@@ -570,7 +571,7 @@ msgstr ""
"Nieprawidłowy format numeru telefonu. Numer musi być wprowadzony w formacie: "
"\"+999999999\". Dozwolone do 15 cyfr."
-#: engine/vibes_auth/views.py:30
+#: engine/vibes_auth/views.py:34
msgid ""
"Represents a view for getting a pair of access and refresh tokens and user's "
"data. This view manages the process of handling token-based authentication "
@@ -585,7 +586,7 @@ msgstr ""
"oparciu o podstawowy widok tokenu i zapewnia odpowiednie ograniczenie "
"szybkości w celu ochrony przed atakami typu brute force."
-#: engine/vibes_auth/views.py:52
+#: engine/vibes_auth/views.py:58
msgid ""
"Handles refreshing of tokens for authentication purposes. This class is used "
"to provide functionality for token refresh operations as part of an "
@@ -600,7 +601,7 @@ msgstr ""
"powiązanym serializerze w celu sprawdzenia poprawności danych wejściowych "
"odświeżania tokena i wygenerowania odpowiednich danych wyjściowych."
-#: engine/vibes_auth/views.py:75
+#: engine/vibes_auth/views.py:83
msgid ""
"Represents a view for verifying JSON Web Tokens (JWT) using specific "
"serialization and validation logic. "
@@ -608,7 +609,7 @@ msgstr ""
"Reprezentuje widok do weryfikacji tokenów sieciowych JSON (JWT) przy użyciu "
"określonej logiki serializacji i walidacji."
-#: engine/vibes_auth/views.py:92
+#: engine/vibes_auth/views.py:103
msgid "the token is invalid"
msgstr "Token jest nieprawidłowy"
@@ -627,10 +628,10 @@ msgstr ""
"scalanie ostatnio przeglądanych elementów. Ta klasa rozszerza mixiny i "
"GenericViewSet dla solidnej obsługi API."
-#: engine/vibes_auth/viewsets.py:99
+#: engine/vibes_auth/viewsets.py:113
msgid "password reset successfully"
msgstr "Hasło zostało pomyślnie zresetowane!"
-#: engine/vibes_auth/viewsets.py:132
+#: engine/vibes_auth/viewsets.py:161
msgid "account already activated!"
msgstr "Konto zostało już aktywowane..."
diff --git a/engine/vibes_auth/locale/pt_BR/LC_MESSAGES/django.po b/engine/vibes_auth/locale/pt_BR/LC_MESSAGES/django.po
index 075070df..d9174b09 100644
--- a/engine/vibes_auth/locale/pt_BR/LC_MESSAGES/django.po
+++ b/engine/vibes_auth/locale/pt_BR/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -14,7 +14,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: engine/vibes_auth/admin.py:51 engine/vibes_auth/admin.py:52
-#: engine/vibes_auth/graphene/object_types.py:46
+#: engine/vibes_auth/graphene/object_types.py:54
msgid "balance"
msgstr "Equilíbrio"
@@ -22,7 +22,7 @@ msgstr "Equilíbrio"
msgid "order"
msgstr "Pedido"
-#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:44
+#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:51
msgid "orders"
msgstr "Pedidos"
@@ -30,7 +30,7 @@ msgstr "Pedidos"
msgid "personal info"
msgstr "Informações pessoais"
-#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:43
+#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:50
msgid "permissions"
msgstr "Permissões"
@@ -42,15 +42,15 @@ msgstr "Datas importantes"
msgid "additional info"
msgstr "Informações adicionais"
-#: engine/vibes_auth/admin.py:128
+#: engine/vibes_auth/admin.py:135
msgid "You cannot jump over your head!"
msgstr "Você não pode pular sobre sua cabeça!"
-#: engine/vibes_auth/admin.py:160
+#: engine/vibes_auth/admin.py:167
msgid "Close selected threads"
msgstr "Fechar as linhas selecionadas"
-#: engine/vibes_auth/admin.py:164
+#: engine/vibes_auth/admin.py:171
msgid "Open selected threads"
msgstr "Abrir linhas selecionadas"
@@ -82,7 +82,7 @@ msgstr "Sistema"
msgid "User messages entrypoint"
msgstr "Ponto de entrada de mensagens do usuário"
-#: engine/vibes_auth/docs/drf/messaging.py:18
+#: engine/vibes_auth/docs/drf/messaging.py:19
msgid ""
"Anonymous or authenticated non-staff users send messages. Also supports "
"action=ping."
@@ -90,11 +90,11 @@ msgstr ""
"Usuários anônimos ou autenticados não pertencentes à equipe enviam "
"mensagens. Também suporta action=ping."
-#: engine/vibes_auth/docs/drf/messaging.py:28
+#: engine/vibes_auth/docs/drf/messaging.py:30
msgid "Staff inbox control"
msgstr "Controle da caixa de entrada da equipe"
-#: engine/vibes_auth/docs/drf/messaging.py:29
+#: engine/vibes_auth/docs/drf/messaging.py:32
msgid ""
"Staff-only actions: list_open, assign, reply, close, ping. Unified event "
"payloads are emitted."
@@ -102,11 +102,11 @@ msgstr ""
"Ações exclusivas da equipe: list_open, assign, reply, close, ping. São "
"emitidas cargas úteis de eventos unificados."
-#: engine/vibes_auth/docs/drf/messaging.py:39
+#: engine/vibes_auth/docs/drf/messaging.py:43
msgid "Per-thread staff channel"
msgstr "Canal da equipe por thread"
-#: engine/vibes_auth/docs/drf/messaging.py:40
+#: engine/vibes_auth/docs/drf/messaging.py:44
msgid "Reply, close, and ping within a specific thread."
msgstr "Responda, feche e faça ping em um thread específico."
@@ -134,7 +134,7 @@ msgstr "Verificar um token"
msgid "Verify a token (refresh or access)."
msgstr "Verificar um token (atualização ou acesso)."
-#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90
+#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:100
msgid "the token is valid"
msgstr "O token é válido"
@@ -172,9 +172,9 @@ msgid "confirm a user's password reset"
msgstr "Confirmar a redefinição de senha de um usuário"
#: engine/vibes_auth/docs/drf/viewsets.py:87
-#: engine/vibes_auth/graphene/mutations.py:317
-#: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101
-#: engine/vibes_auth/viewsets.py:84
+#: engine/vibes_auth/graphene/mutations.py:345
+#: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/viewsets.py:94
msgid "passwords do not match"
msgstr "As senhas não correspondem"
@@ -182,61 +182,62 @@ msgstr "As senhas não correspondem"
msgid "activate a user's account"
msgstr "Ativar a conta de um usuário"
-#: engine/vibes_auth/docs/drf/viewsets.py:99
+#: engine/vibes_auth/docs/drf/viewsets.py:101
msgid "activation link is invalid or account already activated"
msgstr "O link de ativação é inválido ou a conta já está ativada"
-#: engine/vibes_auth/docs/drf/viewsets.py:107
+#: engine/vibes_auth/docs/drf/viewsets.py:111
msgid "merge client-stored recently viewed products"
msgstr "Mesclar produtos recentemente visualizados armazenados pelo cliente"
-#: engine/vibes_auth/graphene/mutations.py:44
+#: engine/vibes_auth/graphene/mutations.py:47
msgid "the user's b64-encoded uuid who referred the new user to us."
msgstr "O uuid codificado em b64 do usuário que nos indicou o novo usuário."
-#: engine/vibes_auth/graphene/mutations.py:64
+#: engine/vibes_auth/graphene/mutations.py:69
msgid "password too weak"
msgstr "A senha é muito fraca"
-#: engine/vibes_auth/graphene/mutations.py:119
+#: engine/vibes_auth/graphene/mutations.py:129
msgid "malformed email"
msgstr "E-mail malformado"
-#: engine/vibes_auth/graphene/mutations.py:126
-#: engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/graphene/mutations.py:141
+#: engine/vibes_auth/serializers.py:117
#, python-brace-format
msgid "malformed phone number: {phone_number}"
msgstr "Número de telefone malformado: {phone_number}!"
-#: engine/vibes_auth/graphene/mutations.py:148
+#: engine/vibes_auth/graphene/mutations.py:166
#, python-brace-format
msgid "Invalid attribute format: {attribute_pair}"
msgstr "Formato de atributo inválido: {attribute_pair}!"
-#: engine/vibes_auth/graphene/mutations.py:162
+#: engine/vibes_auth/graphene/mutations.py:183
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr "{name} não existe: {uuid}!"
-#: engine/vibes_auth/graphene/mutations.py:270
-#: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146
+#: engine/vibes_auth/graphene/mutations.py:298
+#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180
msgid "activation link is invalid!"
msgstr "O link de ativação é inválido!"
-#: engine/vibes_auth/graphene/mutations.py:273
+#: engine/vibes_auth/graphene/mutations.py:301
msgid "account already activated..."
msgstr "A conta já foi ativada..."
-#: engine/vibes_auth/graphene/mutations.py:280
-#: engine/vibes_auth/graphene/mutations.py:336
+#: engine/vibes_auth/graphene/mutations.py:308
+#: engine/vibes_auth/graphene/mutations.py:370
msgid "something went wrong: {e!s}"
msgstr "Algo deu errado: {e!s}"
-#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95
+#: engine/vibes_auth/graphene/mutations.py:352
+#: engine/vibes_auth/viewsets.py:106
msgid "token is invalid!"
msgstr "O token é inválido!"
-#: engine/vibes_auth/graphene/object_types.py:40
+#: engine/vibes_auth/graphene/object_types.py:46
msgid ""
"the products this user has viewed most recently (max 48), in reverse‐"
"chronological order"
@@ -244,24 +245,24 @@ msgstr ""
"Os produtos que esse usuário visualizou mais recentemente (máximo de 48), em "
"ordem cronológica inversa."
-#: engine/vibes_auth/graphene/object_types.py:42
-#: engine/vibes_auth/models.py:185
+#: engine/vibes_auth/graphene/object_types.py:49
+#: engine/vibes_auth/models.py:209
msgid "groups"
msgstr "Grupos"
-#: engine/vibes_auth/graphene/object_types.py:45
+#: engine/vibes_auth/graphene/object_types.py:52
msgid "wishlist"
msgstr "Lista de desejos"
-#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:70
+#: engine/vibes_auth/graphene/object_types.py:56 engine/vibes_auth/models.py:70
msgid "avatar"
msgstr "Avatar"
-#: engine/vibes_auth/graphene/object_types.py:48
+#: engine/vibes_auth/graphene/object_types.py:58
msgid "attributes may be used to store custom data"
msgstr "Os atributos podem ser usados para armazenar dados personalizados"
-#: engine/vibes_auth/graphene/object_types.py:50
+#: engine/vibes_auth/graphene/object_types.py:62
#, python-brace-format
msgid ""
"language is one of the {settings.LANGUAGES} with default {settings."
@@ -269,23 +270,23 @@ msgid ""
msgstr ""
"O idioma é um dos {settings.LANGUAGES} com o padrão {settings.LANGUAGE_CODE}"
-#: engine/vibes_auth/graphene/object_types.py:52
+#: engine/vibes_auth/graphene/object_types.py:66
msgid "address set"
msgstr "Endereços"
-#: engine/vibes_auth/messaging/services.py:49
+#: engine/vibes_auth/messaging/services.py:52
msgid "Valid email is required for anonymous chats."
msgstr "É necessário um e-mail válido para chats anônimos."
-#: engine/vibes_auth/messaging/services.py:57
+#: engine/vibes_auth/messaging/services.py:65
msgid "Message must be 1..1028 characters."
msgstr "A mensagem deve ter de 1 a 1028 caracteres."
-#: engine/vibes_auth/messaging/services.py:93
+#: engine/vibes_auth/messaging/services.py:105
msgid "We're searching for the operator to answer you already, hold by!"
msgstr "Estamos procurando o operador para lhe responder, aguarde!"
-#: engine/vibes_auth/messaging/services.py:136
+#: engine/vibes_auth/messaging/services.py:152
msgid "Assignee must be a staff user."
msgstr "O responsável deve ser um usuário da equipe."
@@ -356,71 +357,71 @@ msgstr "Desmarque essa opção em vez de excluir contas"
msgid "is_subscribed"
msgstr "Está inscrito"
-#: engine/vibes_auth/models.py:87
+#: engine/vibes_auth/models.py:88
msgid "user's newsletter subscription status"
msgstr "Status da assinatura do boletim informativo do usuário"
-#: engine/vibes_auth/models.py:90
+#: engine/vibes_auth/models.py:92
msgid "activation token"
msgstr "Token de ativação"
-#: engine/vibes_auth/models.py:94
+#: engine/vibes_auth/models.py:101
msgid "attributes"
msgstr "Atributos"
-#: engine/vibes_auth/models.py:133
+#: engine/vibes_auth/models.py:141
msgid "user"
msgstr "Usuário"
-#: engine/vibes_auth/models.py:134
+#: engine/vibes_auth/models.py:142
msgid "users"
msgstr "Usuários"
-#: engine/vibes_auth/models.py:139
+#: engine/vibes_auth/models.py:149
msgid "For anonymous threads"
msgstr "Para tópicos anônimos"
-#: engine/vibes_auth/models.py:153
+#: engine/vibes_auth/models.py:173
msgid "Chat thread"
msgstr "Linha de bate-papo"
-#: engine/vibes_auth/models.py:154
+#: engine/vibes_auth/models.py:174
msgid "Chat threads"
msgstr "Tópicos de bate-papo"
-#: engine/vibes_auth/models.py:159
+#: engine/vibes_auth/models.py:180
msgid "provide user or email for anonymous thread."
msgstr "forneça o usuário ou e-mail para o tópico anônimo."
-#: engine/vibes_auth/models.py:161
+#: engine/vibes_auth/models.py:183
msgid "assignee must be a staff user."
msgstr "O responsável deve ser um usuário da equipe."
-#: engine/vibes_auth/models.py:177
+#: engine/vibes_auth/models.py:201
msgid "Chat message"
msgstr "Mensagem de bate-papo"
-#: engine/vibes_auth/models.py:178
+#: engine/vibes_auth/models.py:202
msgid "Chat messages"
msgstr "Mensagens de bate-papo"
-#: engine/vibes_auth/models.py:184
+#: engine/vibes_auth/models.py:208
msgid "group"
msgstr "Grupo"
-#: engine/vibes_auth/models.py:191
+#: engine/vibes_auth/models.py:215
msgid "outstanding token"
msgstr "Token excepcional"
-#: engine/vibes_auth/models.py:192
+#: engine/vibes_auth/models.py:216
msgid "outstanding tokens"
msgstr "Tokens pendentes"
-#: engine/vibes_auth/models.py:198
+#: engine/vibes_auth/models.py:222
msgid "blacklisted token"
msgstr "Token na lista negra"
-#: engine/vibes_auth/models.py:199
+#: engine/vibes_auth/models.py:223
msgid "blacklisted tokens"
msgstr "Tokens na lista negra"
@@ -428,38 +429,38 @@ msgstr "Tokens na lista negra"
msgid "attributes must be a dictionary"
msgstr "`attributes` deve ser um dicionário"
-#: engine/vibes_auth/serializers.py:93
+#: engine/vibes_auth/serializers.py:97
msgid "business identificator is required when registering as a business"
msgstr ""
"O identificador de empresa é necessário ao se registrar como uma empresa"
-#: engine/vibes_auth/serializers.py:113
+#: engine/vibes_auth/serializers.py:127
#, python-brace-format
msgid "malformed email: {email}"
msgstr "e-mail malformado: {email}"
-#: engine/vibes_auth/serializers.py:134 engine/vibes_auth/serializers.py:159
-#: engine/vibes_auth/serializers.py:182 engine/vibes_auth/serializers.py:192
+#: engine/vibes_auth/serializers.py:150 engine/vibes_auth/serializers.py:175
+#: engine/vibes_auth/serializers.py:198 engine/vibes_auth/serializers.py:210
msgid "no active account"
msgstr "Nenhuma conta ativa encontrada"
-#: engine/vibes_auth/serializers.py:169
+#: engine/vibes_auth/serializers.py:185
msgid "must set token_class attribute on class."
msgstr "É necessário definir o atributo token_class na classe!"
-#: engine/vibes_auth/serializers.py:253
+#: engine/vibes_auth/serializers.py:271
msgid "token_blacklisted"
msgstr "Token na lista negra"
-#: engine/vibes_auth/serializers.py:258
+#: engine/vibes_auth/serializers.py:276
msgid "invalid token"
msgstr "Token inválido"
-#: engine/vibes_auth/serializers.py:268
+#: engine/vibes_auth/serializers.py:286
msgid "no user uuid claim present in token"
msgstr "Nenhuma reivindicação de uuid de usuário presente no token"
-#: engine/vibes_auth/serializers.py:270
+#: engine/vibes_auth/serializers.py:288
msgid "user does not exist"
msgstr "O usuário não existe"
@@ -559,7 +560,7 @@ msgstr "{settings.PROJECT_NAME} | Ativar conta"
msgid "{settings.PROJECT_NAME} | Reset Password"
msgstr "{settings.PROJECT_NAME} | Redefinir senha"
-#: engine/vibes_auth/validators.py:13
+#: engine/vibes_auth/validators.py:15
msgid ""
"invalid phone number format. the number must be entered in the format: "
"\"+999999999\". up to 15 digits allowed."
@@ -567,7 +568,7 @@ msgstr ""
"Formato de número telefônico inválido. O número deve ser inserido no "
"formato: \"+999999999\". São permitidos até 15 dígitos."
-#: engine/vibes_auth/views.py:30
+#: engine/vibes_auth/views.py:34
msgid ""
"Represents a view for getting a pair of access and refresh tokens and user's "
"data. This view manages the process of handling token-based authentication "
@@ -583,7 +584,7 @@ msgstr ""
"garante a limitação de taxa adequada para proteger contra ataques de força "
"bruta."
-#: engine/vibes_auth/views.py:52
+#: engine/vibes_auth/views.py:58
msgid ""
"Handles refreshing of tokens for authentication purposes. This class is used "
"to provide functionality for token refresh operations as part of an "
@@ -598,7 +599,7 @@ msgstr ""
"exibição depende do serializador associado para validar as entradas de "
"atualização de token e produzir saídas apropriadas."
-#: engine/vibes_auth/views.py:75
+#: engine/vibes_auth/views.py:83
msgid ""
"Represents a view for verifying JSON Web Tokens (JWT) using specific "
"serialization and validation logic. "
@@ -606,7 +607,7 @@ msgstr ""
"Representa uma visualização para verificação de JSON Web Tokens (JWT) usando "
"lógica específica de serialização e validação."
-#: engine/vibes_auth/views.py:92
+#: engine/vibes_auth/views.py:103
msgid "the token is invalid"
msgstr "O token é inválido"
@@ -625,10 +626,10 @@ msgstr ""
"mesclagem de itens visualizados recentemente. Essa classe estende os mixins "
"e o GenericViewSet para um tratamento robusto da API."
-#: engine/vibes_auth/viewsets.py:99
+#: engine/vibes_auth/viewsets.py:113
msgid "password reset successfully"
msgstr "A senha foi redefinida com sucesso!"
-#: engine/vibes_auth/viewsets.py:132
+#: engine/vibes_auth/viewsets.py:161
msgid "account already activated!"
msgstr "Você já ativou a conta..."
diff --git a/engine/vibes_auth/locale/ro_RO/LC_MESSAGES/django.po b/engine/vibes_auth/locale/ro_RO/LC_MESSAGES/django.po
index fc87809d..ac097ad4 100644
--- a/engine/vibes_auth/locale/ro_RO/LC_MESSAGES/django.po
+++ b/engine/vibes_auth/locale/ro_RO/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -14,7 +14,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: engine/vibes_auth/admin.py:51 engine/vibes_auth/admin.py:52
-#: engine/vibes_auth/graphene/object_types.py:46
+#: engine/vibes_auth/graphene/object_types.py:54
msgid "balance"
msgstr "Echilibru"
@@ -22,7 +22,7 @@ msgstr "Echilibru"
msgid "order"
msgstr "Comandă"
-#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:44
+#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:51
msgid "orders"
msgstr "Ordine"
@@ -30,7 +30,7 @@ msgstr "Ordine"
msgid "personal info"
msgstr "Informații personale"
-#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:43
+#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:50
msgid "permissions"
msgstr "Permisiuni"
@@ -42,15 +42,15 @@ msgstr "Date importante"
msgid "additional info"
msgstr "Informații suplimentare"
-#: engine/vibes_auth/admin.py:128
+#: engine/vibes_auth/admin.py:135
msgid "You cannot jump over your head!"
msgstr "Nu poți sări peste capul tău!"
-#: engine/vibes_auth/admin.py:160
+#: engine/vibes_auth/admin.py:167
msgid "Close selected threads"
msgstr "Închideți firele selectate"
-#: engine/vibes_auth/admin.py:164
+#: engine/vibes_auth/admin.py:171
msgid "Open selected threads"
msgstr "Deschideți firele selectate"
@@ -82,7 +82,7 @@ msgstr "Sistemul"
msgid "User messages entrypoint"
msgstr "Punctul de intrare al mesajelor utilizatorului"
-#: engine/vibes_auth/docs/drf/messaging.py:18
+#: engine/vibes_auth/docs/drf/messaging.py:19
msgid ""
"Anonymous or authenticated non-staff users send messages. Also supports "
"action=ping."
@@ -90,11 +90,11 @@ msgstr ""
"Utilizatorii anonimi sau autentificați care nu fac parte din personal pot "
"trimite mesaje. De asemenea, acceptă action=ping."
-#: engine/vibes_auth/docs/drf/messaging.py:28
+#: engine/vibes_auth/docs/drf/messaging.py:30
msgid "Staff inbox control"
msgstr "Controlul inbox-ului personalului"
-#: engine/vibes_auth/docs/drf/messaging.py:29
+#: engine/vibes_auth/docs/drf/messaging.py:32
msgid ""
"Staff-only actions: list_open, assign, reply, close, ping. Unified event "
"payloads are emitted."
@@ -102,11 +102,11 @@ msgstr ""
"Acțiuni rezervate personalului: list_open, assign, reply, close, ping. Sunt "
"emise sarcini utile de eveniment unificate."
-#: engine/vibes_auth/docs/drf/messaging.py:39
+#: engine/vibes_auth/docs/drf/messaging.py:43
msgid "Per-thread staff channel"
msgstr "Canalul personalului pe fir"
-#: engine/vibes_auth/docs/drf/messaging.py:40
+#: engine/vibes_auth/docs/drf/messaging.py:44
msgid "Reply, close, and ping within a specific thread."
msgstr ""
"Răspundeți, închideți și trimiteți mesaje ping în cadrul unui anumit subiect."
@@ -136,7 +136,7 @@ msgstr "Verificarea unui jeton"
msgid "Verify a token (refresh or access)."
msgstr "Verificarea unui jeton (reîmprospătare sau acces)."
-#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90
+#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:100
msgid "the token is valid"
msgstr "Jetonul este valid"
@@ -175,9 +175,9 @@ msgid "confirm a user's password reset"
msgstr "Confirmați resetarea parolei unui utilizator"
#: engine/vibes_auth/docs/drf/viewsets.py:87
-#: engine/vibes_auth/graphene/mutations.py:317
-#: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101
-#: engine/vibes_auth/viewsets.py:84
+#: engine/vibes_auth/graphene/mutations.py:345
+#: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/viewsets.py:94
msgid "passwords do not match"
msgstr "Parolele nu se potrivesc"
@@ -185,62 +185,63 @@ msgstr "Parolele nu se potrivesc"
msgid "activate a user's account"
msgstr "Activați contul unui utilizator"
-#: engine/vibes_auth/docs/drf/viewsets.py:99
+#: engine/vibes_auth/docs/drf/viewsets.py:101
msgid "activation link is invalid or account already activated"
msgstr "Linkul de activare este invalid sau contul este deja activat"
-#: engine/vibes_auth/docs/drf/viewsets.py:107
+#: engine/vibes_auth/docs/drf/viewsets.py:111
msgid "merge client-stored recently viewed products"
msgstr "Fuzionați produsele recent vizualizate stocate de client"
-#: engine/vibes_auth/graphene/mutations.py:44
+#: engine/vibes_auth/graphene/mutations.py:47
msgid "the user's b64-encoded uuid who referred the new user to us."
msgstr ""
"Uuid codificat b64 al utilizatorului care ne-a recomandat noul utilizator."
-#: engine/vibes_auth/graphene/mutations.py:64
+#: engine/vibes_auth/graphene/mutations.py:69
msgid "password too weak"
msgstr "Parola este prea slabă"
-#: engine/vibes_auth/graphene/mutations.py:119
+#: engine/vibes_auth/graphene/mutations.py:129
msgid "malformed email"
msgstr "E-mail malformat"
-#: engine/vibes_auth/graphene/mutations.py:126
-#: engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/graphene/mutations.py:141
+#: engine/vibes_auth/serializers.py:117
#, python-brace-format
msgid "malformed phone number: {phone_number}"
msgstr "Număr de telefon malformat: {phone_number}!"
-#: engine/vibes_auth/graphene/mutations.py:148
+#: engine/vibes_auth/graphene/mutations.py:166
#, python-brace-format
msgid "Invalid attribute format: {attribute_pair}"
msgstr "Format de atribut invalid: {attribute_pair}!"
-#: engine/vibes_auth/graphene/mutations.py:162
+#: engine/vibes_auth/graphene/mutations.py:183
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr "{name} nu există: {uuid}!"
-#: engine/vibes_auth/graphene/mutations.py:270
-#: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146
+#: engine/vibes_auth/graphene/mutations.py:298
+#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180
msgid "activation link is invalid!"
msgstr "Linkul de activare este invalid!"
-#: engine/vibes_auth/graphene/mutations.py:273
+#: engine/vibes_auth/graphene/mutations.py:301
msgid "account already activated..."
msgstr "Contul a fost deja activat..."
-#: engine/vibes_auth/graphene/mutations.py:280
-#: engine/vibes_auth/graphene/mutations.py:336
+#: engine/vibes_auth/graphene/mutations.py:308
+#: engine/vibes_auth/graphene/mutations.py:370
msgid "something went wrong: {e!s}"
msgstr "Ceva nu a mers bine: {e!s}"
-#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95
+#: engine/vibes_auth/graphene/mutations.py:352
+#: engine/vibes_auth/viewsets.py:106
msgid "token is invalid!"
msgstr "Token-ul nu este valabil!"
-#: engine/vibes_auth/graphene/object_types.py:40
+#: engine/vibes_auth/graphene/object_types.py:46
msgid ""
"the products this user has viewed most recently (max 48), in reverse‐"
"chronological order"
@@ -248,24 +249,24 @@ msgstr ""
"Produsele pe care acest utilizator le-a vizualizat cel mai recent (max 48), "
"în ordine cronologică inversă."
-#: engine/vibes_auth/graphene/object_types.py:42
-#: engine/vibes_auth/models.py:185
+#: engine/vibes_auth/graphene/object_types.py:49
+#: engine/vibes_auth/models.py:209
msgid "groups"
msgstr "Grupuri"
-#: engine/vibes_auth/graphene/object_types.py:45
+#: engine/vibes_auth/graphene/object_types.py:52
msgid "wishlist"
msgstr "Lista dorințelor"
-#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:70
+#: engine/vibes_auth/graphene/object_types.py:56 engine/vibes_auth/models.py:70
msgid "avatar"
msgstr "Avatar"
-#: engine/vibes_auth/graphene/object_types.py:48
+#: engine/vibes_auth/graphene/object_types.py:58
msgid "attributes may be used to store custom data"
msgstr "Atributele pot fi utilizate pentru a stoca date personalizate"
-#: engine/vibes_auth/graphene/object_types.py:50
+#: engine/vibes_auth/graphene/object_types.py:62
#, python-brace-format
msgid ""
"language is one of the {settings.LANGUAGES} with default {settings."
@@ -274,23 +275,23 @@ msgstr ""
"Limba este una dintre {settings.LANGUAGES} cu implicit {settings."
"LANGUAGE_CODE}"
-#: engine/vibes_auth/graphene/object_types.py:52
+#: engine/vibes_auth/graphene/object_types.py:66
msgid "address set"
msgstr "Adrese"
-#: engine/vibes_auth/messaging/services.py:49
+#: engine/vibes_auth/messaging/services.py:52
msgid "Valid email is required for anonymous chats."
msgstr "Pentru chat-urile anonime este necesar un e-mail valid."
-#: engine/vibes_auth/messaging/services.py:57
+#: engine/vibes_auth/messaging/services.py:65
msgid "Message must be 1..1028 characters."
msgstr "Mesajul trebuie să aibă 1..1028 caractere."
-#: engine/vibes_auth/messaging/services.py:93
+#: engine/vibes_auth/messaging/services.py:105
msgid "We're searching for the operator to answer you already, hold by!"
msgstr "Căutăm operatorul care să vă răspundă deja, așteptați!"
-#: engine/vibes_auth/messaging/services.py:136
+#: engine/vibes_auth/messaging/services.py:152
msgid "Assignee must be a staff user."
msgstr "Destinatarul trebuie să fie un utilizator personal."
@@ -361,71 +362,71 @@ msgstr "Deselectați acest lucru în loc să ștergeți conturile"
msgid "is_subscribed"
msgstr "Este abonat"
-#: engine/vibes_auth/models.py:87
+#: engine/vibes_auth/models.py:88
msgid "user's newsletter subscription status"
msgstr "Starea abonării utilizatorului la buletinul informativ"
-#: engine/vibes_auth/models.py:90
+#: engine/vibes_auth/models.py:92
msgid "activation token"
msgstr "Jeton de activare"
-#: engine/vibes_auth/models.py:94
+#: engine/vibes_auth/models.py:101
msgid "attributes"
msgstr "Atribute"
-#: engine/vibes_auth/models.py:133
+#: engine/vibes_auth/models.py:141
msgid "user"
msgstr "Utilizator"
-#: engine/vibes_auth/models.py:134
+#: engine/vibes_auth/models.py:142
msgid "users"
msgstr "Utilizatori"
-#: engine/vibes_auth/models.py:139
+#: engine/vibes_auth/models.py:149
msgid "For anonymous threads"
msgstr "Pentru subiecte anonime"
-#: engine/vibes_auth/models.py:153
+#: engine/vibes_auth/models.py:173
msgid "Chat thread"
msgstr "Fir de chat"
-#: engine/vibes_auth/models.py:154
+#: engine/vibes_auth/models.py:174
msgid "Chat threads"
msgstr "Fire de chat"
-#: engine/vibes_auth/models.py:159
+#: engine/vibes_auth/models.py:180
msgid "provide user or email for anonymous thread."
msgstr "furnizați utilizatorul sau adresa de e-mail pentru firul anonim."
-#: engine/vibes_auth/models.py:161
+#: engine/vibes_auth/models.py:183
msgid "assignee must be a staff user."
msgstr "cesionarul trebuie să fie un utilizator personal."
-#: engine/vibes_auth/models.py:177
+#: engine/vibes_auth/models.py:201
msgid "Chat message"
msgstr "Mesaj de chat"
-#: engine/vibes_auth/models.py:178
+#: engine/vibes_auth/models.py:202
msgid "Chat messages"
msgstr "Mesaje de chat"
-#: engine/vibes_auth/models.py:184
+#: engine/vibes_auth/models.py:208
msgid "group"
msgstr "Grup"
-#: engine/vibes_auth/models.py:191
+#: engine/vibes_auth/models.py:215
msgid "outstanding token"
msgstr "Simbol excepțional"
-#: engine/vibes_auth/models.py:192
+#: engine/vibes_auth/models.py:216
msgid "outstanding tokens"
msgstr "Jetoane restante"
-#: engine/vibes_auth/models.py:198
+#: engine/vibes_auth/models.py:222
msgid "blacklisted token"
msgstr "Token pe lista neagră"
-#: engine/vibes_auth/models.py:199
+#: engine/vibes_auth/models.py:223
msgid "blacklisted tokens"
msgstr "Jetoane pe lista neagră"
@@ -433,39 +434,39 @@ msgstr "Jetoane pe lista neagră"
msgid "attributes must be a dictionary"
msgstr "`attributes` trebuie să fie un dicționar"
-#: engine/vibes_auth/serializers.py:93
+#: engine/vibes_auth/serializers.py:97
msgid "business identificator is required when registering as a business"
msgstr ""
"Identificatorul de întreprindere este necesar în momentul înregistrării ca "
"întreprindere"
-#: engine/vibes_auth/serializers.py:113
+#: engine/vibes_auth/serializers.py:127
#, python-brace-format
msgid "malformed email: {email}"
msgstr "e-mail malformat: {email}"
-#: engine/vibes_auth/serializers.py:134 engine/vibes_auth/serializers.py:159
-#: engine/vibes_auth/serializers.py:182 engine/vibes_auth/serializers.py:192
+#: engine/vibes_auth/serializers.py:150 engine/vibes_auth/serializers.py:175
+#: engine/vibes_auth/serializers.py:198 engine/vibes_auth/serializers.py:210
msgid "no active account"
msgstr "Nu s-a găsit niciun cont activ"
-#: engine/vibes_auth/serializers.py:169
+#: engine/vibes_auth/serializers.py:185
msgid "must set token_class attribute on class."
msgstr "Trebuie să setați atributul token_class pe clasă!"
-#: engine/vibes_auth/serializers.py:253
+#: engine/vibes_auth/serializers.py:271
msgid "token_blacklisted"
msgstr "Token pe lista neagră"
-#: engine/vibes_auth/serializers.py:258
+#: engine/vibes_auth/serializers.py:276
msgid "invalid token"
msgstr "Jeton invalid"
-#: engine/vibes_auth/serializers.py:268
+#: engine/vibes_auth/serializers.py:286
msgid "no user uuid claim present in token"
msgstr "În jeton nu este prezentă nicio cerere uuid a utilizatorului"
-#: engine/vibes_auth/serializers.py:270
+#: engine/vibes_auth/serializers.py:288
msgid "user does not exist"
msgstr "Utilizatorul nu există"
@@ -566,7 +567,7 @@ msgstr "{settings.PROJECT_NAME} | Activare cont"
msgid "{settings.PROJECT_NAME} | Reset Password"
msgstr "{settings.PROJECT_NAME} | Resetați parola"
-#: engine/vibes_auth/validators.py:13
+#: engine/vibes_auth/validators.py:15
msgid ""
"invalid phone number format. the number must be entered in the format: "
"\"+999999999\". up to 15 digits allowed."
@@ -574,7 +575,7 @@ msgstr ""
"Format invalid al numărului de telefon. Numărul trebuie să fie introdus în "
"formatul: \"+999999999\". Sunt permise până la 15 cifre."
-#: engine/vibes_auth/views.py:30
+#: engine/vibes_auth/views.py:34
msgid ""
"Represents a view for getting a pair of access and refresh tokens and user's "
"data. This view manages the process of handling token-based authentication "
@@ -590,7 +591,7 @@ msgstr ""
"de bază a jetoanelor și asigură limitarea corespunzătoare a ratei pentru a "
"proteja împotriva atacurilor prin forță brută."
-#: engine/vibes_auth/views.py:52
+#: engine/vibes_auth/views.py:58
msgid ""
"Handles refreshing of tokens for authentication purposes. This class is used "
"to provide functionality for token refresh operations as part of an "
@@ -606,7 +607,7 @@ msgstr ""
"intrările de reîmprospătare a jetoanelor și pentru a produce ieșirile "
"corespunzătoare."
-#: engine/vibes_auth/views.py:75
+#: engine/vibes_auth/views.py:83
msgid ""
"Represents a view for verifying JSON Web Tokens (JWT) using specific "
"serialization and validation logic. "
@@ -614,7 +615,7 @@ msgstr ""
"Reprezintă o vizualizare pentru verificarea JSON Web Tokens (JWT) utilizând "
"o serializare specifică și o logică de validare."
-#: engine/vibes_auth/views.py:92
+#: engine/vibes_auth/views.py:103
msgid "the token is invalid"
msgstr "Jetonul nu este valabil"
@@ -633,10 +634,10 @@ msgstr ""
"contului și îmbinarea elementelor vizualizate recent. Această clasă extinde "
"mixinele și GenericViewSet pentru o gestionare robustă a API."
-#: engine/vibes_auth/viewsets.py:99
+#: engine/vibes_auth/viewsets.py:113
msgid "password reset successfully"
msgstr "Parola a fost resetată cu succes!"
-#: engine/vibes_auth/viewsets.py:132
+#: engine/vibes_auth/viewsets.py:161
msgid "account already activated!"
msgstr "Ați activat deja contul..."
diff --git a/engine/vibes_auth/locale/ru_RU/LC_MESSAGES/django.po b/engine/vibes_auth/locale/ru_RU/LC_MESSAGES/django.po
index 70feb4f0..3e8e45b2 100644
--- a/engine/vibes_auth/locale/ru_RU/LC_MESSAGES/django.po
+++ b/engine/vibes_auth/locale/ru_RU/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -14,7 +14,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: engine/vibes_auth/admin.py:51 engine/vibes_auth/admin.py:52
-#: engine/vibes_auth/graphene/object_types.py:46
+#: engine/vibes_auth/graphene/object_types.py:54
msgid "balance"
msgstr "Баланс"
@@ -22,7 +22,7 @@ msgstr "Баланс"
msgid "order"
msgstr "Заказ"
-#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:44
+#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:51
msgid "orders"
msgstr "Заказы"
@@ -30,7 +30,7 @@ msgstr "Заказы"
msgid "personal info"
msgstr "Личная информация"
-#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:43
+#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:50
msgid "permissions"
msgstr "Разрешения"
@@ -42,15 +42,15 @@ msgstr "Важные даты"
msgid "additional info"
msgstr "Дополнительная информация"
-#: engine/vibes_auth/admin.py:128
+#: engine/vibes_auth/admin.py:135
msgid "You cannot jump over your head!"
msgstr "Нельзя прыгать выше головы!"
-#: engine/vibes_auth/admin.py:160
+#: engine/vibes_auth/admin.py:167
msgid "Close selected threads"
msgstr "Закрыть выбранные нити"
-#: engine/vibes_auth/admin.py:164
+#: engine/vibes_auth/admin.py:171
msgid "Open selected threads"
msgstr "Открыть выбранные нити"
@@ -82,7 +82,7 @@ msgstr "Система"
msgid "User messages entrypoint"
msgstr "Точка входа пользовательских сообщений"
-#: engine/vibes_auth/docs/drf/messaging.py:18
+#: engine/vibes_auth/docs/drf/messaging.py:19
msgid ""
"Anonymous or authenticated non-staff users send messages. Also supports "
"action=ping."
@@ -90,11 +90,11 @@ msgstr ""
"Анонимные или аутентифицированные внештатные пользователи отправляют "
"сообщения. Также поддерживает функцию action=ping."
-#: engine/vibes_auth/docs/drf/messaging.py:28
+#: engine/vibes_auth/docs/drf/messaging.py:30
msgid "Staff inbox control"
msgstr "Контроль входящих сообщений сотрудников"
-#: engine/vibes_auth/docs/drf/messaging.py:29
+#: engine/vibes_auth/docs/drf/messaging.py:32
msgid ""
"Staff-only actions: list_open, assign, reply, close, ping. Unified event "
"payloads are emitted."
@@ -102,11 +102,11 @@ msgstr ""
"Действия только для сотрудников: list_open, assign, reply, close, ping. "
"Выдаются унифицированные полезные нагрузки событий."
-#: engine/vibes_auth/docs/drf/messaging.py:39
+#: engine/vibes_auth/docs/drf/messaging.py:43
msgid "Per-thread staff channel"
msgstr "Канал для персонала в каждом потоке"
-#: engine/vibes_auth/docs/drf/messaging.py:40
+#: engine/vibes_auth/docs/drf/messaging.py:44
msgid "Reply, close, and ping within a specific thread."
msgstr "Отвечайте, закрывайте и пингуйте в определенной теме."
@@ -134,7 +134,7 @@ msgstr "Проверка токена"
msgid "Verify a token (refresh or access)."
msgstr "Проверка токена (обновление или доступ)."
-#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90
+#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:100
msgid "the token is valid"
msgstr "Токен действителен"
@@ -173,9 +173,9 @@ msgid "confirm a user's password reset"
msgstr "Подтверждение сброса пароля пользователя"
#: engine/vibes_auth/docs/drf/viewsets.py:87
-#: engine/vibes_auth/graphene/mutations.py:317
-#: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101
-#: engine/vibes_auth/viewsets.py:84
+#: engine/vibes_auth/graphene/mutations.py:345
+#: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/viewsets.py:94
msgid "passwords do not match"
msgstr "Пароли не совпадают"
@@ -183,63 +183,64 @@ msgstr "Пароли не совпадают"
msgid "activate a user's account"
msgstr "Активация учетной записи пользователя"
-#: engine/vibes_auth/docs/drf/viewsets.py:99
+#: engine/vibes_auth/docs/drf/viewsets.py:101
msgid "activation link is invalid or account already activated"
msgstr "Ссылка на активацию недействительна или аккаунт уже активирован"
-#: engine/vibes_auth/docs/drf/viewsets.py:107
+#: engine/vibes_auth/docs/drf/viewsets.py:111
msgid "merge client-stored recently viewed products"
msgstr "Объедините недавно просмотренные продукты, хранящиеся в памяти клиента"
-#: engine/vibes_auth/graphene/mutations.py:44
+#: engine/vibes_auth/graphene/mutations.py:47
msgid "the user's b64-encoded uuid who referred the new user to us."
msgstr ""
"b64-кодированный uuid пользователя, который направил к нам нового "
"пользователя."
-#: engine/vibes_auth/graphene/mutations.py:64
+#: engine/vibes_auth/graphene/mutations.py:69
msgid "password too weak"
msgstr "Пароль слишком слабый"
-#: engine/vibes_auth/graphene/mutations.py:119
+#: engine/vibes_auth/graphene/mutations.py:129
msgid "malformed email"
msgstr "Некорректное письмо"
-#: engine/vibes_auth/graphene/mutations.py:126
-#: engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/graphene/mutations.py:141
+#: engine/vibes_auth/serializers.py:117
#, python-brace-format
msgid "malformed phone number: {phone_number}"
msgstr "Некорректный номер телефона: {phone_number}!"
-#: engine/vibes_auth/graphene/mutations.py:148
+#: engine/vibes_auth/graphene/mutations.py:166
#, python-brace-format
msgid "Invalid attribute format: {attribute_pair}"
msgstr "Недопустимый формат атрибута: {attribute_pair}!"
-#: engine/vibes_auth/graphene/mutations.py:162
+#: engine/vibes_auth/graphene/mutations.py:183
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr "{name} не существует: {uuid}!"
-#: engine/vibes_auth/graphene/mutations.py:270
-#: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146
+#: engine/vibes_auth/graphene/mutations.py:298
+#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180
msgid "activation link is invalid!"
msgstr "Ссылка на активацию недействительна!"
-#: engine/vibes_auth/graphene/mutations.py:273
+#: engine/vibes_auth/graphene/mutations.py:301
msgid "account already activated..."
msgstr "Аккаунт уже активирован..."
-#: engine/vibes_auth/graphene/mutations.py:280
-#: engine/vibes_auth/graphene/mutations.py:336
+#: engine/vibes_auth/graphene/mutations.py:308
+#: engine/vibes_auth/graphene/mutations.py:370
msgid "something went wrong: {e!s}"
msgstr "Что-то пошло не так: {e!s}"
-#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95
+#: engine/vibes_auth/graphene/mutations.py:352
+#: engine/vibes_auth/viewsets.py:106
msgid "token is invalid!"
msgstr "Токен недействителен!"
-#: engine/vibes_auth/graphene/object_types.py:40
+#: engine/vibes_auth/graphene/object_types.py:46
msgid ""
"the products this user has viewed most recently (max 48), in reverse‐"
"chronological order"
@@ -247,24 +248,24 @@ msgstr ""
"Продукты, которые этот пользователь просматривал в последнее время (не более "
"48), в обратном хронологическом порядке."
-#: engine/vibes_auth/graphene/object_types.py:42
-#: engine/vibes_auth/models.py:185
+#: engine/vibes_auth/graphene/object_types.py:49
+#: engine/vibes_auth/models.py:209
msgid "groups"
msgstr "Группы"
-#: engine/vibes_auth/graphene/object_types.py:45
+#: engine/vibes_auth/graphene/object_types.py:52
msgid "wishlist"
msgstr "Список желаний"
-#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:70
+#: engine/vibes_auth/graphene/object_types.py:56 engine/vibes_auth/models.py:70
msgid "avatar"
msgstr "Аватар"
-#: engine/vibes_auth/graphene/object_types.py:48
+#: engine/vibes_auth/graphene/object_types.py:58
msgid "attributes may be used to store custom data"
msgstr "Атрибуты могут использоваться для хранения пользовательских данных"
-#: engine/vibes_auth/graphene/object_types.py:50
+#: engine/vibes_auth/graphene/object_types.py:62
#, python-brace-format
msgid ""
"language is one of the {settings.LANGUAGES} with default {settings."
@@ -272,23 +273,23 @@ msgid ""
msgstr ""
"Язык - один из {settings.LANGUAGES}, по умолчанию {settings.LANGUAGE_CODE}."
-#: engine/vibes_auth/graphene/object_types.py:52
+#: engine/vibes_auth/graphene/object_types.py:66
msgid "address set"
msgstr "Адреса"
-#: engine/vibes_auth/messaging/services.py:49
+#: engine/vibes_auth/messaging/services.py:52
msgid "Valid email is required for anonymous chats."
msgstr "Для анонимных чатов требуется действительный адрес электронной почты."
-#: engine/vibes_auth/messaging/services.py:57
+#: engine/vibes_auth/messaging/services.py:65
msgid "Message must be 1..1028 characters."
msgstr "Сообщение должно содержать 1...1028 символов."
-#: engine/vibes_auth/messaging/services.py:93
+#: engine/vibes_auth/messaging/services.py:105
msgid "We're searching for the operator to answer you already, hold by!"
msgstr "Мы ищем оператора, чтобы ответить вам, держитесь!"
-#: engine/vibes_auth/messaging/services.py:136
+#: engine/vibes_auth/messaging/services.py:152
msgid "Assignee must be a staff user."
msgstr "Получатель должен быть штатным пользователем."
@@ -359,71 +360,71 @@ msgstr "Снимите этот флажок вместо удаления уч
msgid "is_subscribed"
msgstr "Подписан"
-#: engine/vibes_auth/models.py:87
+#: engine/vibes_auth/models.py:88
msgid "user's newsletter subscription status"
msgstr "Статус подписки пользователя на рассылку новостей"
-#: engine/vibes_auth/models.py:90
+#: engine/vibes_auth/models.py:92
msgid "activation token"
msgstr "Активационный токен"
-#: engine/vibes_auth/models.py:94
+#: engine/vibes_auth/models.py:101
msgid "attributes"
msgstr "Атрибуты"
-#: engine/vibes_auth/models.py:133
+#: engine/vibes_auth/models.py:141
msgid "user"
msgstr "Пользователь"
-#: engine/vibes_auth/models.py:134
+#: engine/vibes_auth/models.py:142
msgid "users"
msgstr "Пользователи"
-#: engine/vibes_auth/models.py:139
+#: engine/vibes_auth/models.py:149
msgid "For anonymous threads"
msgstr "Для анонимных потоков"
-#: engine/vibes_auth/models.py:153
+#: engine/vibes_auth/models.py:173
msgid "Chat thread"
msgstr "Нить чата"
-#: engine/vibes_auth/models.py:154
+#: engine/vibes_auth/models.py:174
msgid "Chat threads"
msgstr "Нити чата"
-#: engine/vibes_auth/models.py:159
+#: engine/vibes_auth/models.py:180
msgid "provide user or email for anonymous thread."
msgstr "укажите пользователя или e-mail для анонимной темы."
-#: engine/vibes_auth/models.py:161
+#: engine/vibes_auth/models.py:183
msgid "assignee must be a staff user."
msgstr "Назначенный должен быть штатным пользователем."
-#: engine/vibes_auth/models.py:177
+#: engine/vibes_auth/models.py:201
msgid "Chat message"
msgstr "Сообщение в чате"
-#: engine/vibes_auth/models.py:178
+#: engine/vibes_auth/models.py:202
msgid "Chat messages"
msgstr "Сообщения в чате"
-#: engine/vibes_auth/models.py:184
+#: engine/vibes_auth/models.py:208
msgid "group"
msgstr "Группа"
-#: engine/vibes_auth/models.py:191
+#: engine/vibes_auth/models.py:215
msgid "outstanding token"
msgstr "Выдающийся жетон"
-#: engine/vibes_auth/models.py:192
+#: engine/vibes_auth/models.py:216
msgid "outstanding tokens"
msgstr "Выпущенные токены"
-#: engine/vibes_auth/models.py:198
+#: engine/vibes_auth/models.py:222
msgid "blacklisted token"
msgstr "Токен в черном списке"
-#: engine/vibes_auth/models.py:199
+#: engine/vibes_auth/models.py:223
msgid "blacklisted tokens"
msgstr "Чёрный список токенов"
@@ -431,37 +432,37 @@ msgstr "Чёрный список токенов"
msgid "attributes must be a dictionary"
msgstr "`Атрибуты` должны быть словарем"
-#: engine/vibes_auth/serializers.py:93
+#: engine/vibes_auth/serializers.py:97
msgid "business identificator is required when registering as a business"
msgstr "Бизнес-идентификатор необходим при регистрации в качестве предприятия"
-#: engine/vibes_auth/serializers.py:113
+#: engine/vibes_auth/serializers.py:127
#, python-brace-format
msgid "malformed email: {email}"
msgstr "malformed email: {email}"
-#: engine/vibes_auth/serializers.py:134 engine/vibes_auth/serializers.py:159
-#: engine/vibes_auth/serializers.py:182 engine/vibes_auth/serializers.py:192
+#: engine/vibes_auth/serializers.py:150 engine/vibes_auth/serializers.py:175
+#: engine/vibes_auth/serializers.py:198 engine/vibes_auth/serializers.py:210
msgid "no active account"
msgstr "Активная учетная запись не найдена"
-#: engine/vibes_auth/serializers.py:169
+#: engine/vibes_auth/serializers.py:185
msgid "must set token_class attribute on class."
msgstr "Необходимо установить атрибут token_class для класса!"
-#: engine/vibes_auth/serializers.py:253
+#: engine/vibes_auth/serializers.py:271
msgid "token_blacklisted"
msgstr "Токен занесен в черный список"
-#: engine/vibes_auth/serializers.py:258
+#: engine/vibes_auth/serializers.py:276
msgid "invalid token"
msgstr "Неверный токен"
-#: engine/vibes_auth/serializers.py:268
+#: engine/vibes_auth/serializers.py:286
msgid "no user uuid claim present in token"
msgstr "В токене отсутствует утверждение uuid пользователя"
-#: engine/vibes_auth/serializers.py:270
+#: engine/vibes_auth/serializers.py:288
msgid "user does not exist"
msgstr "Пользователь не существует"
@@ -561,7 +562,7 @@ msgstr "{settings.PROJECT_NAME} | Активировать учетную зап
msgid "{settings.PROJECT_NAME} | Reset Password"
msgstr "{settings.PROJECT_NAME} | Сброс пароля"
-#: engine/vibes_auth/validators.py:13
+#: engine/vibes_auth/validators.py:15
msgid ""
"invalid phone number format. the number must be entered in the format: "
"\"+999999999\". up to 15 digits allowed."
@@ -569,7 +570,7 @@ msgstr ""
"Неверный формат телефонного номера. Номер должен быть введен в формате: "
"\"+999999999\". Допускается до 15 цифр."
-#: engine/vibes_auth/views.py:30
+#: engine/vibes_auth/views.py:34
msgid ""
"Represents a view for getting a pair of access and refresh tokens and user's "
"data. This view manages the process of handling token-based authentication "
@@ -584,7 +585,7 @@ msgstr ""
"построено поверх базового представления токенов и обеспечивает надлежащее "
"ограничение скорости для защиты от атак грубой силы."
-#: engine/vibes_auth/views.py:52
+#: engine/vibes_auth/views.py:58
msgid ""
"Handles refreshing of tokens for authentication purposes. This class is used "
"to provide functionality for token refresh operations as part of an "
@@ -599,7 +600,7 @@ msgstr ""
"полагается на ассоциированный сериализатор для проверки входных данных "
"обновления маркера и создания соответствующих выходных данных."
-#: engine/vibes_auth/views.py:75
+#: engine/vibes_auth/views.py:83
msgid ""
"Represents a view for verifying JSON Web Tokens (JWT) using specific "
"serialization and validation logic. "
@@ -607,7 +608,7 @@ msgstr ""
"Представляет собой представление для проверки JSON Web Tokens (JWT) с "
"использованием специальной логики сериализации и валидации."
-#: engine/vibes_auth/views.py:92
+#: engine/vibes_auth/views.py:103
msgid "the token is invalid"
msgstr "Токен недействителен"
@@ -626,10 +627,10 @@ msgstr ""
"активацию учетной записи и объединение недавно просмотренных элементов. Этот "
"класс расширяет миксины и GenericViewSet для надежной работы с API."
-#: engine/vibes_auth/viewsets.py:99
+#: engine/vibes_auth/viewsets.py:113
msgid "password reset successfully"
msgstr "Пароль был успешно сброшен!"
-#: engine/vibes_auth/viewsets.py:132
+#: engine/vibes_auth/viewsets.py:161
msgid "account already activated!"
msgstr "Вы уже активировали учетную запись..."
diff --git a/engine/vibes_auth/locale/sv_SE/LC_MESSAGES/django.po b/engine/vibes_auth/locale/sv_SE/LC_MESSAGES/django.po
index 6d2c1c1c..ad7bec6e 100644
--- a/engine/vibes_auth/locale/sv_SE/LC_MESSAGES/django.po
+++ b/engine/vibes_auth/locale/sv_SE/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -14,7 +14,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: engine/vibes_auth/admin.py:51 engine/vibes_auth/admin.py:52
-#: engine/vibes_auth/graphene/object_types.py:46
+#: engine/vibes_auth/graphene/object_types.py:54
msgid "balance"
msgstr "Balans"
@@ -22,7 +22,7 @@ msgstr "Balans"
msgid "order"
msgstr "Beställning"
-#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:44
+#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:51
msgid "orders"
msgstr "Beställningar"
@@ -30,7 +30,7 @@ msgstr "Beställningar"
msgid "personal info"
msgstr "Personlig information"
-#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:43
+#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:50
msgid "permissions"
msgstr "Behörigheter"
@@ -42,15 +42,15 @@ msgstr "Viktiga datum"
msgid "additional info"
msgstr "Ytterligare information"
-#: engine/vibes_auth/admin.py:128
+#: engine/vibes_auth/admin.py:135
msgid "You cannot jump over your head!"
msgstr "Du kan inte hoppa över huvudet!"
-#: engine/vibes_auth/admin.py:160
+#: engine/vibes_auth/admin.py:167
msgid "Close selected threads"
msgstr "Stäng valda trådar"
-#: engine/vibes_auth/admin.py:164
+#: engine/vibes_auth/admin.py:171
msgid "Open selected threads"
msgstr "Öppna valda trådar"
@@ -82,7 +82,7 @@ msgstr "System"
msgid "User messages entrypoint"
msgstr "Användarmeddelanden entrypoint"
-#: engine/vibes_auth/docs/drf/messaging.py:18
+#: engine/vibes_auth/docs/drf/messaging.py:19
msgid ""
"Anonymous or authenticated non-staff users send messages. Also supports "
"action=ping."
@@ -90,11 +90,11 @@ msgstr ""
"Anonyma eller autentiserade användare som inte är anställda skickar "
"meddelanden. Stöder även action=ping."
-#: engine/vibes_auth/docs/drf/messaging.py:28
+#: engine/vibes_auth/docs/drf/messaging.py:30
msgid "Staff inbox control"
msgstr "Kontroll av personalens inkorg"
-#: engine/vibes_auth/docs/drf/messaging.py:29
+#: engine/vibes_auth/docs/drf/messaging.py:32
msgid ""
"Staff-only actions: list_open, assign, reply, close, ping. Unified event "
"payloads are emitted."
@@ -102,11 +102,11 @@ msgstr ""
"Åtgärder endast för personal: list_open, assign, reply, close, ping. Unified "
"event payloads sänds ut."
-#: engine/vibes_auth/docs/drf/messaging.py:39
+#: engine/vibes_auth/docs/drf/messaging.py:43
msgid "Per-thread staff channel"
msgstr "Personalkanal per tråd"
-#: engine/vibes_auth/docs/drf/messaging.py:40
+#: engine/vibes_auth/docs/drf/messaging.py:44
msgid "Reply, close, and ping within a specific thread."
msgstr "Svara, stäng och pinga inom en specifik tråd."
@@ -134,7 +134,7 @@ msgstr "Verifiera en token"
msgid "Verify a token (refresh or access)."
msgstr "Verifiera en token (uppdatering eller åtkomst)."
-#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90
+#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:100
msgid "the token is valid"
msgstr "Token är giltig"
@@ -173,9 +173,9 @@ msgid "confirm a user's password reset"
msgstr "Bekräfta återställning av en användares lösenord"
#: engine/vibes_auth/docs/drf/viewsets.py:87
-#: engine/vibes_auth/graphene/mutations.py:317
-#: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101
-#: engine/vibes_auth/viewsets.py:84
+#: engine/vibes_auth/graphene/mutations.py:345
+#: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/viewsets.py:94
msgid "passwords do not match"
msgstr "Lösenorden stämmer inte överens"
@@ -183,62 +183,63 @@ msgstr "Lösenorden stämmer inte överens"
msgid "activate a user's account"
msgstr "Aktivera en användares konto"
-#: engine/vibes_auth/docs/drf/viewsets.py:99
+#: engine/vibes_auth/docs/drf/viewsets.py:101
msgid "activation link is invalid or account already activated"
msgstr "Aktiveringslänken är ogiltig eller kontot är redan aktiverat"
-#: engine/vibes_auth/docs/drf/viewsets.py:107
+#: engine/vibes_auth/docs/drf/viewsets.py:111
msgid "merge client-stored recently viewed products"
msgstr "Sammanfoga klientlagrade nyligen visade produkter"
-#: engine/vibes_auth/graphene/mutations.py:44
+#: engine/vibes_auth/graphene/mutations.py:47
msgid "the user's b64-encoded uuid who referred the new user to us."
msgstr ""
"Den användares b64-kodade uuid som hänvisade den nya användaren till oss."
-#: engine/vibes_auth/graphene/mutations.py:64
+#: engine/vibes_auth/graphene/mutations.py:69
msgid "password too weak"
msgstr "Lösenordet är för svagt"
-#: engine/vibes_auth/graphene/mutations.py:119
+#: engine/vibes_auth/graphene/mutations.py:129
msgid "malformed email"
msgstr "Missvisande e-post"
-#: engine/vibes_auth/graphene/mutations.py:126
-#: engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/graphene/mutations.py:141
+#: engine/vibes_auth/serializers.py:117
#, python-brace-format
msgid "malformed phone number: {phone_number}"
msgstr "Missbildat telefonnummer: {phone_number}!"
-#: engine/vibes_auth/graphene/mutations.py:148
+#: engine/vibes_auth/graphene/mutations.py:166
#, python-brace-format
msgid "Invalid attribute format: {attribute_pair}"
msgstr "Ogiltigt attributformat: {attribute_pair}!"
-#: engine/vibes_auth/graphene/mutations.py:162
+#: engine/vibes_auth/graphene/mutations.py:183
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr "{name} existerar inte: {uuid}!"
-#: engine/vibes_auth/graphene/mutations.py:270
-#: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146
+#: engine/vibes_auth/graphene/mutations.py:298
+#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180
msgid "activation link is invalid!"
msgstr "Aktiveringslänken är ogiltig!"
-#: engine/vibes_auth/graphene/mutations.py:273
+#: engine/vibes_auth/graphene/mutations.py:301
msgid "account already activated..."
msgstr "Kontot har redan aktiverats..."
-#: engine/vibes_auth/graphene/mutations.py:280
-#: engine/vibes_auth/graphene/mutations.py:336
+#: engine/vibes_auth/graphene/mutations.py:308
+#: engine/vibes_auth/graphene/mutations.py:370
msgid "something went wrong: {e!s}"
msgstr "Något gick fel: {e!s}"
-#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95
+#: engine/vibes_auth/graphene/mutations.py:352
+#: engine/vibes_auth/viewsets.py:106
msgid "token is invalid!"
msgstr "Token är ogiltig!"
-#: engine/vibes_auth/graphene/object_types.py:40
+#: engine/vibes_auth/graphene/object_types.py:46
msgid ""
"the products this user has viewed most recently (max 48), in reverse‐"
"chronological order"
@@ -246,24 +247,24 @@ msgstr ""
"De produkter som den här användaren har tittat på senast (max 48), i omvänd "
"kronologisk ordning."
-#: engine/vibes_auth/graphene/object_types.py:42
-#: engine/vibes_auth/models.py:185
+#: engine/vibes_auth/graphene/object_types.py:49
+#: engine/vibes_auth/models.py:209
msgid "groups"
msgstr "Grupper"
-#: engine/vibes_auth/graphene/object_types.py:45
+#: engine/vibes_auth/graphene/object_types.py:52
msgid "wishlist"
msgstr "Önskelista"
-#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:70
+#: engine/vibes_auth/graphene/object_types.py:56 engine/vibes_auth/models.py:70
msgid "avatar"
msgstr "Avatar"
-#: engine/vibes_auth/graphene/object_types.py:48
+#: engine/vibes_auth/graphene/object_types.py:58
msgid "attributes may be used to store custom data"
msgstr "Attribut kan användas för att lagra anpassade data"
-#: engine/vibes_auth/graphene/object_types.py:50
+#: engine/vibes_auth/graphene/object_types.py:62
#, python-brace-format
msgid ""
"language is one of the {settings.LANGUAGES} with default {settings."
@@ -271,23 +272,23 @@ msgid ""
msgstr ""
"Språk är en av {settings.LANGUAGES} med standard {settings.LANGUAGE_CODE}."
-#: engine/vibes_auth/graphene/object_types.py:52
+#: engine/vibes_auth/graphene/object_types.py:66
msgid "address set"
msgstr "Adresser"
-#: engine/vibes_auth/messaging/services.py:49
+#: engine/vibes_auth/messaging/services.py:52
msgid "Valid email is required for anonymous chats."
msgstr "Giltig e-postadress krävs för anonyma chattar."
-#: engine/vibes_auth/messaging/services.py:57
+#: engine/vibes_auth/messaging/services.py:65
msgid "Message must be 1..1028 characters."
msgstr "Meddelandet måste innehålla 1..1028 tecken."
-#: engine/vibes_auth/messaging/services.py:93
+#: engine/vibes_auth/messaging/services.py:105
msgid "We're searching for the operator to answer you already, hold by!"
msgstr "Vi söker efter en operatör som kan svara dig redan nu, så håll ut!"
-#: engine/vibes_auth/messaging/services.py:136
+#: engine/vibes_auth/messaging/services.py:152
msgid "Assignee must be a staff user."
msgstr "Mottagaren måste vara en personalanvändare."
@@ -357,71 +358,71 @@ msgstr "Avmarkera detta istället för att radera konton"
msgid "is_subscribed"
msgstr "Är prenumererad"
-#: engine/vibes_auth/models.py:87
+#: engine/vibes_auth/models.py:88
msgid "user's newsletter subscription status"
msgstr "Användarens status för prenumeration på nyhetsbrev"
-#: engine/vibes_auth/models.py:90
+#: engine/vibes_auth/models.py:92
msgid "activation token"
msgstr "Aktiveringstoken"
-#: engine/vibes_auth/models.py:94
+#: engine/vibes_auth/models.py:101
msgid "attributes"
msgstr "Attribut"
-#: engine/vibes_auth/models.py:133
+#: engine/vibes_auth/models.py:141
msgid "user"
msgstr "Användare"
-#: engine/vibes_auth/models.py:134
+#: engine/vibes_auth/models.py:142
msgid "users"
msgstr "Användare"
-#: engine/vibes_auth/models.py:139
+#: engine/vibes_auth/models.py:149
msgid "For anonymous threads"
msgstr "För anonyma trådar"
-#: engine/vibes_auth/models.py:153
+#: engine/vibes_auth/models.py:173
msgid "Chat thread"
msgstr "Chattråd"
-#: engine/vibes_auth/models.py:154
+#: engine/vibes_auth/models.py:174
msgid "Chat threads"
msgstr "Chatt-trådar"
-#: engine/vibes_auth/models.py:159
+#: engine/vibes_auth/models.py:180
msgid "provide user or email for anonymous thread."
msgstr "ange användare eller e-post för anonym tråd."
-#: engine/vibes_auth/models.py:161
+#: engine/vibes_auth/models.py:183
msgid "assignee must be a staff user."
msgstr "mottagaren måste vara en personalanvändare."
-#: engine/vibes_auth/models.py:177
+#: engine/vibes_auth/models.py:201
msgid "Chat message"
msgstr "Chattmeddelande"
-#: engine/vibes_auth/models.py:178
+#: engine/vibes_auth/models.py:202
msgid "Chat messages"
msgstr "Chattmeddelanden"
-#: engine/vibes_auth/models.py:184
+#: engine/vibes_auth/models.py:208
msgid "group"
msgstr "Grupp"
-#: engine/vibes_auth/models.py:191
+#: engine/vibes_auth/models.py:215
msgid "outstanding token"
msgstr "Utestående symbol"
-#: engine/vibes_auth/models.py:192
+#: engine/vibes_auth/models.py:216
msgid "outstanding tokens"
msgstr "Utestående polletter"
-#: engine/vibes_auth/models.py:198
+#: engine/vibes_auth/models.py:222
msgid "blacklisted token"
msgstr "Svartlistad token"
-#: engine/vibes_auth/models.py:199
+#: engine/vibes_auth/models.py:223
msgid "blacklisted tokens"
msgstr "Svartlistade tokens"
@@ -429,37 +430,37 @@ msgstr "Svartlistade tokens"
msgid "attributes must be a dictionary"
msgstr "`attributes` måste vara en ordbok"
-#: engine/vibes_auth/serializers.py:93
+#: engine/vibes_auth/serializers.py:97
msgid "business identificator is required when registering as a business"
msgstr "Företagsidentifierare krävs när du registrerar dig som företag"
-#: engine/vibes_auth/serializers.py:113
+#: engine/vibes_auth/serializers.py:127
#, python-brace-format
msgid "malformed email: {email}"
msgstr "missbildad e-post: {email}"
-#: engine/vibes_auth/serializers.py:134 engine/vibes_auth/serializers.py:159
-#: engine/vibes_auth/serializers.py:182 engine/vibes_auth/serializers.py:192
+#: engine/vibes_auth/serializers.py:150 engine/vibes_auth/serializers.py:175
+#: engine/vibes_auth/serializers.py:198 engine/vibes_auth/serializers.py:210
msgid "no active account"
msgstr "Inget aktivt konto hittades"
-#: engine/vibes_auth/serializers.py:169
+#: engine/vibes_auth/serializers.py:185
msgid "must set token_class attribute on class."
msgstr "Måste sätta attributet token_class på klassen!"
-#: engine/vibes_auth/serializers.py:253
+#: engine/vibes_auth/serializers.py:271
msgid "token_blacklisted"
msgstr "Token blacklisted"
-#: engine/vibes_auth/serializers.py:258
+#: engine/vibes_auth/serializers.py:276
msgid "invalid token"
msgstr "Ogiltig token"
-#: engine/vibes_auth/serializers.py:268
+#: engine/vibes_auth/serializers.py:286
msgid "no user uuid claim present in token"
msgstr "Inget användar-uuid-krav finns i token"
-#: engine/vibes_auth/serializers.py:270
+#: engine/vibes_auth/serializers.py:288
msgid "user does not exist"
msgstr "Användaren finns inte"
@@ -559,7 +560,7 @@ msgstr "{settings.PROJECT_NAME} | Aktivera konto"
msgid "{settings.PROJECT_NAME} | Reset Password"
msgstr "{settings.PROJECT_NAME} | Återställ lösenord"
-#: engine/vibes_auth/validators.py:13
+#: engine/vibes_auth/validators.py:15
msgid ""
"invalid phone number format. the number must be entered in the format: "
"\"+999999999\". up to 15 digits allowed."
@@ -567,7 +568,7 @@ msgstr ""
"Ogiltigt format på telefonnumret. Numret måste anges i formatet: "
"\"+999999999\". Upp till 15 siffror är tillåtna."
-#: engine/vibes_auth/views.py:30
+#: engine/vibes_auth/views.py:34
msgid ""
"Represents a view for getting a pair of access and refresh tokens and user's "
"data. This view manages the process of handling token-based authentication "
@@ -582,7 +583,7 @@ msgstr ""
"säkerställer korrekt hastighetsbegränsning för att skydda mot brute force-"
"attacker."
-#: engine/vibes_auth/views.py:52
+#: engine/vibes_auth/views.py:58
msgid ""
"Handles refreshing of tokens for authentication purposes. This class is used "
"to provide functionality for token refresh operations as part of an "
@@ -597,7 +598,7 @@ msgstr ""
"den associerade serialiseraren för att validera inmatningar för "
"tokenuppdatering och producera lämpliga utmatningar."
-#: engine/vibes_auth/views.py:75
+#: engine/vibes_auth/views.py:83
msgid ""
"Represents a view for verifying JSON Web Tokens (JWT) using specific "
"serialization and validation logic. "
@@ -605,7 +606,7 @@ msgstr ""
"Representerar en vy för verifiering av JSON Web Tokens (JWT) med hjälp av "
"specifik serialiserings- och valideringslogik."
-#: engine/vibes_auth/views.py:92
+#: engine/vibes_auth/views.py:103
msgid "the token is invalid"
msgstr "Token är ogiltig"
@@ -624,10 +625,10 @@ msgstr ""
"och sammanslagning av nyligen visade objekt. Denna klass utökar mixins och "
"GenericViewSet för robust API-hantering."
-#: engine/vibes_auth/viewsets.py:99
+#: engine/vibes_auth/viewsets.py:113
msgid "password reset successfully"
msgstr "Lösenordet har återställts framgångsrikt!"
-#: engine/vibes_auth/viewsets.py:132
+#: engine/vibes_auth/viewsets.py:161
msgid "account already activated!"
msgstr "Du har redan aktiverat kontot..."
diff --git a/engine/vibes_auth/locale/th_TH/LC_MESSAGES/django.po b/engine/vibes_auth/locale/th_TH/LC_MESSAGES/django.po
index 7d1f87de..d58ee265 100644
--- a/engine/vibes_auth/locale/th_TH/LC_MESSAGES/django.po
+++ b/engine/vibes_auth/locale/th_TH/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -14,7 +14,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: engine/vibes_auth/admin.py:51 engine/vibes_auth/admin.py:52
-#: engine/vibes_auth/graphene/object_types.py:46
+#: engine/vibes_auth/graphene/object_types.py:54
msgid "balance"
msgstr "สมดุล"
@@ -22,7 +22,7 @@ msgstr "สมดุล"
msgid "order"
msgstr "คำสั่ง"
-#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:44
+#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:51
msgid "orders"
msgstr "คำสั่ง"
@@ -30,7 +30,7 @@ msgstr "คำสั่ง"
msgid "personal info"
msgstr "ข้อมูลส่วนตัว"
-#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:43
+#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:50
msgid "permissions"
msgstr "สิทธิ์การใช้งาน"
@@ -42,15 +42,15 @@ msgstr "วันที่สำคัญ"
msgid "additional info"
msgstr "ข้อมูลเพิ่มเติม"
-#: engine/vibes_auth/admin.py:128
+#: engine/vibes_auth/admin.py:135
msgid "You cannot jump over your head!"
msgstr "คุณไม่สามารถกระโดดข้ามหัวตัวเองได้!"
-#: engine/vibes_auth/admin.py:160
+#: engine/vibes_auth/admin.py:167
msgid "Close selected threads"
msgstr "ปิดกระทู้ที่เลือก"
-#: engine/vibes_auth/admin.py:164
+#: engine/vibes_auth/admin.py:171
msgid "Open selected threads"
msgstr "เปิดกระทู้ที่เลือก"
@@ -82,7 +82,7 @@ msgstr "ระบบ"
msgid "User messages entrypoint"
msgstr "จุดเริ่มต้นของข้อความผู้ใช้"
-#: engine/vibes_auth/docs/drf/messaging.py:18
+#: engine/vibes_auth/docs/drf/messaging.py:19
msgid ""
"Anonymous or authenticated non-staff users send messages. Also supports "
"action=ping."
@@ -90,11 +90,11 @@ msgstr ""
"ผู้ใช้ที่ไม่ระบุตัวตนหรือผู้ใช้ที่ผ่านการยืนยันตัวตนแต่ไม่ใช่บุคลากรสามารถส่งข้อความได้ "
"นอกจากนี้ยังรองรับ action=ping"
-#: engine/vibes_auth/docs/drf/messaging.py:28
+#: engine/vibes_auth/docs/drf/messaging.py:30
msgid "Staff inbox control"
msgstr "การควบคุมกล่องขาเข้าของพนักงาน"
-#: engine/vibes_auth/docs/drf/messaging.py:29
+#: engine/vibes_auth/docs/drf/messaging.py:32
msgid ""
"Staff-only actions: list_open, assign, reply, close, ping. Unified event "
"payloads are emitted."
@@ -102,11 +102,11 @@ msgstr ""
"การดำเนินการสำหรับพนักงานเท่านั้น: list_open, assign, reply, close, ping. "
"ข้อมูลเหตุการณ์แบบรวมจะถูกส่งออก"
-#: engine/vibes_auth/docs/drf/messaging.py:39
+#: engine/vibes_auth/docs/drf/messaging.py:43
msgid "Per-thread staff channel"
msgstr "ช่องสำหรับพนักงานเฉพาะแต่ละหัวข้อ"
-#: engine/vibes_auth/docs/drf/messaging.py:40
+#: engine/vibes_auth/docs/drf/messaging.py:44
msgid "Reply, close, and ping within a specific thread."
msgstr "ตอบกลับ ปิด และส่งข้อความถึงภายในกระทู้เฉพาะ"
@@ -134,7 +134,7 @@ msgstr "ตรวจสอบโทเค็น"
msgid "Verify a token (refresh or access)."
msgstr "ตรวจสอบโทเค็น (รีเฟรชหรือเข้าถึง)"
-#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90
+#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:100
msgid "the token is valid"
msgstr "โทเค็นนี้ใช้ได้"
@@ -171,9 +171,9 @@ msgid "confirm a user's password reset"
msgstr "ยืนยันการรีเซ็ตรหัสผ่านของผู้ใช้"
#: engine/vibes_auth/docs/drf/viewsets.py:87
-#: engine/vibes_auth/graphene/mutations.py:317
-#: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101
-#: engine/vibes_auth/viewsets.py:84
+#: engine/vibes_auth/graphene/mutations.py:345
+#: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/viewsets.py:94
msgid "passwords do not match"
msgstr "รหัสผ่านไม่ตรงกัน"
@@ -181,107 +181,108 @@ msgstr "รหัสผ่านไม่ตรงกัน"
msgid "activate a user's account"
msgstr "เปิดใช้งานบัญชีผู้ใช้"
-#: engine/vibes_auth/docs/drf/viewsets.py:99
+#: engine/vibes_auth/docs/drf/viewsets.py:101
msgid "activation link is invalid or account already activated"
msgstr "ลิงก์การเปิดใช้งานไม่ถูกต้องหรือบัญชีได้รับการเปิดใช้งานแล้ว"
-#: engine/vibes_auth/docs/drf/viewsets.py:107
+#: engine/vibes_auth/docs/drf/viewsets.py:111
msgid "merge client-stored recently viewed products"
msgstr "รวมสินค้าที่ลูกค้าดูล่าสุดซึ่งเก็บไว้ในระบบของลูกค้า"
-#: engine/vibes_auth/graphene/mutations.py:44
+#: engine/vibes_auth/graphene/mutations.py:47
msgid "the user's b64-encoded uuid who referred the new user to us."
msgstr "ผู้ใช้ที่เข้ารหัส uuid ด้วย b64 ซึ่งแนะนำผู้ใช้ใหม่ให้เรามา"
-#: engine/vibes_auth/graphene/mutations.py:64
+#: engine/vibes_auth/graphene/mutations.py:69
msgid "password too weak"
msgstr "รหัสผ่านอ่อนแอเกินไป"
-#: engine/vibes_auth/graphene/mutations.py:119
+#: engine/vibes_auth/graphene/mutations.py:129
msgid "malformed email"
msgstr "อีเมลไม่ถูกต้อง"
-#: engine/vibes_auth/graphene/mutations.py:126
-#: engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/graphene/mutations.py:141
+#: engine/vibes_auth/serializers.py:117
#, python-brace-format
msgid "malformed phone number: {phone_number}"
msgstr "หมายเลขโทรศัพท์ไม่ถูกต้อง: {phone_number}!"
-#: engine/vibes_auth/graphene/mutations.py:148
+#: engine/vibes_auth/graphene/mutations.py:166
#, python-brace-format
msgid "Invalid attribute format: {attribute_pair}"
msgstr "รูปแบบแอตทริบิวต์ไม่ถูกต้อง: {attribute_pair}!"
-#: engine/vibes_auth/graphene/mutations.py:162
+#: engine/vibes_auth/graphene/mutations.py:183
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr "{name} ไม่พบ: {uuid}!"
-#: engine/vibes_auth/graphene/mutations.py:270
-#: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146
+#: engine/vibes_auth/graphene/mutations.py:298
+#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180
msgid "activation link is invalid!"
msgstr "ลิงก์การเปิดใช้งานไม่ถูกต้อง!"
-#: engine/vibes_auth/graphene/mutations.py:273
+#: engine/vibes_auth/graphene/mutations.py:301
msgid "account already activated..."
msgstr "บัญชีได้รับการเปิดใช้งานแล้ว..."
-#: engine/vibes_auth/graphene/mutations.py:280
-#: engine/vibes_auth/graphene/mutations.py:336
+#: engine/vibes_auth/graphene/mutations.py:308
+#: engine/vibes_auth/graphene/mutations.py:370
msgid "something went wrong: {e!s}"
msgstr "เกิดข้อผิดพลาด: {e!s}"
-#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95
+#: engine/vibes_auth/graphene/mutations.py:352
+#: engine/vibes_auth/viewsets.py:106
msgid "token is invalid!"
msgstr "โทเคนไม่ถูกต้อง!"
-#: engine/vibes_auth/graphene/object_types.py:40
+#: engine/vibes_auth/graphene/object_types.py:46
msgid ""
"the products this user has viewed most recently (max 48), in reverse‐"
"chronological order"
msgstr "สินค้าที่ผู้ใช้รายนี้ดูล่าสุด (สูงสุด 48 รายการ) เรียงตามลำดับเวลาล่าสุด"
-#: engine/vibes_auth/graphene/object_types.py:42
-#: engine/vibes_auth/models.py:185
+#: engine/vibes_auth/graphene/object_types.py:49
+#: engine/vibes_auth/models.py:209
msgid "groups"
msgstr "กลุ่ม"
-#: engine/vibes_auth/graphene/object_types.py:45
+#: engine/vibes_auth/graphene/object_types.py:52
msgid "wishlist"
msgstr "รายการสิ่งที่ต้องการ"
-#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:70
+#: engine/vibes_auth/graphene/object_types.py:56 engine/vibes_auth/models.py:70
msgid "avatar"
msgstr "อวตาร"
-#: engine/vibes_auth/graphene/object_types.py:48
+#: engine/vibes_auth/graphene/object_types.py:58
msgid "attributes may be used to store custom data"
msgstr "คุณลักษณะอาจใช้เพื่อเก็บข้อมูลที่กำหนดเอง"
-#: engine/vibes_auth/graphene/object_types.py:50
+#: engine/vibes_auth/graphene/object_types.py:62
#, python-brace-format
msgid ""
"language is one of the {settings.LANGUAGES} with default {settings."
"LANGUAGE_CODE}"
msgstr "ภาษาเป็นหนึ่งใน {settings.LANGUAGES} ที่มีค่าเริ่มต้น {settings.LANGUAGE_CODE}"
-#: engine/vibes_auth/graphene/object_types.py:52
+#: engine/vibes_auth/graphene/object_types.py:66
msgid "address set"
msgstr "ที่อยู่"
-#: engine/vibes_auth/messaging/services.py:49
+#: engine/vibes_auth/messaging/services.py:52
msgid "Valid email is required for anonymous chats."
msgstr "จำเป็นต้องมีอีเมลที่ถูกต้องสำหรับการแชทแบบไม่ระบุตัวตน"
-#: engine/vibes_auth/messaging/services.py:57
+#: engine/vibes_auth/messaging/services.py:65
msgid "Message must be 1..1028 characters."
msgstr "ข้อความต้องมีความยาว 1..1028 ตัวอักษร"
-#: engine/vibes_auth/messaging/services.py:93
+#: engine/vibes_auth/messaging/services.py:105
msgid "We're searching for the operator to answer you already, hold by!"
msgstr "เรากำลังค้นหาผู้ดำเนินการเพื่อตอบคุณอยู่ กรุณารอสักครู่!"
-#: engine/vibes_auth/messaging/services.py:136
+#: engine/vibes_auth/messaging/services.py:152
msgid "Assignee must be a staff user."
msgstr "ผู้รับมอบหมายต้องเป็นผู้ใช้ที่เป็นพนักงานเท่านั้น"
@@ -350,71 +351,71 @@ msgstr "ยกเลิกการเลือกสิ่งนี้แทน
msgid "is_subscribed"
msgstr "สมัครสมาชิกแล้ว"
-#: engine/vibes_auth/models.py:87
+#: engine/vibes_auth/models.py:88
msgid "user's newsletter subscription status"
msgstr "สถานะการสมัครสมาชิกจดหมายข่าวของผู้ใช้"
-#: engine/vibes_auth/models.py:90
+#: engine/vibes_auth/models.py:92
msgid "activation token"
msgstr "โทเค็นการเปิดใช้งาน"
-#: engine/vibes_auth/models.py:94
+#: engine/vibes_auth/models.py:101
msgid "attributes"
msgstr "คุณลักษณะ"
-#: engine/vibes_auth/models.py:133
+#: engine/vibes_auth/models.py:141
msgid "user"
msgstr "ผู้ใช้"
-#: engine/vibes_auth/models.py:134
+#: engine/vibes_auth/models.py:142
msgid "users"
msgstr "ผู้ใช้"
-#: engine/vibes_auth/models.py:139
+#: engine/vibes_auth/models.py:149
msgid "For anonymous threads"
msgstr "สำหรับกระทู้ที่ไม่ระบุชื่อ"
-#: engine/vibes_auth/models.py:153
+#: engine/vibes_auth/models.py:173
msgid "Chat thread"
msgstr "หัวข้อสนทนา"
-#: engine/vibes_auth/models.py:154
+#: engine/vibes_auth/models.py:174
msgid "Chat threads"
msgstr "หัวข้อสนทนา"
-#: engine/vibes_auth/models.py:159
+#: engine/vibes_auth/models.py:180
msgid "provide user or email for anonymous thread."
msgstr "ให้ผู้ใช้หรืออีเมลสำหรับกระทู้ไม่ระบุตัวตน"
-#: engine/vibes_auth/models.py:161
+#: engine/vibes_auth/models.py:183
msgid "assignee must be a staff user."
msgstr "ผู้รับมอบหมายต้องเป็นผู้ใช้ที่เป็นพนักงานเท่านั้น"
-#: engine/vibes_auth/models.py:177
+#: engine/vibes_auth/models.py:201
msgid "Chat message"
msgstr "ข้อความแชท"
-#: engine/vibes_auth/models.py:178
+#: engine/vibes_auth/models.py:202
msgid "Chat messages"
msgstr "ข้อความแชท"
-#: engine/vibes_auth/models.py:184
+#: engine/vibes_auth/models.py:208
msgid "group"
msgstr "กลุ่ม"
-#: engine/vibes_auth/models.py:191
+#: engine/vibes_auth/models.py:215
msgid "outstanding token"
msgstr "โทเค็นที่ยังไม่ได้ใช้"
-#: engine/vibes_auth/models.py:192
+#: engine/vibes_auth/models.py:216
msgid "outstanding tokens"
msgstr "โทเค็นที่ยังไม่ได้ใช้"
-#: engine/vibes_auth/models.py:198
+#: engine/vibes_auth/models.py:222
msgid "blacklisted token"
msgstr "โทเค็นที่ถูกขึ้นบัญชีดำ"
-#: engine/vibes_auth/models.py:199
+#: engine/vibes_auth/models.py:223
msgid "blacklisted tokens"
msgstr "โทเค็นที่ถูกขึ้นบัญชีดำ"
@@ -422,37 +423,37 @@ msgstr "โทเค็นที่ถูกขึ้นบัญชีดำ"
msgid "attributes must be a dictionary"
msgstr "`attributes` ต้องเป็นพจนานุกรม"
-#: engine/vibes_auth/serializers.py:93
+#: engine/vibes_auth/serializers.py:97
msgid "business identificator is required when registering as a business"
msgstr "จำเป็นต้องระบุรหัสประจำตัวธุรกิจเมื่อลงทะเบียนเป็นธุรกิจ"
-#: engine/vibes_auth/serializers.py:113
+#: engine/vibes_auth/serializers.py:127
#, python-brace-format
msgid "malformed email: {email}"
msgstr "อีเมลไม่ถูกต้อง: {email}"
-#: engine/vibes_auth/serializers.py:134 engine/vibes_auth/serializers.py:159
-#: engine/vibes_auth/serializers.py:182 engine/vibes_auth/serializers.py:192
+#: engine/vibes_auth/serializers.py:150 engine/vibes_auth/serializers.py:175
+#: engine/vibes_auth/serializers.py:198 engine/vibes_auth/serializers.py:210
msgid "no active account"
msgstr "ไม่พบบัญชีที่ใช้งานอยู่"
-#: engine/vibes_auth/serializers.py:169
+#: engine/vibes_auth/serializers.py:185
msgid "must set token_class attribute on class."
msgstr "ต้องตั้งค่าแอตทริบิวต์ token_class บนคลาส!"
-#: engine/vibes_auth/serializers.py:253
+#: engine/vibes_auth/serializers.py:271
msgid "token_blacklisted"
msgstr "โทเค็นถูกขึ้นบัญชีดำ"
-#: engine/vibes_auth/serializers.py:258
+#: engine/vibes_auth/serializers.py:276
msgid "invalid token"
msgstr "โทเค็นไม่ถูกต้อง"
-#: engine/vibes_auth/serializers.py:268
+#: engine/vibes_auth/serializers.py:286
msgid "no user uuid claim present in token"
msgstr "ไม่มีการอ้างสิทธิ์ uuid ของผู้ใช้ในโทเค็น"
-#: engine/vibes_auth/serializers.py:270
+#: engine/vibes_auth/serializers.py:288
msgid "user does not exist"
msgstr "ผู้ใช้ไม่มีอยู่"
@@ -544,7 +545,7 @@ msgstr "{settings.PROJECT_NAME} | เปิดใช้งานบัญชี"
msgid "{settings.PROJECT_NAME} | Reset Password"
msgstr "{settings.PROJECT_NAME} | ตั้งค่ารหัสผ่านใหม่"
-#: engine/vibes_auth/validators.py:13
+#: engine/vibes_auth/validators.py:15
msgid ""
"invalid phone number format. the number must be entered in the format: "
"\"+999999999\". up to 15 digits allowed."
@@ -552,7 +553,7 @@ msgstr ""
"รูปแบบหมายเลขโทรศัพท์ไม่ถูกต้อง. หมายเลขต้องถูกป้อนในรูปแบบ: \"+999999999\". "
"อนุญาตให้ใช้ได้ถึง 15 หลัก."
-#: engine/vibes_auth/views.py:30
+#: engine/vibes_auth/views.py:34
msgid ""
"Represents a view for getting a pair of access and refresh tokens and user's "
"data. This view manages the process of handling token-based authentication "
@@ -566,7 +567,7 @@ msgstr ""
"มุมมองนี้สร้างขึ้นบนมุมมองโทเค็นพื้นฐานและรับประกันการจำกัดอัตราที่เหมาะสมเพื่อป้องกันการโจมตีแบบ "
"brute force"
-#: engine/vibes_auth/views.py:52
+#: engine/vibes_auth/views.py:58
msgid ""
"Handles refreshing of tokens for authentication purposes. This class is used "
"to provide functionality for token refresh operations as part of an "
@@ -579,7 +580,7 @@ msgstr ""
"มันทำให้แน่ใจว่าลูกค้าสามารถขอโทเค็นที่รีเฟรชแล้วได้ภายในขีดจำกัดอัตราที่กำหนดไว้ "
"หน้าจอนี้พึ่งพาตัวจัดลำดับที่เกี่ยวข้องเพื่อตรวจสอบความถูกต้องของข้อมูลการรีเฟรชโทเค็นและสร้างผลลัพธ์ที่เหมาะสม"
-#: engine/vibes_auth/views.py:75
+#: engine/vibes_auth/views.py:83
msgid ""
"Represents a view for verifying JSON Web Tokens (JWT) using specific "
"serialization and validation logic. "
@@ -587,7 +588,7 @@ msgstr ""
"แสดงมุมมองสำหรับการตรวจสอบโทเค็นเว็บ JSON (JWT) "
"โดยใช้การแปลงลำดับและการตรวจสอบความถูกต้องตามตรรกะเฉพาะ"
-#: engine/vibes_auth/views.py:92
+#: engine/vibes_auth/views.py:103
msgid "the token is invalid"
msgstr "โทเค็นไม่ถูกต้อง"
@@ -604,10 +605,10 @@ msgstr ""
"การอัปโหลดอวาตาร์ การเปิดใช้งานบัญชี และการรวมรายการที่ดูล่าสุด คลาสนี้ขยายส่วนผสมและ "
"GenericViewSet เพื่อการจัดการ API ที่มีความแข็งแกร่ง"
-#: engine/vibes_auth/viewsets.py:99
+#: engine/vibes_auth/viewsets.py:113
msgid "password reset successfully"
msgstr "รหัสผ่านได้รับการรีเซ็ตเรียบร้อยแล้ว!"
-#: engine/vibes_auth/viewsets.py:132
+#: engine/vibes_auth/viewsets.py:161
msgid "account already activated!"
msgstr "คุณได้เปิดใช้งานบัญชีเรียบร้อยแล้ว..."
diff --git a/engine/vibes_auth/locale/tr_TR/LC_MESSAGES/django.po b/engine/vibes_auth/locale/tr_TR/LC_MESSAGES/django.po
index 90286381..5bb8fa6b 100644
--- a/engine/vibes_auth/locale/tr_TR/LC_MESSAGES/django.po
+++ b/engine/vibes_auth/locale/tr_TR/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -14,7 +14,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: engine/vibes_auth/admin.py:51 engine/vibes_auth/admin.py:52
-#: engine/vibes_auth/graphene/object_types.py:46
+#: engine/vibes_auth/graphene/object_types.py:54
msgid "balance"
msgstr "Denge"
@@ -22,7 +22,7 @@ msgstr "Denge"
msgid "order"
msgstr "Sipariş"
-#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:44
+#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:51
msgid "orders"
msgstr "Siparişler"
@@ -30,7 +30,7 @@ msgstr "Siparişler"
msgid "personal info"
msgstr "Kişisel Bilgiler"
-#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:43
+#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:50
msgid "permissions"
msgstr "İzinler"
@@ -42,15 +42,15 @@ msgstr "Önemli tarihler"
msgid "additional info"
msgstr "Ek Bilgi"
-#: engine/vibes_auth/admin.py:128
+#: engine/vibes_auth/admin.py:135
msgid "You cannot jump over your head!"
msgstr "Başının üzerinden atlayamazsın!"
-#: engine/vibes_auth/admin.py:160
+#: engine/vibes_auth/admin.py:167
msgid "Close selected threads"
msgstr "Seçili konuları kapatın"
-#: engine/vibes_auth/admin.py:164
+#: engine/vibes_auth/admin.py:171
msgid "Open selected threads"
msgstr "Seçili konuları açın"
@@ -82,7 +82,7 @@ msgstr "Sistem"
msgid "User messages entrypoint"
msgstr "Kullanıcı mesajları giriş noktası"
-#: engine/vibes_auth/docs/drf/messaging.py:18
+#: engine/vibes_auth/docs/drf/messaging.py:19
msgid ""
"Anonymous or authenticated non-staff users send messages. Also supports "
"action=ping."
@@ -90,11 +90,11 @@ msgstr ""
"Anonim veya kimliği doğrulanmış personel olmayan kullanıcılar mesaj "
"gönderir. Ayrıca action=ping'i de destekler."
-#: engine/vibes_auth/docs/drf/messaging.py:28
+#: engine/vibes_auth/docs/drf/messaging.py:30
msgid "Staff inbox control"
msgstr "Personel gelen kutusu kontrolü"
-#: engine/vibes_auth/docs/drf/messaging.py:29
+#: engine/vibes_auth/docs/drf/messaging.py:32
msgid ""
"Staff-only actions: list_open, assign, reply, close, ping. Unified event "
"payloads are emitted."
@@ -102,11 +102,11 @@ msgstr ""
"Yalnızca personele yönelik eylemler: list_open, assign, reply, close, ping. "
"Birleşik olay yükleri yayılır."
-#: engine/vibes_auth/docs/drf/messaging.py:39
+#: engine/vibes_auth/docs/drf/messaging.py:43
msgid "Per-thread staff channel"
msgstr "Konu başına personel kanalı"
-#: engine/vibes_auth/docs/drf/messaging.py:40
+#: engine/vibes_auth/docs/drf/messaging.py:44
msgid "Reply, close, and ping within a specific thread."
msgstr "Belirli bir konu içinde yanıtlayın, kapatın ve ping atın."
@@ -134,7 +134,7 @@ msgstr "Bir belirteci doğrulayın"
msgid "Verify a token (refresh or access)."
msgstr "Bir belirteci doğrulayın (yenileme veya erişim)."
-#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90
+#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:100
msgid "the token is valid"
msgstr "Belirteç geçerlidir"
@@ -172,9 +172,9 @@ msgid "confirm a user's password reset"
msgstr "Bir kullanıcının parola sıfırlamasını onaylama"
#: engine/vibes_auth/docs/drf/viewsets.py:87
-#: engine/vibes_auth/graphene/mutations.py:317
-#: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101
-#: engine/vibes_auth/viewsets.py:84
+#: engine/vibes_auth/graphene/mutations.py:345
+#: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/viewsets.py:94
msgid "passwords do not match"
msgstr "Parolalar eşleşmiyor"
@@ -182,61 +182,62 @@ msgstr "Parolalar eşleşmiyor"
msgid "activate a user's account"
msgstr "Bir kullanıcının hesabını etkinleştirme"
-#: engine/vibes_auth/docs/drf/viewsets.py:99
+#: engine/vibes_auth/docs/drf/viewsets.py:101
msgid "activation link is invalid or account already activated"
msgstr "Etkinleştirme bağlantısı geçersiz veya hesap zaten etkinleştirilmiş"
-#: engine/vibes_auth/docs/drf/viewsets.py:107
+#: engine/vibes_auth/docs/drf/viewsets.py:111
msgid "merge client-stored recently viewed products"
msgstr "İstemcide depolanan son görüntülenen ürünleri birleştirme"
-#: engine/vibes_auth/graphene/mutations.py:44
+#: engine/vibes_auth/graphene/mutations.py:47
msgid "the user's b64-encoded uuid who referred the new user to us."
msgstr "Yeni kullanıcıyı bize yönlendiren kullanıcının b64 kodlu uuid'si."
-#: engine/vibes_auth/graphene/mutations.py:64
+#: engine/vibes_auth/graphene/mutations.py:69
msgid "password too weak"
msgstr "Şifre çok zayıf"
-#: engine/vibes_auth/graphene/mutations.py:119
+#: engine/vibes_auth/graphene/mutations.py:129
msgid "malformed email"
msgstr "Hatalı biçimlendirilmiş e-posta"
-#: engine/vibes_auth/graphene/mutations.py:126
-#: engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/graphene/mutations.py:141
+#: engine/vibes_auth/serializers.py:117
#, python-brace-format
msgid "malformed phone number: {phone_number}"
msgstr "Hatalı biçimlendirilmiş telefon numarası: {phone_number}!"
-#: engine/vibes_auth/graphene/mutations.py:148
+#: engine/vibes_auth/graphene/mutations.py:166
#, python-brace-format
msgid "Invalid attribute format: {attribute_pair}"
msgstr "Geçersiz öznitelik biçimi: {attribute_pair}!"
-#: engine/vibes_auth/graphene/mutations.py:162
+#: engine/vibes_auth/graphene/mutations.py:183
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr "{name} mevcut değil: {uuid}!"
-#: engine/vibes_auth/graphene/mutations.py:270
-#: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146
+#: engine/vibes_auth/graphene/mutations.py:298
+#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180
msgid "activation link is invalid!"
msgstr "Aktivasyon bağlantısı geçersiz!"
-#: engine/vibes_auth/graphene/mutations.py:273
+#: engine/vibes_auth/graphene/mutations.py:301
msgid "account already activated..."
msgstr "Hesap zaten etkinleştirildi..."
-#: engine/vibes_auth/graphene/mutations.py:280
-#: engine/vibes_auth/graphene/mutations.py:336
+#: engine/vibes_auth/graphene/mutations.py:308
+#: engine/vibes_auth/graphene/mutations.py:370
msgid "something went wrong: {e!s}"
msgstr "Bir şeyler ters gitti: {e!s}"
-#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95
+#: engine/vibes_auth/graphene/mutations.py:352
+#: engine/vibes_auth/viewsets.py:106
msgid "token is invalid!"
msgstr "Jeton geçersiz!"
-#: engine/vibes_auth/graphene/object_types.py:40
+#: engine/vibes_auth/graphene/object_types.py:46
msgid ""
"the products this user has viewed most recently (max 48), in reverse‐"
"chronological order"
@@ -244,24 +245,24 @@ msgstr ""
"Bu kullanıcının en son görüntülediği ürünler (en fazla 48), ters kronolojik "
"sırayla."
-#: engine/vibes_auth/graphene/object_types.py:42
-#: engine/vibes_auth/models.py:185
+#: engine/vibes_auth/graphene/object_types.py:49
+#: engine/vibes_auth/models.py:209
msgid "groups"
msgstr "Gruplar"
-#: engine/vibes_auth/graphene/object_types.py:45
+#: engine/vibes_auth/graphene/object_types.py:52
msgid "wishlist"
msgstr "İstek Listesi"
-#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:70
+#: engine/vibes_auth/graphene/object_types.py:56 engine/vibes_auth/models.py:70
msgid "avatar"
msgstr "Avatar"
-#: engine/vibes_auth/graphene/object_types.py:48
+#: engine/vibes_auth/graphene/object_types.py:58
msgid "attributes may be used to store custom data"
msgstr "Öznitelikler özel verileri saklamak için kullanılabilir"
-#: engine/vibes_auth/graphene/object_types.py:50
+#: engine/vibes_auth/graphene/object_types.py:62
#, python-brace-format
msgid ""
"language is one of the {settings.LANGUAGES} with default {settings."
@@ -269,23 +270,23 @@ msgid ""
msgstr ""
"Dil, varsayılan {settings.LANGUAGE_CODE} ile {settings.LANGUAGES}'dan biridir"
-#: engine/vibes_auth/graphene/object_types.py:52
+#: engine/vibes_auth/graphene/object_types.py:66
msgid "address set"
msgstr "Adresler"
-#: engine/vibes_auth/messaging/services.py:49
+#: engine/vibes_auth/messaging/services.py:52
msgid "Valid email is required for anonymous chats."
msgstr "Anonim sohbetler için geçerli e-posta gereklidir."
-#: engine/vibes_auth/messaging/services.py:57
+#: engine/vibes_auth/messaging/services.py:65
msgid "Message must be 1..1028 characters."
msgstr "Mesaj 1..1028 karakter olmalıdır."
-#: engine/vibes_auth/messaging/services.py:93
+#: engine/vibes_auth/messaging/services.py:105
msgid "We're searching for the operator to answer you already, hold by!"
msgstr "Size cevap verecek operatörü arıyoruz, bekleyin!"
-#: engine/vibes_auth/messaging/services.py:136
+#: engine/vibes_auth/messaging/services.py:152
msgid "Assignee must be a staff user."
msgstr "Atanan kişi bir personel kullanıcısı olmalıdır."
@@ -356,71 +357,71 @@ msgstr "Hesapları silmek yerine bunun seçimini kaldırın"
msgid "is_subscribed"
msgstr "Abone olundu"
-#: engine/vibes_auth/models.py:87
+#: engine/vibes_auth/models.py:88
msgid "user's newsletter subscription status"
msgstr "Kullanıcının haber bülteni abonelik durumu"
-#: engine/vibes_auth/models.py:90
+#: engine/vibes_auth/models.py:92
msgid "activation token"
msgstr "Etkinleştirme belirteci"
-#: engine/vibes_auth/models.py:94
+#: engine/vibes_auth/models.py:101
msgid "attributes"
msgstr "Nitelikler"
-#: engine/vibes_auth/models.py:133
+#: engine/vibes_auth/models.py:141
msgid "user"
msgstr "Kullanıcı"
-#: engine/vibes_auth/models.py:134
+#: engine/vibes_auth/models.py:142
msgid "users"
msgstr "Kullanıcılar"
-#: engine/vibes_auth/models.py:139
+#: engine/vibes_auth/models.py:149
msgid "For anonymous threads"
msgstr "Anonim konular için"
-#: engine/vibes_auth/models.py:153
+#: engine/vibes_auth/models.py:173
msgid "Chat thread"
msgstr "Sohbet başlığı"
-#: engine/vibes_auth/models.py:154
+#: engine/vibes_auth/models.py:174
msgid "Chat threads"
msgstr "Sohbet konuları"
-#: engine/vibes_auth/models.py:159
+#: engine/vibes_auth/models.py:180
msgid "provide user or email for anonymous thread."
msgstr "anonim konu için kullanıcı veya e-posta sağlayın."
-#: engine/vibes_auth/models.py:161
+#: engine/vibes_auth/models.py:183
msgid "assignee must be a staff user."
msgstr "atanan kişi bir personel kullanıcısı olmalıdır."
-#: engine/vibes_auth/models.py:177
+#: engine/vibes_auth/models.py:201
msgid "Chat message"
msgstr "Sohbet mesajı"
-#: engine/vibes_auth/models.py:178
+#: engine/vibes_auth/models.py:202
msgid "Chat messages"
msgstr "Sohbet mesajları"
-#: engine/vibes_auth/models.py:184
+#: engine/vibes_auth/models.py:208
msgid "group"
msgstr "Grup"
-#: engine/vibes_auth/models.py:191
+#: engine/vibes_auth/models.py:215
msgid "outstanding token"
msgstr "Olağanüstü belirteç"
-#: engine/vibes_auth/models.py:192
+#: engine/vibes_auth/models.py:216
msgid "outstanding tokens"
msgstr "Ödenmemiş jetonlar"
-#: engine/vibes_auth/models.py:198
+#: engine/vibes_auth/models.py:222
msgid "blacklisted token"
msgstr "Kara listeye alınmış belirteç"
-#: engine/vibes_auth/models.py:199
+#: engine/vibes_auth/models.py:223
msgid "blacklisted tokens"
msgstr "Kara listeye alınmış belirteçler"
@@ -428,37 +429,37 @@ msgstr "Kara listeye alınmış belirteçler"
msgid "attributes must be a dictionary"
msgstr "attributes` bir sözlük olmalıdır"
-#: engine/vibes_auth/serializers.py:93
+#: engine/vibes_auth/serializers.py:97
msgid "business identificator is required when registering as a business"
msgstr "İşletme olarak kayıt olurken işletme tanımlayıcısı gereklidir"
-#: engine/vibes_auth/serializers.py:113
+#: engine/vibes_auth/serializers.py:127
#, python-brace-format
msgid "malformed email: {email}"
msgstr "hatalı biçimlendirilmiş e-posta: {email}"
-#: engine/vibes_auth/serializers.py:134 engine/vibes_auth/serializers.py:159
-#: engine/vibes_auth/serializers.py:182 engine/vibes_auth/serializers.py:192
+#: engine/vibes_auth/serializers.py:150 engine/vibes_auth/serializers.py:175
+#: engine/vibes_auth/serializers.py:198 engine/vibes_auth/serializers.py:210
msgid "no active account"
msgstr "Etkin hesap bulunamadı"
-#: engine/vibes_auth/serializers.py:169
+#: engine/vibes_auth/serializers.py:185
msgid "must set token_class attribute on class."
msgstr "Sınıf üzerinde token_class niteliği ayarlanmalıdır!"
-#: engine/vibes_auth/serializers.py:253
+#: engine/vibes_auth/serializers.py:271
msgid "token_blacklisted"
msgstr "Jeton kara listeye alındı"
-#: engine/vibes_auth/serializers.py:258
+#: engine/vibes_auth/serializers.py:276
msgid "invalid token"
msgstr "Geçersiz belirteç"
-#: engine/vibes_auth/serializers.py:268
+#: engine/vibes_auth/serializers.py:286
msgid "no user uuid claim present in token"
msgstr "Belirteçte kullanıcı uuid talebi yok"
-#: engine/vibes_auth/serializers.py:270
+#: engine/vibes_auth/serializers.py:288
msgid "user does not exist"
msgstr "Kullanıcı mevcut değil"
@@ -558,7 +559,7 @@ msgstr "{settings.PROJECT_NAME} | Hesabı Etkinleştir"
msgid "{settings.PROJECT_NAME} | Reset Password"
msgstr "{settings.PROJECT_NAME} | Şifreyi Sıfırla"
-#: engine/vibes_auth/validators.py:13
+#: engine/vibes_auth/validators.py:15
msgid ""
"invalid phone number format. the number must be entered in the format: "
"\"+999999999\". up to 15 digits allowed."
@@ -566,7 +567,7 @@ msgstr ""
"Geçersiz telefon numarası biçimi. Numara şu formatta girilmelidir: "
"\"+999999999\". En fazla 15 haneye izin verilir."
-#: engine/vibes_auth/views.py:30
+#: engine/vibes_auth/views.py:34
msgid ""
"Represents a view for getting a pair of access and refresh tokens and user's "
"data. This view manages the process of handling token-based authentication "
@@ -581,7 +582,7 @@ msgstr ""
"token görünümünün üzerine inşa edilmiştir ve kaba kuvvet saldırılarına karşı "
"koruma sağlamak için uygun hız sınırlaması sağlar."
-#: engine/vibes_auth/views.py:52
+#: engine/vibes_auth/views.py:58
msgid ""
"Handles refreshing of tokens for authentication purposes. This class is used "
"to provide functionality for token refresh operations as part of an "
@@ -596,7 +597,7 @@ msgstr ""
"yenileme girdilerini doğrulamak ve uygun çıktıları üretmek için ilişkili "
"serileştiriciye dayanır."
-#: engine/vibes_auth/views.py:75
+#: engine/vibes_auth/views.py:83
msgid ""
"Represents a view for verifying JSON Web Tokens (JWT) using specific "
"serialization and validation logic. "
@@ -604,7 +605,7 @@ msgstr ""
"Belirli serileştirme ve doğrulama mantığını kullanarak JSON Web "
"Belirteçlerini (JWT) doğrulamaya yönelik bir görünümü temsil eder."
-#: engine/vibes_auth/views.py:92
+#: engine/vibes_auth/views.py:103
msgid "the token is invalid"
msgstr "Belirteç geçersiz"
@@ -622,10 +623,10 @@ msgstr ""
"öğeleri birleştirme gibi özel eylemleri yöneten bir dizi eylem sağlar. Bu "
"sınıf, sağlam API kullanımı için mixin'leri ve GenericViewSet'i genişletir."
-#: engine/vibes_auth/viewsets.py:99
+#: engine/vibes_auth/viewsets.py:113
msgid "password reset successfully"
msgstr "Şifre başarıyla sıfırlandı!"
-#: engine/vibes_auth/viewsets.py:132
+#: engine/vibes_auth/viewsets.py:161
msgid "account already activated!"
msgstr "Hesabı zaten etkinleştirdiniz..."
diff --git a/engine/vibes_auth/locale/vi_VN/LC_MESSAGES/django.po b/engine/vibes_auth/locale/vi_VN/LC_MESSAGES/django.po
index 057dff60..2ea792a1 100644
--- a/engine/vibes_auth/locale/vi_VN/LC_MESSAGES/django.po
+++ b/engine/vibes_auth/locale/vi_VN/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -14,7 +14,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: engine/vibes_auth/admin.py:51 engine/vibes_auth/admin.py:52
-#: engine/vibes_auth/graphene/object_types.py:46
+#: engine/vibes_auth/graphene/object_types.py:54
msgid "balance"
msgstr "Cân bằng"
@@ -22,7 +22,7 @@ msgstr "Cân bằng"
msgid "order"
msgstr "Đặt hàng"
-#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:44
+#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:51
msgid "orders"
msgstr "Đơn hàng"
@@ -30,7 +30,7 @@ msgstr "Đơn hàng"
msgid "personal info"
msgstr "Thông tin cá nhân"
-#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:43
+#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:50
msgid "permissions"
msgstr "Quyền"
@@ -42,15 +42,15 @@ msgstr "Các ngày quan trọng"
msgid "additional info"
msgstr "Thông tin bổ sung"
-#: engine/vibes_auth/admin.py:128
+#: engine/vibes_auth/admin.py:135
msgid "You cannot jump over your head!"
msgstr "Bạn không thể nhảy qua đầu mình!"
-#: engine/vibes_auth/admin.py:160
+#: engine/vibes_auth/admin.py:167
msgid "Close selected threads"
msgstr "Đóng các chủ đề đã chọn"
-#: engine/vibes_auth/admin.py:164
+#: engine/vibes_auth/admin.py:171
msgid "Open selected threads"
msgstr "Mở các chủ đề đã chọn"
@@ -82,7 +82,7 @@ msgstr "Hệ thống"
msgid "User messages entrypoint"
msgstr "Điểm nhập tin nhắn của người dùng"
-#: engine/vibes_auth/docs/drf/messaging.py:18
+#: engine/vibes_auth/docs/drf/messaging.py:19
msgid ""
"Anonymous or authenticated non-staff users send messages. Also supports "
"action=ping."
@@ -90,11 +90,11 @@ msgstr ""
"Người dùng ẩn danh hoặc đã xác thực nhưng không phải nhân viên có thể gửi "
"tin nhắn. Cũng hỗ trợ tham số action=ping."
-#: engine/vibes_auth/docs/drf/messaging.py:28
+#: engine/vibes_auth/docs/drf/messaging.py:30
msgid "Staff inbox control"
msgstr "Quản lý hộp thư đến của nhân viên"
-#: engine/vibes_auth/docs/drf/messaging.py:29
+#: engine/vibes_auth/docs/drf/messaging.py:32
msgid ""
"Staff-only actions: list_open, assign, reply, close, ping. Unified event "
"payloads are emitted."
@@ -102,11 +102,11 @@ msgstr ""
"Các hành động dành riêng cho nhân viên: list_open, assign, reply, close, "
"ping. Các gói sự kiện thống nhất được phát ra."
-#: engine/vibes_auth/docs/drf/messaging.py:39
+#: engine/vibes_auth/docs/drf/messaging.py:43
msgid "Per-thread staff channel"
msgstr "Kênh nhân viên theo từng luồng"
-#: engine/vibes_auth/docs/drf/messaging.py:40
+#: engine/vibes_auth/docs/drf/messaging.py:44
msgid "Reply, close, and ping within a specific thread."
msgstr "Trả lời, đóng và nhắc nhở trong một chủ đề cụ thể."
@@ -134,7 +134,7 @@ msgstr "Xác minh token"
msgid "Verify a token (refresh or access)."
msgstr "Xác minh token (cập nhật hoặc truy cập)."
-#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90
+#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:100
msgid "the token is valid"
msgstr "Token này hợp lệ"
@@ -171,9 +171,9 @@ msgid "confirm a user's password reset"
msgstr "Xác nhận việc đặt lại mật khẩu của người dùng"
#: engine/vibes_auth/docs/drf/viewsets.py:87
-#: engine/vibes_auth/graphene/mutations.py:317
-#: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101
-#: engine/vibes_auth/viewsets.py:84
+#: engine/vibes_auth/graphene/mutations.py:345
+#: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/viewsets.py:94
msgid "passwords do not match"
msgstr "Mật khẩu không khớp."
@@ -181,64 +181,65 @@ msgstr "Mật khẩu không khớp."
msgid "activate a user's account"
msgstr "Kích hoạt tài khoản của người dùng"
-#: engine/vibes_auth/docs/drf/viewsets.py:99
+#: engine/vibes_auth/docs/drf/viewsets.py:101
msgid "activation link is invalid or account already activated"
msgstr "Liên kết kích hoạt không hợp lệ hoặc tài khoản đã được kích hoạt."
-#: engine/vibes_auth/docs/drf/viewsets.py:107
+#: engine/vibes_auth/docs/drf/viewsets.py:111
msgid "merge client-stored recently viewed products"
msgstr ""
"Ghép các sản phẩm đã xem gần đây được lưu trữ trên thiết bị của khách hàng"
-#: engine/vibes_auth/graphene/mutations.py:44
+#: engine/vibes_auth/graphene/mutations.py:47
msgid "the user's b64-encoded uuid who referred the new user to us."
msgstr ""
"Mã UUID được mã hóa bằng B64 của người dùng đã giới thiệu người dùng mới cho "
"chúng tôi."
-#: engine/vibes_auth/graphene/mutations.py:64
+#: engine/vibes_auth/graphene/mutations.py:69
msgid "password too weak"
msgstr "Mật khẩu quá yếu."
-#: engine/vibes_auth/graphene/mutations.py:119
+#: engine/vibes_auth/graphene/mutations.py:129
msgid "malformed email"
msgstr "Email không hợp lệ"
-#: engine/vibes_auth/graphene/mutations.py:126
-#: engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/graphene/mutations.py:141
+#: engine/vibes_auth/serializers.py:117
#, python-brace-format
msgid "malformed phone number: {phone_number}"
msgstr "Số điện thoại không hợp lệ: {phone_number}!"
-#: engine/vibes_auth/graphene/mutations.py:148
+#: engine/vibes_auth/graphene/mutations.py:166
#, python-brace-format
msgid "Invalid attribute format: {attribute_pair}"
msgstr "Định dạng thuộc tính không hợp lệ: {attribute_pair}!"
-#: engine/vibes_auth/graphene/mutations.py:162
+#: engine/vibes_auth/graphene/mutations.py:183
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr "{name} không tồn tại: {uuid}!"
-#: engine/vibes_auth/graphene/mutations.py:270
-#: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146
+#: engine/vibes_auth/graphene/mutations.py:298
+#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180
msgid "activation link is invalid!"
msgstr "Liên kết kích hoạt không hợp lệ!"
-#: engine/vibes_auth/graphene/mutations.py:273
+#: engine/vibes_auth/graphene/mutations.py:301
msgid "account already activated..."
msgstr "Tài khoản đã được kích hoạt..."
-#: engine/vibes_auth/graphene/mutations.py:280
-#: engine/vibes_auth/graphene/mutations.py:336
+#: engine/vibes_auth/graphene/mutations.py:308
+#: engine/vibes_auth/graphene/mutations.py:370
msgid "something went wrong: {e!s}"
msgstr "Có sự cố xảy ra: {e!s}"
-#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95
+#: engine/vibes_auth/graphene/mutations.py:352
+#: engine/vibes_auth/viewsets.py:106
msgid "token is invalid!"
msgstr "Token không hợp lệ!"
-#: engine/vibes_auth/graphene/object_types.py:40
+#: engine/vibes_auth/graphene/object_types.py:46
msgid ""
"the products this user has viewed most recently (max 48), in reverse‐"
"chronological order"
@@ -246,24 +247,24 @@ msgstr ""
"Các sản phẩm mà người dùng này đã xem gần đây nhất (tối đa 48), theo thứ tự "
"thời gian ngược."
-#: engine/vibes_auth/graphene/object_types.py:42
-#: engine/vibes_auth/models.py:185
+#: engine/vibes_auth/graphene/object_types.py:49
+#: engine/vibes_auth/models.py:209
msgid "groups"
msgstr "Nhóm"
-#: engine/vibes_auth/graphene/object_types.py:45
+#: engine/vibes_auth/graphene/object_types.py:52
msgid "wishlist"
msgstr "Danh sách mong muốn"
-#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:70
+#: engine/vibes_auth/graphene/object_types.py:56 engine/vibes_auth/models.py:70
msgid "avatar"
msgstr "Avatar"
-#: engine/vibes_auth/graphene/object_types.py:48
+#: engine/vibes_auth/graphene/object_types.py:58
msgid "attributes may be used to store custom data"
msgstr "Các thuộc tính có thể được sử dụng để lưu trữ dữ liệu tùy chỉnh."
-#: engine/vibes_auth/graphene/object_types.py:50
+#: engine/vibes_auth/graphene/object_types.py:62
#, python-brace-format
msgid ""
"language is one of the {settings.LANGUAGES} with default {settings."
@@ -272,25 +273,25 @@ msgstr ""
"Ngôn ngữ là một trong những {settings.LANGUAGES} với mặc định {settings."
"LANGUAGE_CODE}"
-#: engine/vibes_auth/graphene/object_types.py:52
+#: engine/vibes_auth/graphene/object_types.py:66
msgid "address set"
msgstr "Địa chỉ"
-#: engine/vibes_auth/messaging/services.py:49
+#: engine/vibes_auth/messaging/services.py:52
msgid "Valid email is required for anonymous chats."
msgstr "Địa chỉ email hợp lệ là bắt buộc cho các cuộc trò chuyện ẩn danh."
-#: engine/vibes_auth/messaging/services.py:57
+#: engine/vibes_auth/messaging/services.py:65
msgid "Message must be 1..1028 characters."
msgstr "Thông điệp phải có độ dài từ 1 đến 1028 ký tự."
-#: engine/vibes_auth/messaging/services.py:93
+#: engine/vibes_auth/messaging/services.py:105
msgid "We're searching for the operator to answer you already, hold by!"
msgstr ""
"Chúng tôi đang tìm kiếm nhân viên tổng đài để trả lời cho bạn, xin vui lòng "
"chờ một lát!"
-#: engine/vibes_auth/messaging/services.py:136
+#: engine/vibes_auth/messaging/services.py:152
msgid "Assignee must be a staff user."
msgstr "Người được giao nhiệm vụ phải là người dùng nhân viên."
@@ -360,72 +361,72 @@ msgstr "Hủy chọn tùy chọn này thay vì xóa tài khoản."
msgid "is_subscribed"
msgstr "Đã đăng ký"
-#: engine/vibes_auth/models.py:87
+#: engine/vibes_auth/models.py:88
msgid "user's newsletter subscription status"
msgstr "Tình trạng đăng ký bản tin của người dùng"
-#: engine/vibes_auth/models.py:90
+#: engine/vibes_auth/models.py:92
msgid "activation token"
msgstr "Mã kích hoạt"
-#: engine/vibes_auth/models.py:94
+#: engine/vibes_auth/models.py:101
msgid "attributes"
msgstr "Thuộc tính"
-#: engine/vibes_auth/models.py:133
+#: engine/vibes_auth/models.py:141
msgid "user"
msgstr "Người dùng"
-#: engine/vibes_auth/models.py:134
+#: engine/vibes_auth/models.py:142
msgid "users"
msgstr "Người dùng"
-#: engine/vibes_auth/models.py:139
+#: engine/vibes_auth/models.py:149
msgid "For anonymous threads"
msgstr "Đối với các chủ đề ẩn danh"
-#: engine/vibes_auth/models.py:153
+#: engine/vibes_auth/models.py:173
msgid "Chat thread"
msgstr "Dòng trò chuyện"
-#: engine/vibes_auth/models.py:154
+#: engine/vibes_auth/models.py:174
msgid "Chat threads"
msgstr "Các chuỗi trò chuyện"
-#: engine/vibes_auth/models.py:159
+#: engine/vibes_auth/models.py:180
msgid "provide user or email for anonymous thread."
msgstr ""
"Cung cấp tên người dùng hoặc địa chỉ email cho chuỗi thảo luận ẩn danh."
-#: engine/vibes_auth/models.py:161
+#: engine/vibes_auth/models.py:183
msgid "assignee must be a staff user."
msgstr "Người được giao nhiệm vụ phải là người dùng nhân viên."
-#: engine/vibes_auth/models.py:177
+#: engine/vibes_auth/models.py:201
msgid "Chat message"
msgstr "Tin nhắn trò chuyện"
-#: engine/vibes_auth/models.py:178
+#: engine/vibes_auth/models.py:202
msgid "Chat messages"
msgstr "Tin nhắn trò chuyện"
-#: engine/vibes_auth/models.py:184
+#: engine/vibes_auth/models.py:208
msgid "group"
msgstr "Nhóm"
-#: engine/vibes_auth/models.py:191
+#: engine/vibes_auth/models.py:215
msgid "outstanding token"
msgstr "Token xuất sắc"
-#: engine/vibes_auth/models.py:192
+#: engine/vibes_auth/models.py:216
msgid "outstanding tokens"
msgstr "Token xuất sắc"
-#: engine/vibes_auth/models.py:198
+#: engine/vibes_auth/models.py:222
msgid "blacklisted token"
msgstr "Token bị đưa vào danh sách đen"
-#: engine/vibes_auth/models.py:199
+#: engine/vibes_auth/models.py:223
msgid "blacklisted tokens"
msgstr "Các token bị đưa vào danh sách đen"
@@ -433,37 +434,37 @@ msgstr "Các token bị đưa vào danh sách đen"
msgid "attributes must be a dictionary"
msgstr "`attributes` phải là một từ điển."
-#: engine/vibes_auth/serializers.py:93
+#: engine/vibes_auth/serializers.py:97
msgid "business identificator is required when registering as a business"
msgstr "Mã định danh doanh nghiệp là bắt buộc khi đăng ký kinh doanh."
-#: engine/vibes_auth/serializers.py:113
+#: engine/vibes_auth/serializers.py:127
#, python-brace-format
msgid "malformed email: {email}"
msgstr "Email không hợp lệ: {email}"
-#: engine/vibes_auth/serializers.py:134 engine/vibes_auth/serializers.py:159
-#: engine/vibes_auth/serializers.py:182 engine/vibes_auth/serializers.py:192
+#: engine/vibes_auth/serializers.py:150 engine/vibes_auth/serializers.py:175
+#: engine/vibes_auth/serializers.py:198 engine/vibes_auth/serializers.py:210
msgid "no active account"
msgstr "Không tìm thấy tài khoản hoạt động."
-#: engine/vibes_auth/serializers.py:169
+#: engine/vibes_auth/serializers.py:185
msgid "must set token_class attribute on class."
msgstr "Phải đặt thuộc tính token_class cho lớp!"
-#: engine/vibes_auth/serializers.py:253
+#: engine/vibes_auth/serializers.py:271
msgid "token_blacklisted"
msgstr "Token bị đưa vào danh sách đen"
-#: engine/vibes_auth/serializers.py:258
+#: engine/vibes_auth/serializers.py:276
msgid "invalid token"
msgstr "Token không hợp lệ"
-#: engine/vibes_auth/serializers.py:268
+#: engine/vibes_auth/serializers.py:286
msgid "no user uuid claim present in token"
msgstr "Không có yêu cầu UUID của người dùng trong token."
-#: engine/vibes_auth/serializers.py:270
+#: engine/vibes_auth/serializers.py:288
msgid "user does not exist"
msgstr "Người dùng không tồn tại"
@@ -559,7 +560,7 @@ msgstr "{settings.PROJECT_NAME} | Kích hoạt tài khoản"
msgid "{settings.PROJECT_NAME} | Reset Password"
msgstr "{settings.PROJECT_NAME} | Đặt lại mật khẩu"
-#: engine/vibes_auth/validators.py:13
+#: engine/vibes_auth/validators.py:15
msgid ""
"invalid phone number format. the number must be entered in the format: "
"\"+999999999\". up to 15 digits allowed."
@@ -567,7 +568,7 @@ msgstr ""
"Định dạng số điện thoại không hợp lệ. Số điện thoại phải được nhập theo định "
"dạng: \"+999999999\". Cho phép tối đa 15 chữ số."
-#: engine/vibes_auth/views.py:30
+#: engine/vibes_auth/views.py:34
msgid ""
"Represents a view for getting a pair of access and refresh tokens and user's "
"data. This view manages the process of handling token-based authentication "
@@ -582,7 +583,7 @@ msgstr ""
"giao diện token cơ sở và đảm bảo giới hạn tốc độ thích hợp để bảo vệ khỏi "
"các cuộc tấn công dò mật khẩu."
-#: engine/vibes_auth/views.py:52
+#: engine/vibes_auth/views.py:58
msgid ""
"Handles refreshing of tokens for authentication purposes. This class is used "
"to provide functionality for token refresh operations as part of an "
@@ -597,7 +598,7 @@ msgstr ""
"serializer liên quan để xác thực các đầu vào làm mới token và tạo ra các đầu "
"ra phù hợp."
-#: engine/vibes_auth/views.py:75
+#: engine/vibes_auth/views.py:83
msgid ""
"Represents a view for verifying JSON Web Tokens (JWT) using specific "
"serialization and validation logic. "
@@ -605,7 +606,7 @@ msgstr ""
"Đại diện cho một giao diện dùng để xác minh JSON Web Tokens (JWT) bằng cách "
"sử dụng logic serialization và xác thực cụ thể."
-#: engine/vibes_auth/views.py:92
+#: engine/vibes_auth/views.py:103
msgid "the token is invalid"
msgstr "Token không hợp lệ"
@@ -623,10 +624,10 @@ msgstr ""
"và hợp nhất các mục đã xem gần đây. Lớp này mở rộng các mixin và "
"GenericViewSet để xử lý API một cách mạnh mẽ."
-#: engine/vibes_auth/viewsets.py:99
+#: engine/vibes_auth/viewsets.py:113
msgid "password reset successfully"
msgstr "Mật khẩu đã được đặt lại thành công!"
-#: engine/vibes_auth/viewsets.py:132
+#: engine/vibes_auth/viewsets.py:161
msgid "account already activated!"
msgstr "Bạn đã kích hoạt tài khoản..."
diff --git a/engine/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.po b/engine/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.po
index 85587672..f2f5f802 100644
--- a/engine/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.po
+++ b/engine/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: EVIBES 2025.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
+"POT-Creation-Date: 2025-12-18 17:19+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV \n"
"Language-Team: BRITISH ENGLISH \n"
@@ -14,7 +14,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: engine/vibes_auth/admin.py:51 engine/vibes_auth/admin.py:52
-#: engine/vibes_auth/graphene/object_types.py:46
+#: engine/vibes_auth/graphene/object_types.py:54
msgid "balance"
msgstr "平衡"
@@ -22,7 +22,7 @@ msgstr "平衡"
msgid "order"
msgstr "订购"
-#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:44
+#: engine/vibes_auth/admin.py:61 engine/vibes_auth/graphene/object_types.py:51
msgid "orders"
msgstr "订单"
@@ -30,7 +30,7 @@ msgstr "订单"
msgid "personal info"
msgstr "个人信息"
-#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:43
+#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:50
msgid "permissions"
msgstr "权限"
@@ -42,15 +42,15 @@ msgstr "重要日期"
msgid "additional info"
msgstr "其他信息"
-#: engine/vibes_auth/admin.py:128
+#: engine/vibes_auth/admin.py:135
msgid "You cannot jump over your head!"
msgstr "你不能跳过你的头!"
-#: engine/vibes_auth/admin.py:160
+#: engine/vibes_auth/admin.py:167
msgid "Close selected threads"
msgstr "关闭选定的线程"
-#: engine/vibes_auth/admin.py:164
+#: engine/vibes_auth/admin.py:171
msgid "Open selected threads"
msgstr "打开选定的线程"
@@ -82,17 +82,17 @@ msgstr "系统"
msgid "User messages entrypoint"
msgstr "用户信息入口"
-#: engine/vibes_auth/docs/drf/messaging.py:18
+#: engine/vibes_auth/docs/drf/messaging.py:19
msgid ""
"Anonymous or authenticated non-staff users send messages. Also supports "
"action=ping."
msgstr "匿名或通过身份验证的非工作人员用户可发送信息。还支持 action=ping。"
-#: engine/vibes_auth/docs/drf/messaging.py:28
+#: engine/vibes_auth/docs/drf/messaging.py:30
msgid "Staff inbox control"
msgstr "员工收件箱控制"
-#: engine/vibes_auth/docs/drf/messaging.py:29
+#: engine/vibes_auth/docs/drf/messaging.py:32
msgid ""
"Staff-only actions: list_open, assign, reply, close, ping. Unified event "
"payloads are emitted."
@@ -100,11 +100,11 @@ msgstr ""
"工作人员专用操作:list_open、assign、reply、close、ping。发出统一的事件有效载"
"荷。"
-#: engine/vibes_auth/docs/drf/messaging.py:39
+#: engine/vibes_auth/docs/drf/messaging.py:43
msgid "Per-thread staff channel"
msgstr "每个主题的工作人员频道"
-#: engine/vibes_auth/docs/drf/messaging.py:40
+#: engine/vibes_auth/docs/drf/messaging.py:44
msgid "Reply, close, and ping within a specific thread."
msgstr "在特定主题内回复、关闭和 ping。"
@@ -132,7 +132,7 @@ msgstr "验证令牌"
msgid "Verify a token (refresh or access)."
msgstr "验证令牌(刷新或访问)。"
-#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:90
+#: engine/vibes_auth/docs/drf/views.py:71 engine/vibes_auth/views.py:100
msgid "the token is valid"
msgstr "令牌有效"
@@ -169,9 +169,9 @@ msgid "confirm a user's password reset"
msgstr "确认用户密码重置"
#: engine/vibes_auth/docs/drf/viewsets.py:87
-#: engine/vibes_auth/graphene/mutations.py:317
-#: engine/vibes_auth/serializers.py:97 engine/vibes_auth/serializers.py:101
-#: engine/vibes_auth/viewsets.py:84
+#: engine/vibes_auth/graphene/mutations.py:345
+#: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/viewsets.py:94
msgid "passwords do not match"
msgstr "密码不匹配"
@@ -179,107 +179,108 @@ msgstr "密码不匹配"
msgid "activate a user's account"
msgstr "激活用户帐户"
-#: engine/vibes_auth/docs/drf/viewsets.py:99
+#: engine/vibes_auth/docs/drf/viewsets.py:101
msgid "activation link is invalid or account already activated"
msgstr "激活链接无效或账户已激活"
-#: engine/vibes_auth/docs/drf/viewsets.py:107
+#: engine/vibes_auth/docs/drf/viewsets.py:111
msgid "merge client-stored recently viewed products"
msgstr "合并客户存储的最近查看的产品"
-#: engine/vibes_auth/graphene/mutations.py:44
+#: engine/vibes_auth/graphene/mutations.py:47
msgid "the user's b64-encoded uuid who referred the new user to us."
msgstr "将新用户推荐给我们的用户的 b64-encoded uuid。"
-#: engine/vibes_auth/graphene/mutations.py:64
+#: engine/vibes_auth/graphene/mutations.py:69
msgid "password too weak"
msgstr "密码太弱"
-#: engine/vibes_auth/graphene/mutations.py:119
+#: engine/vibes_auth/graphene/mutations.py:129
msgid "malformed email"
msgstr "畸形电子邮件"
-#: engine/vibes_auth/graphene/mutations.py:126
-#: engine/vibes_auth/serializers.py:107
+#: engine/vibes_auth/graphene/mutations.py:141
+#: engine/vibes_auth/serializers.py:117
#, python-brace-format
msgid "malformed phone number: {phone_number}"
msgstr "畸形电话号码:{phone_number}!"
-#: engine/vibes_auth/graphene/mutations.py:148
+#: engine/vibes_auth/graphene/mutations.py:166
#, python-brace-format
msgid "Invalid attribute format: {attribute_pair}"
msgstr "属性格式无效:{attribute_pair}!"
-#: engine/vibes_auth/graphene/mutations.py:162
+#: engine/vibes_auth/graphene/mutations.py:183
#, python-brace-format
msgid "{name} does not exist: {uuid}"
msgstr "{name} 不存在:{uuid}!"
-#: engine/vibes_auth/graphene/mutations.py:270
-#: engine/vibes_auth/viewsets.py:127 engine/vibes_auth/viewsets.py:146
+#: engine/vibes_auth/graphene/mutations.py:298
+#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180
msgid "activation link is invalid!"
msgstr "激活链接无效!"
-#: engine/vibes_auth/graphene/mutations.py:273
+#: engine/vibes_auth/graphene/mutations.py:301
msgid "account already activated..."
msgstr "帐户已激活..."
-#: engine/vibes_auth/graphene/mutations.py:280
-#: engine/vibes_auth/graphene/mutations.py:336
+#: engine/vibes_auth/graphene/mutations.py:308
+#: engine/vibes_auth/graphene/mutations.py:370
msgid "something went wrong: {e!s}"
msgstr "出了问题:{e!s}"
-#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95
+#: engine/vibes_auth/graphene/mutations.py:352
+#: engine/vibes_auth/viewsets.py:106
msgid "token is invalid!"
msgstr "令牌无效!"
-#: engine/vibes_auth/graphene/object_types.py:40
+#: engine/vibes_auth/graphene/object_types.py:46
msgid ""
"the products this user has viewed most recently (max 48), in reverse‐"
"chronological order"
msgstr "该用户最近查看过的产品(最多 48 个),按倒序排列。"
-#: engine/vibes_auth/graphene/object_types.py:42
-#: engine/vibes_auth/models.py:185
+#: engine/vibes_auth/graphene/object_types.py:49
+#: engine/vibes_auth/models.py:209
msgid "groups"
msgstr "组别"
-#: engine/vibes_auth/graphene/object_types.py:45
+#: engine/vibes_auth/graphene/object_types.py:52
msgid "wishlist"
msgstr "愿望清单"
-#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:70
+#: engine/vibes_auth/graphene/object_types.py:56 engine/vibes_auth/models.py:70
msgid "avatar"
msgstr "阿凡达"
-#: engine/vibes_auth/graphene/object_types.py:48
+#: engine/vibes_auth/graphene/object_types.py:58
msgid "attributes may be used to store custom data"
msgstr "属性可用于存储自定义数据"
-#: engine/vibes_auth/graphene/object_types.py:50
+#: engine/vibes_auth/graphene/object_types.py:62
#, python-brace-format
msgid ""
"language is one of the {settings.LANGUAGES} with default {settings."
"LANGUAGE_CODE}"
msgstr "语言是{settings.LANGUAGES}之一,默认为{settings.LANGUAGE_CODE}。"
-#: engine/vibes_auth/graphene/object_types.py:52
+#: engine/vibes_auth/graphene/object_types.py:66
msgid "address set"
msgstr "地址"
-#: engine/vibes_auth/messaging/services.py:49
+#: engine/vibes_auth/messaging/services.py:52
msgid "Valid email is required for anonymous chats."
msgstr "匿名聊天需要有效的电子邮件。"
-#: engine/vibes_auth/messaging/services.py:57
+#: engine/vibes_auth/messaging/services.py:65
msgid "Message must be 1..1028 characters."
msgstr "信息必须为 1...1028 个字符。"
-#: engine/vibes_auth/messaging/services.py:93
+#: engine/vibes_auth/messaging/services.py:105
msgid "We're searching for the operator to answer you already, hold by!"
msgstr "我们正在寻找接线员,请稍候!"
-#: engine/vibes_auth/messaging/services.py:136
+#: engine/vibes_auth/messaging/services.py:152
msgid "Assignee must be a staff user."
msgstr "受让人必须是工作人员用户。"
@@ -346,71 +347,71 @@ msgstr "取消选择此选项,而不是删除账户"
msgid "is_subscribed"
msgstr "已订阅"
-#: engine/vibes_auth/models.py:87
+#: engine/vibes_auth/models.py:88
msgid "user's newsletter subscription status"
msgstr "用户的通讯订阅状态"
-#: engine/vibes_auth/models.py:90
+#: engine/vibes_auth/models.py:92
msgid "activation token"
msgstr "激活令牌"
-#: engine/vibes_auth/models.py:94
+#: engine/vibes_auth/models.py:101
msgid "attributes"
msgstr "属性"
-#: engine/vibes_auth/models.py:133
+#: engine/vibes_auth/models.py:141
msgid "user"
msgstr "用户"
-#: engine/vibes_auth/models.py:134
+#: engine/vibes_auth/models.py:142
msgid "users"
msgstr "用户"
-#: engine/vibes_auth/models.py:139
+#: engine/vibes_auth/models.py:149
msgid "For anonymous threads"
msgstr "匿名主题"
-#: engine/vibes_auth/models.py:153
+#: engine/vibes_auth/models.py:173
msgid "Chat thread"
msgstr "聊天主题"
-#: engine/vibes_auth/models.py:154
+#: engine/vibes_auth/models.py:174
msgid "Chat threads"
msgstr "聊天主题"
-#: engine/vibes_auth/models.py:159
+#: engine/vibes_auth/models.py:180
msgid "provide user or email for anonymous thread."
msgstr "为匿名主题提供用户或电子邮件。"
-#: engine/vibes_auth/models.py:161
+#: engine/vibes_auth/models.py:183
msgid "assignee must be a staff user."
msgstr "受让人必须是工作人员用户。"
-#: engine/vibes_auth/models.py:177
+#: engine/vibes_auth/models.py:201
msgid "Chat message"
msgstr "聊天信息"
-#: engine/vibes_auth/models.py:178
+#: engine/vibes_auth/models.py:202
msgid "Chat messages"
msgstr "聊天信息"
-#: engine/vibes_auth/models.py:184
+#: engine/vibes_auth/models.py:208
msgid "group"
msgstr "组别"
-#: engine/vibes_auth/models.py:191
+#: engine/vibes_auth/models.py:215
msgid "outstanding token"
msgstr "出色的代币"
-#: engine/vibes_auth/models.py:192
+#: engine/vibes_auth/models.py:216
msgid "outstanding tokens"
msgstr "未兑代币"
-#: engine/vibes_auth/models.py:198
+#: engine/vibes_auth/models.py:222
msgid "blacklisted token"
msgstr "黑名单令牌"
-#: engine/vibes_auth/models.py:199
+#: engine/vibes_auth/models.py:223
msgid "blacklisted tokens"
msgstr "黑名单令牌"
@@ -418,37 +419,37 @@ msgstr "黑名单令牌"
msgid "attributes must be a dictionary"
msgstr "属性 \"必须是一个字典"
-#: engine/vibes_auth/serializers.py:93
+#: engine/vibes_auth/serializers.py:97
msgid "business identificator is required when registering as a business"
msgstr "注册为企业时需要使用企业标识符"
-#: engine/vibes_auth/serializers.py:113
+#: engine/vibes_auth/serializers.py:127
#, python-brace-format
msgid "malformed email: {email}"
msgstr "畸形电子邮件:{email}"
-#: engine/vibes_auth/serializers.py:134 engine/vibes_auth/serializers.py:159
-#: engine/vibes_auth/serializers.py:182 engine/vibes_auth/serializers.py:192
+#: engine/vibes_auth/serializers.py:150 engine/vibes_auth/serializers.py:175
+#: engine/vibes_auth/serializers.py:198 engine/vibes_auth/serializers.py:210
msgid "no active account"
msgstr "未找到活动账户"
-#: engine/vibes_auth/serializers.py:169
+#: engine/vibes_auth/serializers.py:185
msgid "must set token_class attribute on class."
msgstr "必须在类上设置 token_class 属性!"
-#: engine/vibes_auth/serializers.py:253
+#: engine/vibes_auth/serializers.py:271
msgid "token_blacklisted"
msgstr "令牌被列入黑名单"
-#: engine/vibes_auth/serializers.py:258
+#: engine/vibes_auth/serializers.py:276
msgid "invalid token"
msgstr "无效令牌"
-#: engine/vibes_auth/serializers.py:268
+#: engine/vibes_auth/serializers.py:286
msgid "no user uuid claim present in token"
msgstr "令牌中没有用户 uuid 声明"
-#: engine/vibes_auth/serializers.py:270
+#: engine/vibes_auth/serializers.py:288
msgid "user does not exist"
msgstr "用户不存在"
@@ -544,14 +545,14 @@ msgstr "{settings.PROJECT_NAME}| 激活帐户"
msgid "{settings.PROJECT_NAME} | Reset Password"
msgstr "{settings.PROJECT_NAME}| 重置密码"
-#: engine/vibes_auth/validators.py:13
+#: engine/vibes_auth/validators.py:15
msgid ""
"invalid phone number format. the number must be entered in the format: "
"\"+999999999\". up to 15 digits allowed."
msgstr ""
"电话号码格式无效。电话号码必须按格式输入:\"+999999999\".最多允许 15 位数字。"
-#: engine/vibes_auth/views.py:30
+#: engine/vibes_auth/views.py:34
msgid ""
"Represents a view for getting a pair of access and refresh tokens and user's "
"data. This view manages the process of handling token-based authentication "
@@ -563,7 +564,7 @@ msgstr ""
"份验证的流程,客户端可使用提供的凭据获取一对 JWT 令牌(访问和刷新)。它建立在"
"基本令牌视图之上,并确保适当的速率限制,以防止暴力攻击。"
-#: engine/vibes_auth/views.py:52
+#: engine/vibes_auth/views.py:58
msgid ""
"Handles refreshing of tokens for authentication purposes. This class is used "
"to provide functionality for token refresh operations as part of an "
@@ -575,13 +576,13 @@ msgstr ""
"供功能。它能确保客户端在规定的速率限制内请求刷新令牌。视图依赖于相关的序列化"
"器来验证令牌刷新输入并产生适当的输出。"
-#: engine/vibes_auth/views.py:75
+#: engine/vibes_auth/views.py:83
msgid ""
"Represents a view for verifying JSON Web Tokens (JWT) using specific "
"serialization and validation logic. "
msgstr "代表使用特定序列化和验证逻辑验证 JSON Web 标记 (JWT) 的视图。"
-#: engine/vibes_auth/views.py:92
+#: engine/vibes_auth/views.py:103
msgid "the token is invalid"
msgstr "令牌无效"
@@ -598,10 +599,10 @@ msgstr ""
"操作,包括密码重置、上传头像、激活账户和合并最近查看的项目。该类对 mixins 和 "
"GenericViewSet 进行了扩展,以实现强大的 API 处理功能。"
-#: engine/vibes_auth/viewsets.py:99
+#: engine/vibes_auth/viewsets.py:113
msgid "password reset successfully"
msgstr "密码已重置成功!"
-#: engine/vibes_auth/viewsets.py:132
+#: engine/vibes_auth/viewsets.py:161
msgid "account already activated!"
msgstr "您已经激活了账户..."
diff --git a/engine/vibes_auth/messaging/auth.py b/engine/vibes_auth/messaging/auth.py
index 035843bb..f658efe5 100644
--- a/engine/vibes_auth/messaging/auth.py
+++ b/engine/vibes_auth/messaging/auth.py
@@ -36,7 +36,7 @@ class JWTAuthMiddleware(BaseMiddleware):
def __init__(self, token_str: str):
self.META = {"HTTP_X_EVIBES_AUTH": f"Bearer {token_str}"}
- user, _ = jwt_auth.authenticate(_Req(token)) # type: ignore[arg-type]
+ user, _ = jwt_auth.authenticate(_Req(token))
scope["user"] = user
return await super().__call__(scope, receive, send)
diff --git a/engine/vibes_auth/messaging/forwarders/telegram.py b/engine/vibes_auth/messaging/forwarders/telegram.py
index a9f1ae41..5e523e53 100644
--- a/engine/vibes_auth/messaging/forwarders/telegram.py
+++ b/engine/vibes_auth/messaging/forwarders/telegram.py
@@ -26,7 +26,7 @@ def _get_bot() -> Bot | None:
if not is_telegram_enabled():
logger.warning("Telegram forwarder disabled: missing aiogram or TELEGRAM_TOKEN")
return None
- return Bot(token=settings.TELEGRAM_TOKEN, parse_mode=ParseMode.HTML) # type: ignore[arg-type]
+ return Bot(token=settings.TELEGRAM_TOKEN, parse_mode=ParseMode.HTML)
def build_router() -> Router | None:
@@ -37,7 +37,7 @@ def build_router() -> Router | None:
router: Router = Router()
@router.message(Command("start"))
- async def cmd_start(message: types.Message): # type: ignore[valid-type]
+ async def cmd_start(message: types.Message):
parts = (message.text or "").split(maxsplit=1)
if len(parts) < 2:
await message.answer(
@@ -50,12 +50,12 @@ def build_router() -> Router | None:
def _link():
try:
retrieved_user = User.objects.get(activation_token=token)
- except User.DoesNotExist: # type: ignore[attr-defined]
+ except User.DoesNotExist:
return None
attrs = dict(retrieved_user.attributes or {})
- attrs["telegram_id"] = message.from_user.id if message.from_user else None # type: ignore[union-attr]
+ attrs["telegram_id"] = message.from_user.id if message.from_user else None
retrieved_user.attributes = attrs
- retrieved_user.save(update_fields=["attributes", "modified"]) # type: ignore[attr-defined]
+ retrieved_user.save(update_fields=["attributes", "modified"])
return retrieved_user
user = await asyncio.to_thread(_link)
@@ -65,8 +65,8 @@ def build_router() -> Router | None:
await message.answer("Your Telegram account has been linked successfully.")
@router.message(Command("unlink"))
- async def cmd_unlink(message: types.Message): # type: ignore[valid-type]
- tid = message.from_user.id if message.from_user else None # type: ignore[union-attr]
+ async def cmd_unlink(message: types.Message):
+ tid = message.from_user.id if message.from_user else None
if not tid:
await message.answer("Cannot unlink: no Telegram user id.")
return
@@ -83,7 +83,7 @@ def build_router() -> Router | None:
await message.answer("No linked account found.")
@router.message(Command("help"))
- async def cmd_help(message: types.Message): # type: ignore[valid-type]
+ async def cmd_help(message: types.Message):
await message.answer(
"Commands:\n"
"/start — link your account\n"
@@ -92,7 +92,7 @@ def build_router() -> Router | None:
)
@router.message()
- async def any_message(message: types.Message): # type: ignore[valid-type]
+ async def any_message(message: types.Message):
from engine.vibes_auth.messaging.services import (
send_message as svc_send_message,
)
@@ -106,7 +106,7 @@ def build_router() -> Router | None:
staff_user = User.objects.get(
attributes__telegram_id=tid, is_staff=True, is_active=True
)
- except User.DoesNotExist: # type: ignore[attr-defined]
+ except User.DoesNotExist:
return None, None, None
# group check
if not staff_user.groups.filter(name=USER_SUPPORT_GROUP_NAME).exists():
@@ -193,7 +193,7 @@ def install_aiohttp_webhook(app) -> None:
if not is_telegram_enabled():
logger.warning("Telegram forwarder not installed: disabled")
return
- dp = Dispatcher() # type: ignore[call-arg]
+ dp = Dispatcher()
router = build_router()
if router:
dp.include_router(router)
@@ -202,5 +202,5 @@ def install_aiohttp_webhook(app) -> None:
return
SimpleRequestHandler(dispatcher=dp, bot=bot).register(
app, path="/telegram/webhook/" + settings.TELEGRAM_TOKEN
- ) # type: ignore[arg-type]
+ )
logger.info("Telegram webhook handler installed on aiohttp app.")
diff --git a/engine/vibes_auth/messaging/services.py b/engine/vibes_auth/messaging/services.py
index 91427d9c..0c99e08c 100644
--- a/engine/vibes_auth/messaging/services.py
+++ b/engine/vibes_auth/messaging/services.py
@@ -103,7 +103,7 @@ def send_message(
def auto_reply(thread: ChatThread) -> None:
text = _("We're searching for the operator to answer you already, hold by!")
- msg = ChatMessage.objects.create( # type: ignore [misc]
+ msg = ChatMessage.objects.create(
thread=thread,
sender_type=SenderType.SYSTEM,
sender_user=None,
diff --git a/engine/vibes_auth/models.py b/engine/vibes_auth/models.py
index 7156b0c6..13df78d8 100644
--- a/engine/vibes_auth/models.py
+++ b/engine/vibes_auth/models.py
@@ -37,9 +37,9 @@ from engine.vibes_auth.managers import UserManager
from engine.vibes_auth.validators import validate_phone_number
-class User(AbstractUser, NiceModel): # type: ignore [django-manager-missing]
+class User(AbstractUser, NiceModel):
__doc__ = _(
- "Represents a User entity with customized fields and methods for extended functionality. " # type: ignore
+ "Represents a User entity with customized fields and methods for extended functionality. "
"This class extends the AbstractUser model and integrates additional features like "
"custom email login, validation methods, subscription status, verification, and "
"attributes storage. It also provides utilities for managing recently viewed items and "
@@ -62,9 +62,9 @@ class User(AbstractUser, NiceModel): # type: ignore [django-manager-missing]
validate_phone_number,
],
)
- username: None = None # type: ignore [assignment]
- first_name = CharField(_("first_name"), max_length=150, blank=True, null=True) # type: ignore [assignment]
- last_name = CharField(_("last_name"), max_length=150, blank=True, null=True) # type: ignore [assignment]
+ username: None = None
+ first_name = CharField(_("first_name"), max_length=150, blank=True, null=True)
+ last_name = CharField(_("last_name"), max_length=150, blank=True, null=True)
avatar = ImageField(
null=True,
verbose_name=_("avatar"),
@@ -106,7 +106,7 @@ class User(AbstractUser, NiceModel): # type: ignore [django-manager-missing]
USERNAME_FIELD = "email"
REQUIRED_FIELDS = []
# noinspection PyClassVar
- objects = UserManager() # type: ignore [misc, assignment]
+ objects = UserManager()
@cached_property
def avatar_url(self) -> str:
diff --git a/engine/vibes_auth/serializers.py b/engine/vibes_auth/serializers.py
index 1db4cc02..9876ce65 100644
--- a/engine/vibes_auth/serializers.py
+++ b/engine/vibes_auth/serializers.py
@@ -200,7 +200,7 @@ class TokenObtainPairSerializer(TokenObtainSerializer):
refresh = self.get_token(self.user)
data["refresh"] = str(refresh)
# noinspection PyUnresolvedReferences
- data["access"] = str(refresh.access_token) # type: ignore [attr-defined]
+ data["access"] = str(refresh.access_token)
data["user"] = (
UserSerializer(self.user).data if self.retrieve_user else self.user.pk
)
diff --git a/engine/vibes_auth/tests/test_drf.py b/engine/vibes_auth/tests/test_drf.py
index 74dc7495..4adaab28 100644
--- a/engine/vibes_auth/tests/test_drf.py
+++ b/engine/vibes_auth/tests/test_drf.py
@@ -1,5 +1,6 @@
from base64 import urlsafe_b64encode
from io import BytesIO
+from typing import Any, cast
from unittest.mock import patch
from django.contrib.auth.tokens import PasswordResetTokenGenerator
@@ -19,12 +20,17 @@ class DRFAuthViewsTests(TestCase):
self.client = APIClient()
def test_token_obtain_pair_success(self):
- user = User.objects.create_user(
- email="user@example.com", password="Str0ngPass!word", is_active=True
+ user: User = cast(
+ User,
+ cast(Any, User.objects).create_user(
+ email="user@example.com", password="Str0ngPass!word", is_active=True
+ ),
)
url = reverse("vibes_auth:token_create")
resp = self.client.post(
- url, {"email": user.email, "password": "Str0ngPass!word"}, format="json"
+ url,
+ {"email": cast(Any, user).email, "password": "Str0ngPass!word"},
+ format="json",
)
self.assertEqual(resp.status_code, status.HTTP_200_OK)
data = resp.json()
@@ -32,10 +38,10 @@ class DRFAuthViewsTests(TestCase):
self.assertTrue(data["access"], data)
self.assertIn("refresh", data, data)
self.assertTrue(data["refresh"], data)
- self.assertEqual(data["user"]["email"], user.email, data)
+ self.assertEqual(data["user"]["email"], cast(Any, user).email, data)
def test_token_obtain_pair_invalid_credentials(self):
- User.objects.create_user(
+ cast(Any, User.objects).create_user(
email="user@example.com", password="Str0ngPass!word", is_active=True
)
url = reverse("vibes_auth:token_create")
@@ -56,8 +62,11 @@ class DRFAuthViewsTests(TestCase):
self.assertEqual(resp.status_code, status.HTTP_429_TOO_MANY_REQUESTS)
def test_token_refresh_and_verify_flow(self):
- user = User.objects.create_user(
- email="user@example.com", password="Str0ngPass!word", is_active=True
+ user: User = cast(
+ User,
+ cast(Any, User.objects).create_user(
+ email="user@example.com", password="Str0ngPass!word", is_active=True
+ ),
)
tokens = RefreshToken.for_user(user)
@@ -72,7 +81,7 @@ class DRFAuthViewsTests(TestCase):
resp_verify = self.client.post(verify_url, {"token": access}, format="json")
self.assertEqual(resp_verify.status_code, status.HTTP_200_OK)
self.assertTrue(resp_verify.json()["token"])
- self.assertEqual(resp_verify.json()["user"]["email"], user.email)
+ self.assertEqual(resp_verify.json()["user"]["email"], cast(Any, user).email)
def test_token_verify_invalid_token(self):
verify_url = reverse("vibes_auth:token_verify")
@@ -96,35 +105,45 @@ class DRFAuthViewsTests(TestCase):
self.assertFalse(user.is_active)
activate_url = reverse("vibes_auth:users-activate")
- uidb64 = urlsafe_b64encode(str(user.uuid).encode()).decode()
- token_b64 = urlsafe_b64encode(str(user.activation_token).encode()).decode()
+ uidb64 = urlsafe_b64encode(str(cast(Any, user).uuid).encode()).decode()
+ token_b64 = urlsafe_b64encode(
+ str(cast(Any, user).activation_token).encode()
+ ).decode()
resp_act = self.client.post(
activate_url, {"uidb_64": uidb64, "token": token_b64}, format="json"
)
self.assertEqual(resp_act.status_code, status.HTTP_200_OK)
user.refresh_from_db()
- self.assertTrue(user.is_active and user.is_verified)
+ self.assertTrue(cast(Any, user).is_active and cast(Any, user).is_verified)
def test_reset_password_triggers_task(self):
- user = User.objects.create_user(
- email="user@example.com", password="Str0ngPass!word", is_active=True
+ user: User = cast(
+ User,
+ cast(Any, User.objects).create_user(
+ email="user@example.com", password="Str0ngPass!word", is_active=True
+ ),
)
with patch(
"engine.vibes_auth.viewsets.send_reset_password_email_task.delay"
) as mocked_delay:
url = reverse("vibes_auth:users-reset-password")
- resp = self.client.post(url, {"email": user.email}, format="json")
+ resp = self.client.post(
+ url, {"email": cast(Any, user).email}, format="json"
+ )
self.assertEqual(resp.status_code, status.HTTP_200_OK)
mocked_delay.assert_called_once()
def test_confirm_password_reset_success(self):
- user = User.objects.create_user(
- email="user@example.com", password="OldPass!123", is_active=True
+ user: User = cast(
+ User,
+ cast(Any, User.objects).create_user(
+ email="user@example.com", password="OldPass!123", is_active=True
+ ),
)
gen = PasswordResetTokenGenerator()
token = gen.make_token(user)
- uidb64 = urlsafe_b64encode(str(user.uuid).encode()).decode()
+ uidb64 = urlsafe_b64encode(str(cast(Any, user).uuid).encode()).decode()
url = reverse("vibes_auth:users-confirm-password-reset")
new_pass = "NewPass!12345"
@@ -141,23 +160,35 @@ class DRFAuthViewsTests(TestCase):
self.assertEqual(resp.status_code, status.HTTP_200_OK, resp.json())
obtain_url = reverse("vibes_auth:token_create")
r2 = self.client.post(
- obtain_url, {"email": user.email, "password": new_pass}, format="json"
+ obtain_url,
+ {"email": cast(Any, user).email, "password": new_pass},
+ format="json",
)
self.assertEqual(r2.status_code, status.HTTP_200_OK, resp.json())
def test_upload_avatar_permission_enforced(self):
- owner = User.objects.create_user(
- email="owner@example.com", password="Str0ngPass!word", is_active=True
+ owner: User = cast(
+ User,
+ cast(Any, User.objects).create_user(
+ email="owner@example.com", password="Str0ngPass!word", is_active=True
+ ),
)
- stranger = User.objects.create_user(
- email="stranger@example.com", password="Str0ngPass!word", is_active=True
+ stranger: User = cast(
+ User,
+ cast(Any, User.objects).create_user(
+ email="stranger@example.com",
+ password="Str0ngPass!word",
+ is_active=True,
+ ),
)
access = str(RefreshToken.for_user(stranger).access_token)
# noinspection PyUnresolvedReferences
- self.client.credentials(HTTP_X_EVIBES_AUTH=f"Bearer {access}")
+ cast(Any, self.client).credentials(HTTP_X_EVIBES_AUTH=f"Bearer {access}")
- url = reverse("vibes_auth:users-upload-avatar", kwargs={"pk": owner.pk})
+ url = reverse(
+ "vibes_auth:users-upload-avatar", kwargs={"pk": cast(Any, owner).pk}
+ )
file_content = BytesIO(b"fake image content")
file = SimpleUploadedFile(
"avatar.png", file_content.getvalue(), content_type="image/png"
@@ -166,17 +197,28 @@ class DRFAuthViewsTests(TestCase):
self.assertEqual(resp.status_code, status.HTTP_403_FORBIDDEN)
def test_merge_recently_viewed_permission_enforced(self):
- owner = User.objects.create_user(
- email="owner@example.com", password="Str0ngPass!word", is_active=True
+ owner: User = cast(
+ User,
+ cast(Any, User.objects).create_user(
+ email="owner@example.com", password="Str0ngPass!word", is_active=True
+ ),
)
- stranger = User.objects.create_user(
- email="stranger@example.com", password="Str0ngPass!word", is_active=True
+ stranger: User = cast(
+ User,
+ cast(Any, User.objects).create_user(
+ email="stranger@example.com",
+ password="Str0ngPass!word",
+ is_active=True,
+ ),
)
access = str(RefreshToken.for_user(stranger).access_token)
# noinspection PyUnresolvedReferences
- self.client.credentials(HTTP_X_EVIBES_AUTH=f"Bearer {access}")
+ cast(Any, self.client).credentials(HTTP_X_EVIBES_AUTH=f"Bearer {access}")
- url = reverse("vibes_auth:users-merge-recently-viewed", kwargs={"pk": owner.pk})
+ url = reverse(
+ "vibes_auth:users-merge-recently-viewed",
+ kwargs={"pk": cast(Any, owner).pk},
+ )
resp = self.client.put(url, {"product_uuids": []}, format="json")
self.assertEqual(resp.status_code, status.HTTP_403_FORBIDDEN)
diff --git a/engine/vibes_auth/tests/test_graphene.py b/engine/vibes_auth/tests/test_graphene.py
index 98f12667..62829541 100644
--- a/engine/vibes_auth/tests/test_graphene.py
+++ b/engine/vibes_auth/tests/test_graphene.py
@@ -1,5 +1,5 @@
import base64
-from typing import Any
+from typing import Any, cast
from django.test import TestCase
from django.urls import reverse
@@ -8,7 +8,7 @@ from engine.vibes_auth.models import User
class GraphQLAuthTests(TestCase):
- def graphql(self, query: str, variables: dict | None = None):
+ def graphql(self, query: str, variables: dict[str, Any] | None = None) -> Any:
url = reverse("graphql-platform")
payload: dict[str, Any] = {"query": query}
if variables:
@@ -18,8 +18,11 @@ class GraphQLAuthTests(TestCase):
return response.json()
def test_obtain_refresh_verify_jwt_via_graphql(self):
- user = User.objects.create_user(
- email="user@example.com", password="Str0ngPass!word", is_active=True
+ user = cast(
+ User,
+ cast(Any, User.objects).create_user(
+ email="user@example.com", password="Str0ngPass!word", is_active=True
+ ),
)
data = self.graphql(
@@ -35,7 +38,7 @@ class GraphQLAuthTests(TestCase):
)
self.assertNotIn("errors", data)
payload = data["data"]["obtainJwtToken"]
- self.assertEqual(payload["user"]["email"], user.email)
+ self.assertEqual(payload["user"]["email"], cast(Any, user).email)
refresh = payload["refreshToken"]
data2 = self.graphql(
@@ -63,7 +66,9 @@ class GraphQLAuthTests(TestCase):
""",
)
self.assertTrue(data3["data"]["verifyJwtToken"]["tokenIsValid"])
- self.assertEqual(data3["data"]["verifyJwtToken"]["user"]["email"], user.email)
+ self.assertEqual(
+ data3["data"]["verifyJwtToken"]["user"]["email"], cast(Any, user).email
+ )
def test_create_user_and_activate_graphql(self):
data = self.graphql(
@@ -77,10 +82,12 @@ class GraphQLAuthTests(TestCase):
)
self.assertTrue(data["data"]["createUser"]["success"])
user = User.objects.get(email="new@example.com")
- self.assertFalse(user.is_active)
+ self.assertFalse(cast(Any, user).is_active)
- uid = base64.b64encode(str(user.uuid).encode()).decode()
- token = base64.b64encode(str(user.activation_token).encode()).decode()
+ uid = base64.b64encode(str(cast(Any, user).uuid).encode()).decode()
+ token = base64.b64encode(
+ str(cast(Any, user).activation_token).encode()
+ ).decode()
data2 = self.graphql(
f"""
mutation {{
@@ -92,7 +99,7 @@ class GraphQLAuthTests(TestCase):
)
self.assertTrue(data2["data"]["activateUser"]["success"], data2)
user.refresh_from_db()
- self.assertTrue(user.is_active and user.is_verified, user)
+ self.assertTrue(cast(Any, user).is_active and cast(Any, user).is_verified, user)
def test_verify_json_web_token_invalid_graphql(self):
data = self.graphql(
diff --git a/engine/vibes_auth/tests/test_messaging.py b/engine/vibes_auth/tests/test_messaging.py
index 27263bf3..5da7e72f 100644
--- a/engine/vibes_auth/tests/test_messaging.py
+++ b/engine/vibes_auth/tests/test_messaging.py
@@ -1,4 +1,5 @@
import asyncio
+from typing import Any, Callable, Iterable, cast
from unittest.mock import patch
from django.contrib.auth.models import AnonymousUser
@@ -8,9 +9,14 @@ from engine.vibes_auth.messaging import auth as auth_module
from engine.vibes_auth.models import User
+# pyright: reportUntypedBaseClass=false
class MessagingTests(TestCase):
def test_extract_jwt_from_subprotocols_cases(self):
- fn = auth_module._extract_jwt_from_subprotocols
+ # Access private helper via getattr to avoid private-usage warnings in type checkers
+ fn = cast(
+ Callable[[Iterable[str] | None], str | None],
+ auth_module._extract_jwt_from_subprotocols, # pyright: ignore[reportPrivateUsage]
+ )
self.assertIsNone(fn(None))
self.assertIsNone(fn([]))
self.assertEqual(fn(["bearer", "abc.token"]), "abc.token")
@@ -20,9 +26,9 @@ class MessagingTests(TestCase):
self.assertIsNone(fn(["Bearer", ""]))
def test_jwt_middleware_sets_anonymous_without_token(self):
- captured = {}
+ captured: dict[str, Any] = {}
- async def inner_app(scope_dict, _receive, _send):
+ async def inner_app(scope_dict: dict[str, Any], _receive: Any, _send: Any):
captured["is_anon"] = (
isinstance(scope_dict["user"], AnonymousUser)
or scope_dict["user"].is_anonymous
@@ -30,66 +36,89 @@ class MessagingTests(TestCase):
middleware = auth_module.JWTAuthMiddleware(inner_app)
- scope = {"type": "websocket", "subprotocols": []}
+ scope: dict[str, Any] = {"type": "websocket", "subprotocols": []}
- async def dummy_receive():
+ async def dummy_receive() -> dict[str, str]:
return {"type": "websocket.disconnect"}
- async def dummy_send(_message):
+ async def dummy_send(_message: Any) -> None:
return None
- asyncio.run(middleware(scope, dummy_receive, dummy_send))
+ # Cast arguments to Any to bypass ASGI typing mismatches in tests
+ asyncio.run(
+ middleware(
+ cast(Any, scope), cast(Any, dummy_receive), cast(Any, dummy_send)
+ )
+ )
self.assertTrue(captured.get("is_anon"))
def test_jwt_middleware_sets_user_with_valid_token(self):
- user = User.objects.create_user(
- email="user@example.com", password="Str0ngPass!word"
+ user: User = cast(
+ User,
+ cast(Any, User.objects).create_user(
+ email="user@example.com", password="Str0ngPass!word"
+ ),
)
class FakeAuth:
- def authenticate(self, _request):
+ def authenticate(self, _request: Any) -> tuple[User, str]:
return user, "token"
- captured = {}
+ captured: dict[str, Any] = {}
- async def inner_app(scope_dict, _receive, _send):
+ async def inner_app(scope_dict: dict[str, Any], _receive: Any, _send: Any):
captured["user_id"] = getattr(scope_dict["user"], "pk", None)
middleware = auth_module.JWTAuthMiddleware(inner_app)
- scope = {"type": "websocket", "subprotocols": ["bearer", "abc.def"]}
+ scope: dict[str, Any] = {
+ "type": "websocket",
+ "subprotocols": ["bearer", "abc.def"],
+ }
- async def dummy_receive():
+ async def dummy_receive() -> dict[str, str]:
return {"type": "websocket.disconnect"}
- async def dummy_send(_message):
+ async def dummy_send(_message: Any) -> None:
return None
with patch.object(auth_module, "JWTAuthentication", FakeAuth):
- asyncio.run(middleware(scope, dummy_receive, dummy_send))
- self.assertEqual(captured.get("user_id"), user.pk)
+ asyncio.run(
+ middleware(
+ cast(Any, scope), cast(Any, dummy_receive), cast(Any, dummy_send)
+ )
+ )
+ user_pk = cast(Any, user).pk
+ self.assertEqual(captured.get("user_id"), user_pk)
def test_jwt_middleware_handles_bad_token_gracefully(self):
class FakeAuth:
- def authenticate(self, _request):
+ def authenticate(self, _request: Any):
raise Exception("bad token")
- captured = {}
+ captured: dict[str, Any] = {}
- async def inner_app(scope_dict, _receive, _send):
+ async def inner_app(scope_dict: dict[str, Any], _receive: Any, _send: Any):
captured["is_anon"] = (
isinstance(scope_dict["user"], AnonymousUser)
or scope_dict["user"].is_anonymous
)
middleware = auth_module.JWTAuthMiddleware(inner_app)
- scope = {"type": "websocket", "subprotocols": ["bearer", "bad.token"]}
+ scope: dict[str, Any] = {
+ "type": "websocket",
+ "subprotocols": ["bearer", "bad.token"],
+ }
- async def dummy_receive():
+ async def dummy_receive() -> dict[str, str]:
return {"type": "websocket.disconnect"}
- async def dummy_send(_message):
+ async def dummy_send(_message: Any) -> None:
return None
with patch.object(auth_module, "JWTAuthentication", FakeAuth):
- asyncio.run(middleware(scope, dummy_receive, dummy_send))
+ asyncio.run(
+ middleware(
+ cast(Any, scope), cast(Any, dummy_receive), cast(Any, dummy_send)
+ )
+ )
self.assertTrue(captured.get("is_anon"))
diff --git a/engine/vibes_auth/views.py b/engine/vibes_auth/views.py
index b6dc60b8..3ff1597c 100644
--- a/engine/vibes_auth/views.py
+++ b/engine/vibes_auth/views.py
@@ -30,7 +30,7 @@ logger = logging.getLogger(__name__)
@extend_schema_view(**TOKEN_OBTAIN_SCHEMA)
class TokenObtainPairView(TokenViewBase):
- __doc__ = _( # type: ignore [assignment]
+ __doc__ = _(
"Represents a view for getting a pair of access and refresh tokens and user's data. "
"This view manages the process of handling token-based authentication where "
"clients can get a pair of JWT tokens (access and refresh) using provided "
@@ -38,12 +38,12 @@ class TokenObtainPairView(TokenViewBase):
"rate limiting to protect against brute force attacks."
)
- serializer_class = TokenObtainPairSerializer # type: ignore [assignment]
- _serializer_class = TokenObtainPairSerializer # type: ignore [assignment]
- permission_classes: list[Type[BasePermission]] = [ # type: ignore [assignment]
+ serializer_class = TokenObtainPairSerializer
+ _serializer_class = TokenObtainPairSerializer
+ permission_classes: list[Type[BasePermission]] = [
AllowAny,
]
- authentication_classes: list[str] = [] # type: ignore [assignment]
+ authentication_classes: list[str] = []
@method_decorator(ratelimit(key="ip", rate="10/h"))
def post(
@@ -54,7 +54,7 @@ class TokenObtainPairView(TokenViewBase):
@extend_schema_view(**TOKEN_REFRESH_SCHEMA)
class TokenRefreshView(TokenViewBase):
- __doc__ = _( # type: ignore [assignment]
+ __doc__ = _(
"Handles refreshing of tokens for authentication purposes. "
"This class is used to provide functionality for token refresh "
"operations as part of an authentication system. It ensures that "
@@ -63,12 +63,12 @@ class TokenRefreshView(TokenViewBase):
"refresh inputs and produce appropriate outputs."
)
- serializer_class = TokenRefreshSerializer # type: ignore [assignment]
- _serializer_class = TokenRefreshSerializer # type: ignore [assignment]
- permission_classes: list[Type[BasePermission]] = [ # type: ignore [assignment]
+ serializer_class = TokenRefreshSerializer
+ _serializer_class = TokenRefreshSerializer
+ permission_classes: list[Type[BasePermission]] = [
AllowAny,
]
- authentication_classes: list[str] = [] # type: ignore [assignment]
+ authentication_classes: list[str] = []
@method_decorator(ratelimit(key="ip", rate="10/h"))
def post(
@@ -79,16 +79,16 @@ class TokenRefreshView(TokenViewBase):
@extend_schema_view(**TOKEN_VERIFY_SCHEMA)
class TokenVerifyView(TokenViewBase):
- __doc__ = _( # type: ignore [assignment]
+ __doc__ = _(
"Represents a view for verifying JSON Web Tokens (JWT) using specific serialization and validation logic. "
)
- serializer_class = TokenVerifySerializer # type: ignore [assignment]
- _serializer_class = TokenVerifySerializer # type: ignore [assignment]
- permission_classes: list[Type[BasePermission]] = [ # type: ignore [assignment]
+ serializer_class = TokenVerifySerializer
+ _serializer_class = TokenVerifySerializer
+ permission_classes: list[Type[BasePermission]] = [
AllowAny,
]
- authentication_classes: list[str] = [] # type: ignore [assignment]
+ authentication_classes: list[str] = []
def post(
self, request: Request, *args: list[Any], **kwargs: dict[Any, Any]
diff --git a/engine/vibes_auth/viewsets.py b/engine/vibes_auth/viewsets.py
index 6e71ddc4..c0aa7d45 100644
--- a/engine/vibes_auth/viewsets.py
+++ b/engine/vibes_auth/viewsets.py
@@ -41,7 +41,7 @@ class UserViewSet(
mixins.DestroyModelMixin,
GenericViewSet,
):
- __doc__ = _( # type: ignore [assignment]
+ __doc__ = _(
"User view set implementation.\n"
"Provides a set of actions that manage user-related data such as creation, "
"retrieval, updates, deletion, and custom actions including password reset, "
@@ -89,16 +89,16 @@ class UserViewSet(
try:
if not compare_digest(
request.data.get("password"), request.data.get("confirm_password")
- ): # type: ignore [arg-type]
+ ):
return Response(
{"error": _("passwords do not match")},
status=status.HTTP_400_BAD_REQUEST,
)
- uuid = urlsafe_base64_decode(request.data.get("uidb_64")).decode() # type: ignore [arg-type]
+ uuid = urlsafe_base64_decode(request.data.get("uidb_64")).decode()
user = User.objects.get(pk=uuid)
- validate_password(password=request.data.get("password"), user=user) # type: ignore [arg-type]
+ validate_password(password=request.data.get("password"), user=user)
password_reset_token = PasswordResetTokenGenerator()
if not password_reset_token.check_token(user, request.data.get("token")):
@@ -147,11 +147,11 @@ class UserViewSet(
detail = ""
activation_error: Type[Exception] | None = None
try:
- uuid = urlsafe_base64_decode(request.data.get("uidb_64")).decode() # type: ignore [arg-type]
+ uuid = urlsafe_base64_decode(request.data.get("uidb_64")).decode()
user = User.objects.get(pk=uuid)
if not user.check_token(
urlsafe_base64_decode(request.data.get("token")).decode()
- ): # type: ignore [arg-type]
+ ):
return Response(
{"error": _("activation link is invalid!")},
status=status.HTTP_400_BAD_REQUEST,
@@ -175,7 +175,7 @@ class UserViewSet(
detail = str(traceback.format_exc())
if user is None:
if settings.DEBUG:
- raise Exception from activation_error # type: ignore [misc]
+ raise Exception from activation_error
return Response(
{"error": _("activation link is invalid!"), "detail": detail},
status=status.HTTP_400_BAD_REQUEST,
diff --git a/evibes/ftpstorage.py b/evibes/ftpstorage.py
index a0e736ff..54b16ebf 100644
--- a/evibes/ftpstorage.py
+++ b/evibes/ftpstorage.py
@@ -4,7 +4,7 @@ from urllib.parse import urlparse
from storages.backends.ftp import FTPStorage
-class AbsoluteFTPStorage(FTPStorage): # type: ignore
+class AbsoluteFTPStorage(FTPStorage):
# noinspection PyProtectedMember
# noinspection PyUnresolvedReferences
diff --git a/evibes/locale/ar_AR/LC_MESSAGES/django.mo b/evibes/locale/ar_AR/LC_MESSAGES/django.mo
index 0ee529c7..f6140836 100644
Binary files a/evibes/locale/ar_AR/LC_MESSAGES/django.mo and b/evibes/locale/ar_AR/LC_MESSAGES/django.mo differ
diff --git a/evibes/locale/ar_AR/LC_MESSAGES/django.po b/evibes/locale/ar_AR/LC_MESSAGES/django.po
index d94ab378..35564f92 100644
--- a/evibes/locale/ar_AR/LC_MESSAGES/django.po
+++ b/evibes/locale/ar_AR/LC_MESSAGES/django.po
@@ -1,12 +1,12 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: EVIBES 2025.4\n"
+"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
-"PO-Revision-Date: 2025-06-16 08:59+0100\n"
-"Last-Translator: EGOR GORBUNOV \n"
-"Language-Team: LANGUAGE \n"
+"POT-Creation-Date: 2025-12-18 19:09+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: LANGUAGE \n"
"Language: ar-ar\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -21,11 +21,11 @@ msgstr "اسم الشركة"
msgid "Address of the company"
msgstr "عنوان الشركة"
-#: evibes/settings/constance.py:26
+#: evibes/settings/constance.py:28
msgid "Phone number of the company"
msgstr "رقم هاتف الشركة"
-#: evibes/settings/constance.py:27
+#: evibes/settings/constance.py:35
msgid ""
"Tax rate in jurisdiction of your company. Leave 0 if you don't want to "
"process taxes."
@@ -33,120 +33,121 @@ msgstr ""
"معدل الضريبة في الولاية القضائية لشركتك. اترك 0 إذا كنت لا تريد معالجة "
"الضرائب."
-#: evibes/settings/constance.py:28
+#: evibes/settings/constance.py:44
msgid "Shows if the taxes are already included in product's selling prices"
msgstr "يوضح ما إذا كانت الضرائب مشمولة بالفعل في أسعار بيع المنتج"
-#: evibes/settings/constance.py:29
+#: evibes/settings/constance.py:52
msgid "Exchange rate API key"
msgstr "مفتاح API لسعر الصرف"
-#: evibes/settings/constance.py:31
+#: evibes/settings/constance.py:58
msgid "!!!DO NOT CHANGE!!!"
msgstr "!!!، لا تتغير!!!"
-#: evibes/settings/constance.py:32
+#: evibes/settings/constance.py:60
msgid "SMTP host"
msgstr "مضيف SMTP"
-#: evibes/settings/constance.py:33
+#: evibes/settings/constance.py:61
msgid "SMTP port"
msgstr "منفذ SMTP"
-#: evibes/settings/constance.py:34
+#: evibes/settings/constance.py:62
msgid "Use TLS"
msgstr "استخدام TLS"
-#: evibes/settings/constance.py:35
+#: evibes/settings/constance.py:63
msgid "Use SSL"
msgstr "استخدام SSL"
-#: evibes/settings/constance.py:36
+#: evibes/settings/constance.py:66
msgid "SMTP username"
msgstr "اسم مستخدم SMTP"
-#: evibes/settings/constance.py:37
+#: evibes/settings/constance.py:70
msgid "SMTP password"
msgstr "كلمة مرور SMTP"
-#: evibes/settings/constance.py:38
+#: evibes/settings/constance.py:72
msgid "Mail from option"
-msgstr "عنوان مرسل البريد الإلكتروني"
+msgstr "البريد من خيار البريد من"
-#: evibes/settings/constance.py:40
+#: evibes/settings/constance.py:76
msgid "How many days we store messages from anonymous users"
msgstr "عدد الأيام التي نخزن فيها الرسائل من المستخدمين المجهولين"
-#: evibes/settings/constance.py:41
+#: evibes/settings/constance.py:80
msgid "How many days we store messages from authenticated users"
msgstr "عدد الأيام التي نخزن فيها الرسائل من المستخدمين الموثقين"
-#: evibes/settings/constance.py:42
+#: evibes/settings/constance.py:84
msgid "Disable buy functionality"
msgstr "تعطيل وظيفة الشراء"
-#: evibes/settings/constance.py:43
+#: evibes/settings/constance.py:88
msgid "OpenStreetMap Nominatim API URL"
-msgstr "عنوان URL لواجهة برمجة تطبيقات OpenStreetMap Nominatim"
+msgstr "عنوان URL الخاص بواجهة برمجة تطبيقات OpenStreetMap Nominatim"
-#: evibes/settings/constance.py:44
+#: evibes/settings/constance.py:92
msgid "OpenAI API Key"
msgstr "مفتاح واجهة برمجة تطبيقات OpenAI"
-#: evibes/settings/constance.py:45
+#: evibes/settings/constance.py:96
msgid "Abstract API Key"
msgstr "مفتاح واجهة برمجة التطبيقات المجردة"
-#: evibes/settings/constance.py:46
+#: evibes/settings/constance.py:104
msgid "HTTP Proxy"
msgstr "وكيل HTTP"
-#: evibes/settings/constance.py:48
+#: evibes/settings/constance.py:112
msgid "An entity for storing advertisiment data"
msgstr "كيان لتخزين بيانات الإعلانات"
-#: evibes/settings/constance.py:49
+#: evibes/settings/constance.py:120
msgid "An entity for storing analytics data"
msgstr "كيان لتخزين بيانات التحليلات"
-#: evibes/settings/constance.py:51
+#: evibes/settings/constance.py:125
msgid "Save responses from vendors' APIs"
msgstr "حفظ الاستجابات من واجهات برمجة تطبيقات البائعين"
-#: evibes/settings/constance.py:52
+#: evibes/settings/constance.py:126
msgid "Backup database"
msgstr "قاعدة البيانات الاحتياطية"
-#: evibes/settings/constance.py:53
+#: evibes/settings/constance.py:127
msgid "Backup media"
msgstr "وسائط النسخ الاحتياطي"
-#: evibes/settings/constance.py:59
+#: evibes/settings/constance.py:133
msgid "Legal Options"
msgstr "الخيارات القانونية"
-#: evibes/settings/constance.py:67
+#: evibes/settings/constance.py:141
msgid "Email Options"
msgstr "خيارات البريد الإلكتروني"
-#: evibes/settings/constance.py:77
+#: evibes/settings/constance.py:151
msgid "Features Options"
msgstr "خيارات الميزات"
-#: evibes/settings/constance.py:86
+#: evibes/settings/constance.py:160
msgid "SEO Options"
msgstr "خيارات تحسين محركات البحث"
-#: evibes/settings/constance.py:90
+#: evibes/settings/constance.py:164
msgid "System Options"
msgstr "خيارات النظام"
#: evibes/settings/drf.py:49
+#, python-format
msgid ""
"\n"
"Welcome to the eVibes documentation.\n"
"\n"
-"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n"
+"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks.\n"
"\n"
"## Key Features\n"
"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n"
@@ -166,12 +167,8 @@ msgid ""
"\n"
"## Authentication\n"
"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n"
-"- Access token lifetime is {\n"
-" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n"
-"} {\"minutes\" if not DEBUG else \"hours\"}.\n"
-"- Refresh token lifetime is {\n"
-" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n"
-"} hours.\n"
+"- Access token lifetime is %(access_lifetime)d %(access_unit)s.\n"
+"- Refresh token lifetime is %(refresh_hours)d hours.\n"
"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n"
"\n"
"## Internationalization (i18n)\n"
@@ -190,7 +187,7 @@ msgid ""
"- Prometheus metrics: `/prometheus/metrics/`\n"
"\n"
"## Version\n"
-"Current API version: {EVIBES_VERSION}\n"
+"Current API version: %(version)s\n"
msgstr ""
"\n"
"مرحباً بك في وثائق eVibes.\n"
@@ -215,14 +212,12 @@ msgstr ""
"\n"
"## المصادقة\n"
"- يتم التعامل مع المصادقة عبر رموز JWT المميزة. قم بتضمين الرمز المميز في رأس \"X-EVIBES-AUTH\" لطلباتك بصيغة \"حامل \".\n"
-"{\n"
-" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n"
-"} {\"minutes\" if not DEBUG else \"hours\"}{\n"
-" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n"
-"}- يتم تدوير رموز التحديث تلقائيًا وإبطالها بعد الاستخدام لتعزيز الأمان.\n"
+"- عمر الرمز المميز للوصول هو %(access_lifetime)d %(access_unit)s\n"
+"- عمر رمز التحديث هو %(refresh_hours)d ساعة.\n"
+"- يتم تدوير رموز التحديث تلقائيًا وإبطالها بعد الاستخدام لتعزيز الأمان.\n"
"\n"
"## التدويل (i18n)\n"
-"- قم بتعيين رأس \"قبول اللغة\" لتحديد لغتك المفضلة (على سبيل المثال، \"قبول اللغة: en-US\").\n"
+"- قم بتعيين رأس \"قبول اللغة\" لتحديد اللغة المفضلة لديك (على سبيل المثال، \"قبول اللغة: en-US\").\n"
"- يمكن استرداد اللغات المتاحة من نقطة النهاية \"/ التطبيق/اللغات/\".\n"
"- جميع المحتويات التي تواجه المستخدم تدعم لغات متعددة خارج الصندوق.\n"
"\n"
@@ -234,10 +229,10 @@ msgstr ""
"\n"
"## الصحة والمراقبة\n"
"- فحوصات الصحة: '/الصحة/'\n"
-"- مقاييس بروميثيوس (محمية بمصادقة أساسية): '//prometheus/'\n"
+"- مقاييس بروميثيوس: '//prometheus/metrics/'\n"
"\n"
"## الإصدار\n"
-"إصدار API الحالي: {EVIBES_VERSION}\n"
+"إصدار API الحالي: %(version)s\n"
#: evibes/settings/unfold.py:28
msgid "My site"
@@ -267,38 +262,38 @@ msgstr "التكوين"
msgid "Periodic Tasks"
msgstr "المهام الدورية"
-#: evibes/settings/unfold.py:117
+#: evibes/settings/unfold.py:119
msgid "Taskboard"
msgstr "لوحة المهام"
-#: evibes/settings/unfold.py:129
+#: evibes/settings/unfold.py:131
msgid "Quick Links"
msgstr "روابط سريعة"
-#: evibes/settings/unfold.py:134
+#: evibes/settings/unfold.py:136
msgid "Users"
msgstr "المستخدمون"
-#: evibes/settings/unfold.py:139
+#: evibes/settings/unfold.py:141
msgid "Groups"
msgstr "المجموعات"
-#: evibes/settings/unfold.py:144
+#: evibes/settings/unfold.py:146
msgid "Orders"
msgstr "الطلبات"
-#: evibes/settings/unfold.py:149
+#: evibes/settings/unfold.py:151
msgid "Products"
msgstr "المنتجات"
-#: evibes/settings/unfold.py:154
+#: evibes/settings/unfold.py:156
msgid "Categories"
msgstr "الفئات"
-#: evibes/settings/unfold.py:159
+#: evibes/settings/unfold.py:161
msgid "Brands"
msgstr "العلامات التجارية"
-#: evibes/settings/unfold.py:164
+#: evibes/settings/unfold.py:166
msgid "Blogposts"
msgstr "المدونات"
diff --git a/evibes/locale/cs_CZ/LC_MESSAGES/django.mo b/evibes/locale/cs_CZ/LC_MESSAGES/django.mo
index 09f709fb..b85e89ab 100644
Binary files a/evibes/locale/cs_CZ/LC_MESSAGES/django.mo and b/evibes/locale/cs_CZ/LC_MESSAGES/django.mo differ
diff --git a/evibes/locale/cs_CZ/LC_MESSAGES/django.po b/evibes/locale/cs_CZ/LC_MESSAGES/django.po
index 51e910ae..57ca7c92 100644
--- a/evibes/locale/cs_CZ/LC_MESSAGES/django.po
+++ b/evibes/locale/cs_CZ/LC_MESSAGES/django.po
@@ -1,12 +1,12 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: EVIBES 2025.4\n"
+"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
-"PO-Revision-Date: 2025-06-16 08:59+0100\n"
-"Last-Translator: EGOR GORBUNOV \n"
-"Language-Team: LANGUAGE \n"
+"POT-Creation-Date: 2025-12-18 19:09+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: LANGUAGE \n"
"Language: cs-cz\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -21,11 +21,11 @@ msgstr "Název společnosti"
msgid "Address of the company"
msgstr "Adresa společnosti"
-#: evibes/settings/constance.py:26
+#: evibes/settings/constance.py:28
msgid "Phone number of the company"
msgstr "Telefonní číslo společnosti"
-#: evibes/settings/constance.py:27
+#: evibes/settings/constance.py:35
msgid ""
"Tax rate in jurisdiction of your company. Leave 0 if you don't want to "
"process taxes."
@@ -33,120 +33,121 @@ msgstr ""
"Sazba daně v jurisdikci vaší společnosti. Pokud nechcete zpracovávat daně, "
"ponechte 0."
-#: evibes/settings/constance.py:28
+#: evibes/settings/constance.py:44
msgid "Shows if the taxes are already included in product's selling prices"
msgstr "Zobrazuje, zda jsou daně již zahrnuty v prodejních cenách produktu."
-#: evibes/settings/constance.py:29
+#: evibes/settings/constance.py:52
msgid "Exchange rate API key"
msgstr "Klíč API pro směnný kurz"
-#: evibes/settings/constance.py:31
+#: evibes/settings/constance.py:58
msgid "!!!DO NOT CHANGE!!!"
msgstr "!!!NEMĚŇTE!!!"
-#: evibes/settings/constance.py:32
+#: evibes/settings/constance.py:60
msgid "SMTP host"
msgstr "SMTP host"
-#: evibes/settings/constance.py:33
+#: evibes/settings/constance.py:61
msgid "SMTP port"
msgstr "Port SMTP"
-#: evibes/settings/constance.py:34
+#: evibes/settings/constance.py:62
msgid "Use TLS"
msgstr "Použití protokolu TLS"
-#: evibes/settings/constance.py:35
+#: evibes/settings/constance.py:63
msgid "Use SSL"
msgstr "Použití protokolu SSL"
-#: evibes/settings/constance.py:36
+#: evibes/settings/constance.py:66
msgid "SMTP username"
msgstr "Uživatelské jméno SMTP"
-#: evibes/settings/constance.py:37
+#: evibes/settings/constance.py:70
msgid "SMTP password"
msgstr "Heslo SMTP"
-#: evibes/settings/constance.py:38
+#: evibes/settings/constance.py:72
msgid "Mail from option"
-msgstr "Adresa odesílatele e-mailů"
+msgstr "Možnost Pošta z"
-#: evibes/settings/constance.py:40
+#: evibes/settings/constance.py:76
msgid "How many days we store messages from anonymous users"
msgstr "Kolik dní uchováváme zprávy od anonymních uživatelů"
-#: evibes/settings/constance.py:41
+#: evibes/settings/constance.py:80
msgid "How many days we store messages from authenticated users"
msgstr "Kolik dní uchováváme zprávy od ověřených uživatelů"
-#: evibes/settings/constance.py:42
+#: evibes/settings/constance.py:84
msgid "Disable buy functionality"
msgstr "Zakázat funkci nákupu"
-#: evibes/settings/constance.py:43
+#: evibes/settings/constance.py:88
msgid "OpenStreetMap Nominatim API URL"
msgstr "URL rozhraní API OpenStreetMap Nominatim"
-#: evibes/settings/constance.py:44
+#: evibes/settings/constance.py:92
msgid "OpenAI API Key"
msgstr "Klíč API OpenAI"
-#: evibes/settings/constance.py:45
+#: evibes/settings/constance.py:96
msgid "Abstract API Key"
msgstr "Abstraktní klíč API"
-#: evibes/settings/constance.py:46
+#: evibes/settings/constance.py:104
msgid "HTTP Proxy"
msgstr "Proxy server HTTP"
-#: evibes/settings/constance.py:48
+#: evibes/settings/constance.py:112
msgid "An entity for storing advertisiment data"
msgstr "Subjekt pro ukládání dat inzerátů"
-#: evibes/settings/constance.py:49
+#: evibes/settings/constance.py:120
msgid "An entity for storing analytics data"
msgstr "Subjekt pro ukládání analytických dat"
-#: evibes/settings/constance.py:51
+#: evibes/settings/constance.py:125
msgid "Save responses from vendors' APIs"
msgstr "Ukládání odpovědí z rozhraní API dodavatelů"
-#: evibes/settings/constance.py:52
+#: evibes/settings/constance.py:126
msgid "Backup database"
msgstr "Zálohování databáze"
-#: evibes/settings/constance.py:53
+#: evibes/settings/constance.py:127
msgid "Backup media"
msgstr "Záložní média"
-#: evibes/settings/constance.py:59
+#: evibes/settings/constance.py:133
msgid "Legal Options"
msgstr "Právní možnosti"
-#: evibes/settings/constance.py:67
+#: evibes/settings/constance.py:141
msgid "Email Options"
msgstr "Možnosti e-mailu"
-#: evibes/settings/constance.py:77
+#: evibes/settings/constance.py:151
msgid "Features Options"
msgstr "Možnosti funkcí"
-#: evibes/settings/constance.py:86
+#: evibes/settings/constance.py:160
msgid "SEO Options"
msgstr "Možnosti SEO"
-#: evibes/settings/constance.py:90
+#: evibes/settings/constance.py:164
msgid "System Options"
msgstr "Možnosti systému"
#: evibes/settings/drf.py:49
+#, python-format
msgid ""
"\n"
"Welcome to the eVibes documentation.\n"
"\n"
-"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n"
+"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks.\n"
"\n"
"## Key Features\n"
"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n"
@@ -166,12 +167,8 @@ msgid ""
"\n"
"## Authentication\n"
"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n"
-"- Access token lifetime is {\n"
-" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n"
-"} {\"minutes\" if not DEBUG else \"hours\"}.\n"
-"- Refresh token lifetime is {\n"
-" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n"
-"} hours.\n"
+"- Access token lifetime is %(access_lifetime)d %(access_unit)s.\n"
+"- Refresh token lifetime is %(refresh_hours)d hours.\n"
"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n"
"\n"
"## Internationalization (i18n)\n"
@@ -190,12 +187,12 @@ msgid ""
"- Prometheus metrics: `/prometheus/metrics/`\n"
"\n"
"## Version\n"
-"Current API version: {EVIBES_VERSION}\n"
+"Current API version: %(version)s\n"
msgstr ""
"\n"
"Vítejte v dokumentaci systému eVibes.\n"
"\n"
-"eVibes je výkonná platforma pro elektronické obchodování, která umožňuje spustit a spravovat internetový obchod jakéhokoli druhu na několik kliknutí.\n"
+"eVibes je výkonná platforma pro elektronické obchodování, která vám umožní spustit a spravovat internetový obchod jakéhokoli druhu na několik kliknutí.\n"
"\n"
"## Klíčové funkce\n"
"- **Katalog produktů:** Správa podrobností o produktech, cen, skladových zásob a dostupnosti v několika kategoriích.\n"
@@ -215,12 +212,8 @@ msgstr ""
"\n"
"## Ověřování\n"
"- Ověřování se provádí pomocí tokenů JWT. Token zahrňte do hlavičky `X-EVIBES-AUTH` svých požadavků ve formátu `Bearer `.\n"
-"- Životnost přístupového tokenu je {\n"
-" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n"
-"}. {\"minutes\" if not DEBUG else \"hours\"}.\n"
-"- Životnost tokenu pro obnovení je {\n"
-" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n"
-"} hodin.\n"
+"- Životnost přístupového tokenu je %(access_lifetime)d %(access_unit)s.\n"
+"- Životnost tokenu pro obnovení je %(refresh_hours)d hodin.\n"
"- Tokeny pro obnovení jsou po použití automaticky rotovány a zneplatněny z důvodu vyšší bezpečnosti.\n"
"\n"
"## Internacionalizace (i18n)\n"
@@ -236,10 +229,10 @@ msgstr ""
"\n"
"## Stav a monitorování\n"
"- Kontroly stavu: `/health/`\n"
-"- Metriky Prometheus (chráněno basic-auth): `/prometheus/`\n"
+"- Metriky Prometheus: `/prometheus/metrics/`\n"
"\n"
"## Verze\n"
-"Aktuální verze API: {EVIBES_VERSION}\n"
+"Aktuální verze API: %(version)s\n"
#: evibes/settings/unfold.py:28
msgid "My site"
@@ -269,38 +262,38 @@ msgstr "Konfigurace"
msgid "Periodic Tasks"
msgstr "Pravidelné úkoly"
-#: evibes/settings/unfold.py:117
+#: evibes/settings/unfold.py:119
msgid "Taskboard"
msgstr "Taskboard"
-#: evibes/settings/unfold.py:129
+#: evibes/settings/unfold.py:131
msgid "Quick Links"
msgstr "Rychlé odkazy"
-#: evibes/settings/unfold.py:134
+#: evibes/settings/unfold.py:136
msgid "Users"
msgstr "Uživatelé"
-#: evibes/settings/unfold.py:139
+#: evibes/settings/unfold.py:141
msgid "Groups"
msgstr "Skupiny"
-#: evibes/settings/unfold.py:144
+#: evibes/settings/unfold.py:146
msgid "Orders"
msgstr "Objednávky"
-#: evibes/settings/unfold.py:149
+#: evibes/settings/unfold.py:151
msgid "Products"
msgstr "Produkty"
-#: evibes/settings/unfold.py:154
+#: evibes/settings/unfold.py:156
msgid "Categories"
msgstr "Kategorie"
-#: evibes/settings/unfold.py:159
+#: evibes/settings/unfold.py:161
msgid "Brands"
msgstr "Značky"
-#: evibes/settings/unfold.py:164
+#: evibes/settings/unfold.py:166
msgid "Blogposts"
msgstr "Blogposty"
diff --git a/evibes/locale/da_DK/LC_MESSAGES/django.mo b/evibes/locale/da_DK/LC_MESSAGES/django.mo
index c2ed534d..2d2ea1c8 100644
Binary files a/evibes/locale/da_DK/LC_MESSAGES/django.mo and b/evibes/locale/da_DK/LC_MESSAGES/django.mo differ
diff --git a/evibes/locale/da_DK/LC_MESSAGES/django.po b/evibes/locale/da_DK/LC_MESSAGES/django.po
index 8105f764..c062a8fe 100644
--- a/evibes/locale/da_DK/LC_MESSAGES/django.po
+++ b/evibes/locale/da_DK/LC_MESSAGES/django.po
@@ -1,12 +1,12 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: EVIBES 2025.4\n"
+"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
-"PO-Revision-Date: 2025-06-16 08:59+0100\n"
-"Last-Translator: EGOR GORBUNOV \n"
-"Language-Team: LANGUAGE \n"
+"POT-Creation-Date: 2025-12-18 19:09+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: LANGUAGE \n"
"Language: da-dk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -21,11 +21,11 @@ msgstr "Virksomhedens navn"
msgid "Address of the company"
msgstr "Virksomhedens adresse"
-#: evibes/settings/constance.py:26
+#: evibes/settings/constance.py:28
msgid "Phone number of the company"
msgstr "Virksomhedens telefonnummer"
-#: evibes/settings/constance.py:27
+#: evibes/settings/constance.py:35
msgid ""
"Tax rate in jurisdiction of your company. Leave 0 if you don't want to "
"process taxes."
@@ -33,120 +33,121 @@ msgstr ""
"Skattesats i din virksomheds jurisdiktion. Lad 0 stå, hvis du ikke ønsker at"
" behandle skatter."
-#: evibes/settings/constance.py:28
+#: evibes/settings/constance.py:44
msgid "Shows if the taxes are already included in product's selling prices"
msgstr "Viser, om afgifterne allerede er inkluderet i produktets salgspris"
-#: evibes/settings/constance.py:29
+#: evibes/settings/constance.py:52
msgid "Exchange rate API key"
msgstr "API-nøgle til valutakurs"
-#: evibes/settings/constance.py:31
+#: evibes/settings/constance.py:58
msgid "!!!DO NOT CHANGE!!!"
msgstr "!!!SKIFT IKKE!!!"
-#: evibes/settings/constance.py:32
+#: evibes/settings/constance.py:60
msgid "SMTP host"
msgstr "SMTP-vært"
-#: evibes/settings/constance.py:33
+#: evibes/settings/constance.py:61
msgid "SMTP port"
msgstr "SMTP-port"
-#: evibes/settings/constance.py:34
+#: evibes/settings/constance.py:62
msgid "Use TLS"
msgstr "Brug TLS"
-#: evibes/settings/constance.py:35
+#: evibes/settings/constance.py:63
msgid "Use SSL"
msgstr "Brug SSL"
-#: evibes/settings/constance.py:36
+#: evibes/settings/constance.py:66
msgid "SMTP username"
msgstr "SMTP-brugernavn"
-#: evibes/settings/constance.py:37
+#: evibes/settings/constance.py:70
msgid "SMTP password"
msgstr "SMTP-adgangskode"
-#: evibes/settings/constance.py:38
+#: evibes/settings/constance.py:72
msgid "Mail from option"
-msgstr "Adressen på e-mailens afsender"
+msgstr "Mulighed for mail fra"
-#: evibes/settings/constance.py:40
+#: evibes/settings/constance.py:76
msgid "How many days we store messages from anonymous users"
msgstr "Hvor mange dage vi gemmer beskeder fra anonyme brugere"
-#: evibes/settings/constance.py:41
+#: evibes/settings/constance.py:80
msgid "How many days we store messages from authenticated users"
msgstr "Hvor mange dage vi gemmer beskeder fra godkendte brugere"
-#: evibes/settings/constance.py:42
+#: evibes/settings/constance.py:84
msgid "Disable buy functionality"
msgstr "Deaktiver købsfunktionalitet"
-#: evibes/settings/constance.py:43
+#: evibes/settings/constance.py:88
msgid "OpenStreetMap Nominatim API URL"
msgstr "OpenStreetMap Nominatim API URL"
-#: evibes/settings/constance.py:44
+#: evibes/settings/constance.py:92
msgid "OpenAI API Key"
msgstr "OpenAI API-nøgle"
-#: evibes/settings/constance.py:45
+#: evibes/settings/constance.py:96
msgid "Abstract API Key"
msgstr "Abstrakt API-nøgle"
-#: evibes/settings/constance.py:46
+#: evibes/settings/constance.py:104
msgid "HTTP Proxy"
msgstr "HTTP-proxy"
-#: evibes/settings/constance.py:48
+#: evibes/settings/constance.py:112
msgid "An entity for storing advertisiment data"
msgstr "En enhed til lagring af annonceringsdata"
-#: evibes/settings/constance.py:49
+#: evibes/settings/constance.py:120
msgid "An entity for storing analytics data"
msgstr "En enhed til lagring af analysedata"
-#: evibes/settings/constance.py:51
+#: evibes/settings/constance.py:125
msgid "Save responses from vendors' APIs"
msgstr "Gem svar fra leverandørers API'er"
-#: evibes/settings/constance.py:52
+#: evibes/settings/constance.py:126
msgid "Backup database"
msgstr "Backup af database"
-#: evibes/settings/constance.py:53
+#: evibes/settings/constance.py:127
msgid "Backup media"
msgstr "Backup-medier"
-#: evibes/settings/constance.py:59
+#: evibes/settings/constance.py:133
msgid "Legal Options"
msgstr "Juridiske muligheder"
-#: evibes/settings/constance.py:67
+#: evibes/settings/constance.py:141
msgid "Email Options"
msgstr "Indstillinger for e-mail"
-#: evibes/settings/constance.py:77
+#: evibes/settings/constance.py:151
msgid "Features Options"
msgstr "Funktioner Indstillinger"
-#: evibes/settings/constance.py:86
+#: evibes/settings/constance.py:160
msgid "SEO Options"
msgstr "SEO-muligheder"
-#: evibes/settings/constance.py:90
+#: evibes/settings/constance.py:164
msgid "System Options"
msgstr "Systemindstillinger"
#: evibes/settings/drf.py:49
+#, python-format
msgid ""
"\n"
"Welcome to the eVibes documentation.\n"
"\n"
-"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n"
+"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks.\n"
"\n"
"## Key Features\n"
"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n"
@@ -166,12 +167,8 @@ msgid ""
"\n"
"## Authentication\n"
"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n"
-"- Access token lifetime is {\n"
-" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n"
-"} {\"minutes\" if not DEBUG else \"hours\"}.\n"
-"- Refresh token lifetime is {\n"
-" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n"
-"} hours.\n"
+"- Access token lifetime is %(access_lifetime)d %(access_unit)s.\n"
+"- Refresh token lifetime is %(refresh_hours)d hours.\n"
"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n"
"\n"
"## Internationalization (i18n)\n"
@@ -190,12 +187,12 @@ msgid ""
"- Prometheus metrics: `/prometheus/metrics/`\n"
"\n"
"## Version\n"
-"Current API version: {EVIBES_VERSION}\n"
+"Current API version: %(version)s\n"
msgstr ""
"\n"
"Velkommen til eVibes' dokumentation.\n"
"\n"
-"eVibes er en stærk e-handelsplatform, der giver dig mulighed for at starte og administrere en onlinebutik af enhver art med blot nogle få klik.\n"
+"eVibes er en stærk e-handelsplatform, der giver dig mulighed for at starte og administrere en onlinebutik af enhver art med blot et par klik.\n"
"\n"
"## Nøglefunktioner\n"
"- Produktkatalog:** Administrer produktdetaljer, priser, lagerbeholdning og tilgængelighed på tværs af flere kategorier.\n"
@@ -215,12 +212,8 @@ msgstr ""
"\n"
"## Autentificering\n"
"- Autentificering håndteres via JWT-tokens. Inkluder tokenet i `X-EVIBES-AUTH`-headeren i dine anmodninger i formatet `Bearer `.\n"
-"- Adgangstokenets levetid er {\n"
-" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n"
-"} {\"minutes\" if not DEBUG else \"hours\"}.\n"
-"- Opdateringstokenets levetid er {\n"
-" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n"
-"} timer.\n"
+"- Adgangstokenets levetid er %(access_lifetime)d %(access_unit)s.\n"
+"- Opdateringstokenets levetid er %(refresh_hours)d timer.\n"
"- Refresh-tokens bliver automatisk roteret og ugyldiggjort efter brug for at øge sikkerheden.\n"
"\n"
"## Internationalisering (i18n)\n"
@@ -236,10 +229,10 @@ msgstr ""
"\n"
"## Sundhed og overvågning\n"
"- Sundhedstjek: `/health/`\n"
-"- Prometheus-metrikker (beskyttet af basic-auth): `/prometheus/`\n"
+"- Prometheus-målinger: `/prometheus/metrics/`\n"
"\n"
"## Version\n"
-"Nuværende API-version: {EVIBES_VERSION}\n"
+"Nuværende API-version: %(version)s\n"
#: evibes/settings/unfold.py:28
msgid "My site"
@@ -269,38 +262,38 @@ msgstr "Konfig"
msgid "Periodic Tasks"
msgstr "Periodiske opgaver"
-#: evibes/settings/unfold.py:117
+#: evibes/settings/unfold.py:119
msgid "Taskboard"
msgstr "Opgavetavle"
-#: evibes/settings/unfold.py:129
+#: evibes/settings/unfold.py:131
msgid "Quick Links"
msgstr "Hurtige links"
-#: evibes/settings/unfold.py:134
+#: evibes/settings/unfold.py:136
msgid "Users"
msgstr "Brugere"
-#: evibes/settings/unfold.py:139
+#: evibes/settings/unfold.py:141
msgid "Groups"
msgstr "Grupper"
-#: evibes/settings/unfold.py:144
+#: evibes/settings/unfold.py:146
msgid "Orders"
msgstr "Bestillinger"
-#: evibes/settings/unfold.py:149
+#: evibes/settings/unfold.py:151
msgid "Products"
msgstr "Produkter"
-#: evibes/settings/unfold.py:154
+#: evibes/settings/unfold.py:156
msgid "Categories"
msgstr "Kategorier"
-#: evibes/settings/unfold.py:159
+#: evibes/settings/unfold.py:161
msgid "Brands"
msgstr "Mærker"
-#: evibes/settings/unfold.py:164
+#: evibes/settings/unfold.py:166
msgid "Blogposts"
msgstr "Blogindlæg"
diff --git a/evibes/locale/de_DE/LC_MESSAGES/django.mo b/evibes/locale/de_DE/LC_MESSAGES/django.mo
index e480d5f1..de41a896 100644
Binary files a/evibes/locale/de_DE/LC_MESSAGES/django.mo and b/evibes/locale/de_DE/LC_MESSAGES/django.mo differ
diff --git a/evibes/locale/de_DE/LC_MESSAGES/django.po b/evibes/locale/de_DE/LC_MESSAGES/django.po
index d0bf1209..c9c54618 100644
--- a/evibes/locale/de_DE/LC_MESSAGES/django.po
+++ b/evibes/locale/de_DE/LC_MESSAGES/django.po
@@ -1,12 +1,12 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: EVIBES 2025.4\n"
+"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
-"PO-Revision-Date: 2025-06-16 08:59+0100\n"
-"Last-Translator: EGOR GORBUNOV \n"
-"Language-Team: LANGUAGE \n"
+"POT-Creation-Date: 2025-12-18 19:09+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: LANGUAGE \n"
"Language: de-de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -21,11 +21,11 @@ msgstr "Name des Unternehmens"
msgid "Address of the company"
msgstr "Anschrift des Unternehmens"
-#: evibes/settings/constance.py:26
+#: evibes/settings/constance.py:28
msgid "Phone number of the company"
msgstr "Telefonnummer des Unternehmens"
-#: evibes/settings/constance.py:27
+#: evibes/settings/constance.py:35
msgid ""
"Tax rate in jurisdiction of your company. Leave 0 if you don't want to "
"process taxes."
@@ -33,123 +33,124 @@ msgstr ""
"Steuersatz in dem Land, in dem Ihr Unternehmen ansässig ist. Lassen Sie 0 "
"stehen, wenn Sie keine Steuern verarbeiten wollen."
-#: evibes/settings/constance.py:28
+#: evibes/settings/constance.py:44
msgid "Shows if the taxes are already included in product's selling prices"
msgstr ""
"Zeigt an, ob die Steuern bereits in den Verkaufspreisen des Produkts "
"enthalten sind"
-#: evibes/settings/constance.py:29
+#: evibes/settings/constance.py:52
msgid "Exchange rate API key"
msgstr "Wechselkurs-API-Schlüssel"
-#: evibes/settings/constance.py:31
+#: evibes/settings/constance.py:58
msgid "!!!DO NOT CHANGE!!!"
msgstr "!!!NICHT ÄNDERN!!!"
-#: evibes/settings/constance.py:32
+#: evibes/settings/constance.py:60
msgid "SMTP host"
msgstr "SMTP-Host"
-#: evibes/settings/constance.py:33
+#: evibes/settings/constance.py:61
msgid "SMTP port"
msgstr "SMTP-Port"
-#: evibes/settings/constance.py:34
+#: evibes/settings/constance.py:62
msgid "Use TLS"
msgstr "Use TLS"
-#: evibes/settings/constance.py:35
+#: evibes/settings/constance.py:63
msgid "Use SSL"
msgstr "Use SSL"
-#: evibes/settings/constance.py:36
+#: evibes/settings/constance.py:66
msgid "SMTP username"
msgstr "SMTP-Benutzername"
-#: evibes/settings/constance.py:37
+#: evibes/settings/constance.py:70
msgid "SMTP password"
msgstr "SMTP-Kennwort"
-#: evibes/settings/constance.py:38
+#: evibes/settings/constance.py:72
msgid "Mail from option"
-msgstr "Die Adresse des Absenders der E-Mail"
+msgstr "Option Mail von"
-#: evibes/settings/constance.py:40
+#: evibes/settings/constance.py:76
msgid "How many days we store messages from anonymous users"
msgstr "Wie viele Tage wir Nachrichten von anonymen Nutzern speichern"
-#: evibes/settings/constance.py:41
+#: evibes/settings/constance.py:80
msgid "How many days we store messages from authenticated users"
msgstr ""
"Wie viele Tage wir Nachrichten von authentifizierten Benutzern speichern"
-#: evibes/settings/constance.py:42
+#: evibes/settings/constance.py:84
msgid "Disable buy functionality"
msgstr "Kauffunktionalität deaktivieren"
-#: evibes/settings/constance.py:43
+#: evibes/settings/constance.py:88
msgid "OpenStreetMap Nominatim API URL"
msgstr "OpenStreetMap Nominatim API URL"
-#: evibes/settings/constance.py:44
+#: evibes/settings/constance.py:92
msgid "OpenAI API Key"
msgstr "OpenAI API Key"
-#: evibes/settings/constance.py:45
+#: evibes/settings/constance.py:96
msgid "Abstract API Key"
msgstr "Abstrakter API-Schlüssel"
-#: evibes/settings/constance.py:46
+#: evibes/settings/constance.py:104
msgid "HTTP Proxy"
msgstr "HTTP-Proxy"
-#: evibes/settings/constance.py:48
+#: evibes/settings/constance.py:112
msgid "An entity for storing advertisiment data"
msgstr "Eine Einheit zur Speicherung von Werbedaten"
-#: evibes/settings/constance.py:49
+#: evibes/settings/constance.py:120
msgid "An entity for storing analytics data"
msgstr "Eine Einheit zur Speicherung von Analysedaten"
-#: evibes/settings/constance.py:51
+#: evibes/settings/constance.py:125
msgid "Save responses from vendors' APIs"
msgstr "Speichern von Antworten aus den APIs von Anbietern"
-#: evibes/settings/constance.py:52
+#: evibes/settings/constance.py:126
msgid "Backup database"
msgstr "Datenbank sichern"
-#: evibes/settings/constance.py:53
+#: evibes/settings/constance.py:127
msgid "Backup media"
msgstr "Sicherungsmedien"
-#: evibes/settings/constance.py:59
+#: evibes/settings/constance.py:133
msgid "Legal Options"
msgstr "Rechtliche Optionen"
-#: evibes/settings/constance.py:67
+#: evibes/settings/constance.py:141
msgid "Email Options"
msgstr "E-Mail-Optionen"
-#: evibes/settings/constance.py:77
+#: evibes/settings/constance.py:151
msgid "Features Options"
msgstr "Merkmale Optionen"
-#: evibes/settings/constance.py:86
+#: evibes/settings/constance.py:160
msgid "SEO Options"
msgstr "SEO-Optionen"
-#: evibes/settings/constance.py:90
+#: evibes/settings/constance.py:164
msgid "System Options"
msgstr "System Options"
#: evibes/settings/drf.py:49
+#, python-format
msgid ""
"\n"
"Welcome to the eVibes documentation.\n"
"\n"
-"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n"
+"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks.\n"
"\n"
"## Key Features\n"
"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n"
@@ -169,12 +170,8 @@ msgid ""
"\n"
"## Authentication\n"
"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n"
-"- Access token lifetime is {\n"
-" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n"
-"} {\"minutes\" if not DEBUG else \"hours\"}.\n"
-"- Refresh token lifetime is {\n"
-" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n"
-"} hours.\n"
+"- Access token lifetime is %(access_lifetime)d %(access_unit)s.\n"
+"- Refresh token lifetime is %(refresh_hours)d hours.\n"
"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n"
"\n"
"## Internationalization (i18n)\n"
@@ -193,7 +190,7 @@ msgid ""
"- Prometheus metrics: `/prometheus/metrics/`\n"
"\n"
"## Version\n"
-"Current API version: {EVIBES_VERSION}\n"
+"Current API version: %(version)s\n"
msgstr ""
"\n"
"Willkommen bei der eVibes-Dokumentation.\n"
@@ -209,7 +206,7 @@ msgstr ""
"- **B2B-Betrieb:** Dedizierte Endpunkte für Business-to-Business-Transaktionen und Großhandelsmanagement.\n"
"- **Mehrsprachige Unterstützung:** Bedienen Sie Kunden auf der ganzen Welt mit vollständigen Internationalisierungsfunktionen (i18n).\n"
"- **Benutzerdefinierte Integrationen:** Erweiterbare API-Architektur für die Integration mit externen Plattformen und Diensten.\n"
-"- **Analytik & Reporting:** Generieren Sie detaillierte Berichte über Verkäufe, Bestände und Kundenverhalten.\n"
+"- **Analytik & Reporting:** Erstellen Sie detaillierte Berichte über Verkäufe, Bestände und Kundenverhalten.\n"
"- **Echtzeit-Updates:** Erhalten Sie Live-Daten zu Lagerbeständen, Bestellstatus und Preisänderungen.\n"
"\n"
"## Verfügbare APIs\n"
@@ -218,13 +215,9 @@ msgstr ""
"\n"
"## Authentifizierung\n"
"- Die Authentifizierung erfolgt über JWT-Tokens. Fügen Sie das Token in den `X-EVIBES-AUTH`-Header Ihrer Anfragen im Format `Bearer ` ein.\n"
-"- Die Lebensdauer des Zugangstokens beträgt {\n"
-" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n"
-"} {\"minutes\" if not DEBUG else \"hours\"}.\n"
-"- Die Lebensdauer von Auffrischungstoken beträgt {\n"
-" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n"
-"} Stunden.\n"
-"- Refresh-Tokens werden automatisch rotiert und nach der Verwendung ungültig gemacht, um die Sicherheit zu erhöhen.\n"
+"- Die Lebensdauer des Zugriffstokens beträgt %(access_lifetime)d %(access_unit)s.\n"
+"- Die Lebensdauer des Refresh-Tokens beträgt %(refresh_hours)d Stunden.\n"
+"- Refresh-Tokens werden automatisch gedreht und nach Gebrauch ungültig gemacht, um die Sicherheit zu erhöhen.\n"
"\n"
"## Internationalisierung (i18n)\n"
"- Setzen Sie den `Accept-Language`-Header, um Ihre bevorzugte Sprache anzugeben (z.B. `Accept-Language: en-US`).\n"
@@ -239,10 +232,10 @@ msgstr ""
"\n"
"## Gesundheit & Überwachung\n"
"- Gesundheitsprüfungen: `/health/`\n"
-"- Prometheus-Metriken (basic-auth geschützt): `/prometheus/`\n"
+"- Prometheus Metriken: `/prometheus/metrics/`\n"
"\n"
"## Version\n"
-"Aktuelle API-Version: {EVIBES_VERSION}\n"
+"Aktuelle API-Version: %(version)s\n"
#: evibes/settings/unfold.py:28
msgid "My site"
@@ -272,38 +265,38 @@ msgstr "Konfigurieren Sie"
msgid "Periodic Tasks"
msgstr "Regelmäßige Aufgaben"
-#: evibes/settings/unfold.py:117
+#: evibes/settings/unfold.py:119
msgid "Taskboard"
msgstr "Aufgabentafel"
-#: evibes/settings/unfold.py:129
+#: evibes/settings/unfold.py:131
msgid "Quick Links"
msgstr "Schnelle Links"
-#: evibes/settings/unfold.py:134
+#: evibes/settings/unfold.py:136
msgid "Users"
msgstr "Benutzer"
-#: evibes/settings/unfold.py:139
+#: evibes/settings/unfold.py:141
msgid "Groups"
msgstr "Gruppen"
-#: evibes/settings/unfold.py:144
+#: evibes/settings/unfold.py:146
msgid "Orders"
msgstr "Bestellungen"
-#: evibes/settings/unfold.py:149
+#: evibes/settings/unfold.py:151
msgid "Products"
msgstr "Produkte"
-#: evibes/settings/unfold.py:154
+#: evibes/settings/unfold.py:156
msgid "Categories"
msgstr "Kategorien"
-#: evibes/settings/unfold.py:159
+#: evibes/settings/unfold.py:161
msgid "Brands"
msgstr "Marken"
-#: evibes/settings/unfold.py:164
+#: evibes/settings/unfold.py:166
msgid "Blogposts"
msgstr "Blogposts"
diff --git a/evibes/locale/en_GB/LC_MESSAGES/django.mo b/evibes/locale/en_GB/LC_MESSAGES/django.mo
index e4b4500a..18f7ce0f 100644
Binary files a/evibes/locale/en_GB/LC_MESSAGES/django.mo and b/evibes/locale/en_GB/LC_MESSAGES/django.mo differ
diff --git a/evibes/locale/en_GB/LC_MESSAGES/django.po b/evibes/locale/en_GB/LC_MESSAGES/django.po
index ef41096d..d0805b59 100644
--- a/evibes/locale/en_GB/LC_MESSAGES/django.po
+++ b/evibes/locale/en_GB/LC_MESSAGES/django.po
@@ -1,16 +1,16 @@
-# EVIBES GETTEXT TRANSLATIONS
-# Copyright (C) 2025 EGOR GORBUNOV
-# This file is distributed under the same license as the EVIBES package.
-# EGOR GORBUNOV , 2025.
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR , YEAR.
#
msgid ""
msgstr ""
-"Project-Id-Version: EVIBES 2025.4\n"
+"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-12-10 21:44+0300\n"
-"PO-Revision-Date: 2025-06-16 08:59+0100\n"
-"Last-Translator: EGOR GORBUNOV \n"
-"Language-Team: LANGUAGE