Features: 3.1.0

This commit is contained in:
Egor Pavlovich Gorbunov 2025-10-14 16:46:09 +03:00
parent e0b2f183ce
commit 72a96edda1
262 changed files with 4744 additions and 4468 deletions

View file

@ -34,7 +34,7 @@ class PostAdmin(SummernoteModelAdminMixin, FieldsetsMixin, ActivationActionsMixi
@register(PostTag) @register(PostTag)
class PostTagAdmin(ModelAdmin): # type: ignore [misc, type-arg] class PostTagAdmin(ModelAdmin): # type: ignore [type-arg]
list_display = ("tag_name", "name") list_display = ("tag_name", "name")
search_fields = ("tag_name", "name") search_fields = ("tag_name", "name")
ordering = ("tag_name",) ordering = ("tag_name",)

View file

@ -11,6 +11,6 @@ class BlogConfig(AppConfig):
hide = False hide = False
# noinspection PyUnresolvedReferences # noinspection PyUnresolvedReferences
def ready(self): def ready(self) -> None:
import blog.elasticsearch.documents import blog.elasticsearch.documents
import blog.signals # noqa: F401 import blog.signals # noqa: F401

View file

@ -6,7 +6,7 @@ from core.elasticsearch import COMMON_ANALYSIS, ActiveOnlyMixin, add_multilang_f
from core.elasticsearch.documents import BaseDocument from core.elasticsearch.documents import BaseDocument
class PostDocument(ActiveOnlyMixin, BaseDocument): class PostDocument(ActiveOnlyMixin, BaseDocument): # type: ignore [misc]
title = fields.TextField( title = fields.TextField(
attr="title", attr="title",
analyzer="standard", analyzer="standard",
@ -30,7 +30,7 @@ class PostDocument(ActiveOnlyMixin, BaseDocument):
model = Post model = Post
fields = ["uuid"] fields = ["uuid"]
def prepare_title(self, instance): def prepare_title(self, instance: Post) -> str:
return getattr(instance, "title", "") or "" return getattr(instance, "title", "") or ""

View file

@ -4,7 +4,7 @@ from blog.models import Post
from core.filters import CaseInsensitiveListFilter from core.filters import CaseInsensitiveListFilter
class PostFilter(FilterSet): class PostFilter(FilterSet): # type: ignore [misc]
uuid = UUIDFilter(field_name="uuid", lookup_expr="exact") uuid = UUIDFilter(field_name="uuid", lookup_expr="exact")
slug = CharFilter(field_name="slug", lookup_expr="exact") slug = CharFilter(field_name="slug", lookup_expr="exact")
author = UUIDFilter(field_name="author__uuid", lookup_expr="exact") author = UUIDFilter(field_name="author__uuid", lookup_expr="exact")

View file

@ -7,7 +7,7 @@ from blog.serializers import PostSerializer
from core.permissions import EvibesPermission from core.permissions import EvibesPermission
class PostViewSet(ReadOnlyModelViewSet): class PostViewSet(ReadOnlyModelViewSet): # type: ignore [type-arg]
""" """
Encapsulates operations for managing and retrieving Post entities in a read-only model view set. Encapsulates operations for managing and retrieving Post entities in a read-only model view set.

View file

@ -1,4 +1,7 @@
from typing import Any
from django import forms from django import forms
from django.forms.renderers import BaseRenderer
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
@ -7,7 +10,10 @@ class MarkdownEditorWidget(forms.Textarea):
css = {"all": ("https://cdnjs.cloudflare.com/ajax/libs/easymde/2.14.0/easymde.min.css",)} css = {"all": ("https://cdnjs.cloudflare.com/ajax/libs/easymde/2.14.0/easymde.min.css",)}
js = ("https://cdnjs.cloudflare.com/ajax/libs/easymde/2.14.0/easymde.min.js",) js = ("https://cdnjs.cloudflare.com/ajax/libs/easymde/2.14.0/easymde.min.js",)
def render(self, name, value, attrs=None, renderer=None): def render(self, name: str, value: str, attrs: dict[Any, Any] | None = None, renderer: BaseRenderer | None = None):
if not attrs:
attrs = {}
attrs["class"] = "markdown-editor"
textarea_html = super().render(name, value, attrs, renderer) textarea_html = super().render(name, value, attrs, renderer)
textarea_id = attrs.get("id", f"id_{name}") textarea_id = attrs.get("id", f"id_{name}")
init_js = f""" init_js = f"""

View file

@ -20,16 +20,16 @@ class NiceModel(Model):
verbose_name=_("is active"), verbose_name=_("is active"),
help_text=_("if set to false, this object can't be seen by users without needed permission"), help_text=_("if set to false, this object can't be seen by users without needed permission"),
) )
created = CreationDateTimeField(_("created"), help_text=_("when the object first appeared on the database")) 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")) modified = ModificationDateTimeField(_("modified"), help_text=_("when the object was last modified")) # type: ignore [no-untyped-call]
def save( def save( # type: ignore [override]
self, self,
*, *,
force_insert: bool = False, force_insert: bool = False,
force_update: bool = False, force_update: bool = False,
using: str | None = None, using: str | None = None,
update_fields: Collection | None = None, update_fields: Collection[str] | None = None,
update_modified: bool = True, update_modified: bool = True,
) -> None: ) -> None:
self.update_modified = update_modified self.update_modified = update_modified

View file

@ -1,13 +1,16 @@
from contextlib import suppress from contextlib import suppress
from typing import ClassVar, Type from typing import Any, ClassVar, Type
from constance.admin import Config from constance.admin import Config
from constance.admin import ConstanceAdmin as BaseConstanceAdmin from constance.admin import ConstanceAdmin as BaseConstanceAdmin
from django.apps import apps from django.apps import AppConfig, apps
from django.conf import settings
from django.contrib.admin import ModelAdmin, TabularInline, action, register, site from django.contrib.admin import ModelAdmin, TabularInline, action, register, site
from django.contrib.gis.admin import GISModelAdmin from django.contrib.gis.admin import GISModelAdmin
from django.contrib.messages import constants as messages from django.contrib.messages import constants as messages
from django.db.models import Model from django.db.models import Model
from django.db.models.query import QuerySet
from django.http import HttpRequest
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from modeltranslation.translator import NotRegistered, translator from modeltranslation.translator import NotRegistered, translator
from modeltranslation.utils import get_translation_fields from modeltranslation.utils import get_translation_fields
@ -36,16 +39,15 @@ from core.models import (
Vendor, Vendor,
Wishlist, Wishlist,
) )
from evibes.settings import CONSTANCE_CONFIG
class FieldsetsMixin: class FieldsetsMixin:
general_fields: list = [] general_fields: list[str] | None = []
relation_fields: list = [] relation_fields: list[str] | None = []
additional_fields: list = [] additional_fields: list[str] | None = []
model: ClassVar[Type[Model]] model: ClassVar[Type[Model]]
def get_fieldsets(self, request, obj=None): def get_fieldsets(self, request: HttpRequest, obj: Any = None) -> list[tuple[str, dict[str, list[str]]]]:
if request: if request:
pass pass
@ -54,14 +56,16 @@ class FieldsetsMixin:
fieldsets = [] fieldsets = []
def add_translations_fieldset(fss): def add_translations_fieldset(
fss: list[tuple[str, dict[str, list[str]]]],
) -> list[tuple[str, dict[str, list[str]]]]:
with suppress(NotRegistered): with suppress(NotRegistered):
transoptions = translator.get_options_for_model(self.model) transoptions = translator.get_options_for_model(self.model)
translation_fields = [] translation_fields = []
for orig in transoptions.local_fields: for orig in transoptions.local_fields:
translation_fields += get_translation_fields(orig) translation_fields += get_translation_fields(orig)
if translation_fields: if translation_fields:
fss = list(fss) + [(_("translations"), {"fields": translation_fields})] fss = list(fss) + [(_("translations"), {"fields": translation_fields})] # type: ignore [list-item]
return fss return fss
if self.general_fields: if self.general_fields:
@ -95,8 +99,8 @@ class FieldsetsMixin:
ts.append(name) ts.append(name)
if ts: if ts:
fieldsets.append((_("timestamps"), {"fields": ts, "classes": ["collapse"]})) fieldsets.append((_("timestamps"), {"fields": ts, "classes": ["collapse"]}))
fieldsets = add_translations_fieldset(fieldsets) fieldsets = add_translations_fieldset(fieldsets) # type: ignore [arg-type, assignment]
return fieldsets return fieldsets # type: ignore [return-value]
# noinspection PyUnresolvedReferences # noinspection PyUnresolvedReferences
@ -110,29 +114,29 @@ class ActivationActionsMixin:
] ]
@action(description=_("activate selected %(verbose_name_plural)s").lower(), permissions=["change"]) @action(description=_("activate selected %(verbose_name_plural)s").lower(), permissions=["change"])
def activate_selected(self, request, queryset): def activate_selected(self, request: HttpRequest, queryset: QuerySet[Any]) -> None:
try: try:
queryset.update(is_active=True) queryset.update(is_active=True)
self.message_user( self.message_user( # type: ignore [attr-defined]
request=request, message=_("selected items have been activated.").lower(), level=messages.SUCCESS request=request, message=_("selected items have been activated.").lower(), level=messages.SUCCESS
) )
except Exception as e: except Exception as e:
self.message_user(request=request, message=str(e), level=messages.ERROR) self.message_user(request=request, message=str(e), level=messages.ERROR) # type: ignore [attr-defined]
@action(description=_("deactivate selected %(verbose_name_plural)s").lower(), permissions=["change"]) @action(description=_("deactivate selected %(verbose_name_plural)s").lower(), permissions=["change"])
def deactivate_selected(self, request, queryset): def deactivate_selected(self, request: HttpRequest, queryset: QuerySet[Any]) -> None:
try: try:
queryset.update(is_active=False) queryset.update(is_active=False)
self.message_user( self.message_user( # type: ignore [attr-defined]
request=request, message=_("selected items have been deactivated.").lower(), level=messages.SUCCESS request=request, message=_("selected items have been deactivated.").lower(), level=messages.SUCCESS
) )
except Exception as e: except Exception as e:
self.message_user(request=request, message=str(e), level=messages.ERROR) self.message_user(request=request, message=str(e), level=messages.ERROR) # type: ignore [attr-defined]
class AttributeValueInline(TabularInline): class AttributeValueInline(TabularInline): # type: ignore [type-arg]
model = AttributeValue model = AttributeValue
extra = 0 extra = 0
autocomplete_fields = ["attribute"] autocomplete_fields = ["attribute"]
@ -142,7 +146,7 @@ class AttributeValueInline(TabularInline):
icon = "fa-solid fa-list-ul" icon = "fa-solid fa-list-ul"
class ProductImageInline(TabularInline): class ProductImageInline(TabularInline): # type: ignore [type-arg]
model = ProductImage model = ProductImage
extra = 0 extra = 0
is_navtab = True is_navtab = True
@ -151,7 +155,7 @@ class ProductImageInline(TabularInline):
icon = "fa-regular fa-images" icon = "fa-regular fa-images"
class StockInline(TabularInline): class StockInline(TabularInline): # type: ignore [type-arg]
model = Stock model = Stock
extra = 0 extra = 0
is_navtab = True is_navtab = True
@ -160,7 +164,7 @@ class StockInline(TabularInline):
icon = "fa-solid fa-boxes-stacked" icon = "fa-solid fa-boxes-stacked"
class OrderProductInline(TabularInline): class OrderProductInline(TabularInline): # type: ignore [type-arg]
model = OrderProduct model = OrderProduct
extra = 0 extra = 0
readonly_fields = ("product", "quantity", "buy_price") readonly_fields = ("product", "quantity", "buy_price")
@ -174,7 +178,7 @@ class OrderProductInline(TabularInline):
return super().get_queryset(request).select_related("product").only("product__name") return super().get_queryset(request).select_related("product").only("product__name")
class CategoryChildrenInline(TabularInline): class CategoryChildrenInline(TabularInline): # type: ignore [type-arg]
model = Category model = Category
fk_name = "parent" fk_name = "parent"
extra = 0 extra = 0
@ -186,7 +190,7 @@ class CategoryChildrenInline(TabularInline):
@register(AttributeGroup) @register(AttributeGroup)
class AttributeGroupAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc] class AttributeGroupAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg]
# noinspection PyClassVar # noinspection PyClassVar
model = AttributeGroup # type: ignore [misc] model = AttributeGroup # type: ignore [misc]
list_display = ( list_display = (
@ -210,7 +214,7 @@ class AttributeGroupAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin):
@register(Attribute) @register(Attribute)
class AttributeAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc] class AttributeAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg]
# noinspection PyClassVar # noinspection PyClassVar
model = Attribute # type: ignore [misc] model = Attribute # type: ignore [misc]
list_display = ( list_display = (
@ -251,7 +255,7 @@ class AttributeAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # typ
@register(AttributeValue) @register(AttributeValue)
class AttributeValueAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc] class AttributeValueAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg]
# noinspection PyClassVar # noinspection PyClassVar
model = AttributeValue # type: ignore [misc] model = AttributeValue # type: ignore [misc]
list_display = ( list_display = (
@ -336,7 +340,7 @@ class CategoryAdmin(FieldsetsMixin, ActivationActionsMixin, DraggableMPTTAdmin):
@register(Brand) @register(Brand)
class BrandAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc] class BrandAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg]
# noinspection PyClassVar # noinspection PyClassVar
model = Brand # type: ignore [misc] model = Brand # type: ignore [misc]
list_display = ( list_display = (
@ -373,7 +377,7 @@ class BrandAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: i
@register(Product) @register(Product)
class ProductAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc] class ProductAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg]
# noinspection PyClassVar # noinspection PyClassVar
model = Product # type: ignore [misc] model = Product # type: ignore [misc]
list_display = ( list_display = (
@ -436,7 +440,7 @@ class ProductAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type:
@register(ProductTag) @register(ProductTag)
class ProductTagAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc] class ProductTagAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg]
# noinspection PyClassVar # noinspection PyClassVar
model = ProductTag # type: ignore [misc] model = ProductTag # type: ignore [misc]
list_display = ("tag_name",) list_display = ("tag_name",)
@ -454,7 +458,7 @@ class ProductTagAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # ty
@register(CategoryTag) @register(CategoryTag)
class CategoryTagAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc] class CategoryTagAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg]
# noinspection PyClassVar # noinspection PyClassVar
model = CategoryTag # type: ignore [misc] model = CategoryTag # type: ignore [misc]
list_display = ( list_display = (
@ -480,7 +484,7 @@ class CategoryTagAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # t
@register(Vendor) @register(Vendor)
class VendorAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc] class VendorAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg]
# noinspection PyClassVar # noinspection PyClassVar
model = Vendor # type: ignore [misc] model = Vendor # type: ignore [misc]
list_display = ( list_display = (
@ -518,7 +522,7 @@ class VendorAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type:
@register(Feedback) @register(Feedback)
class FeedbackAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc] class FeedbackAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg]
# noinspection PyClassVar # noinspection PyClassVar
model = Feedback # type: ignore [misc] model = Feedback # type: ignore [misc]
list_display = ( list_display = (
@ -551,7 +555,7 @@ class FeedbackAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type
@register(Order) @register(Order)
class OrderAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc] class OrderAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg]
# noinspection PyClassVar # noinspection PyClassVar
model = Order # type: ignore [misc] model = Order # type: ignore [misc]
list_display = ( list_display = (
@ -602,7 +606,7 @@ class OrderAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: i
@register(OrderProduct) @register(OrderProduct)
class OrderProductAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc] class OrderProductAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg]
# noinspection PyClassVar # noinspection PyClassVar
model = OrderProduct # type: ignore [misc] model = OrderProduct # type: ignore [misc]
list_display = ( list_display = (
@ -640,7 +644,7 @@ class OrderProductAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): #
@register(PromoCode) @register(PromoCode)
class PromoCodeAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc] class PromoCodeAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg]
# noinspection PyClassVar # noinspection PyClassVar
model = PromoCode # type: ignore [misc] model = PromoCode # type: ignore [misc]
list_display = ( list_display = (
@ -684,7 +688,7 @@ class PromoCodeAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # typ
@register(Promotion) @register(Promotion)
class PromotionAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc] class PromotionAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg]
# noinspection PyClassVar # noinspection PyClassVar
model = Promotion # type: ignore [misc] model = Promotion # type: ignore [misc]
list_display = ( list_display = (
@ -711,7 +715,7 @@ class PromotionAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # typ
@register(Stock) @register(Stock)
class StockAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc] class StockAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg]
# noinspection PyClassVar # noinspection PyClassVar
model = Stock # type: ignore [misc] model = Stock # type: ignore [misc]
list_display = ( list_display = (
@ -755,7 +759,7 @@ class StockAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: i
@register(Wishlist) @register(Wishlist)
class WishlistAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc] class WishlistAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg]
# noinspection PyClassVar # noinspection PyClassVar
model = Wishlist # type: ignore [misc] model = Wishlist # type: ignore [misc]
list_display = ( list_display = (
@ -781,7 +785,7 @@ class WishlistAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type
@register(ProductImage) @register(ProductImage)
class ProductImageAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc] class ProductImageAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg]
# noinspection PyClassVar # noinspection PyClassVar
model = ProductImage # type: ignore [misc] model = ProductImage # type: ignore [misc]
list_display = ( list_display = (
@ -817,7 +821,7 @@ class ProductImageAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): #
@register(Address) @register(Address)
class AddressAdmin(FieldsetsMixin, GISModelAdmin): class AddressAdmin(FieldsetsMixin, GISModelAdmin): # type: ignore [misc]
# noinspection PyClassVar # noinspection PyClassVar
model = Address # type: ignore [misc] model = Address # type: ignore [misc]
list_display = ( list_display = (
@ -867,7 +871,7 @@ class AddressAdmin(FieldsetsMixin, GISModelAdmin):
@register(CustomerRelationshipManagementProvider) @register(CustomerRelationshipManagementProvider)
class CustomerRelationshipManagementProviderAdmin(FieldsetsMixin, ModelAdmin): class CustomerRelationshipManagementProviderAdmin(FieldsetsMixin, ModelAdmin): # type: ignore [misc, type-arg]
# noinspection PyClassVar # noinspection PyClassVar
model = CustomerRelationshipManagementProvider # type: ignore [misc] model = CustomerRelationshipManagementProvider # type: ignore [misc]
list_display = ( list_display = (
@ -896,7 +900,7 @@ class CustomerRelationshipManagementProviderAdmin(FieldsetsMixin, ModelAdmin):
@register(OrderCrmLink) @register(OrderCrmLink)
class OrderCrmLinkAdmin(FieldsetsMixin, ModelAdmin): class OrderCrmLinkAdmin(FieldsetsMixin, ModelAdmin): # type: ignore [misc, type-arg]
# noinspection PyClassVar # noinspection PyClassVar
model = OrderCrmLink # type: ignore [misc] model = OrderCrmLink # type: ignore [misc]
list_display = ( list_display = (
@ -938,22 +942,22 @@ class ConstanceConfig:
swapped = False swapped = False
is_composite_pk = False is_composite_pk = False
def get_change_permission(self): def get_change_permission(self) -> str:
return f"change_{self.model_name}" return f"change_{self.model_name}"
@property @property
def app_config(self): def app_config(self) -> AppConfig:
return apps.get_app_config(self.app_label) return apps.get_app_config(self.app_label)
@property @property
def label(self): def label(self) -> str:
return f"{self.app_label}.{self.object_name}" return f"{self.app_label}.{self.object_name}"
@property @property
def label_lower(self): def label_lower(self) -> str:
return f"{self.app_label}.{self.model_name}" return f"{self.app_label}.{self.model_name}"
def get_ordered_objects(self): def get_ordered_objects(self) -> bool:
return False return False
_meta = Meta() _meta = Meta()
@ -963,6 +967,6 @@ class ConstanceConfig:
site.unregister([Config]) site.unregister([Config])
# noinspection PyTypeChecker # noinspection PyTypeChecker
site.register([ConstanceConfig], BaseConstanceAdmin) # type: ignore [list-item] site.register([ConstanceConfig], BaseConstanceAdmin) # type: ignore [list-item]
site.site_title = CONSTANCE_CONFIG["PROJECT_NAME"][0] # type: ignore [assignment] site.site_title = settings.CONSTANCE_CONFIG["PROJECT_NAME"][0] # type: ignore [assignment]
site.site_header = "eVibes" site.site_header = "eVibes"
site.index_title = CONSTANCE_CONFIG["PROJECT_NAME"][0] # type: ignore [assignment] site.index_title = settings.CONSTANCE_CONFIG["PROJECT_NAME"][0] # type: ignore [assignment]

View file

@ -11,6 +11,6 @@ class CoreConfig(AppConfig):
hide = False hide = False
# noinspection PyUnresolvedReferences # noinspection PyUnresolvedReferences
def ready(self): def ready(self) -> None:
import core.elasticsearch.documents import core.elasticsearch.documents
import core.signals # noqa: F401 import core.signals # noqa: F401

View file

@ -113,7 +113,7 @@ def process_query(
request: Request | None = None, request: Request | None = None,
indexes: tuple[str, ...] = ("categories", "brands", "products"), indexes: tuple[str, ...] = ("categories", "brands", "products"),
use_transliteration: bool = True, use_transliteration: bool = True,
) -> dict[str, list[dict]] | None: ) -> dict[str, list[dict[str, Any]]] | None:
if not query: if not query:
raise ValueError(_("no search term provided.")) raise ValueError(_("no search term provided."))
@ -235,7 +235,7 @@ def process_query(
): ):
hit_cache.append(h) hit_cache.append(h)
if getattr(h, "uuid", None): if getattr(h, "uuid", None):
uuids_by_index.setdefault(h.meta.index, []).append(str(h.uuid)) uuids_by_index.setdefault(h.meta.index, []).append({"uuid": str(h.uuid)})
products_by_uuid = {} products_by_uuid = {}
brands_by_uuid = {} brands_by_uuid = {}
@ -329,9 +329,9 @@ def _lang_analyzer(lang_code: str) -> str:
class ActiveOnlyMixin: class ActiveOnlyMixin:
def get_queryset(self) -> QuerySet[Any]: def get_queryset(self) -> QuerySet[Any]:
return super().get_queryset().filter(is_active=True) return super().get_queryset().filter(is_active=True) # type: ignore [no-any-return, misc]
def should_index_object(self, obj) -> bool: def should_index_object(self, obj) -> bool: # type: ignore [no-untyped-def]
return getattr(obj, "is_active", False) return getattr(obj, "is_active", False)
@ -436,7 +436,7 @@ COMMON_ANALYSIS = {
} }
def add_multilang_fields(cls) -> None: def add_multilang_fields(cls: Any) -> None:
for code, _lang in settings.LANGUAGES: for code, _lang in settings.LANGUAGES:
lc = code.replace("-", "_").lower() lc = code.replace("-", "_").lower()
name_field = f"name_{lc}" name_field = f"name_{lc}"
@ -480,10 +480,11 @@ def add_multilang_fields(cls) -> None:
setattr(cls, f"prepare_{desc_field}", make_prepare(desc_field)) setattr(cls, f"prepare_{desc_field}", make_prepare(desc_field))
def populate_index(): def populate_index() -> None:
for doc in registry.get_documents(set(registry.get_models())): for doc in registry.get_documents(set(registry.get_models())):
qs = doc().get_indexing_queryset() qs = doc().get_indexing_queryset()
doc().update(qs, parallel=True, refresh=True) doc().update(qs, parallel=True, refresh=True)
return None
def process_system_query( def process_system_query(
@ -493,7 +494,7 @@ def process_system_query(
size_per_index: int = 25, size_per_index: int = 25,
language_code: str | None = None, language_code: str | None = None,
use_transliteration: bool = True, use_transliteration: bool = True,
) -> dict[str, list[dict]]: ) -> dict[str, list[dict[str, Any]]]:
if not query: if not query:
raise ValueError(_("no search term provided.")) raise ValueError(_("no search term provided."))
@ -526,7 +527,7 @@ def process_system_query(
**({"fuzziness": fuzzy} if fuzzy else {}), **({"fuzziness": fuzzy} if fuzzy else {}),
) )
results: dict[str, list[dict]] = {idx: [] for idx in indexes} results: dict[str, list[dict[str, Any]]] = {idx: [] for idx in indexes}
for idx in indexes: for idx in indexes:
s = Search(index=[idx]).query(mm).extra(size=size_per_index, track_total_hits=False) s = Search(index=[idx]).query(mm).extra(size=size_per_index, track_total_hits=False)

View file

@ -1,3 +1,6 @@
from typing import Any
from django.db.models import Model, QuerySet
from django_elasticsearch_dsl import Document, fields from django_elasticsearch_dsl import Document, fields
from django_elasticsearch_dsl.registries import registry from django_elasticsearch_dsl.registries import registry
from health_check.db.models import TestModel from health_check.db.models import TestModel
@ -6,7 +9,7 @@ from core.elasticsearch import COMMON_ANALYSIS, ActiveOnlyMixin, add_multilang_f
from core.models import Brand, Category, Product from core.models import Brand, Category, Product
class BaseDocument(Document): class BaseDocument(Document): # type: ignore [misc]
name = fields.TextField( name = fields.TextField(
attr="name", attr="name",
analyzer="standard", analyzer="standard",
@ -39,10 +42,10 @@ class BaseDocument(Document):
"index": {"max_ngram_diff": 20}, "index": {"max_ngram_diff": 20},
} }
def prepare_name(self, instance): def prepare_name(self, instance: Model) -> str:
return getattr(instance, "name", "") or "" return getattr(instance, "name", "") or ""
def prepare_description(self, instance): def prepare_description(self, instance: Model) -> str:
return getattr(instance, "description", "") or "" return getattr(instance, "description", "") or ""
@ -103,7 +106,7 @@ class ProductDocument(ActiveOnlyMixin, BaseDocument):
}, },
) )
def get_queryset(self): def get_queryset(self) -> QuerySet[Product]:
return ( return (
super() super()
.get_queryset() .get_queryset()
@ -156,7 +159,7 @@ add_multilang_fields(BrandDocument)
registry.register_document(BrandDocument) registry.register_document(BrandDocument)
class TestModelDocument(Document): class TestModelDocument(Document): # type: ignore [misc]
class Index: class Index:
name = "testmodels" name = "testmodels"
@ -164,7 +167,7 @@ class TestModelDocument(Document):
model = TestModel model = TestModel
fields = ["title"] fields = ["title"]
ignore_signals = True ignore_signals = True
related_models: list = [] related_models: list[Any] = []
auto_refresh = False auto_refresh = False

View file

@ -1,6 +1,7 @@
import json import json
import logging import logging
import uuid import uuid
from typing import Any
from django.core.exceptions import BadRequest from django.core.exceptions import BadRequest
from django.db.models import ( from django.db.models import (
@ -19,6 +20,7 @@ from django.db.models import (
When, When,
) )
from django.db.models.functions import Coalesce from django.db.models.functions import Coalesce
from django.http import HttpRequest
from django.utils.http import urlsafe_base64_decode from django.utils.http import urlsafe_base64_decode
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from django_filters import ( from django_filters import (
@ -31,6 +33,8 @@ from django_filters import (
OrderingFilter, OrderingFilter,
UUIDFilter, UUIDFilter,
) )
from graphene import Context
from rest_framework.request import Request
from core.elasticsearch import process_query from core.elasticsearch import process_query
from core.models import Address, Brand, Category, Feedback, Order, Product, Stock, Wishlist from core.models import Address, Brand, Category, Feedback, Order, Product, Stock, Wishlist
@ -38,8 +42,8 @@ from core.models import Address, Brand, Category, Feedback, Order, Product, Stoc
logger = logging.getLogger("django") logger = logging.getLogger("django")
class CaseInsensitiveListFilter(BaseInFilter, CharFilter): class CaseInsensitiveListFilter(BaseInFilter, CharFilter): # type: ignore [misc]
def filter(self, qs, value): def filter(self, qs: QuerySet[Any], value: Any) -> QuerySet[Any]:
if not value: if not value:
return qs return qs
@ -61,7 +65,7 @@ class CaseInsensitiveListFilter(BaseInFilter, CharFilter):
# noinspection PyUnusedLocal # noinspection PyUnusedLocal
class ProductFilter(FilterSet): class ProductFilter(FilterSet): # type: ignore [misc]
search = CharFilter(field_name="name", method="search_products", label=_("Search")) search = CharFilter(field_name="name", method="search_products", label=_("Search"))
uuid = UUIDFilter(field_name="uuid", lookup_expr="exact", label=_("UUID")) uuid = UUIDFilter(field_name="uuid", lookup_expr="exact", label=_("UUID"))
name = CharFilter(lookup_expr="icontains", label=_("Name")) name = CharFilter(lookup_expr="icontains", label=_("Name"))
@ -121,7 +125,15 @@ class ProductFilter(FilterSet):
"order_by", "order_by",
] ]
def __init__(self, data=None, queryset=None, *, request=None, prefix=None): # noinspection PyTypeHints
def __init__(
self,
data: dict[Any, Any] | None = None,
queryset: QuerySet[Product] | None = None,
*,
request: HttpRequest | Request | Context = None,
prefix: str | None = None,
) -> None:
super().__init__(data=data, queryset=queryset, request=request, prefix=prefix) super().__init__(data=data, queryset=queryset, request=request, prefix=prefix)
ordering_param = self.data.get("order_by", "") ordering_param = self.data.get("order_by", "")
if ordering_param: if ordering_param:
@ -133,7 +145,7 @@ class ProductFilter(FilterSet):
.annotate(avg_rating=Avg("rating")) .annotate(avg_rating=Avg("rating"))
.values("avg_rating") .values("avg_rating")
) )
self.queryset = self.queryset.annotate( self.queryset: QuerySet[Product] = self.queryset.annotate(
rating=Coalesce( rating=Coalesce(
Subquery(feedback_qs, output_field=FloatField()), Subquery(feedback_qs, output_field=FloatField()),
Value(0, output_field=FloatField()), Value(0, output_field=FloatField()),
@ -148,7 +160,7 @@ class ProductFilter(FilterSet):
) )
) )
def search_products(self, queryset: QuerySet[Product], name, value): def search_products(self, queryset: QuerySet[Product], name: str, value: str) -> QuerySet[Product]:
if not value: if not value:
return queryset return queryset
@ -156,17 +168,17 @@ class ProductFilter(FilterSet):
return queryset.filter(uuid__in=uuids) return queryset.filter(uuid__in=uuids)
def filter_include_flag(self, queryset, name, value): def filter_include_flag(self, queryset: QuerySet[Product], name: str, value: str) -> QuerySet[Product]:
if not self.data.get("category_uuid"): if not self.data.get("category_uuid"):
raise BadRequest(_("there must be a category_uuid to use include_subcategories flag")) raise BadRequest(_("there must be a category_uuid to use include_subcategories flag"))
return queryset return queryset
def filter_include_personal_ordered(self, queryset, name, value): def filter_include_personal_ordered(self, queryset: QuerySet[Product], name: str, value: str) -> QuerySet[Product]:
if self.data.get("include_personal_ordered", False): if self.data.get("include_personal_ordered", False):
queryset = queryset.filter(stocks__isnull=False, stocks__quantity__gt=0, stocks__price__gt=0) queryset = queryset.filter(stocks__isnull=False, stocks__quantity__gt=0, stocks__price__gt=0)
return queryset return queryset
def filter_attributes(self, queryset, name, value): def filter_attributes(self, queryset: QuerySet[Product], name: str, value: str) -> QuerySet[Product]:
if not value: if not value:
return queryset return queryset
@ -228,7 +240,7 @@ class ProductFilter(FilterSet):
return queryset return queryset
def filter_category(self, queryset, name, value): def filter_category(self, queryset: QuerySet[Product], name: str, value: str) -> QuerySet[Product]:
if not value: if not value:
return queryset return queryset
@ -247,7 +259,7 @@ class ProductFilter(FilterSet):
return queryset.filter(category__uuid=value) return queryset.filter(category__uuid=value)
@staticmethod @staticmethod
def _infer_type(value): def _infer_type(value: str) -> Any:
try: try:
parsed_value = json.loads(value) parsed_value = json.loads(value)
if isinstance(parsed_value, list | dict): if isinstance(parsed_value, list | dict):
@ -271,7 +283,7 @@ class ProductFilter(FilterSet):
return value return value
@property @property
def qs(self): def qs(self) -> QuerySet[Product]:
qs = super().qs qs = super().qs
ordering_param = self.data.get("order_by", "") ordering_param = self.data.get("order_by", "")
@ -320,7 +332,8 @@ class ProductFilter(FilterSet):
return qs.distinct() return qs.distinct()
class OrderFilter(FilterSet): # noinspection PyUnusedLocal
class OrderFilter(FilterSet): # type: ignore [misc]
search = CharFilter( search = CharFilter(
method="filter_search", method="filter_search",
label=_("Search (ID, product name or part number)"), label=_("Search (ID, product name or part number)"),
@ -367,7 +380,7 @@ class OrderFilter(FilterSet):
"max_buy_time", "max_buy_time",
] ]
def filter_search(self, queryset, _name, value): def filter_search(self, queryset: QuerySet[Order], name: str, value: str):
return queryset.filter( return queryset.filter(
Q(human_readable_id__icontains=value) Q(human_readable_id__icontains=value)
| Q(order_products__product__name__icontains=value) | Q(order_products__product__name__icontains=value)
@ -375,7 +388,7 @@ class OrderFilter(FilterSet):
).distinct() ).distinct()
class WishlistFilter(FilterSet): class WishlistFilter(FilterSet): # type: ignore [misc]
uuid = UUIDFilter(field_name="uuid", lookup_expr="exact") uuid = UUIDFilter(field_name="uuid", lookup_expr="exact")
user_email = CharFilter(field_name="user__email", lookup_expr="iexact", label=_("User email")) user_email = CharFilter(field_name="user__email", lookup_expr="iexact", label=_("User email"))
user = UUIDFilter(field_name="user__uuid", lookup_expr="exact", label=_("User UUID")) user = UUIDFilter(field_name="user__uuid", lookup_expr="exact", label=_("User UUID"))
@ -395,7 +408,7 @@ class WishlistFilter(FilterSet):
# noinspection PyUnusedLocal # noinspection PyUnusedLocal
class CategoryFilter(FilterSet): class CategoryFilter(FilterSet): # type: ignore [misc]
search = CharFilter(field_name="name", method="search_categories", label=_("Search")) search = CharFilter(field_name="name", method="search_categories", label=_("Search"))
uuid = UUIDFilter(field_name="uuid", lookup_expr="exact") uuid = UUIDFilter(field_name="uuid", lookup_expr="exact")
name = CharFilter(lookup_expr="icontains", label=_("Name")) name = CharFilter(lookup_expr="icontains", label=_("Name"))
@ -424,7 +437,7 @@ class CategoryFilter(FilterSet):
"whole", "whole",
] ]
def search_categories(self, queryset: QuerySet[Product], name, value): def search_categories(self, queryset: QuerySet[Category], name: str, value: str) -> QuerySet[Category]:
if not value: if not value:
return queryset return queryset
@ -432,7 +445,7 @@ class CategoryFilter(FilterSet):
return queryset.filter(uuid__in=uuids) return queryset.filter(uuid__in=uuids)
def filter_order_by(self, queryset, _name, value): def filter_order_by(self, queryset: QuerySet[Category], name: str, value: str) -> QuerySet[Category]:
if not value: if not value:
return queryset return queryset
@ -456,7 +469,7 @@ class CategoryFilter(FilterSet):
qs = queryset.order_by(order_expression).prefetch_related(None) qs = queryset.order_by(order_expression).prefetch_related(None)
def create_ordered_tree_prefetch(max_depth=10): def create_ordered_tree_prefetch(max_depth=10) -> Prefetch | None:
if field == "?": if field == "?":
def build_random_prefetch(depth): def build_random_prefetch(depth):
@ -494,7 +507,7 @@ class CategoryFilter(FilterSet):
return qs return qs
def filter_whole_categories(self, queryset, _name, value): def filter_whole_categories(self, queryset: QuerySet[Category], name: str, value: str) -> QuerySet[Category]:
has_own_products = Exists(Product.objects.filter(category=OuterRef("pk"))) has_own_products = Exists(Product.objects.filter(category=OuterRef("pk")))
has_desc_products = Exists( has_desc_products = Exists(
Product.objects.filter( Product.objects.filter(
@ -509,7 +522,7 @@ class CategoryFilter(FilterSet):
return annotated.filter(has_products=True).distinct() return annotated.filter(has_products=True).distinct()
return annotated.filter(has_products=False).distinct() return annotated.filter(has_products=False).distinct()
def filter_parent_uuid(self, queryset, _name, value): def filter_parent_uuid(self, queryset: QuerySet[Category], name: str, value: str):
if value in ("", "null", "None"): if value in ("", "null", "None"):
return queryset.filter(parent=None) return queryset.filter(parent=None)
@ -522,7 +535,7 @@ class CategoryFilter(FilterSet):
# noinspection PyUnusedLocal # noinspection PyUnusedLocal
class BrandFilter(FilterSet): class BrandFilter(FilterSet): # type: ignore [misc]
search = CharFilter(field_name="name", method="search_brands", label=_("Search")) search = CharFilter(field_name="name", method="search_brands", label=_("Search"))
uuid = UUIDFilter(field_name="uuid", lookup_expr="exact") uuid = UUIDFilter(field_name="uuid", lookup_expr="exact")
name = CharFilter(lookup_expr="icontains", label=_("Name")) name = CharFilter(lookup_expr="icontains", label=_("Name"))
@ -543,7 +556,7 @@ class BrandFilter(FilterSet):
model = Brand model = Brand
fields = ["uuid", "name", "slug", "priority"] fields = ["uuid", "name", "slug", "priority"]
def search_brands(self, queryset: QuerySet[Product], name, value): def search_brands(self, queryset: QuerySet[Brand], name: str, value: str) -> QuerySet[Brand]:
if not value: if not value:
return queryset return queryset
@ -552,7 +565,7 @@ class BrandFilter(FilterSet):
return queryset.filter(uuid__in=uuids) return queryset.filter(uuid__in=uuids)
class FeedbackFilter(FilterSet): class FeedbackFilter(FilterSet): # type: ignore [misc]
uuid = UUIDFilter(field_name="uuid", lookup_expr="exact", label=_("UUID")) uuid = UUIDFilter(field_name="uuid", lookup_expr="exact", label=_("UUID"))
product_uuid = UUIDFilter( product_uuid = UUIDFilter(
field_name="order_product__product__uuid", field_name="order_product__product__uuid",
@ -581,7 +594,7 @@ class FeedbackFilter(FilterSet):
fields = ["uuid", "product_uuid", "user_uuid", "order_by"] fields = ["uuid", "product_uuid", "user_uuid", "order_by"]
class AddressFilter(FilterSet): class AddressFilter(FilterSet): # type: ignore [misc]
uuid = UUIDFilter(field_name="uuid", lookup_expr="exact", label=_("UUID")) uuid = UUIDFilter(field_name="uuid", lookup_expr="exact", label=_("UUID"))
user_uuid = UUIDFilter(field_name="user__uuid", lookup_expr="exact", label=_("User UUID")) user_uuid = UUIDFilter(field_name="user__uuid", lookup_expr="exact", label=_("User UUID"))
user_email = CharFilter(field_name="user__email", lookup_expr="iexact", label=_("User email")) user_email = CharFilter(field_name="user__email", lookup_expr="iexact", label=_("User email"))

View file

@ -1,10 +1,12 @@
from typing import Any
from graphene import Mutation from graphene import Mutation
class BaseMutation(Mutation): # type: ignore [misc] class BaseMutation(Mutation): # type: ignore [misc]
def __init__(self, *args, **kwargs) -> None: def __init__(self, *args: list[Any], **kwargs: dict[Any, Any]) -> None:
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
@staticmethod @staticmethod
def mutate(**kwargs) -> None: def mutate(**kwargs: Any) -> None:
pass pass

View file

@ -1,4 +1,5 @@
import logging import logging
from typing import Any
import requests import requests
from django.core.cache import cache from django.core.cache import cache
@ -31,6 +32,7 @@ from payments.graphene.object_types import TransactionType
logger = logging.getLogger("django") logger = logging.getLogger("django")
# noinspection PyUnusedLocal
class CacheOperator(BaseMutation): class CacheOperator(BaseMutation):
class Meta: class Meta:
description = _("cache I/O") description = _("cache I/O")
@ -46,10 +48,11 @@ class CacheOperator(BaseMutation):
data = GenericScalar(description=_("cached data")) data = GenericScalar(description=_("cached data"))
@staticmethod @staticmethod
def mutate(_parent, info, key, data=None, timeout=None): def mutate(parent, info, key, data=None, timeout=None) -> dict[Any, Any]: # type: ignore [override]
return camelize(web_cache(info.context, key, data, timeout)) return camelize(web_cache(info.context, key, data, timeout))
# noinspection PyUnusedLocal
class RequestCursedURL(BaseMutation): class RequestCursedURL(BaseMutation):
class Meta: class Meta:
description = _("request a CORSed URL") description = _("request a CORSed URL")
@ -60,7 +63,7 @@ class RequestCursedURL(BaseMutation):
data = GenericScalar(description=_("camelized JSON data from the requested URL")) data = GenericScalar(description=_("camelized JSON data from the requested URL"))
@staticmethod @staticmethod
def mutate(_parent, info, url): def mutate(parent, info, url) -> dict[str, Any]: # type: ignore [override]
if not is_url_safe(url): if not is_url_safe(url):
raise BadRequest(_("only URLs starting with http(s):// are allowed")) raise BadRequest(_("only URLs starting with http(s):// are allowed"))
try: try:
@ -75,6 +78,7 @@ class RequestCursedURL(BaseMutation):
return {"data": {"error": str(e)}} return {"data": {"error": str(e)}}
# noinspection PyUnusedLocal,PyTypeChecker
class AddOrderProduct(BaseMutation): class AddOrderProduct(BaseMutation):
class Meta: class Meta:
description = _("add a product to the order") description = _("add a product to the order")
@ -87,7 +91,7 @@ class AddOrderProduct(BaseMutation):
order = Field(OrderType) order = Field(OrderType)
@staticmethod @staticmethod
def mutate(_parent, info, product_uuid, order_uuid, attributes=None): def mutate(parent, info, product_uuid, order_uuid, attributes=None): # type: ignore [override]
user = info.context.user user = info.context.user
try: try:
order = Order.objects.get(uuid=order_uuid) order = Order.objects.get(uuid=order_uuid)
@ -101,6 +105,7 @@ class AddOrderProduct(BaseMutation):
raise Http404(_(f"order {order_uuid} not found")) from dne raise Http404(_(f"order {order_uuid} not found")) from dne
# noinspection PyUnusedLocal
class RemoveOrderProduct(BaseMutation): class RemoveOrderProduct(BaseMutation):
class Meta: class Meta:
description = _("remove a product from the order") description = _("remove a product from the order")
@ -113,7 +118,7 @@ class RemoveOrderProduct(BaseMutation):
order = Field(OrderType) order = Field(OrderType)
@staticmethod @staticmethod
def mutate(_parent, info, product_uuid, order_uuid, attributes=None): def mutate(parent, info, product_uuid, order_uuid, attributes=None) -> AddOrderProduct | None: # type: ignore [override]
user = info.context.user user = info.context.user
try: try:
order = Order.objects.get(uuid=order_uuid) order = Order.objects.get(uuid=order_uuid)
@ -127,6 +132,7 @@ class RemoveOrderProduct(BaseMutation):
raise Http404(_(f"order {order_uuid} not found")) from dne raise Http404(_(f"order {order_uuid} not found")) from dne
# noinspection PyUnusedLocal,PyTypeChecker
class RemoveAllOrderProducts(BaseMutation): class RemoveAllOrderProducts(BaseMutation):
class Meta: class Meta:
description = _("remove all products from the order") description = _("remove all products from the order")
@ -137,7 +143,7 @@ class RemoveAllOrderProducts(BaseMutation):
order = Field(OrderType) order = Field(OrderType)
@staticmethod @staticmethod
def mutate(_parent, info, order_uuid): def mutate(parent, info, order_uuid): # type: ignore [override]
user = info.context.user user = info.context.user
order = Order.objects.get(uuid=order_uuid) order = Order.objects.get(uuid=order_uuid)
if not (user.has_perm("core.delete_orderproduct") or user == order.user): if not (user.has_perm("core.delete_orderproduct") or user == order.user):
@ -148,6 +154,7 @@ class RemoveAllOrderProducts(BaseMutation):
return RemoveAllOrderProducts(order=order) return RemoveAllOrderProducts(order=order)
# noinspection PyUnusedLocal,PyTypeChecker
class RemoveOrderProductsOfAKind(BaseMutation): class RemoveOrderProductsOfAKind(BaseMutation):
class Meta: class Meta:
description = _("remove a product from the order") description = _("remove a product from the order")
@ -159,7 +166,7 @@ class RemoveOrderProductsOfAKind(BaseMutation):
order = Field(OrderType) order = Field(OrderType)
@staticmethod @staticmethod
def mutate(_parent, info, product_uuid, order_uuid): def mutate(parent, info, product_uuid, order_uuid): # type: ignore [override]
user = info.context.user user = info.context.user
order = Order.objects.get(uuid=order_uuid) order = Order.objects.get(uuid=order_uuid)
if not (user.has_perm("core.delete_orderproduct") or user == order.user): if not (user.has_perm("core.delete_orderproduct") or user == order.user):
@ -170,6 +177,7 @@ class RemoveOrderProductsOfAKind(BaseMutation):
return RemoveOrderProductsOfAKind(order=order) return RemoveOrderProductsOfAKind(order=order)
# noinspection PyUnusedLocal,PyTypeChecker
class BuyOrder(BaseMutation): class BuyOrder(BaseMutation):
class Meta: class Meta:
description = _("buy an order") description = _("buy an order")
@ -189,7 +197,7 @@ class BuyOrder(BaseMutation):
@staticmethod @staticmethod
def mutate( def mutate(
_parent, parent,
info, info,
order_uuid=None, order_uuid=None,
order_hr_id=None, order_hr_id=None,
@ -199,7 +207,7 @@ class BuyOrder(BaseMutation):
shipping_address=None, shipping_address=None,
billing_address=None, billing_address=None,
chosen_products=None, chosen_products=None,
): ): # type: ignore [override]
if not any([order_uuid, order_hr_id]) or all([order_uuid, order_hr_id]): if not any([order_uuid, order_hr_id]) or all([order_uuid, order_hr_id]):
raise BadRequest(_("please provide either order_uuid or order_hr_id - mutually exclusive")) raise BadRequest(_("please provide either order_uuid or order_hr_id - mutually exclusive"))
user = info.context.user user = info.context.user
@ -232,6 +240,7 @@ class BuyOrder(BaseMutation):
raise Http404(_(f"order {order_uuid} not found")) from dne raise Http404(_(f"order {order_uuid} not found")) from dne
# noinspection PyUnusedLocal,PyTypeChecker
class BulkOrderAction(BaseMutation): class BulkOrderAction(BaseMutation):
class Meta: class Meta:
description = _("perform an action on a list of products in the order") description = _("perform an action on a list of products in the order")
@ -246,13 +255,13 @@ class BulkOrderAction(BaseMutation):
@staticmethod @staticmethod
def mutate( def mutate(
_parent, parent,
info, info,
action, action,
products, products,
order_uuid=None, order_uuid=None,
order_hr_id=None, order_hr_id=None,
): ): # type: ignore [override]
if not any([order_uuid, order_hr_id]) or all([order_uuid, order_hr_id]): if not any([order_uuid, order_hr_id]) or all([order_uuid, order_hr_id]):
raise BadRequest(_("please provide either order_uuid or order_hr_id - mutually exclusive")) raise BadRequest(_("please provide either order_uuid or order_hr_id - mutually exclusive"))
user = info.context.user user = info.context.user
@ -279,6 +288,7 @@ class BulkOrderAction(BaseMutation):
raise Http404(_(f"order {order_uuid} not found")) from dne raise Http404(_(f"order {order_uuid} not found")) from dne
# noinspection PyUnusedLocal,PyTypeChecker
class BulkWishlistAction(BaseMutation): class BulkWishlistAction(BaseMutation):
class Meta: class Meta:
description = _("perform an action on a list of products in the wishlist") description = _("perform an action on a list of products in the wishlist")
@ -292,12 +302,12 @@ class BulkWishlistAction(BaseMutation):
@staticmethod @staticmethod
def mutate( def mutate(
_parent, parent,
info, info,
action, action,
products, products,
wishlist_uuid=None, wishlist_uuid=None,
): ): # type: ignore [override]
if not wishlist_uuid: if not wishlist_uuid:
raise BadRequest(_("please provide wishlist_uuid value")) raise BadRequest(_("please provide wishlist_uuid value"))
user = info.context.user user = info.context.user
@ -319,6 +329,7 @@ class BulkWishlistAction(BaseMutation):
raise Http404(_(f"wishlist {wishlist_uuid} not found")) from dne raise Http404(_(f"wishlist {wishlist_uuid} not found")) from dne
# noinspection PyUnusedLocal
class BuyUnregisteredOrder(BaseMutation): class BuyUnregisteredOrder(BaseMutation):
class Meta: class Meta:
description = _("purchase an order without account creation") description = _("purchase an order without account creation")
@ -338,7 +349,7 @@ class BuyUnregisteredOrder(BaseMutation):
@staticmethod @staticmethod
def mutate( def mutate(
_parent, parent,
info, info,
products, products,
customer_name, customer_name,
@ -349,7 +360,7 @@ class BuyUnregisteredOrder(BaseMutation):
customer_shipping_address=None, customer_shipping_address=None,
promocode_uuid=None, promocode_uuid=None,
is_business=False, is_business=False,
): ): # type: ignore [override]
order = Order.objects.create(status="MOMENTAL") order = Order.objects.create(status="MOMENTAL")
transaction = order.buy_without_registration( transaction = order.buy_without_registration(
products=products, products=products,
@ -362,9 +373,11 @@ class BuyUnregisteredOrder(BaseMutation):
payment_method=payment_method, payment_method=payment_method,
is_business=is_business, is_business=is_business,
) )
# noinspection PyTypeChecker
return BuyUnregisteredOrder(transaction=transaction) return BuyUnregisteredOrder(transaction=transaction)
# noinspection PyUnusedLocal,PyTypeChecker
class AddWishlistProduct(BaseMutation): class AddWishlistProduct(BaseMutation):
class Meta: class Meta:
description = _("add a product to the wishlist") description = _("add a product to the wishlist")
@ -376,7 +389,7 @@ class AddWishlistProduct(BaseMutation):
wishlist = Field(WishlistType) wishlist = Field(WishlistType)
@staticmethod @staticmethod
def mutate(_parent, info, product_uuid, wishlist_uuid): def mutate(parent, info, product_uuid, wishlist_uuid): # type: ignore [override]
user = info.context.user user = info.context.user
try: try:
wishlist = Wishlist.objects.get(uuid=wishlist_uuid) wishlist = Wishlist.objects.get(uuid=wishlist_uuid)
@ -392,6 +405,7 @@ class AddWishlistProduct(BaseMutation):
raise Http404(_(f"wishlist {wishlist_uuid} not found")) from dne raise Http404(_(f"wishlist {wishlist_uuid} not found")) from dne
# noinspection PyUnusedLocal,PyTypeChecker
class RemoveWishlistProduct(BaseMutation): class RemoveWishlistProduct(BaseMutation):
class Meta: class Meta:
description = _("remove a product from the wishlist") description = _("remove a product from the wishlist")
@ -403,7 +417,7 @@ class RemoveWishlistProduct(BaseMutation):
wishlist = Field(WishlistType) wishlist = Field(WishlistType)
@staticmethod @staticmethod
def mutate(_parent, info, product_uuid, wishlist_uuid): def mutate(parent, info, product_uuid, wishlist_uuid): # type: ignore [override]
user = info.context.user user = info.context.user
try: try:
wishlist = Wishlist.objects.get(uuid=wishlist_uuid) wishlist = Wishlist.objects.get(uuid=wishlist_uuid)
@ -419,6 +433,7 @@ class RemoveWishlistProduct(BaseMutation):
raise Http404(_(f"wishlist {wishlist_uuid} not found")) from dne raise Http404(_(f"wishlist {wishlist_uuid} not found")) from dne
# noinspection PyUnusedLocal,PyTypeChecker
class RemoveAllWishlistProducts(BaseMutation): class RemoveAllWishlistProducts(BaseMutation):
class Meta: class Meta:
description = _("remove all products from the wishlist") description = _("remove all products from the wishlist")
@ -429,7 +444,7 @@ class RemoveAllWishlistProducts(BaseMutation):
wishlist = Field(WishlistType) wishlist = Field(WishlistType)
@staticmethod @staticmethod
def mutate(_parent, info, wishlist_uuid): def mutate(parent, info, wishlist_uuid): # type: ignore [override]
user = info.context.user user = info.context.user
try: try:
wishlist = Wishlist.objects.get(uuid=wishlist_uuid) wishlist = Wishlist.objects.get(uuid=wishlist_uuid)
@ -446,6 +461,7 @@ class RemoveAllWishlistProducts(BaseMutation):
raise Http404(_(f"wishlist {wishlist_uuid} not found")) from dne raise Http404(_(f"wishlist {wishlist_uuid} not found")) from dne
# noinspection PyUnusedLocal,PyTypeChecker
class BuyWishlist(BaseMutation): class BuyWishlist(BaseMutation):
class Meta: class Meta:
description = _("buy all products from the wishlist") description = _("buy all products from the wishlist")
@ -459,7 +475,7 @@ class BuyWishlist(BaseMutation):
transaction = Field(TransactionType, required=False) transaction = Field(TransactionType, required=False)
@staticmethod @staticmethod
def mutate(_parent, info, wishlist_uuid, force_balance=False, force_payment=False): def mutate(parent, info, wishlist_uuid, force_balance=False, force_payment=False): # type: ignore [override]
user = info.context.user user = info.context.user
try: try:
wishlist = Wishlist.objects.get(uuid=wishlist_uuid) wishlist = Wishlist.objects.get(uuid=wishlist_uuid)
@ -489,6 +505,7 @@ class BuyWishlist(BaseMutation):
raise Http404(_(f"wishlist {wishlist_uuid} not found")) from dne raise Http404(_(f"wishlist {wishlist_uuid} not found")) from dne
# noinspection PyUnusedLocal,PyTypeChecker
class BuyProduct(BaseMutation): class BuyProduct(BaseMutation):
class Meta: class Meta:
description = _("buy a product") description = _("buy a product")
@ -507,13 +524,13 @@ class BuyProduct(BaseMutation):
@staticmethod @staticmethod
def mutate( def mutate(
_parent, parent,
info, info,
product_uuid, product_uuid,
attributes=None, attributes=None,
force_balance=False, force_balance=False,
force_payment=False, force_payment=False,
): ): # type: ignore [override]
user = info.context.user user = info.context.user
order = Order.objects.create(user=user, status="MOMENTAL") order = Order.objects.create(user=user, status="MOMENTAL")
order.add_product(product_uuid=product_uuid, attributes=format_attributes(attributes)) order.add_product(product_uuid=product_uuid, attributes=format_attributes(attributes))
@ -527,6 +544,7 @@ class BuyProduct(BaseMutation):
raise TypeError(_(f"wrong type came from order.buy() method: {type(instance)!s}")) raise TypeError(_(f"wrong type came from order.buy() method: {type(instance)!s}"))
# noinspection PyUnusedLocal,PyTypeChecker
class FeedbackProductAction(BaseMutation): class FeedbackProductAction(BaseMutation):
class Meta: class Meta:
description = _("add or delete a feedback for orderproduct") description = _("add or delete a feedback for orderproduct")
@ -540,7 +558,7 @@ class FeedbackProductAction(BaseMutation):
feedback = Field(FeedbackType, required=False) feedback = Field(FeedbackType, required=False)
@staticmethod @staticmethod
def mutate(_parent, info, order_product_uuid, action, comment=None, rating=None): def mutate(parent, info, order_product_uuid, action, comment=None, rating=None): # type: ignore [override]
user = info.context.user user = info.context.user
try: try:
order_product = OrderProduct.objects.get(uuid=order_product_uuid) order_product = OrderProduct.objects.get(uuid=order_product_uuid)
@ -559,6 +577,7 @@ class FeedbackProductAction(BaseMutation):
raise Http404(_(f"order product {order_product_uuid} not found")) from dne raise Http404(_(f"order product {order_product_uuid} not found")) from dne
# noinspection PyUnusedLocal,PyTypeChecker
class CreateProduct(BaseMutation): class CreateProduct(BaseMutation):
class Arguments: class Arguments:
name = String(required=True) name = String(required=True)
@ -568,7 +587,7 @@ class CreateProduct(BaseMutation):
product = Field(ProductType) product = Field(ProductType)
@staticmethod @staticmethod
def mutate(_parent, info, name, category_uuid, description=None): def mutate(parent, info, name, category_uuid, description=None): # type: ignore [override]
if not info.context.user.has_perm("core.add_product"): if not info.context.user.has_perm("core.add_product"):
raise PermissionDenied(permission_denied_message) raise PermissionDenied(permission_denied_message)
category = Category.objects.get(uuid=category_uuid) category = Category.objects.get(uuid=category_uuid)
@ -576,6 +595,7 @@ class CreateProduct(BaseMutation):
return CreateProduct(product=product) return CreateProduct(product=product)
# noinspection PyUnusedLocal,PyTypeChecker
class UpdateProduct(BaseMutation): class UpdateProduct(BaseMutation):
class Arguments: class Arguments:
uuid = UUID(required=True) uuid = UUID(required=True)
@ -586,7 +606,7 @@ class UpdateProduct(BaseMutation):
product = Field(ProductType) product = Field(ProductType)
@staticmethod @staticmethod
def mutate(_parent, info, uuid, name=None, description=None, category_uuid=None): def mutate(parent, info, uuid, name=None, description=None, category_uuid=None): # type: ignore [override]
user = info.context.user user = info.context.user
if not user.has_perm("core.change_product"): if not user.has_perm("core.change_product"):
raise PermissionDenied(permission_denied_message) raise PermissionDenied(permission_denied_message)
@ -601,6 +621,7 @@ class UpdateProduct(BaseMutation):
return UpdateProduct(product=product) return UpdateProduct(product=product)
# noinspection PyUnusedLocal,PyTypeChecker
class DeleteProduct(BaseMutation): class DeleteProduct(BaseMutation):
class Arguments: class Arguments:
uuid = UUID(required=True) uuid = UUID(required=True)
@ -608,7 +629,7 @@ class DeleteProduct(BaseMutation):
ok = Boolean() ok = Boolean()
@staticmethod @staticmethod
def mutate(_parent, info, uuid): def mutate(parent, info, uuid): # type: ignore [override]
user = info.context.user user = info.context.user
if not user.has_perm("core.delete_product"): if not user.has_perm("core.delete_product"):
raise PermissionDenied(permission_denied_message) raise PermissionDenied(permission_denied_message)
@ -617,6 +638,7 @@ class DeleteProduct(BaseMutation):
return DeleteProduct(ok=True) return DeleteProduct(ok=True)
# noinspection PyUnusedLocal,PyTypeChecker
class CreateAddress(BaseMutation): class CreateAddress(BaseMutation):
class Arguments: class Arguments:
raw_data = String(required=True, description=_("original address string provided by the user")) raw_data = String(required=True, description=_("original address string provided by the user"))
@ -624,13 +646,14 @@ class CreateAddress(BaseMutation):
address = Field(AddressType) address = Field(AddressType)
@staticmethod @staticmethod
def mutate(_parent, info, raw_data): def mutate(parent, info, raw_data): # type: ignore [override]
user = info.context.user if info.context.user.is_authenticated else None user = info.context.user if info.context.user.is_authenticated else None
address = Address.objects.create(raw_data=raw_data, user=user) address = Address.objects.create(raw_data=raw_data, user=user)
return CreateAddress(address=address) return CreateAddress(address=address)
# noinspection PyUnusedLocal
class DeleteAddress(BaseMutation): class DeleteAddress(BaseMutation):
class Arguments: class Arguments:
uuid = UUID(required=True) uuid = UUID(required=True)
@ -638,7 +661,7 @@ class DeleteAddress(BaseMutation):
success = Boolean() success = Boolean()
@staticmethod @staticmethod
def mutate(_parent, info, uuid): def mutate(parent, info, uuid): # type: ignore [override]
try: try:
address = Address.objects.get(uuid=uuid) address = Address.objects.get(uuid=uuid)
if ( if (
@ -647,6 +670,7 @@ class DeleteAddress(BaseMutation):
or info.context.user == address.user or info.context.user == address.user
): ):
address.delete() address.delete()
# noinspection PyTypeChecker
return DeleteAddress(success=True) return DeleteAddress(success=True)
raise PermissionDenied(permission_denied_message) raise PermissionDenied(permission_denied_message)
@ -656,6 +680,7 @@ class DeleteAddress(BaseMutation):
raise Http404(_(f"{name} does not exist: {uuid}")) from dne raise Http404(_(f"{name} does not exist: {uuid}")) from dne
# noinspection PyUnusedLocal
class AutocompleteAddress(BaseMutation): class AutocompleteAddress(BaseMutation):
class Arguments: class Arguments:
q = String() q = String()
@ -664,7 +689,7 @@ class AutocompleteAddress(BaseMutation):
suggestions = GenericScalar() suggestions = GenericScalar()
@staticmethod @staticmethod
def mutate(_parent, info, q, limit): def mutate(parent, info, q, limit): # type: ignore [override]
if 1 > limit > 10: if 1 > limit > 10:
raise BadRequest(_("limit must be between 1 and 10")) raise BadRequest(_("limit must be between 1 and 10"))
try: try:
@ -672,9 +697,11 @@ class AutocompleteAddress(BaseMutation):
except Exception as e: except Exception as e:
raise BadRequest(f"geocoding error: {e!s}") from e raise BadRequest(f"geocoding error: {e!s}") from e
# noinspection PyTypeChecker
return AutocompleteAddress(suggestions=suggestions) return AutocompleteAddress(suggestions=suggestions)
# noinspection PyUnusedLocal
class ContactUs(BaseMutation): class ContactUs(BaseMutation):
class Arguments: class Arguments:
email = String(required=True) email = String(required=True)
@ -687,7 +714,7 @@ class ContactUs(BaseMutation):
error = String() error = String()
@staticmethod @staticmethod
def mutate(_parent, info, email, name, subject, message, phone_number=None): def mutate(parent, info, email, name, subject, message, phone_number=None): # type: ignore [override]
try: try:
contact_us_email.delay( contact_us_email.delay(
{ {
@ -698,12 +725,14 @@ class ContactUs(BaseMutation):
"message": message, "message": message,
} }
) )
# noinspection PyTypeChecker
return ContactUs(received=True) return ContactUs(received=True)
except Exception as e: except Exception as e:
# noinspection PyTypeChecker
return ContactUs(received=False, error=str(e)) return ContactUs(received=False, error=str(e))
# noinspection PyArgumentList # noinspection PyArgumentList PyUnusedLocal
class Search(BaseMutation): class Search(BaseMutation):
class Arguments: class Arguments:
query = String(required=True) query = String(required=True)
@ -714,9 +743,10 @@ class Search(BaseMutation):
description = _("elasticsearch - works like a charm") description = _("elasticsearch - works like a charm")
@staticmethod @staticmethod
def mutate(_parent, info, query): def mutate(parent, info, query): # type: ignore [override]
data = process_query(query=query, request=info.context) data = process_query(query=query, request=info.context)
# noinspection PyTypeChecker
return Search( return Search(
results=SearchResultsType( results=SearchResultsType(
products=data["products"], products=data["products"],

View file

@ -3,7 +3,7 @@ from typing import Any
from constance import config from constance import config
from django.core.cache import cache from django.core.cache import cache
from django.db.models import Max, Min from django.db.models import Max, Min, QuerySet
from django.db.models.functions import Length from django.db.models.functions import Length
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from graphene import ( from graphene import (
@ -60,7 +60,7 @@ from payments.graphene.object_types import TransactionType
logger = logging.getLogger("django") logger = logging.getLogger("django")
class SEOMetaType(ObjectType): class SEOMetaType(ObjectType): # type: ignore [misc]
title = String() title = String()
description = String() description = String()
canonical = String() canonical = String()
@ -71,7 +71,7 @@ class SEOMetaType(ObjectType):
hreflang = String() hreflang = String()
class AttributeType(DjangoObjectType): class AttributeType(DjangoObjectType): # type: ignore [misc]
values = List(lambda: AttributeValueType, description=_("attribute values")) values = List(lambda: AttributeValueType, description=_("attribute values"))
class Meta: class Meta:
@ -81,7 +81,7 @@ class AttributeType(DjangoObjectType):
filter_fields = ["uuid"] filter_fields = ["uuid"]
description = _("attributes") description = _("attributes")
def resolve_values(self, info): def resolve_values(self, info) -> QuerySet[AttributeValue]:
base_qs = AttributeValue.objects.filter(attribute=self) base_qs = AttributeValue.objects.filter(attribute=self)
product_uuid = getattr(info.context, "_product_uuid", None) product_uuid = getattr(info.context, "_product_uuid", None)
@ -91,7 +91,7 @@ class AttributeType(DjangoObjectType):
return base_qs return base_qs
class AttributeGroupType(DjangoObjectType): class AttributeGroupType(DjangoObjectType): # type: ignore [misc]
attributes = List(lambda: AttributeType, description=_("grouped attributes")) attributes = List(lambda: AttributeType, description=_("grouped attributes"))
class Meta: class Meta:
@ -101,7 +101,7 @@ class AttributeGroupType(DjangoObjectType):
filter_fields = ["uuid"] filter_fields = ["uuid"]
description = _("groups of attributes") description = _("groups of attributes")
def resolve_attributes(self: AttributeGroup, info): def resolve_attributes(self: AttributeGroup, info) -> QuerySet[Attribute]:
product_uuid = getattr(info.context, "_product_uuid", None) product_uuid = getattr(info.context, "_product_uuid", None)
qs = self.attributes.all() qs = self.attributes.all()
@ -112,7 +112,7 @@ class AttributeGroupType(DjangoObjectType):
return qs return qs
class BrandType(DjangoObjectType): class BrandType(DjangoObjectType): # type: ignore [misc]
categories = List(lambda: CategoryType, description=_("categories")) categories = List(lambda: CategoryType, description=_("categories"))
seo_meta = Field(SEOMetaType, description=_("SEO Meta snapshot")) seo_meta = Field(SEOMetaType, description=_("SEO Meta snapshot"))
@ -123,18 +123,18 @@ class BrandType(DjangoObjectType):
filter_fields = ["uuid", "name"] filter_fields = ["uuid", "name"]
description = _("brands") description = _("brands")
def resolve_categories(self: Brand, info): def resolve_categories(self: Brand, info) -> QuerySet[Category]:
if info.context.user.has_perm("core.view_category"): if info.context.user.has_perm("core.view_category"):
return self.categories.all() return self.categories.all()
return self.categories.filter(is_active=True) return self.categories.filter(is_active=True)
def resolve_big_logo(self: Brand, info): def resolve_big_logo(self: Brand, info) -> str | None:
return info.context.build_absolute_uri(self.big_logo.url) if self.big_logo else "" return info.context.build_absolute_uri(self.big_logo.url) if self.big_logo else ""
def resolve_small_logo(self: Brand, info): def resolve_small_logo(self: Brand, info) -> str | None:
return info.context.build_absolute_uri(self.small_logo.url) if self.small_logo else "" return info.context.build_absolute_uri(self.small_logo.url) if self.small_logo else ""
def resolve_seo_meta(self: Brand, info): def resolve_seo_meta(self: Brand, info) -> dict[str, str | list[Any] | dict[str, str] | None]:
lang = graphene_current_lang() lang = graphene_current_lang()
base = f"https://{config.BASE_DOMAIN}" base = f"https://{config.BASE_DOMAIN}"
canonical = f"{base}/{lang}/brand/{self.slug}" canonical = f"{base}/{lang}/brand/{self.slug}"
@ -177,17 +177,17 @@ class BrandType(DjangoObjectType):
} }
class FilterableAttributeType(ObjectType): class FilterableAttributeType(ObjectType): # type: ignore [misc]
attribute_name = String(required=True) attribute_name = String(required=True)
possible_values = List(String, required=True) possible_values = List(String, required=True)
class MinMaxPriceType(ObjectType): class MinMaxPriceType(ObjectType): # type: ignore [misc]
min_price = Float() min_price = Float()
max_price = Float() max_price = Float()
class CategoryType(DjangoObjectType): class CategoryType(DjangoObjectType): # type: ignore [misc]
children = List( children = List(
lambda: CategoryType, lambda: CategoryType,
description=_("categories"), description=_("categories"),
@ -340,7 +340,7 @@ class CategoryType(DjangoObjectType):
} }
class VendorType(DjangoObjectType): class VendorType(DjangoObjectType): # type: ignore [misc]
markup_percent = Float(description=_("markup percentage")) markup_percent = Float(description=_("markup percentage"))
class Meta: class Meta:
@ -351,7 +351,7 @@ class VendorType(DjangoObjectType):
description = _("vendors") description = _("vendors")
class AddressType(DjangoObjectType): class AddressType(DjangoObjectType): # type: ignore [misc]
latitude = Float(description=_("Latitude (Y coordinate)")) latitude = Float(description=_("Latitude (Y coordinate)"))
longitude = Float(description=_("Longitude (X coordinate)")) longitude = Float(description=_("Longitude (X coordinate)"))
@ -381,7 +381,7 @@ class AddressType(DjangoObjectType):
return self.location.y if self.location else None return self.location.y if self.location else None
class FeedbackType(DjangoObjectType): class FeedbackType(DjangoObjectType): # type: ignore [misc]
comment = String(description=_("comment")) comment = String(description=_("comment"))
rating = Int(description=_("rating value from 1 to 10, inclusive, or 0 if not set.")) rating = Int(description=_("rating value from 1 to 10, inclusive, or 0 if not set."))
@ -393,7 +393,7 @@ class FeedbackType(DjangoObjectType):
description = _("represents feedback from a user.") description = _("represents feedback from a user.")
class OrderProductType(DjangoObjectType): class OrderProductType(DjangoObjectType): # type: ignore [misc]
attributes = GenericScalar(description=_("attributes")) attributes = GenericScalar(description=_("attributes"))
notifications = GenericScalar(description=_("notifications")) notifications = GenericScalar(description=_("notifications"))
download_url = String(description=_("download url for this order product if applicable")) download_url = String(description=_("download url for this order product if applicable"))
@ -429,7 +429,7 @@ class OrderProductType(DjangoObjectType):
return self.download_url return self.download_url
class OrderType(DjangoObjectType): class OrderType(DjangoObjectType): # type: ignore [misc]
order_products = DjangoFilterConnectionField( order_products = DjangoFilterConnectionField(
OrderProductType, description=_("a list of order products in this order") OrderProductType, description=_("a list of order products in this order")
) )
@ -482,7 +482,7 @@ class OrderType(DjangoObjectType):
return None return None
class ProductImageType(DjangoObjectType): class ProductImageType(DjangoObjectType): # type: ignore [misc]
image = String(description=_("image url")) image = String(description=_("image url"))
class Meta: class Meta:
@ -496,7 +496,7 @@ class ProductImageType(DjangoObjectType):
return info.context.build_absolute_uri(self.image.url) if self.image else "" return info.context.build_absolute_uri(self.image.url) if self.image else ""
class ProductType(DjangoObjectType): class ProductType(DjangoObjectType): # type: ignore [misc]
category = Field(CategoryType, description=_("category")) category = Field(CategoryType, description=_("category"))
images = DjangoFilterConnectionField(ProductImageType, description=_("images")) images = DjangoFilterConnectionField(ProductImageType, description=_("images"))
feedbacks = DjangoFilterConnectionField(FeedbackType, description=_("feedbacks")) feedbacks = DjangoFilterConnectionField(FeedbackType, description=_("feedbacks"))
@ -605,7 +605,7 @@ class ProductType(DjangoObjectType):
} }
class AttributeValueType(DjangoObjectType): class AttributeValueType(DjangoObjectType): # type: ignore [misc]
value = String(description=_("attribute value")) value = String(description=_("attribute value"))
class Meta: class Meta:
@ -616,7 +616,7 @@ class AttributeValueType(DjangoObjectType):
description = _("attribute value") description = _("attribute value")
class PromoCodeType(DjangoObjectType): class PromoCodeType(DjangoObjectType): # type: ignore [misc]
discount = Float() discount = Float()
discount_type = String() discount_type = String()
@ -640,7 +640,7 @@ class PromoCodeType(DjangoObjectType):
return "percent" if self.discount_percent else "amount" return "percent" if self.discount_percent else "amount"
class PromotionType(DjangoObjectType): class PromotionType(DjangoObjectType): # type: ignore [misc]
products = DjangoFilterConnectionField(ProductType, description=_("products on sale")) products = DjangoFilterConnectionField(ProductType, description=_("products on sale"))
class Meta: class Meta:
@ -651,7 +651,7 @@ class PromotionType(DjangoObjectType):
description = _("promotions") description = _("promotions")
class StockType(DjangoObjectType): class StockType(DjangoObjectType): # type: ignore [misc]
vendor = Field(VendorType, description=_("vendor")) vendor = Field(VendorType, description=_("vendor"))
product = Field(ProductType, description=_("product")) product = Field(ProductType, description=_("product"))
@ -663,7 +663,7 @@ class StockType(DjangoObjectType):
description = _("stocks") description = _("stocks")
class WishlistType(DjangoObjectType): class WishlistType(DjangoObjectType): # type: ignore [misc]
products = DjangoFilterConnectionField(ProductType, description=_("wishlisted products")) products = DjangoFilterConnectionField(ProductType, description=_("wishlisted products"))
class Meta: class Meta:
@ -673,7 +673,7 @@ class WishlistType(DjangoObjectType):
description = _("wishlists") description = _("wishlists")
class ProductTagType(DjangoObjectType): class ProductTagType(DjangoObjectType): # type: ignore [misc]
product_set = DjangoFilterConnectionField(ProductType, description=_("tagged products")) product_set = DjangoFilterConnectionField(ProductType, description=_("tagged products"))
class Meta: class Meta:
@ -684,7 +684,7 @@ class ProductTagType(DjangoObjectType):
description = _("product tags") description = _("product tags")
class CategoryTagType(DjangoObjectType): class CategoryTagType(DjangoObjectType): # type: ignore [misc]
category_set = DjangoFilterConnectionField(CategoryType, description=_("tagged categories")) category_set = DjangoFilterConnectionField(CategoryType, description=_("tagged categories"))
class Meta: class Meta:
@ -695,7 +695,7 @@ class CategoryTagType(DjangoObjectType):
description = _("categories tags") description = _("categories tags")
class ConfigType(ObjectType): class ConfigType(ObjectType): # type: ignore [misc]
project_name = String(description=_("project name")) project_name = String(description=_("project name"))
base_domain = String(description=_("company email")) base_domain = String(description=_("company email"))
company_name = String(description=_("company name")) company_name = String(description=_("company name"))
@ -712,7 +712,7 @@ class ConfigType(ObjectType):
description = _("company configuration") description = _("company configuration")
class LanguageType(ObjectType): class LanguageType(ObjectType): # type: ignore [misc]
code = String(description=_("language code")) code = String(description=_("language code"))
name = String(description=_("language name")) name = String(description=_("language name"))
flag = String(description=_("language flag, if exists :)")) flag = String(description=_("language flag, if exists :)"))
@ -721,40 +721,40 @@ class LanguageType(ObjectType):
description = _("supported languages") description = _("supported languages")
class SearchProductsResultsType(ObjectType): class SearchProductsResultsType(ObjectType): # type: ignore [misc]
uuid = UUID() uuid = UUID()
name = String() name = String()
slug = String() slug = String()
image = String() image = String()
class SearchCategoriesResultsType(ObjectType): class SearchCategoriesResultsType(ObjectType): # type: ignore [misc]
uuid = UUID() uuid = UUID()
name = String() name = String()
slug = String() slug = String()
image = String() image = String()
class SearchBrandsResultsType(ObjectType): class SearchBrandsResultsType(ObjectType): # type: ignore [misc]
uuid = UUID() uuid = UUID()
name = String() name = String()
slug = String() slug = String()
image = String() image = String()
class SearchPostsResultsType(ObjectType): class SearchPostsResultsType(ObjectType): # type: ignore [misc]
uuid = UUID() uuid = UUID()
name = String() name = String()
slug = String() slug = String()
class SearchResultsType(ObjectType): class SearchResultsType(ObjectType): # type: ignore [misc]
products = List(description=_("products search results"), of_type=SearchProductsResultsType) products = List(description=_("products search results"), of_type=SearchProductsResultsType)
categories = List(description=_("products search results"), of_type=SearchCategoriesResultsType) categories = List(description=_("products search results"), of_type=SearchCategoriesResultsType)
brands = List(description=_("products search results"), of_type=SearchBrandsResultsType) brands = List(description=_("products search results"), of_type=SearchBrandsResultsType)
posts = List(description=_("posts search results"), of_type=SearchPostsResultsType) posts = List(description=_("posts search results"), of_type=SearchPostsResultsType)
class BulkProductInput(InputObjectType): class BulkProductInput(InputObjectType): # type: ignore [misc]
uuid = UUID(required=True) uuid = UUID(required=True)
attributes = GenericScalar(required=False) attributes = GenericScalar(required=False)

View file

@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: EVIBES 3.0.0\n" "Project-Id-Version: EVIBES 3.0.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-10-13 13:56+0300\n" "POT-Creation-Date: 2025-10-13 18:49+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n" "Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
"Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n" "Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n"
@ -48,82 +48,86 @@ msgstr "تم التعديل"
msgid "when the object was last modified" msgid "when the object was last modified"
msgstr "متى تم تحرير الكائن آخر مرة" msgstr "متى تم تحرير الكائن آخر مرة"
#: core/admin.py:63 #: core/admin.py:68
msgid "translations" msgid "translations"
msgstr "الترجمات" msgstr "الترجمات"
#: core/admin.py:67 #: core/admin.py:72
msgid "general" msgid "general"
msgstr "جنرال لواء" msgstr "جنرال لواء"
#: core/admin.py:69 #: core/admin.py:74
msgid "relations" msgid "relations"
msgstr "العلاقات" msgstr "العلاقات"
#: core/admin.py:87 #: core/admin.py:76
msgid "additional info"
msgstr "معلومات إضافية"
#: core/admin.py:94
msgid "metadata" msgid "metadata"
msgstr "البيانات الوصفية" msgstr "البيانات الوصفية"
#: core/admin.py:94 #: core/admin.py:101
msgid "timestamps" msgid "timestamps"
msgstr "الطوابع الزمنية" msgstr "الطوابع الزمنية"
#: core/admin.py:109 #: core/admin.py:116
#, python-format #, python-format
msgid "activate selected %(verbose_name_plural)s" msgid "activate selected %(verbose_name_plural)s"
msgstr "تنشيط المحدد _PH_0__%(verbose_name_plural)s" msgstr "تنشيط المحدد _PH_0__%(verbose_name_plural)s"
#: core/admin.py:114 #: core/admin.py:121
msgid "selected items have been activated." msgid "selected items have been activated."
msgstr "تم تفعيل العناصر المختارة!" msgstr "تم تفعيل العناصر المختارة!"
#: core/admin.py:120 #: core/admin.py:127
#, python-format #, python-format
msgid "deactivate selected %(verbose_name_plural)s" msgid "deactivate selected %(verbose_name_plural)s"
msgstr "إلغاء التنشيط المحدد _PH_0_%(verbose_name_plural)s" msgstr "إلغاء التنشيط المحدد _PH_0_%(verbose_name_plural)s"
#: core/admin.py:125 #: core/admin.py:132
msgid "selected items have been deactivated." msgid "selected items have been deactivated."
msgstr "تم إلغاء تنشيط العناصر المحددة!" msgstr "تم إلغاء تنشيط العناصر المحددة!"
#: core/admin.py:137 core/graphene/object_types.py:609 #: core/admin.py:144 core/graphene/object_types.py:609
#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 #: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717
msgid "attribute value" msgid "attribute value"
msgstr "قيمة السمة" msgstr "قيمة السمة"
#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:718 #: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718
msgid "attribute values" msgid "attribute values"
msgstr "قيم السمات" msgstr "قيم السمات"
#: core/admin.py:146 #: core/admin.py:153
msgid "image" msgid "image"
msgstr "الصورة" msgstr "الصورة"
#: core/admin.py:147 core/graphene/object_types.py:501 #: core/admin.py:154 core/graphene/object_types.py:501
msgid "images" msgid "images"
msgstr "الصور" msgstr "الصور"
#: core/admin.py:155 core/models.py:467 #: core/admin.py:162 core/models.py:467
msgid "stock" msgid "stock"
msgstr "المخزون" msgstr "المخزون"
#: core/admin.py:156 core/graphene/object_types.py:663 #: core/admin.py:163 core/graphene/object_types.py:663
msgid "stocks" msgid "stocks"
msgstr "الأسهم" msgstr "الأسهم"
#: core/admin.py:166 core/models.py:1675 #: core/admin.py:173 core/models.py:1675
msgid "order product" msgid "order product"
msgstr "طلب المنتج" msgstr "طلب المنتج"
#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1676 #: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676
msgid "order products" msgid "order products"
msgstr "اطلب المنتجات" msgstr "اطلب المنتجات"
#: core/admin.py:180 core/admin.py:181 #: core/admin.py:187 core/admin.py:188
msgid "children" msgid "children"
msgstr "الأطفال" msgstr "الأطفال"
#: core/admin.py:566 #: core/admin.py:940
msgid "Config" msgid "Config"
msgstr "التكوين" msgstr "التكوين"
@ -707,7 +711,7 @@ msgstr "حذف علاقة الطلب-المنتج"
msgid "add or remove feedback on an orderproduct relation" msgid "add or remove feedback on an orderproduct relation"
msgstr "إضافة أو إزالة الملاحظات على العلاقة بين الطلب والمنتج" msgstr "إضافة أو إزالة الملاحظات على العلاقة بين الطلب والمنتج"
#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 #: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499
msgid "no search term provided." msgid "no search term provided."
msgstr "لم يتم توفير مصطلح بحث." msgstr "لم يتم توفير مصطلح بحث."
@ -881,7 +885,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive"
msgstr "يرجى تقديم إما Order_uuid أو order_uid_hr_hr_id - متنافيان!" msgstr "يرجى تقديم إما Order_uuid أو order_uid_hr_hr_id - متنافيان!"
#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 #: core/graphene/mutations.py:229 core/graphene/mutations.py:486
#: core/graphene/mutations.py:527 core/viewsets.py:679 #: core/graphene/mutations.py:527 core/viewsets.py:680
msgid "wrong type came from order.buy() method: {type(instance)!s}" msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr "جاء نوع خاطئ من طريقة order.buy(): {type(instance)!s}" msgstr "جاء نوع خاطئ من طريقة order.buy(): {type(instance)!s}"
@ -957,7 +961,7 @@ msgstr "سلسلة العنوان الأصلي المقدمة من المستخ
#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 #: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870
#: core/models.py:1289 core/models.py:1318 core/models.py:1343 #: core/models.py:1289 core/models.py:1318 core/models.py:1343
#: core/viewsets.py:682 #: core/viewsets.py:683
#, python-brace-format #, python-brace-format
msgid "{name} does not exist: {uuid}" msgid "{name} does not exist: {uuid}"
msgstr "{name} غير موجود: {uuid}!" msgstr "{name} غير موجود: {uuid}!"
@ -2611,22 +2615,22 @@ msgstr "كل من البيانات والمهلة مطلوبة"
msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgid "invalid timeout value, it must be between 0 and 216000 seconds"
msgstr "قيمة المهلة غير صالحة، يجب أن تكون بين 0 و216000 ثانية" msgstr "قيمة المهلة غير صالحة، يجب أن تكون بين 0 و216000 ثانية"
#: core/utils/emailing.py:25 #: core/utils/emailing.py:27
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | contact us initiated" msgid "{config.PROJECT_NAME} | contact us initiated"
msgstr "{config.PROJECT_NAME} | بادر بالاتصال بنا" msgstr "{config.PROJECT_NAME} | بادر بالاتصال بنا"
#: core/utils/emailing.py:74 #: core/utils/emailing.py:73
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order confirmation" msgid "{config.PROJECT_NAME} | order confirmation"
msgstr "{config.PROJECT_NAME} | تأكيد الطلب" msgstr "{config.PROJECT_NAME} | تأكيد الطلب"
#: core/utils/emailing.py:109 #: core/utils/emailing.py:105
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order delivered" msgid "{config.PROJECT_NAME} | order delivered"
msgstr "{config.PROJECT_NAME} | طلبية تم تسليمها" msgstr "{config.PROJECT_NAME} | طلبية تم تسليمها"
#: core/utils/emailing.py:197 #: core/utils/emailing.py:188
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | promocode granted" msgid "{config.PROJECT_NAME} | promocode granted"
msgstr "{config.PROJECT_NAME} | الرمز الترويجي الممنوح" msgstr "{config.PROJECT_NAME} | الرمز الترويجي الممنوح"
@ -2862,7 +2866,7 @@ msgstr ""
" \"مجموعة عرض الملاحظات\" الأساسية وتستفيد من نظام تصفية Django للاستعلام عن" " \"مجموعة عرض الملاحظات\" الأساسية وتستفيد من نظام تصفية Django للاستعلام عن"
" البيانات." " البيانات."
#: core/viewsets.py:593 #: core/viewsets.py:594
msgid "" msgid ""
"ViewSet for managing orders and related operations. This class provides " "ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes " "functionality to retrieve, modify, and manage order objects. It includes "
@ -2879,7 +2883,7 @@ msgstr ""
"عليه. يستخدم ViewSet العديد من المتسلسلات بناءً على الإجراء المحدد الذي يتم " "عليه. يستخدم ViewSet العديد من المتسلسلات بناءً على الإجراء المحدد الذي يتم "
"تنفيذه ويفرض الأذونات وفقًا لذلك أثناء التفاعل مع بيانات الطلبات." "تنفيذه ويفرض الأذونات وفقًا لذلك أثناء التفاعل مع بيانات الطلبات."
#: core/viewsets.py:782 #: core/viewsets.py:784
msgid "" msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables " "Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It " "CRUD operations and custom actions specific to the OrderProduct model. It "
@ -2892,11 +2896,11 @@ msgstr ""
"من الأذونات، وتبديل المتسلسل بناءً على الإجراء المطلوب. بالإضافة إلى ذلك، " "من الأذونات، وتبديل المتسلسل بناءً على الإجراء المطلوب. بالإضافة إلى ذلك، "
"توفر إجراءً مفصلاً للتعامل مع الملاحظات على مثيلات OrderProduct" "توفر إجراءً مفصلاً للتعامل مع الملاحظات على مثيلات OrderProduct"
#: core/viewsets.py:833 #: core/viewsets.py:835
msgid "Manages operations related to Product images in the application. " msgid "Manages operations related to Product images in the application. "
msgstr "يدير العمليات المتعلقة بصور المنتج في التطبيق." msgstr "يدير العمليات المتعلقة بصور المنتج في التطبيق."
#: core/viewsets.py:845 #: core/viewsets.py:847
msgid "" msgid ""
"Manages the retrieval and handling of PromoCode instances through various " "Manages the retrieval and handling of PromoCode instances through various "
"API actions." "API actions."
@ -2904,15 +2908,15 @@ msgstr ""
"يدير استرداد مثيلات PromoCode ومعالجتها من خلال إجراءات واجهة برمجة " "يدير استرداد مثيلات PromoCode ومعالجتها من خلال إجراءات واجهة برمجة "
"التطبيقات المختلفة." "التطبيقات المختلفة."
#: core/viewsets.py:866 #: core/viewsets.py:868
msgid "Represents a view set for managing promotions. " msgid "Represents a view set for managing promotions. "
msgstr "يمثل مجموعة عرض لإدارة الترقيات." msgstr "يمثل مجموعة عرض لإدارة الترقيات."
#: core/viewsets.py:878 #: core/viewsets.py:880
msgid "Handles operations related to Stock data in the system." msgid "Handles operations related to Stock data in the system."
msgstr "يتعامل مع العمليات المتعلقة ببيانات المخزون في النظام." msgstr "يتعامل مع العمليات المتعلقة ببيانات المخزون في النظام."
#: core/viewsets.py:892 #: core/viewsets.py:894
msgid "" msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides " "ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the " "endpoints for interacting with a user's wish list, allowing for the "
@ -2929,7 +2933,7 @@ msgstr ""
"الأذونات للتأكد من أن المستخدمين يمكنهم فقط إدارة قوائم الرغبات الخاصة بهم " "الأذونات للتأكد من أن المستخدمين يمكنهم فقط إدارة قوائم الرغبات الخاصة بهم "
"ما لم يتم منح أذونات صريحة." "ما لم يتم منح أذونات صريحة."
#: core/viewsets.py:1007 #: core/viewsets.py:1009
msgid "" msgid ""
"This class provides viewset functionality for managing `Address` objects. " "This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom " "The AddressViewSet class enables CRUD operations, filtering, and custom "
@ -2942,12 +2946,12 @@ msgstr ""
"العناوين. وتتضمن سلوكيات متخصصة لطرق HTTP المختلفة، وتجاوزات المتسلسل، " "العناوين. وتتضمن سلوكيات متخصصة لطرق HTTP المختلفة، وتجاوزات المتسلسل، "
"ومعالجة الأذونات بناءً على سياق الطلب." "ومعالجة الأذونات بناءً على سياق الطلب."
#: core/viewsets.py:1074 #: core/viewsets.py:1076
#, python-brace-format #, python-brace-format
msgid "Geocoding error: {e}" msgid "Geocoding error: {e}"
msgstr "خطأ في الترميز الجغرافي: {e}" msgstr "خطأ في الترميز الجغرافي: {e}"
#: core/viewsets.py:1081 #: core/viewsets.py:1083
msgid "" msgid ""
"Handles operations related to Product Tags within the application. This " "Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing " "class provides functionality for retrieving, filtering, and serializing "

View file

@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: EVIBES 3.0.0\n" "Project-Id-Version: EVIBES 3.0.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-10-13 13:56+0300\n" "POT-Creation-Date: 2025-10-13 18:49+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n" "Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
"Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n" "Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n"
@ -50,82 +50,86 @@ msgstr "Upraveno"
msgid "when the object was last modified" msgid "when the object was last modified"
msgstr "Kdy byl objekt naposledy upraven" msgstr "Kdy byl objekt naposledy upraven"
#: core/admin.py:63 #: core/admin.py:68
msgid "translations" msgid "translations"
msgstr "Překlady" msgstr "Překlady"
#: core/admin.py:67 #: core/admin.py:72
msgid "general" msgid "general"
msgstr "Obecné" msgstr "Obecné"
#: core/admin.py:69 #: core/admin.py:74
msgid "relations" msgid "relations"
msgstr "Vztahy" msgstr "Vztahy"
#: core/admin.py:87 #: core/admin.py:76
msgid "additional info"
msgstr "další informace"
#: core/admin.py:94
msgid "metadata" msgid "metadata"
msgstr "Metadata" msgstr "Metadata"
#: core/admin.py:94 #: core/admin.py:101
msgid "timestamps" msgid "timestamps"
msgstr "Časová razítka" msgstr "Časová razítka"
#: core/admin.py:109 #: core/admin.py:116
#, python-format #, python-format
msgid "activate selected %(verbose_name_plural)s" msgid "activate selected %(verbose_name_plural)s"
msgstr "Aktivace vybraného %(verbose_name_plural)s" msgstr "Aktivace vybraného %(verbose_name_plural)s"
#: core/admin.py:114 #: core/admin.py:121
msgid "selected items have been activated." msgid "selected items have been activated."
msgstr "Vybrané položky byly aktivovány!" msgstr "Vybrané položky byly aktivovány!"
#: core/admin.py:120 #: core/admin.py:127
#, python-format #, python-format
msgid "deactivate selected %(verbose_name_plural)s" msgid "deactivate selected %(verbose_name_plural)s"
msgstr "Deaktivace vybraných %(verbose_name_plural)s" msgstr "Deaktivace vybraných %(verbose_name_plural)s"
#: core/admin.py:125 #: core/admin.py:132
msgid "selected items have been deactivated." msgid "selected items have been deactivated."
msgstr "Vybrané položky byly deaktivovány!" msgstr "Vybrané položky byly deaktivovány!"
#: core/admin.py:137 core/graphene/object_types.py:609 #: core/admin.py:144 core/graphene/object_types.py:609
#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 #: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717
msgid "attribute value" msgid "attribute value"
msgstr "Hodnota atributu" msgstr "Hodnota atributu"
#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:718 #: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718
msgid "attribute values" msgid "attribute values"
msgstr "Hodnoty atributů" msgstr "Hodnoty atributů"
#: core/admin.py:146 #: core/admin.py:153
msgid "image" msgid "image"
msgstr "Obrázek" msgstr "Obrázek"
#: core/admin.py:147 core/graphene/object_types.py:501 #: core/admin.py:154 core/graphene/object_types.py:501
msgid "images" msgid "images"
msgstr "Obrázky" msgstr "Obrázky"
#: core/admin.py:155 core/models.py:467 #: core/admin.py:162 core/models.py:467
msgid "stock" msgid "stock"
msgstr "Stock" msgstr "Stock"
#: core/admin.py:156 core/graphene/object_types.py:663 #: core/admin.py:163 core/graphene/object_types.py:663
msgid "stocks" msgid "stocks"
msgstr "Zásoby" msgstr "Zásoby"
#: core/admin.py:166 core/models.py:1675 #: core/admin.py:173 core/models.py:1675
msgid "order product" msgid "order product"
msgstr "Objednat produkt" msgstr "Objednat produkt"
#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1676 #: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676
msgid "order products" msgid "order products"
msgstr "Objednat produkty" msgstr "Objednat produkty"
#: core/admin.py:180 core/admin.py:181 #: core/admin.py:187 core/admin.py:188
msgid "children" msgid "children"
msgstr "Děti" msgstr "Děti"
#: core/admin.py:566 #: core/admin.py:940
msgid "Config" msgid "Config"
msgstr "Konfigurace" msgstr "Konfigurace"
@ -732,7 +736,7 @@ msgstr "odstranit vztah objednávka-produkt"
msgid "add or remove feedback on an orderproduct relation" msgid "add or remove feedback on an orderproduct relation"
msgstr "přidat nebo odebrat zpětnou vazbu na vztah objednávka-produkt." msgstr "přidat nebo odebrat zpětnou vazbu na vztah objednávka-produkt."
#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 #: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499
msgid "no search term provided." msgid "no search term provided."
msgstr "Nebyl zadán žádný vyhledávací termín." msgstr "Nebyl zadán žádný vyhledávací termín."
@ -906,7 +910,7 @@ 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í!" msgstr "Zadejte prosím order_uuid nebo order_hr_id - vzájemně se vylučují!"
#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 #: core/graphene/mutations.py:229 core/graphene/mutations.py:486
#: core/graphene/mutations.py:527 core/viewsets.py:679 #: core/graphene/mutations.py:527 core/viewsets.py:680
msgid "wrong type came from order.buy() method: {type(instance)!s}" msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr "Z metody order.buy() pochází nesprávný typ: {type(instance)!s}" msgstr "Z metody order.buy() pochází nesprávný typ: {type(instance)!s}"
@ -984,7 +988,7 @@ msgstr "Původní řetězec adresy zadaný uživatelem"
#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 #: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870
#: core/models.py:1289 core/models.py:1318 core/models.py:1343 #: core/models.py:1289 core/models.py:1318 core/models.py:1343
#: core/viewsets.py:682 #: core/viewsets.py:683
#, python-brace-format #, python-brace-format
msgid "{name} does not exist: {uuid}" msgid "{name} does not exist: {uuid}"
msgstr "{name} neexistuje: {uuid}!" msgstr "{name} neexistuje: {uuid}!"
@ -2672,22 +2676,22 @@ msgstr "Jsou vyžadována data i časový limit"
msgid "invalid timeout value, it must be between 0 and 216000 seconds" 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." msgstr "Nesprávná hodnota timeoutu, musí být v rozmezí 0 až 216000 sekund."
#: core/utils/emailing.py:25 #: core/utils/emailing.py:27
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | contact us initiated" msgid "{config.PROJECT_NAME} | contact us initiated"
msgstr "{config.PROJECT_NAME} | kontaktujte nás inicioval" msgstr "{config.PROJECT_NAME} | kontaktujte nás inicioval"
#: core/utils/emailing.py:74 #: core/utils/emailing.py:73
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order confirmation" msgid "{config.PROJECT_NAME} | order confirmation"
msgstr "{config.PROJECT_NAME} | Potvrzení objednávky" msgstr "{config.PROJECT_NAME} | Potvrzení objednávky"
#: core/utils/emailing.py:109 #: core/utils/emailing.py:105
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order delivered" msgid "{config.PROJECT_NAME} | order delivered"
msgstr "{config.PROJECT_NAME} | Objednávka doručena" msgstr "{config.PROJECT_NAME} | Objednávka doručena"
#: core/utils/emailing.py:197 #: core/utils/emailing.py:188
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | promocode granted" msgid "{config.PROJECT_NAME} | promocode granted"
msgstr "{config.PROJECT_NAME} | promocode uděleno" msgstr "{config.PROJECT_NAME} | promocode uděleno"
@ -2932,7 +2936,7 @@ msgstr ""
"objekty Zpětné vazby na základě oprávnění. Rozšiřuje základní třídu " "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." "`EvibesViewSet` a využívá systém filtrování Djanga pro dotazování na data."
#: core/viewsets.py:593 #: core/viewsets.py:594
msgid "" msgid ""
"ViewSet for managing orders and related operations. This class provides " "ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes " "functionality to retrieve, modify, and manage order objects. It includes "
@ -2950,7 +2954,7 @@ msgstr ""
" Sada ViewSet používá několik serializátorů podle konkrétní prováděné akce a" " 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." " podle toho vynucuje oprávnění při interakci s daty objednávek."
#: core/viewsets.py:782 #: core/viewsets.py:784
msgid "" msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables " "Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It " "CRUD operations and custom actions specific to the OrderProduct model. It "
@ -2964,11 +2968,11 @@ msgstr ""
" požadované akce. Kromě toho poskytuje podrobnou akci pro zpracování zpětné " " požadované akce. Kromě toho poskytuje podrobnou akci pro zpracování zpětné "
"vazby na instance OrderProduct" "vazby na instance OrderProduct"
#: core/viewsets.py:833 #: core/viewsets.py:835
msgid "Manages operations related to Product images in the application. " msgid "Manages operations related to Product images in the application. "
msgstr "Spravuje operace související s obrázky produktů v aplikaci." msgstr "Spravuje operace související s obrázky produktů v aplikaci."
#: core/viewsets.py:845 #: core/viewsets.py:847
msgid "" msgid ""
"Manages the retrieval and handling of PromoCode instances through various " "Manages the retrieval and handling of PromoCode instances through various "
"API actions." "API actions."
@ -2976,15 +2980,15 @@ msgstr ""
"Spravuje načítání a zpracování instancí PromoCode prostřednictvím různých " "Spravuje načítání a zpracování instancí PromoCode prostřednictvím různých "
"akcí API." "akcí API."
#: core/viewsets.py:866 #: core/viewsets.py:868
msgid "Represents a view set for managing promotions. " msgid "Represents a view set for managing promotions. "
msgstr "Představuje sadu zobrazení pro správu povýšení." msgstr "Představuje sadu zobrazení pro správu povýšení."
#: core/viewsets.py:878 #: core/viewsets.py:880
msgid "Handles operations related to Stock data in the system." 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." msgstr "Zpracovává operace související s údaji o zásobách v systému."
#: core/viewsets.py:892 #: core/viewsets.py:894
msgid "" msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides " "ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the " "endpoints for interacting with a user's wish list, allowing for the "
@ -3002,7 +3006,7 @@ msgstr ""
"uživatelé mohou spravovat pouze své vlastní seznamy přání, pokud jim nejsou " "uživatelé mohou spravovat pouze své vlastní seznamy přání, pokud jim nejsou "
"udělena výslovná oprávnění." "udělena výslovná oprávnění."
#: core/viewsets.py:1007 #: core/viewsets.py:1009
msgid "" msgid ""
"This class provides viewset functionality for managing `Address` objects. " "This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom " "The AddressViewSet class enables CRUD operations, filtering, and custom "
@ -3016,12 +3020,12 @@ msgstr ""
"přepisování serializátoru a zpracování oprávnění na základě kontextu " "přepisování serializátoru a zpracování oprávnění na základě kontextu "
"požadavku." "požadavku."
#: core/viewsets.py:1074 #: core/viewsets.py:1076
#, python-brace-format #, python-brace-format
msgid "Geocoding error: {e}" msgid "Geocoding error: {e}"
msgstr "Chyba v zeměpisném kódování: {e}" msgstr "Chyba v zeměpisném kódování: {e}"
#: core/viewsets.py:1081 #: core/viewsets.py:1083
msgid "" msgid ""
"Handles operations related to Product Tags within the application. This " "Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing " "class provides functionality for retrieving, filtering, and serializing "

View file

@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: EVIBES 3.0.0\n" "Project-Id-Version: EVIBES 3.0.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-10-13 13:56+0300\n" "POT-Creation-Date: 2025-10-13 18:49+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n" "Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
"Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n" "Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n"
@ -49,82 +49,86 @@ msgstr "Modificeret"
msgid "when the object was last modified" msgid "when the object was last modified"
msgstr "Hvornår objektet sidst blev redigeret" msgstr "Hvornår objektet sidst blev redigeret"
#: core/admin.py:63 #: core/admin.py:68
msgid "translations" msgid "translations"
msgstr "Oversættelser" msgstr "Oversættelser"
#: core/admin.py:67 #: core/admin.py:72
msgid "general" msgid "general"
msgstr "Generelt" msgstr "Generelt"
#: core/admin.py:69 #: core/admin.py:74
msgid "relations" msgid "relations"
msgstr "Relationer" msgstr "Relationer"
#: core/admin.py:87 #: core/admin.py:76
msgid "additional info"
msgstr "Yderligere info"
#: core/admin.py:94
msgid "metadata" msgid "metadata"
msgstr "Metadata" msgstr "Metadata"
#: core/admin.py:94 #: core/admin.py:101
msgid "timestamps" msgid "timestamps"
msgstr "Tidsstempler" msgstr "Tidsstempler"
#: core/admin.py:109 #: core/admin.py:116
#, python-format #, python-format
msgid "activate selected %(verbose_name_plural)s" msgid "activate selected %(verbose_name_plural)s"
msgstr "Aktivér valgt %(verbose_name_plural)s." msgstr "Aktivér valgt %(verbose_name_plural)s."
#: core/admin.py:114 #: core/admin.py:121
msgid "selected items have been activated." msgid "selected items have been activated."
msgstr "Udvalgte varer er blevet aktiveret!" msgstr "Udvalgte varer er blevet aktiveret!"
#: core/admin.py:120 #: core/admin.py:127
#, python-format #, python-format
msgid "deactivate selected %(verbose_name_plural)s" msgid "deactivate selected %(verbose_name_plural)s"
msgstr "Deaktiver valgte %(verbose_name_plural)s." msgstr "Deaktiver valgte %(verbose_name_plural)s."
#: core/admin.py:125 #: core/admin.py:132
msgid "selected items have been deactivated." msgid "selected items have been deactivated."
msgstr "Udvalgte varer er blevet deaktiveret!" msgstr "Udvalgte varer er blevet deaktiveret!"
#: core/admin.py:137 core/graphene/object_types.py:609 #: core/admin.py:144 core/graphene/object_types.py:609
#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 #: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717
msgid "attribute value" msgid "attribute value"
msgstr "Attributværdi" msgstr "Attributværdi"
#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:718 #: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718
msgid "attribute values" msgid "attribute values"
msgstr "Attributværdier" msgstr "Attributværdier"
#: core/admin.py:146 #: core/admin.py:153
msgid "image" msgid "image"
msgstr "Billede" msgstr "Billede"
#: core/admin.py:147 core/graphene/object_types.py:501 #: core/admin.py:154 core/graphene/object_types.py:501
msgid "images" msgid "images"
msgstr "Billeder" msgstr "Billeder"
#: core/admin.py:155 core/models.py:467 #: core/admin.py:162 core/models.py:467
msgid "stock" msgid "stock"
msgstr "Lager" msgstr "Lager"
#: core/admin.py:156 core/graphene/object_types.py:663 #: core/admin.py:163 core/graphene/object_types.py:663
msgid "stocks" msgid "stocks"
msgstr "Aktier" msgstr "Aktier"
#: core/admin.py:166 core/models.py:1675 #: core/admin.py:173 core/models.py:1675
msgid "order product" msgid "order product"
msgstr "Bestil produkt" msgstr "Bestil produkt"
#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1676 #: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676
msgid "order products" msgid "order products"
msgstr "Bestil produkter" msgstr "Bestil produkter"
#: core/admin.py:180 core/admin.py:181 #: core/admin.py:187 core/admin.py:188
msgid "children" msgid "children"
msgstr "Børn" msgstr "Børn"
#: core/admin.py:566 #: core/admin.py:940
msgid "Config" msgid "Config"
msgstr "Konfig" msgstr "Konfig"
@ -734,7 +738,7 @@ msgstr "slette en ordre-produkt-relation"
msgid "add or remove feedback on an orderproduct relation" msgid "add or remove feedback on an orderproduct relation"
msgstr "tilføje eller fjerne feedback på en ordre-produkt-relation" msgstr "tilføje eller fjerne feedback på en ordre-produkt-relation"
#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 #: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499
msgid "no search term provided." msgid "no search term provided."
msgstr "Der er ikke angivet noget søgeord." msgstr "Der er ikke angivet noget søgeord."
@ -908,7 +912,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive"
msgstr "Angiv enten order_uuid eller order_hr_id - det udelukker hinanden!" msgstr "Angiv enten order_uuid eller order_hr_id - det udelukker hinanden!"
#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 #: core/graphene/mutations.py:229 core/graphene/mutations.py:486
#: core/graphene/mutations.py:527 core/viewsets.py:679 #: core/graphene/mutations.py:527 core/viewsets.py:680
msgid "wrong type came from order.buy() method: {type(instance)!s}" msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr "Forkert type kom fra metoden order.buy(): {type(instance)!s}" msgstr "Forkert type kom fra metoden order.buy(): {type(instance)!s}"
@ -986,7 +990,7 @@ msgstr "Original adressestreng leveret af brugeren"
#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 #: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870
#: core/models.py:1289 core/models.py:1318 core/models.py:1343 #: core/models.py:1289 core/models.py:1318 core/models.py:1343
#: core/viewsets.py:682 #: core/viewsets.py:683
#, python-brace-format #, python-brace-format
msgid "{name} does not exist: {uuid}" msgid "{name} does not exist: {uuid}"
msgstr "{name} findes ikke: {uuid}!" msgstr "{name} findes ikke: {uuid}!"
@ -2694,22 +2698,22 @@ msgstr "Både data og timeout er påkrævet"
msgid "invalid timeout value, it must be between 0 and 216000 seconds" 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" msgstr "Ugyldig timeout-værdi, den skal være mellem 0 og 216000 sekunder"
#: core/utils/emailing.py:25 #: core/utils/emailing.py:27
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | contact us initiated" msgid "{config.PROJECT_NAME} | contact us initiated"
msgstr "{config.PROJECT_NAME} | kontakt os påbegyndt" msgstr "{config.PROJECT_NAME} | kontakt os påbegyndt"
#: core/utils/emailing.py:74 #: core/utils/emailing.py:73
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order confirmation" msgid "{config.PROJECT_NAME} | order confirmation"
msgstr "{config.PROJECT_NAME} | Ordrebekræftelse" msgstr "{config.PROJECT_NAME} | Ordrebekræftelse"
#: core/utils/emailing.py:109 #: core/utils/emailing.py:105
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order delivered" msgid "{config.PROJECT_NAME} | order delivered"
msgstr "{config.PROJECT_NAME} | Order Delivered" msgstr "{config.PROJECT_NAME} | Order Delivered"
#: core/utils/emailing.py:197 #: core/utils/emailing.py:188
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | promocode granted" msgid "{config.PROJECT_NAME} | promocode granted"
msgstr "{config.PROJECT_NAME} | promokode givet" msgstr "{config.PROJECT_NAME} | promokode givet"
@ -2958,7 +2962,7 @@ msgstr ""
" basen `EvibesViewSet` og gør brug af Djangos filtreringssystem til at " " basen `EvibesViewSet` og gør brug af Djangos filtreringssystem til at "
"forespørge på data." "forespørge på data."
#: core/viewsets.py:593 #: core/viewsets.py:594
msgid "" msgid ""
"ViewSet for managing orders and related operations. This class provides " "ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes " "functionality to retrieve, modify, and manage order objects. It includes "
@ -2977,7 +2981,7 @@ msgstr ""
"baseret på den specifikke handling, der udføres, og håndhæver tilladelser i " "baseret på den specifikke handling, der udføres, og håndhæver tilladelser i "
"overensstemmelse hermed, mens der interageres med ordredata." "overensstemmelse hermed, mens der interageres med ordredata."
#: core/viewsets.py:782 #: core/viewsets.py:784
msgid "" msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables " "Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It " "CRUD operations and custom actions specific to the OrderProduct model. It "
@ -2992,11 +2996,11 @@ msgstr ""
"Derudover indeholder det en detaljeret handling til håndtering af feedback " "Derudover indeholder det en detaljeret handling til håndtering af feedback "
"på OrderProduct-instanser." "på OrderProduct-instanser."
#: core/viewsets.py:833 #: core/viewsets.py:835
msgid "Manages operations related to Product images in the application. " msgid "Manages operations related to Product images in the application. "
msgstr "Håndterer operationer relateret til produktbilleder i applikationen." msgstr "Håndterer operationer relateret til produktbilleder i applikationen."
#: core/viewsets.py:845 #: core/viewsets.py:847
msgid "" msgid ""
"Manages the retrieval and handling of PromoCode instances through various " "Manages the retrieval and handling of PromoCode instances through various "
"API actions." "API actions."
@ -3004,15 +3008,15 @@ msgstr ""
"Administrerer hentning og håndtering af PromoCode-instanser gennem " "Administrerer hentning og håndtering af PromoCode-instanser gennem "
"forskellige API-handlinger." "forskellige API-handlinger."
#: core/viewsets.py:866 #: core/viewsets.py:868
msgid "Represents a view set for managing promotions. " msgid "Represents a view set for managing promotions. "
msgstr "Repræsenterer et visningssæt til håndtering af kampagner." msgstr "Repræsenterer et visningssæt til håndtering af kampagner."
#: core/viewsets.py:878 #: core/viewsets.py:880
msgid "Handles operations related to Stock data in the system." msgid "Handles operations related to Stock data in the system."
msgstr "Håndterer operationer relateret til lagerdata i systemet." msgstr "Håndterer operationer relateret til lagerdata i systemet."
#: core/viewsets.py:892 #: core/viewsets.py:894
msgid "" msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides " "ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the " "endpoints for interacting with a user's wish list, allowing for the "
@ -3030,7 +3034,7 @@ msgstr ""
"integreret for at sikre, at brugere kun kan administrere deres egne " "integreret for at sikre, at brugere kun kan administrere deres egne "
"ønskelister, medmindre der er givet eksplicitte tilladelser." "ønskelister, medmindre der er givet eksplicitte tilladelser."
#: core/viewsets.py:1007 #: core/viewsets.py:1009
msgid "" msgid ""
"This class provides viewset functionality for managing `Address` objects. " "This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom " "The AddressViewSet class enables CRUD operations, filtering, and custom "
@ -3044,12 +3048,12 @@ msgstr ""
"omfatter specialiseret adfærd for forskellige HTTP-metoder, tilsidesættelse " "omfatter specialiseret adfærd for forskellige HTTP-metoder, tilsidesættelse "
"af serializer og håndtering af tilladelser baseret på anmodningskonteksten." "af serializer og håndtering af tilladelser baseret på anmodningskonteksten."
#: core/viewsets.py:1074 #: core/viewsets.py:1076
#, python-brace-format #, python-brace-format
msgid "Geocoding error: {e}" msgid "Geocoding error: {e}"
msgstr "Fejl i geokodning: {e}" msgstr "Fejl i geokodning: {e}"
#: core/viewsets.py:1081 #: core/viewsets.py:1083
msgid "" msgid ""
"Handles operations related to Product Tags within the application. This " "Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing " "class provides functionality for retrieving, filtering, and serializing "

View file

@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: EVIBES 3.0.0\n" "Project-Id-Version: EVIBES 3.0.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-10-13 13:56+0300\n" "POT-Creation-Date: 2025-10-13 18:49+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n" "Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
"Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n" "Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n"
@ -51,82 +51,86 @@ msgstr "Geändert"
msgid "when the object was last modified" msgid "when the object was last modified"
msgstr "Wann das Objekt zuletzt bearbeitet wurde" msgstr "Wann das Objekt zuletzt bearbeitet wurde"
#: core/admin.py:63 #: core/admin.py:68
msgid "translations" msgid "translations"
msgstr "Übersetzungen" msgstr "Übersetzungen"
#: core/admin.py:67 #: core/admin.py:72
msgid "general" msgid "general"
msgstr "Allgemein" msgstr "Allgemein"
#: core/admin.py:69 #: core/admin.py:74
msgid "relations" msgid "relations"
msgstr "Beziehungen" msgstr "Beziehungen"
#: core/admin.py:87 #: core/admin.py:76
msgid "additional info"
msgstr "Zusatzinfo"
#: core/admin.py:94
msgid "metadata" msgid "metadata"
msgstr "Metadaten" msgstr "Metadaten"
#: core/admin.py:94 #: core/admin.py:101
msgid "timestamps" msgid "timestamps"
msgstr "Zeitstempel" msgstr "Zeitstempel"
#: core/admin.py:109 #: core/admin.py:116
#, python-format #, python-format
msgid "activate selected %(verbose_name_plural)s" msgid "activate selected %(verbose_name_plural)s"
msgstr "Ausgewählte %(verbose_name_plural)s aktivieren" msgstr "Ausgewählte %(verbose_name_plural)s aktivieren"
#: core/admin.py:114 #: core/admin.py:121
msgid "selected items have been activated." msgid "selected items have been activated."
msgstr "Ausgewählte Artikel wurden aktiviert!" msgstr "Ausgewählte Artikel wurden aktiviert!"
#: core/admin.py:120 #: core/admin.py:127
#, python-format #, python-format
msgid "deactivate selected %(verbose_name_plural)s" msgid "deactivate selected %(verbose_name_plural)s"
msgstr "Ausgewählte %(verbose_name_plural)s deaktivieren" msgstr "Ausgewählte %(verbose_name_plural)s deaktivieren"
#: core/admin.py:125 #: core/admin.py:132
msgid "selected items have been deactivated." msgid "selected items have been deactivated."
msgstr "Ausgewählte Artikel wurden deaktiviert!" msgstr "Ausgewählte Artikel wurden deaktiviert!"
#: core/admin.py:137 core/graphene/object_types.py:609 #: core/admin.py:144 core/graphene/object_types.py:609
#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 #: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717
msgid "attribute value" msgid "attribute value"
msgstr "Attribut Wert" msgstr "Attribut Wert"
#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:718 #: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718
msgid "attribute values" msgid "attribute values"
msgstr "Attribut Werte" msgstr "Attribut Werte"
#: core/admin.py:146 #: core/admin.py:153
msgid "image" msgid "image"
msgstr "Bild" msgstr "Bild"
#: core/admin.py:147 core/graphene/object_types.py:501 #: core/admin.py:154 core/graphene/object_types.py:501
msgid "images" msgid "images"
msgstr "Bilder" msgstr "Bilder"
#: core/admin.py:155 core/models.py:467 #: core/admin.py:162 core/models.py:467
msgid "stock" msgid "stock"
msgstr "Lagerbestand" msgstr "Lagerbestand"
#: core/admin.py:156 core/graphene/object_types.py:663 #: core/admin.py:163 core/graphene/object_types.py:663
msgid "stocks" msgid "stocks"
msgstr "Bestände" msgstr "Bestände"
#: core/admin.py:166 core/models.py:1675 #: core/admin.py:173 core/models.py:1675
msgid "order product" msgid "order product"
msgstr "Produkt bestellen" msgstr "Produkt bestellen"
#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1676 #: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676
msgid "order products" msgid "order products"
msgstr "Produkte bestellen" msgstr "Produkte bestellen"
#: core/admin.py:180 core/admin.py:181 #: core/admin.py:187 core/admin.py:188
msgid "children" msgid "children"
msgstr "Kinder" msgstr "Kinder"
#: core/admin.py:566 #: core/admin.py:940
msgid "Config" msgid "Config"
msgstr "Konfigurieren Sie" msgstr "Konfigurieren Sie"
@ -760,7 +764,7 @@ msgid "add or remove feedback on an orderproduct relation"
msgstr "" msgstr ""
"Feedback zu einer Bestellung-Produkt-Beziehung hinzufügen oder entfernen" "Feedback zu einer Bestellung-Produkt-Beziehung hinzufügen oder entfernen"
#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 #: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499
msgid "no search term provided." msgid "no search term provided."
msgstr "Kein Suchbegriff angegeben." msgstr "Kein Suchbegriff angegeben."
@ -937,7 +941,7 @@ msgstr ""
"sich gegenseitig aus!" "sich gegenseitig aus!"
#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 #: core/graphene/mutations.py:229 core/graphene/mutations.py:486
#: core/graphene/mutations.py:527 core/viewsets.py:679 #: core/graphene/mutations.py:527 core/viewsets.py:680
msgid "wrong type came from order.buy() method: {type(instance)!s}" msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr "Von der Methode order.buy() kam der falsche Typ: {type(instance)!s}" msgstr "Von der Methode order.buy() kam der falsche Typ: {type(instance)!s}"
@ -1016,7 +1020,7 @@ msgstr "Vom Benutzer angegebene Originaladresse"
#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 #: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870
#: core/models.py:1289 core/models.py:1318 core/models.py:1343 #: core/models.py:1289 core/models.py:1318 core/models.py:1343
#: core/viewsets.py:682 #: core/viewsets.py:683
#, python-brace-format #, python-brace-format
msgid "{name} does not exist: {uuid}" msgid "{name} does not exist: {uuid}"
msgstr "{name} existiert nicht: {uuid}!" msgstr "{name} existiert nicht: {uuid}!"
@ -2757,22 +2761,22 @@ msgid "invalid timeout value, it must be between 0 and 216000 seconds"
msgstr "" msgstr ""
"Ungültiger Timeout-Wert, er muss zwischen 0 und 216000 Sekunden liegen" "Ungültiger Timeout-Wert, er muss zwischen 0 und 216000 Sekunden liegen"
#: core/utils/emailing.py:25 #: core/utils/emailing.py:27
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | contact us initiated" msgid "{config.PROJECT_NAME} | contact us initiated"
msgstr "{config.PROJECT_NAME} | Kontakt eingeleitet" msgstr "{config.PROJECT_NAME} | Kontakt eingeleitet"
#: core/utils/emailing.py:74 #: core/utils/emailing.py:73
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order confirmation" msgid "{config.PROJECT_NAME} | order confirmation"
msgstr "{config.PROJECT_NAME} | Auftragsbestätigung" msgstr "{config.PROJECT_NAME} | Auftragsbestätigung"
#: core/utils/emailing.py:109 #: core/utils/emailing.py:105
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order delivered" msgid "{config.PROJECT_NAME} | order delivered"
msgstr "{config.PROJECT_NAME} | Bestellung ausgeliefert" msgstr "{config.PROJECT_NAME} | Bestellung ausgeliefert"
#: core/utils/emailing.py:197 #: core/utils/emailing.py:188
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | promocode granted" msgid "{config.PROJECT_NAME} | promocode granted"
msgstr "{config.PROJECT_NAME} | Promocode gewährt" msgstr "{config.PROJECT_NAME} | Promocode gewährt"
@ -3029,7 +3033,7 @@ msgstr ""
"implementieren. Es erweitert das Basis `EvibesViewSet` und nutzt das " "implementieren. Es erweitert das Basis `EvibesViewSet` und nutzt das "
"Filtersystem von Django zur Abfrage von Daten." "Filtersystem von Django zur Abfrage von Daten."
#: core/viewsets.py:593 #: core/viewsets.py:594
msgid "" msgid ""
"ViewSet for managing orders and related operations. This class provides " "ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes " "functionality to retrieve, modify, and manage order objects. It includes "
@ -3049,7 +3053,7 @@ msgstr ""
"basieren, die durchgeführt wird, und erzwingt die entsprechenden " "basieren, die durchgeführt wird, und erzwingt die entsprechenden "
"Berechtigungen, während es mit den Bestelldaten interagiert." "Berechtigungen, während es mit den Bestelldaten interagiert."
#: core/viewsets.py:782 #: core/viewsets.py:784
msgid "" msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables " "Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It " "CRUD operations and custom actions specific to the OrderProduct model. It "
@ -3064,12 +3068,12 @@ msgstr ""
"Außerdem bietet es eine detaillierte Aktion für die Bearbeitung von Feedback" "Außerdem bietet es eine detaillierte Aktion für die Bearbeitung von Feedback"
" zu OrderProduct-Instanzen" " zu OrderProduct-Instanzen"
#: core/viewsets.py:833 #: core/viewsets.py:835
msgid "Manages operations related to Product images in the application. " msgid "Manages operations related to Product images in the application. "
msgstr "" msgstr ""
"Verwaltet Vorgänge im Zusammenhang mit Produktbildern in der Anwendung." "Verwaltet Vorgänge im Zusammenhang mit Produktbildern in der Anwendung."
#: core/viewsets.py:845 #: core/viewsets.py:847
msgid "" msgid ""
"Manages the retrieval and handling of PromoCode instances through various " "Manages the retrieval and handling of PromoCode instances through various "
"API actions." "API actions."
@ -3077,15 +3081,15 @@ msgstr ""
"Verwaltet den Abruf und die Handhabung von PromoCode-Instanzen durch " "Verwaltet den Abruf und die Handhabung von PromoCode-Instanzen durch "
"verschiedene API-Aktionen." "verschiedene API-Aktionen."
#: core/viewsets.py:866 #: core/viewsets.py:868
msgid "Represents a view set for managing promotions. " msgid "Represents a view set for managing promotions. "
msgstr "Stellt ein Ansichtsset für die Verwaltung von Werbeaktionen dar." msgstr "Stellt ein Ansichtsset für die Verwaltung von Werbeaktionen dar."
#: core/viewsets.py:878 #: core/viewsets.py:880
msgid "Handles operations related to Stock data in the system." msgid "Handles operations related to Stock data in the system."
msgstr "Erledigt Vorgänge im Zusammenhang mit Bestandsdaten im System." msgstr "Erledigt Vorgänge im Zusammenhang mit Bestandsdaten im System."
#: core/viewsets.py:892 #: core/viewsets.py:894
msgid "" msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides " "ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the " "endpoints for interacting with a user's wish list, allowing for the "
@ -3104,7 +3108,7 @@ msgstr ""
"nur ihre eigenen Wunschlisten verwalten können, sofern keine expliziten " "nur ihre eigenen Wunschlisten verwalten können, sofern keine expliziten "
"Berechtigungen erteilt wurden." "Berechtigungen erteilt wurden."
#: core/viewsets.py:1007 #: core/viewsets.py:1009
msgid "" msgid ""
"This class provides viewset functionality for managing `Address` objects. " "This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom " "The AddressViewSet class enables CRUD operations, filtering, and custom "
@ -3119,12 +3123,12 @@ msgstr ""
"HTTP-Methoden, Serialisierungsüberschreibungen und die Behandlung von " "HTTP-Methoden, Serialisierungsüberschreibungen und die Behandlung von "
"Berechtigungen auf der Grundlage des Anfragekontexts." "Berechtigungen auf der Grundlage des Anfragekontexts."
#: core/viewsets.py:1074 #: core/viewsets.py:1076
#, python-brace-format #, python-brace-format
msgid "Geocoding error: {e}" msgid "Geocoding error: {e}"
msgstr "Geocodierungsfehler: {e}" msgstr "Geocodierungsfehler: {e}"
#: core/viewsets.py:1081 #: core/viewsets.py:1083
msgid "" msgid ""
"Handles operations related to Product Tags within the application. This " "Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing " "class provides functionality for retrieving, filtering, and serializing "

View file

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: EVIBES 3.0.0\n" "Project-Id-Version: EVIBES 3.0.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-10-13 13:56+0300\n" "POT-Creation-Date: 2025-10-13 18:49+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n" "Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
"Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n" "Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n"
@ -53,82 +53,86 @@ msgstr "Modified"
msgid "when the object was last modified" msgid "when the object was last modified"
msgstr "When the object was last edited" msgstr "When the object was last edited"
#: core/admin.py:63 #: core/admin.py:68
msgid "translations" msgid "translations"
msgstr "Translations" msgstr "Translations"
#: core/admin.py:67 #: core/admin.py:72
msgid "general" msgid "general"
msgstr "General" msgstr "General"
#: core/admin.py:69 #: core/admin.py:74
msgid "relations" msgid "relations"
msgstr "Relations" msgstr "Relations"
#: core/admin.py:87 #: core/admin.py:76
msgid "additional info"
msgstr "additional info"
#: core/admin.py:94
msgid "metadata" msgid "metadata"
msgstr "Metadata" msgstr "Metadata"
#: core/admin.py:94 #: core/admin.py:101
msgid "timestamps" msgid "timestamps"
msgstr "Timestamps" msgstr "Timestamps"
#: core/admin.py:109 #: core/admin.py:116
#, python-format #, python-format
msgid "activate selected %(verbose_name_plural)s" msgid "activate selected %(verbose_name_plural)s"
msgstr "Activate selected %(verbose_name_plural)s" msgstr "Activate selected %(verbose_name_plural)s"
#: core/admin.py:114 #: core/admin.py:121
msgid "selected items have been activated." msgid "selected items have been activated."
msgstr "Selected items have been activated!" msgstr "Selected items have been activated!"
#: core/admin.py:120 #: core/admin.py:127
#, python-format #, python-format
msgid "deactivate selected %(verbose_name_plural)s" msgid "deactivate selected %(verbose_name_plural)s"
msgstr "Deactivate selected %(verbose_name_plural)s" msgstr "Deactivate selected %(verbose_name_plural)s"
#: core/admin.py:125 #: core/admin.py:132
msgid "selected items have been deactivated." msgid "selected items have been deactivated."
msgstr "Selected items have been deactivated!" msgstr "Selected items have been deactivated!"
#: core/admin.py:137 core/graphene/object_types.py:609 #: core/admin.py:144 core/graphene/object_types.py:609
#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 #: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717
msgid "attribute value" msgid "attribute value"
msgstr "Attribute Value" msgstr "Attribute Value"
#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:718 #: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718
msgid "attribute values" msgid "attribute values"
msgstr "Attribute Values" msgstr "Attribute Values"
#: core/admin.py:146 #: core/admin.py:153
msgid "image" msgid "image"
msgstr "Image" msgstr "Image"
#: core/admin.py:147 core/graphene/object_types.py:501 #: core/admin.py:154 core/graphene/object_types.py:501
msgid "images" msgid "images"
msgstr "Images" msgstr "Images"
#: core/admin.py:155 core/models.py:467 #: core/admin.py:162 core/models.py:467
msgid "stock" msgid "stock"
msgstr "Stock" msgstr "Stock"
#: core/admin.py:156 core/graphene/object_types.py:663 #: core/admin.py:163 core/graphene/object_types.py:663
msgid "stocks" msgid "stocks"
msgstr "Stocks" msgstr "Stocks"
#: core/admin.py:166 core/models.py:1675 #: core/admin.py:173 core/models.py:1675
msgid "order product" msgid "order product"
msgstr "Order Product" msgstr "Order Product"
#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1676 #: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676
msgid "order products" msgid "order products"
msgstr "Order Products" msgstr "Order Products"
#: core/admin.py:180 core/admin.py:181 #: core/admin.py:187 core/admin.py:188
msgid "children" msgid "children"
msgstr "Children" msgstr "Children"
#: core/admin.py:566 #: core/admin.py:940
msgid "Config" msgid "Config"
msgstr "Config" msgstr "Config"
@ -712,7 +716,7 @@ msgstr "delete an orderproduct relation"
msgid "add or remove feedback on an orderproduct relation" msgid "add or remove feedback on an orderproduct relation"
msgstr "add or remove feedback on an orderproduct relation" msgstr "add or remove feedback on an orderproduct relation"
#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 #: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499
msgid "no search term provided." msgid "no search term provided."
msgstr "No search term provided." msgstr "No search term provided."
@ -885,7 +889,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive"
msgstr "Please provide either order_uuid or order_hr_id - mutually exclusive!" msgstr "Please provide either order_uuid or order_hr_id - mutually exclusive!"
#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 #: core/graphene/mutations.py:229 core/graphene/mutations.py:486
#: core/graphene/mutations.py:527 core/viewsets.py:679 #: core/graphene/mutations.py:527 core/viewsets.py:680
msgid "wrong type came from order.buy() method: {type(instance)!s}" msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr "Wrong type came from order.buy() method: {type(instance)!s}" msgstr "Wrong type came from order.buy() method: {type(instance)!s}"
@ -963,7 +967,7 @@ msgstr "Original address string provided by the user"
#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 #: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870
#: core/models.py:1289 core/models.py:1318 core/models.py:1343 #: core/models.py:1289 core/models.py:1318 core/models.py:1343
#: core/viewsets.py:682 #: core/viewsets.py:683
#, python-brace-format #, python-brace-format
msgid "{name} does not exist: {uuid}" msgid "{name} does not exist: {uuid}"
msgstr "{name} does not exist: {uuid}!" msgstr "{name} does not exist: {uuid}!"
@ -2644,22 +2648,22 @@ msgstr "Both data and timeout are required"
msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgid "invalid timeout value, it must be between 0 and 216000 seconds"
msgstr "Invalid timeout value, it must be between 0 and 216000 seconds" msgstr "Invalid timeout value, it must be between 0 and 216000 seconds"
#: core/utils/emailing.py:25 #: core/utils/emailing.py:27
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | contact us initiated" msgid "{config.PROJECT_NAME} | contact us initiated"
msgstr "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | contact us initiated"
#: core/utils/emailing.py:74 #: core/utils/emailing.py:73
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order confirmation" msgid "{config.PROJECT_NAME} | order confirmation"
msgstr "{config.PROJECT_NAME} | Order Confirmation" msgstr "{config.PROJECT_NAME} | Order Confirmation"
#: core/utils/emailing.py:109 #: core/utils/emailing.py:105
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order delivered" msgid "{config.PROJECT_NAME} | order delivered"
msgstr "{config.PROJECT_NAME} | Order Delivered" msgstr "{config.PROJECT_NAME} | Order Delivered"
#: core/utils/emailing.py:197 #: core/utils/emailing.py:188
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | promocode granted" msgid "{config.PROJECT_NAME} | promocode granted"
msgstr "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | promocode granted"
@ -2904,7 +2908,7 @@ msgstr ""
" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " " accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
"use of Django's filtering system for querying data." "use of Django's filtering system for querying data."
#: core/viewsets.py:593 #: core/viewsets.py:594
msgid "" msgid ""
"ViewSet for managing orders and related operations. This class provides " "ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes " "functionality to retrieve, modify, and manage order objects. It includes "
@ -2922,7 +2926,7 @@ msgstr ""
" uses multiple serializers based on the specific action being performed and " " uses multiple serializers based on the specific action being performed and "
"enforces permissions accordingly while interacting with order data." "enforces permissions accordingly while interacting with order data."
#: core/viewsets.py:782 #: core/viewsets.py:784
msgid "" msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables " "Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It " "CRUD operations and custom actions specific to the OrderProduct model. It "
@ -2936,11 +2940,11 @@ msgstr ""
" requested action. Additionally, it provides a detailed action for handling " " requested action. Additionally, it provides a detailed action for handling "
"feedback on OrderProduct instances" "feedback on OrderProduct instances"
#: core/viewsets.py:833 #: core/viewsets.py:835
msgid "Manages operations related to Product images in the application. " msgid "Manages operations related to Product images in the application. "
msgstr "Manages operations related to Product images in the application." msgstr "Manages operations related to Product images in the application."
#: core/viewsets.py:845 #: core/viewsets.py:847
msgid "" msgid ""
"Manages the retrieval and handling of PromoCode instances through various " "Manages the retrieval and handling of PromoCode instances through various "
"API actions." "API actions."
@ -2948,15 +2952,15 @@ msgstr ""
"Manages the retrieval and handling of PromoCode instances through various " "Manages the retrieval and handling of PromoCode instances through various "
"API actions." "API actions."
#: core/viewsets.py:866 #: core/viewsets.py:868
msgid "Represents a view set for managing promotions. " msgid "Represents a view set for managing promotions. "
msgstr "Represents a view set for managing promotions." msgstr "Represents a view set for managing promotions."
#: core/viewsets.py:878 #: core/viewsets.py:880
msgid "Handles operations related to Stock data in the system." msgid "Handles operations related to Stock data in the system."
msgstr "Handles operations related to Stock data in the system." msgstr "Handles operations related to Stock data in the system."
#: core/viewsets.py:892 #: core/viewsets.py:894
msgid "" msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides " "ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the " "endpoints for interacting with a user's wish list, allowing for the "
@ -2974,7 +2978,7 @@ msgstr ""
"that users can only manage their own wishlists unless explicit permissions " "that users can only manage their own wishlists unless explicit permissions "
"are granted." "are granted."
#: core/viewsets.py:1007 #: core/viewsets.py:1009
msgid "" msgid ""
"This class provides viewset functionality for managing `Address` objects. " "This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom " "The AddressViewSet class enables CRUD operations, filtering, and custom "
@ -2988,12 +2992,12 @@ msgstr ""
"different HTTP methods, serializer overrides, and permission handling based " "different HTTP methods, serializer overrides, and permission handling based "
"on the request context." "on the request context."
#: core/viewsets.py:1074 #: core/viewsets.py:1076
#, python-brace-format #, python-brace-format
msgid "Geocoding error: {e}" msgid "Geocoding error: {e}"
msgstr "Geocoding error: {e}" msgstr "Geocoding error: {e}"
#: core/viewsets.py:1081 #: core/viewsets.py:1083
msgid "" msgid ""
"Handles operations related to Product Tags within the application. This " "Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing " "class provides functionality for retrieving, filtering, and serializing "

View file

@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: EVIBES 3.0.0\n" "Project-Id-Version: EVIBES 3.0.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-10-13 13:56+0300\n" "POT-Creation-Date: 2025-10-13 18:49+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n" "Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
"Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n" "Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n"
@ -49,82 +49,86 @@ msgstr "Modified"
msgid "when the object was last modified" msgid "when the object was last modified"
msgstr "When the object was last edited" msgstr "When the object was last edited"
#: core/admin.py:63 #: core/admin.py:68
msgid "translations" msgid "translations"
msgstr "Translations" msgstr "Translations"
#: core/admin.py:67 #: core/admin.py:72
msgid "general" msgid "general"
msgstr "General" msgstr "General"
#: core/admin.py:69 #: core/admin.py:74
msgid "relations" msgid "relations"
msgstr "Relations" msgstr "Relations"
#: core/admin.py:87 #: core/admin.py:76
msgid "additional info"
msgstr "additional info"
#: core/admin.py:94
msgid "metadata" msgid "metadata"
msgstr "Metadata" msgstr "Metadata"
#: core/admin.py:94 #: core/admin.py:101
msgid "timestamps" msgid "timestamps"
msgstr "Timestamps" msgstr "Timestamps"
#: core/admin.py:109 #: core/admin.py:116
#, python-format #, python-format
msgid "activate selected %(verbose_name_plural)s" msgid "activate selected %(verbose_name_plural)s"
msgstr "Activate selected %(verbose_name_plural)s" msgstr "Activate selected %(verbose_name_plural)s"
#: core/admin.py:114 #: core/admin.py:121
msgid "selected items have been activated." msgid "selected items have been activated."
msgstr "Selected items have been activated!" msgstr "Selected items have been activated!"
#: core/admin.py:120 #: core/admin.py:127
#, python-format #, python-format
msgid "deactivate selected %(verbose_name_plural)s" msgid "deactivate selected %(verbose_name_plural)s"
msgstr "Deactivate selected %(verbose_name_plural)s" msgstr "Deactivate selected %(verbose_name_plural)s"
#: core/admin.py:125 #: core/admin.py:132
msgid "selected items have been deactivated." msgid "selected items have been deactivated."
msgstr "Selected items have been deactivated!" msgstr "Selected items have been deactivated!"
#: core/admin.py:137 core/graphene/object_types.py:609 #: core/admin.py:144 core/graphene/object_types.py:609
#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 #: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717
msgid "attribute value" msgid "attribute value"
msgstr "Attribute Value" msgstr "Attribute Value"
#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:718 #: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718
msgid "attribute values" msgid "attribute values"
msgstr "Attribute Values" msgstr "Attribute Values"
#: core/admin.py:146 #: core/admin.py:153
msgid "image" msgid "image"
msgstr "Image" msgstr "Image"
#: core/admin.py:147 core/graphene/object_types.py:501 #: core/admin.py:154 core/graphene/object_types.py:501
msgid "images" msgid "images"
msgstr "Images" msgstr "Images"
#: core/admin.py:155 core/models.py:467 #: core/admin.py:162 core/models.py:467
msgid "stock" msgid "stock"
msgstr "Stock" msgstr "Stock"
#: core/admin.py:156 core/graphene/object_types.py:663 #: core/admin.py:163 core/graphene/object_types.py:663
msgid "stocks" msgid "stocks"
msgstr "Stocks" msgstr "Stocks"
#: core/admin.py:166 core/models.py:1675 #: core/admin.py:173 core/models.py:1675
msgid "order product" msgid "order product"
msgstr "Order Product" msgstr "Order Product"
#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1676 #: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676
msgid "order products" msgid "order products"
msgstr "Order Products" msgstr "Order Products"
#: core/admin.py:180 core/admin.py:181 #: core/admin.py:187 core/admin.py:188
msgid "children" msgid "children"
msgstr "Children" msgstr "Children"
#: core/admin.py:566 #: core/admin.py:940
msgid "Config" msgid "Config"
msgstr "Config" msgstr "Config"
@ -708,7 +712,7 @@ msgstr "delete an orderproduct relation"
msgid "add or remove feedback on an orderproduct relation" msgid "add or remove feedback on an orderproduct relation"
msgstr "add or remove feedback on an orderproduct relation" msgstr "add or remove feedback on an orderproduct relation"
#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 #: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499
msgid "no search term provided." msgid "no search term provided."
msgstr "No search term provided." msgstr "No search term provided."
@ -881,7 +885,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive"
msgstr "Please provide either order_uuid or order_hr_id - mutually exclusive!" msgstr "Please provide either order_uuid or order_hr_id - mutually exclusive!"
#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 #: core/graphene/mutations.py:229 core/graphene/mutations.py:486
#: core/graphene/mutations.py:527 core/viewsets.py:679 #: core/graphene/mutations.py:527 core/viewsets.py:680
msgid "wrong type came from order.buy() method: {type(instance)!s}" msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr "Wrong type came from order.buy() method: {type(instance)!s}" msgstr "Wrong type came from order.buy() method: {type(instance)!s}"
@ -959,7 +963,7 @@ msgstr "Original address string provided by the user"
#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 #: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870
#: core/models.py:1289 core/models.py:1318 core/models.py:1343 #: core/models.py:1289 core/models.py:1318 core/models.py:1343
#: core/viewsets.py:682 #: core/viewsets.py:683
#, python-brace-format #, python-brace-format
msgid "{name} does not exist: {uuid}" msgid "{name} does not exist: {uuid}"
msgstr "{name} does not exist: {uuid}!" msgstr "{name} does not exist: {uuid}!"
@ -2640,22 +2644,22 @@ msgstr "Both data and timeout are required"
msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgid "invalid timeout value, it must be between 0 and 216000 seconds"
msgstr "Invalid timeout value, it must be between 0 and 216000 seconds" msgstr "Invalid timeout value, it must be between 0 and 216000 seconds"
#: core/utils/emailing.py:25 #: core/utils/emailing.py:27
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | contact us initiated" msgid "{config.PROJECT_NAME} | contact us initiated"
msgstr "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | contact us initiated"
#: core/utils/emailing.py:74 #: core/utils/emailing.py:73
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order confirmation" msgid "{config.PROJECT_NAME} | order confirmation"
msgstr "{config.PROJECT_NAME} | Order Confirmation" msgstr "{config.PROJECT_NAME} | Order Confirmation"
#: core/utils/emailing.py:109 #: core/utils/emailing.py:105
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order delivered" msgid "{config.PROJECT_NAME} | order delivered"
msgstr "{config.PROJECT_NAME} | Order Delivered" msgstr "{config.PROJECT_NAME} | Order Delivered"
#: core/utils/emailing.py:197 #: core/utils/emailing.py:188
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | promocode granted" msgid "{config.PROJECT_NAME} | promocode granted"
msgstr "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | promocode granted"
@ -2900,7 +2904,7 @@ msgstr ""
" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " " accessible Feedback objects. It extends the base `EvibesViewSet` and makes "
"use of Django's filtering system for querying data." "use of Django's filtering system for querying data."
#: core/viewsets.py:593 #: core/viewsets.py:594
msgid "" msgid ""
"ViewSet for managing orders and related operations. This class provides " "ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes " "functionality to retrieve, modify, and manage order objects. It includes "
@ -2918,7 +2922,7 @@ msgstr ""
" uses multiple serializers based on the specific action being performed and " " uses multiple serializers based on the specific action being performed and "
"enforces permissions accordingly while interacting with order data." "enforces permissions accordingly while interacting with order data."
#: core/viewsets.py:782 #: core/viewsets.py:784
msgid "" msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables " "Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It " "CRUD operations and custom actions specific to the OrderProduct model. It "
@ -2932,11 +2936,11 @@ msgstr ""
" requested action. Additionally, it provides a detailed action for handling " " requested action. Additionally, it provides a detailed action for handling "
"feedback on OrderProduct instances" "feedback on OrderProduct instances"
#: core/viewsets.py:833 #: core/viewsets.py:835
msgid "Manages operations related to Product images in the application. " msgid "Manages operations related to Product images in the application. "
msgstr "Manages operations related to Product images in the application." msgstr "Manages operations related to Product images in the application."
#: core/viewsets.py:845 #: core/viewsets.py:847
msgid "" msgid ""
"Manages the retrieval and handling of PromoCode instances through various " "Manages the retrieval and handling of PromoCode instances through various "
"API actions." "API actions."
@ -2944,15 +2948,15 @@ msgstr ""
"Manages the retrieval and handling of PromoCode instances through various " "Manages the retrieval and handling of PromoCode instances through various "
"API actions." "API actions."
#: core/viewsets.py:866 #: core/viewsets.py:868
msgid "Represents a view set for managing promotions. " msgid "Represents a view set for managing promotions. "
msgstr "Represents a view set for managing promotions." msgstr "Represents a view set for managing promotions."
#: core/viewsets.py:878 #: core/viewsets.py:880
msgid "Handles operations related to Stock data in the system." msgid "Handles operations related to Stock data in the system."
msgstr "Handles operations related to Stock data in the system." msgstr "Handles operations related to Stock data in the system."
#: core/viewsets.py:892 #: core/viewsets.py:894
msgid "" msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides " "ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the " "endpoints for interacting with a user's wish list, allowing for the "
@ -2970,7 +2974,7 @@ msgstr ""
"that users can only manage their own wishlists unless explicit permissions " "that users can only manage their own wishlists unless explicit permissions "
"are granted." "are granted."
#: core/viewsets.py:1007 #: core/viewsets.py:1009
msgid "" msgid ""
"This class provides viewset functionality for managing `Address` objects. " "This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom " "The AddressViewSet class enables CRUD operations, filtering, and custom "
@ -2984,12 +2988,12 @@ msgstr ""
"different HTTP methods, serializer overrides, and permission handling based " "different HTTP methods, serializer overrides, and permission handling based "
"on the request context." "on the request context."
#: core/viewsets.py:1074 #: core/viewsets.py:1076
#, python-brace-format #, python-brace-format
msgid "Geocoding error: {e}" msgid "Geocoding error: {e}"
msgstr "Geocoding error: {e}" msgstr "Geocoding error: {e}"
#: core/viewsets.py:1081 #: core/viewsets.py:1083
msgid "" msgid ""
"Handles operations related to Product Tags within the application. This " "Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing " "class provides functionality for retrieving, filtering, and serializing "

View file

@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: EVIBES 3.0.0\n" "Project-Id-Version: EVIBES 3.0.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-10-13 13:56+0300\n" "POT-Creation-Date: 2025-10-13 18:49+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n" "Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
"Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n" "Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n"
@ -51,82 +51,86 @@ msgstr "Modificado"
msgid "when the object was last modified" msgid "when the object was last modified"
msgstr "Cuándo se editó el objeto por última vez" msgstr "Cuándo se editó el objeto por última vez"
#: core/admin.py:63 #: core/admin.py:68
msgid "translations" msgid "translations"
msgstr "Traducciones" msgstr "Traducciones"
#: core/admin.py:67 #: core/admin.py:72
msgid "general" msgid "general"
msgstr "General" msgstr "General"
#: core/admin.py:69 #: core/admin.py:74
msgid "relations" msgid "relations"
msgstr "Relaciones" msgstr "Relaciones"
#: core/admin.py:87 #: core/admin.py:76
msgid "additional info"
msgstr "información adicional"
#: core/admin.py:94
msgid "metadata" msgid "metadata"
msgstr "Metadatos" msgstr "Metadatos"
#: core/admin.py:94 #: core/admin.py:101
msgid "timestamps" msgid "timestamps"
msgstr "Marcas de tiempo" msgstr "Marcas de tiempo"
#: core/admin.py:109 #: core/admin.py:116
#, python-format #, python-format
msgid "activate selected %(verbose_name_plural)s" msgid "activate selected %(verbose_name_plural)s"
msgstr "Activar %(verbose_name_plural)s seleccionado" msgstr "Activar %(verbose_name_plural)s seleccionado"
#: core/admin.py:114 #: core/admin.py:121
msgid "selected items have been activated." msgid "selected items have been activated."
msgstr "Los artículos seleccionados se han activado." msgstr "Los artículos seleccionados se han activado."
#: core/admin.py:120 #: core/admin.py:127
#, python-format #, python-format
msgid "deactivate selected %(verbose_name_plural)s" msgid "deactivate selected %(verbose_name_plural)s"
msgstr "Desactivar %(verbose_name_plural)s seleccionado" msgstr "Desactivar %(verbose_name_plural)s seleccionado"
#: core/admin.py:125 #: core/admin.py:132
msgid "selected items have been deactivated." msgid "selected items have been deactivated."
msgstr "Los artículos seleccionados se han desactivado." msgstr "Los artículos seleccionados se han desactivado."
#: core/admin.py:137 core/graphene/object_types.py:609 #: core/admin.py:144 core/graphene/object_types.py:609
#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 #: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717
msgid "attribute value" msgid "attribute value"
msgstr "Atributo Valor" msgstr "Atributo Valor"
#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:718 #: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718
msgid "attribute values" msgid "attribute values"
msgstr "Valores de los atributos" msgstr "Valores de los atributos"
#: core/admin.py:146 #: core/admin.py:153
msgid "image" msgid "image"
msgstr "Imagen" msgstr "Imagen"
#: core/admin.py:147 core/graphene/object_types.py:501 #: core/admin.py:154 core/graphene/object_types.py:501
msgid "images" msgid "images"
msgstr "Imágenes" msgstr "Imágenes"
#: core/admin.py:155 core/models.py:467 #: core/admin.py:162 core/models.py:467
msgid "stock" msgid "stock"
msgstr "Stock" msgstr "Stock"
#: core/admin.py:156 core/graphene/object_types.py:663 #: core/admin.py:163 core/graphene/object_types.py:663
msgid "stocks" msgid "stocks"
msgstr "Acciones" msgstr "Acciones"
#: core/admin.py:166 core/models.py:1675 #: core/admin.py:173 core/models.py:1675
msgid "order product" msgid "order product"
msgstr "Pedir un producto" msgstr "Pedir un producto"
#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1676 #: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676
msgid "order products" msgid "order products"
msgstr "Pedir productos" msgstr "Pedir productos"
#: core/admin.py:180 core/admin.py:181 #: core/admin.py:187 core/admin.py:188
msgid "children" msgid "children"
msgstr "Niños" msgstr "Niños"
#: core/admin.py:566 #: core/admin.py:940
msgid "Config" msgid "Config"
msgstr "Configurar" msgstr "Configurar"
@ -742,7 +746,7 @@ msgstr "suprimir una relación pedido-producto"
msgid "add or remove feedback on an orderproduct relation" msgid "add or remove feedback on an orderproduct relation"
msgstr "añadir o eliminar comentarios en una relación pedido-producto" msgstr "añadir o eliminar comentarios en una relación pedido-producto"
#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 #: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499
msgid "no search term provided." msgid "no search term provided."
msgstr "No se proporciona ningún término de búsqueda." msgstr "No se proporciona ningún término de búsqueda."
@ -916,7 +920,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive"
msgstr "Indique order_uuid o order_hr_id, ¡se excluyen mutuamente!" msgstr "Indique order_uuid o order_hr_id, ¡se excluyen mutuamente!"
#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 #: core/graphene/mutations.py:229 core/graphene/mutations.py:486
#: core/graphene/mutations.py:527 core/viewsets.py:679 #: core/graphene/mutations.py:527 core/viewsets.py:680
msgid "wrong type came from order.buy() method: {type(instance)!s}" msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr "" msgstr ""
"Tipo incorrecto proveniente del método order.buy(): {type(instance)!s}" "Tipo incorrecto proveniente del método order.buy(): {type(instance)!s}"
@ -995,7 +999,7 @@ msgstr "Cadena de dirección original proporcionada por el usuario"
#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 #: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870
#: core/models.py:1289 core/models.py:1318 core/models.py:1343 #: core/models.py:1289 core/models.py:1318 core/models.py:1343
#: core/viewsets.py:682 #: core/viewsets.py:683
#, python-brace-format #, python-brace-format
msgid "{name} does not exist: {uuid}" msgid "{name} does not exist: {uuid}"
msgstr "{name} no existe: ¡{uuid}!" msgstr "{name} no existe: ¡{uuid}!"
@ -2711,22 +2715,22 @@ msgid "invalid timeout value, it must be between 0 and 216000 seconds"
msgstr "" msgstr ""
"Valor de tiempo de espera no válido, debe estar entre 0 y 216000 segundos." "Valor de tiempo de espera no válido, debe estar entre 0 y 216000 segundos."
#: core/utils/emailing.py:25 #: core/utils/emailing.py:27
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | contact us initiated" msgid "{config.PROJECT_NAME} | contact us initiated"
msgstr "{config.PROJECT_NAME} | contacto iniciado" msgstr "{config.PROJECT_NAME} | contacto iniciado"
#: core/utils/emailing.py:74 #: core/utils/emailing.py:73
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order confirmation" msgid "{config.PROJECT_NAME} | order confirmation"
msgstr "{config.PROJECT_NAME} | Confirmación de pedido" msgstr "{config.PROJECT_NAME} | Confirmación de pedido"
#: core/utils/emailing.py:109 #: core/utils/emailing.py:105
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order delivered" msgid "{config.PROJECT_NAME} | order delivered"
msgstr "{config.PROJECT_NAME} | Pedido entregado" msgstr "{config.PROJECT_NAME} | Pedido entregado"
#: core/utils/emailing.py:197 #: core/utils/emailing.py:188
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | promocode granted" msgid "{config.PROJECT_NAME} | promocode granted"
msgstr "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | promocode granted"
@ -2980,7 +2984,7 @@ msgstr ""
"objetos Feedback accesibles. Extiende la base `EvibesViewSet` y hace uso del" "objetos Feedback accesibles. Extiende la base `EvibesViewSet` y hace uso del"
" sistema de filtrado de Django para la consulta de datos." " sistema de filtrado de Django para la consulta de datos."
#: core/viewsets.py:593 #: core/viewsets.py:594
msgid "" msgid ""
"ViewSet for managing orders and related operations. This class provides " "ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes " "functionality to retrieve, modify, and manage order objects. It includes "
@ -2999,7 +3003,7 @@ msgstr ""
"acción específica que se esté realizando y aplica los permisos " "acción específica que se esté realizando y aplica los permisos "
"correspondientes al interactuar con los datos del pedido." "correspondientes al interactuar con los datos del pedido."
#: core/viewsets.py:782 #: core/viewsets.py:784
msgid "" msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables " "Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It " "CRUD operations and custom actions specific to the OrderProduct model. It "
@ -3014,13 +3018,13 @@ msgstr ""
"Además, proporciona una acción detallada para gestionar los comentarios " "Además, proporciona una acción detallada para gestionar los comentarios "
"sobre las instancias de OrderProduct." "sobre las instancias de OrderProduct."
#: core/viewsets.py:833 #: core/viewsets.py:835
msgid "Manages operations related to Product images in the application. " msgid "Manages operations related to Product images in the application. "
msgstr "" msgstr ""
"Gestiona las operaciones relacionadas con las imágenes de productos en la " "Gestiona las operaciones relacionadas con las imágenes de productos en la "
"aplicación." "aplicación."
#: core/viewsets.py:845 #: core/viewsets.py:847
msgid "" msgid ""
"Manages the retrieval and handling of PromoCode instances through various " "Manages the retrieval and handling of PromoCode instances through various "
"API actions." "API actions."
@ -3028,16 +3032,16 @@ msgstr ""
"Gestiona la recuperación y el manejo de instancias de PromoCode a través de " "Gestiona la recuperación y el manejo de instancias de PromoCode a través de "
"varias acciones de la API." "varias acciones de la API."
#: core/viewsets.py:866 #: core/viewsets.py:868
msgid "Represents a view set for managing promotions. " msgid "Represents a view set for managing promotions. "
msgstr "Representa un conjunto de vistas para gestionar promociones." msgstr "Representa un conjunto de vistas para gestionar promociones."
#: core/viewsets.py:878 #: core/viewsets.py:880
msgid "Handles operations related to Stock data in the system." msgid "Handles operations related to Stock data in the system."
msgstr "" msgstr ""
"Gestiona las operaciones relacionadas con los datos de Stock en el sistema." "Gestiona las operaciones relacionadas con los datos de Stock en el sistema."
#: core/viewsets.py:892 #: core/viewsets.py:894
msgid "" msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides " "ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the " "endpoints for interacting with a user's wish list, allowing for the "
@ -3056,7 +3060,7 @@ msgstr ""
"integrados para garantizar que los usuarios sólo puedan gestionar sus " "integrados para garantizar que los usuarios sólo puedan gestionar sus "
"propias listas de deseos a menos que se concedan permisos explícitos." "propias listas de deseos a menos que se concedan permisos explícitos."
#: core/viewsets.py:1007 #: core/viewsets.py:1009
msgid "" msgid ""
"This class provides viewset functionality for managing `Address` objects. " "This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom " "The AddressViewSet class enables CRUD operations, filtering, and custom "
@ -3070,12 +3074,12 @@ msgstr ""
"comportamientos especializados para diferentes métodos HTTP, anulaciones del" "comportamientos especializados para diferentes métodos HTTP, anulaciones del"
" serializador y gestión de permisos basada en el contexto de la solicitud." " serializador y gestión de permisos basada en el contexto de la solicitud."
#: core/viewsets.py:1074 #: core/viewsets.py:1076
#, python-brace-format #, python-brace-format
msgid "Geocoding error: {e}" msgid "Geocoding error: {e}"
msgstr "Error de geocodificación: {e}" msgstr "Error de geocodificación: {e}"
#: core/viewsets.py:1081 #: core/viewsets.py:1083
msgid "" msgid ""
"Handles operations related to Product Tags within the application. This " "Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing " "class provides functionality for retrieving, filtering, and serializing "

View file

@ -2,12 +2,12 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package. # This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-10-13 13:56+0300\n" "POT-Creation-Date: 2025-10-13 18:49+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -49,82 +49,86 @@ msgstr ""
msgid "when the object was last modified" msgid "when the object was last modified"
msgstr "" msgstr ""
#: core/admin.py:63 #: core/admin.py:68
msgid "translations" msgid "translations"
msgstr "" msgstr ""
#: core/admin.py:67 #: core/admin.py:72
msgid "general" msgid "general"
msgstr "" msgstr ""
#: core/admin.py:69 #: core/admin.py:74
msgid "relations" msgid "relations"
msgstr "" msgstr ""
#: core/admin.py:87 #: core/admin.py:76
msgid "metadata" msgid "additional info"
msgstr "" msgstr ""
#: core/admin.py:94 #: core/admin.py:94
msgid "metadata"
msgstr ""
#: core/admin.py:101
msgid "timestamps" msgid "timestamps"
msgstr "" msgstr ""
#: core/admin.py:109 #: core/admin.py:116
#, python-format #, python-format
msgid "activate selected %(verbose_name_plural)s" msgid "activate selected %(verbose_name_plural)s"
msgstr "" msgstr ""
#: core/admin.py:114 #: core/admin.py:121
msgid "selected items have been activated." msgid "selected items have been activated."
msgstr "" msgstr ""
#: core/admin.py:120 #: core/admin.py:127
#, python-format #, python-format
msgid "deactivate selected %(verbose_name_plural)s" msgid "deactivate selected %(verbose_name_plural)s"
msgstr "" msgstr ""
#: core/admin.py:125 #: core/admin.py:132
msgid "selected items have been deactivated." msgid "selected items have been deactivated."
msgstr "" msgstr ""
#: core/admin.py:137 core/graphene/object_types.py:609 #: core/admin.py:144 core/graphene/object_types.py:609
#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 #: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717
msgid "attribute value" msgid "attribute value"
msgstr "" msgstr ""
#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:718 #: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718
msgid "attribute values" msgid "attribute values"
msgstr "" msgstr ""
#: core/admin.py:146 #: core/admin.py:153
msgid "image" msgid "image"
msgstr "" msgstr ""
#: core/admin.py:147 core/graphene/object_types.py:501 #: core/admin.py:154 core/graphene/object_types.py:501
msgid "images" msgid "images"
msgstr "" msgstr ""
#: core/admin.py:155 core/models.py:467 #: core/admin.py:162 core/models.py:467
msgid "stock" msgid "stock"
msgstr "" msgstr ""
#: core/admin.py:156 core/graphene/object_types.py:663 #: core/admin.py:163 core/graphene/object_types.py:663
msgid "stocks" msgid "stocks"
msgstr "" msgstr ""
#: core/admin.py:166 core/models.py:1675 #: core/admin.py:173 core/models.py:1675
msgid "order product" msgid "order product"
msgstr "" msgstr ""
#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1676 #: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676
msgid "order products" msgid "order products"
msgstr "" msgstr ""
#: core/admin.py:180 core/admin.py:181 #: core/admin.py:187 core/admin.py:188
msgid "children" msgid "children"
msgstr "" msgstr ""
#: core/admin.py:566 #: core/admin.py:940
msgid "Config" msgid "Config"
msgstr "" msgstr ""
@ -678,7 +682,7 @@ msgstr ""
msgid "add or remove feedback on an orderproduct relation" msgid "add or remove feedback on an orderproduct relation"
msgstr "" msgstr ""
#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 #: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499
msgid "no search term provided." msgid "no search term provided."
msgstr "" msgstr ""
@ -851,7 +855,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive"
msgstr "" msgstr ""
#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 #: core/graphene/mutations.py:229 core/graphene/mutations.py:486
#: core/graphene/mutations.py:527 core/viewsets.py:679 #: core/graphene/mutations.py:527 core/viewsets.py:680
msgid "wrong type came from order.buy() method: {type(instance)!s}" msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr "" msgstr ""
@ -927,7 +931,7 @@ msgstr ""
#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 #: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870
#: core/models.py:1289 core/models.py:1318 core/models.py:1343 #: core/models.py:1289 core/models.py:1318 core/models.py:1343
#: core/viewsets.py:682 #: core/viewsets.py:683
#, python-brace-format #, python-brace-format
msgid "{name} does not exist: {uuid}" msgid "{name} does not exist: {uuid}"
msgstr "" msgstr ""
@ -2459,22 +2463,22 @@ msgstr ""
msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgid "invalid timeout value, it must be between 0 and 216000 seconds"
msgstr "" msgstr ""
#: core/utils/emailing.py:25 #: core/utils/emailing.py:27
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | contact us initiated" msgid "{config.PROJECT_NAME} | contact us initiated"
msgstr "" msgstr ""
#: core/utils/emailing.py:74 #: core/utils/emailing.py:73
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order confirmation" msgid "{config.PROJECT_NAME} | order confirmation"
msgstr "" msgstr ""
#: core/utils/emailing.py:109 #: core/utils/emailing.py:105
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order delivered" msgid "{config.PROJECT_NAME} | order delivered"
msgstr "" msgstr ""
#: core/utils/emailing.py:197 #: core/utils/emailing.py:188
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | promocode granted" msgid "{config.PROJECT_NAME} | promocode granted"
msgstr "" msgstr ""
@ -2656,7 +2660,7 @@ msgid ""
"use of Django's filtering system for querying data." "use of Django's filtering system for querying data."
msgstr "" msgstr ""
#: core/viewsets.py:593 #: core/viewsets.py:594
msgid "" msgid ""
"ViewSet for managing orders and related operations. This class provides " "ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes " "functionality to retrieve, modify, and manage order objects. It includes "
@ -2667,7 +2671,7 @@ msgid ""
"enforces permissions accordingly while interacting with order data." "enforces permissions accordingly while interacting with order data."
msgstr "" msgstr ""
#: core/viewsets.py:782 #: core/viewsets.py:784
msgid "" msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables " "Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It " "CRUD operations and custom actions specific to the OrderProduct model. It "
@ -2676,25 +2680,25 @@ msgid ""
"feedback on OrderProduct instances" "feedback on OrderProduct instances"
msgstr "" msgstr ""
#: core/viewsets.py:833 #: core/viewsets.py:835
msgid "Manages operations related to Product images in the application. " msgid "Manages operations related to Product images in the application. "
msgstr "" msgstr ""
#: core/viewsets.py:845 #: core/viewsets.py:847
msgid "" msgid ""
"Manages the retrieval and handling of PromoCode instances through various " "Manages the retrieval and handling of PromoCode instances through various "
"API actions." "API actions."
msgstr "" msgstr ""
#: core/viewsets.py:866 #: core/viewsets.py:868
msgid "Represents a view set for managing promotions. " msgid "Represents a view set for managing promotions. "
msgstr "" msgstr ""
#: core/viewsets.py:878 #: core/viewsets.py:880
msgid "Handles operations related to Stock data in the system." msgid "Handles operations related to Stock data in the system."
msgstr "" msgstr ""
#: core/viewsets.py:892 #: core/viewsets.py:894
msgid "" msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides " "ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the " "endpoints for interacting with a user's wish list, allowing for the "
@ -2705,7 +2709,7 @@ msgid ""
"are granted." "are granted."
msgstr "" msgstr ""
#: core/viewsets.py:1007 #: core/viewsets.py:1009
msgid "" msgid ""
"This class provides viewset functionality for managing `Address` objects. " "This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom " "The AddressViewSet class enables CRUD operations, filtering, and custom "
@ -2714,12 +2718,12 @@ msgid ""
"on the request context." "on the request context."
msgstr "" msgstr ""
#: core/viewsets.py:1074 #: core/viewsets.py:1076
#, python-brace-format #, python-brace-format
msgid "Geocoding error: {e}" msgid "Geocoding error: {e}"
msgstr "" msgstr ""
#: core/viewsets.py:1081 #: core/viewsets.py:1083
msgid "" msgid ""
"Handles operations related to Product Tags within the application. This " "Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing " "class provides functionality for retrieving, filtering, and serializing "

View file

@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: EVIBES 3.0.0\n" "Project-Id-Version: EVIBES 3.0.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-10-13 13:56+0300\n" "POT-Creation-Date: 2025-10-13 18:49+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n" "Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
"Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n" "Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n"
@ -51,82 +51,86 @@ msgstr "Modifié"
msgid "when the object was last modified" msgid "when the object was last modified"
msgstr "Date de la dernière modification de l'objet" msgstr "Date de la dernière modification de l'objet"
#: core/admin.py:63 #: core/admin.py:68
msgid "translations" msgid "translations"
msgstr "Traductions" msgstr "Traductions"
#: core/admin.py:67 #: core/admin.py:72
msgid "general" msgid "general"
msgstr "Général" msgstr "Général"
#: core/admin.py:69 #: core/admin.py:74
msgid "relations" msgid "relations"
msgstr "Relations" msgstr "Relations"
#: core/admin.py:87 #: core/admin.py:76
msgid "additional info"
msgstr "Informations complémentaires"
#: core/admin.py:94
msgid "metadata" msgid "metadata"
msgstr "Métadonnées" msgstr "Métadonnées"
#: core/admin.py:94 #: core/admin.py:101
msgid "timestamps" msgid "timestamps"
msgstr "Horodatage" msgstr "Horodatage"
#: core/admin.py:109 #: core/admin.py:116
#, python-format #, python-format
msgid "activate selected %(verbose_name_plural)s" msgid "activate selected %(verbose_name_plural)s"
msgstr "Activer la %(verbose_name_plural)s sélectionnée" msgstr "Activer la %(verbose_name_plural)s sélectionnée"
#: core/admin.py:114 #: core/admin.py:121
msgid "selected items have been activated." msgid "selected items have been activated."
msgstr "Les articles sélectionnés ont été activés !" msgstr "Les articles sélectionnés ont été activés !"
#: core/admin.py:120 #: core/admin.py:127
#, python-format #, python-format
msgid "deactivate selected %(verbose_name_plural)s" msgid "deactivate selected %(verbose_name_plural)s"
msgstr "Désactiver la %(verbose_name_plural)s sélectionnée" msgstr "Désactiver la %(verbose_name_plural)s sélectionnée"
#: core/admin.py:125 #: core/admin.py:132
msgid "selected items have been deactivated." msgid "selected items have been deactivated."
msgstr "Les articles sélectionnés ont été désactivés !" msgstr "Les articles sélectionnés ont été désactivés !"
#: core/admin.py:137 core/graphene/object_types.py:609 #: core/admin.py:144 core/graphene/object_types.py:609
#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 #: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717
msgid "attribute value" msgid "attribute value"
msgstr "Valeur de l'attribut" msgstr "Valeur de l'attribut"
#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:718 #: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718
msgid "attribute values" msgid "attribute values"
msgstr "Valeurs des attributs" msgstr "Valeurs des attributs"
#: core/admin.py:146 #: core/admin.py:153
msgid "image" msgid "image"
msgstr "Image" msgstr "Image"
#: core/admin.py:147 core/graphene/object_types.py:501 #: core/admin.py:154 core/graphene/object_types.py:501
msgid "images" msgid "images"
msgstr "Images" msgstr "Images"
#: core/admin.py:155 core/models.py:467 #: core/admin.py:162 core/models.py:467
msgid "stock" msgid "stock"
msgstr "Stock" msgstr "Stock"
#: core/admin.py:156 core/graphene/object_types.py:663 #: core/admin.py:163 core/graphene/object_types.py:663
msgid "stocks" msgid "stocks"
msgstr "Stocks" msgstr "Stocks"
#: core/admin.py:166 core/models.py:1675 #: core/admin.py:173 core/models.py:1675
msgid "order product" msgid "order product"
msgstr "Commander un produit" msgstr "Commander un produit"
#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1676 #: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676
msgid "order products" msgid "order products"
msgstr "Commander des produits" msgstr "Commander des produits"
#: core/admin.py:180 core/admin.py:181 #: core/admin.py:187 core/admin.py:188
msgid "children" msgid "children"
msgstr "Les enfants" msgstr "Les enfants"
#: core/admin.py:566 #: core/admin.py:940
msgid "Config" msgid "Config"
msgstr "Config" msgstr "Config"
@ -754,7 +758,7 @@ msgstr ""
"ajouter ou supprimer un retour d'information sur une relation commande-" "ajouter ou supprimer un retour d'information sur une relation commande-"
"produit" "produit"
#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 #: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499
msgid "no search term provided." msgid "no search term provided."
msgstr "Aucun terme de recherche n'est fourni." msgstr "Aucun terme de recherche n'est fourni."
@ -931,7 +935,7 @@ msgstr ""
"mutuellement !" "mutuellement !"
#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 #: core/graphene/mutations.py:229 core/graphene/mutations.py:486
#: core/graphene/mutations.py:527 core/viewsets.py:679 #: core/graphene/mutations.py:527 core/viewsets.py:680
msgid "wrong type came from order.buy() method: {type(instance)!s}" msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr "" msgstr ""
"Le mauvais type provient de la méthode order.buy() : {type(instance)!s}" "Le mauvais type provient de la méthode order.buy() : {type(instance)!s}"
@ -1013,7 +1017,7 @@ msgstr "Chaîne d'adresse originale fournie par l'utilisateur"
#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 #: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870
#: core/models.py:1289 core/models.py:1318 core/models.py:1343 #: core/models.py:1289 core/models.py:1318 core/models.py:1343
#: core/viewsets.py:682 #: core/viewsets.py:683
#, python-brace-format #, python-brace-format
msgid "{name} does not exist: {uuid}" msgid "{name} does not exist: {uuid}"
msgstr "{name} n'existe pas : {uuid} !" msgstr "{name} n'existe pas : {uuid} !"
@ -2758,22 +2762,22 @@ msgstr ""
"La valeur du délai d'attente n'est pas valide, elle doit être comprise entre" "La valeur du délai d'attente n'est pas valide, elle doit être comprise entre"
" 0 et 216000 secondes." " 0 et 216000 secondes."
#: core/utils/emailing.py:25 #: core/utils/emailing.py:27
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | contact us initiated" msgid "{config.PROJECT_NAME} | contact us initiated"
msgstr "{config.PROJECT_NAME} | nous contacter initié" msgstr "{config.PROJECT_NAME} | nous contacter initié"
#: core/utils/emailing.py:74 #: core/utils/emailing.py:73
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order confirmation" msgid "{config.PROJECT_NAME} | order confirmation"
msgstr "{config.PROJECT_NAME} | Confirmation de commande" msgstr "{config.PROJECT_NAME} | Confirmation de commande"
#: core/utils/emailing.py:109 #: core/utils/emailing.py:105
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order delivered" msgid "{config.PROJECT_NAME} | order delivered"
msgstr "{config.PROJECT_NAME} | Commande livrée" msgstr "{config.PROJECT_NAME} | Commande livrée"
#: core/utils/emailing.py:197 #: core/utils/emailing.py:188
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | promocode granted" msgid "{config.PROJECT_NAME} | promocode granted"
msgstr "{config.PROJECT_NAME} | promocode accordé" msgstr "{config.PROJECT_NAME} | promocode accordé"
@ -3030,7 +3034,7 @@ msgstr ""
"la classe de base `EvibesViewSet` et utilise le système de filtrage de " "la classe de base `EvibesViewSet` et utilise le système de filtrage de "
"Django pour l'interrogation des données." "Django pour l'interrogation des données."
#: core/viewsets.py:593 #: core/viewsets.py:594
msgid "" msgid ""
"ViewSet for managing orders and related operations. This class provides " "ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes " "functionality to retrieve, modify, and manage order objects. It includes "
@ -3050,7 +3054,7 @@ msgstr ""
"autorisations en conséquence lors de l'interaction avec les données de la " "autorisations en conséquence lors de l'interaction avec les données de la "
"commande." "commande."
#: core/viewsets.py:782 #: core/viewsets.py:784
msgid "" msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables " "Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It " "CRUD operations and custom actions specific to the OrderProduct model. It "
@ -3065,11 +3069,11 @@ msgstr ""
" En outre, il fournit une action détaillée pour gérer le retour " " En outre, il fournit une action détaillée pour gérer le retour "
"d'informations sur les instances OrderProduct." "d'informations sur les instances OrderProduct."
#: core/viewsets.py:833 #: core/viewsets.py:835
msgid "Manages operations related to Product images in the application. " 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." msgstr "Gère les opérations liées aux images des produits dans l'application."
#: core/viewsets.py:845 #: core/viewsets.py:847
msgid "" msgid ""
"Manages the retrieval and handling of PromoCode instances through various " "Manages the retrieval and handling of PromoCode instances through various "
"API actions." "API actions."
@ -3077,15 +3081,15 @@ msgstr ""
"Gère la récupération et le traitement des instances de PromoCode par le " "Gère la récupération et le traitement des instances de PromoCode par le "
"biais de diverses actions API." "biais de diverses actions API."
#: core/viewsets.py:866 #: core/viewsets.py:868
msgid "Represents a view set for managing promotions. " msgid "Represents a view set for managing promotions. "
msgstr "Représente un jeu de vues pour la gestion des promotions." msgstr "Représente un jeu de vues pour la gestion des promotions."
#: core/viewsets.py:878 #: core/viewsets.py:880
msgid "Handles operations related to Stock data in the system." 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." msgstr "Gère les opérations liées aux données de stock dans le système."
#: core/viewsets.py:892 #: core/viewsets.py:894
msgid "" msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides " "ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the " "endpoints for interacting with a user's wish list, allowing for the "
@ -3105,7 +3109,7 @@ msgstr ""
"ne peuvent gérer que leur propre liste de souhaits, sauf si des permissions " "ne peuvent gérer que leur propre liste de souhaits, sauf si des permissions "
"explicites sont accordées." "explicites sont accordées."
#: core/viewsets.py:1007 #: core/viewsets.py:1009
msgid "" msgid ""
"This class provides viewset functionality for managing `Address` objects. " "This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom " "The AddressViewSet class enables CRUD operations, filtering, and custom "
@ -3120,12 +3124,12 @@ msgstr ""
" HTTP, des dérogations au sérialiseur et une gestion des autorisations basée" " HTTP, des dérogations au sérialiseur et une gestion des autorisations basée"
" sur le contexte de la demande." " sur le contexte de la demande."
#: core/viewsets.py:1074 #: core/viewsets.py:1076
#, python-brace-format #, python-brace-format
msgid "Geocoding error: {e}" msgid "Geocoding error: {e}"
msgstr "Erreur de géocodage : {e}" msgstr "Erreur de géocodage : {e}"
#: core/viewsets.py:1081 #: core/viewsets.py:1083
msgid "" msgid ""
"Handles operations related to Product Tags within the application. This " "Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing " "class provides functionality for retrieving, filtering, and serializing "

View file

@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: EVIBES 3.0.0\n" "Project-Id-Version: EVIBES 3.0.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-10-13 13:56+0300\n" "POT-Creation-Date: 2025-10-13 18:49+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n" "Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
"Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n" "Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n"
@ -47,82 +47,86 @@ msgstr "משונה"
msgid "when the object was last modified" msgid "when the object was last modified"
msgstr "מתי האובייקט נערך לאחרונה" msgstr "מתי האובייקט נערך לאחרונה"
#: core/admin.py:63 #: core/admin.py:68
msgid "translations" msgid "translations"
msgstr "תרגומים" msgstr "תרגומים"
#: core/admin.py:67 #: core/admin.py:72
msgid "general" msgid "general"
msgstr "כללי" msgstr "כללי"
#: core/admin.py:69 #: core/admin.py:74
msgid "relations" msgid "relations"
msgstr "יחסים" msgstr "יחסים"
#: core/admin.py:87 #: core/admin.py:76
msgid "additional info"
msgstr "מידע נוסף"
#: core/admin.py:94
msgid "metadata" msgid "metadata"
msgstr "מטא-נתונים" msgstr "מטא-נתונים"
#: core/admin.py:94 #: core/admin.py:101
msgid "timestamps" msgid "timestamps"
msgstr "חותמות זמן" msgstr "חותמות זמן"
#: core/admin.py:109 #: core/admin.py:116
#, python-format #, python-format
msgid "activate selected %(verbose_name_plural)s" msgid "activate selected %(verbose_name_plural)s"
msgstr "הפעל את %(verbose_name_plural)s שנבחר" msgstr "הפעל את %(verbose_name_plural)s שנבחר"
#: core/admin.py:114 #: core/admin.py:121
msgid "selected items have been activated." msgid "selected items have been activated."
msgstr "הפריטים שנבחרו הופעלו!" msgstr "הפריטים שנבחרו הופעלו!"
#: core/admin.py:120 #: core/admin.py:127
#, python-format #, python-format
msgid "deactivate selected %(verbose_name_plural)s" msgid "deactivate selected %(verbose_name_plural)s"
msgstr "השבת את %(verbose_name_plural)s שנבחר" msgstr "השבת את %(verbose_name_plural)s שנבחר"
#: core/admin.py:125 #: core/admin.py:132
msgid "selected items have been deactivated." msgid "selected items have been deactivated."
msgstr "פריטים נבחרים הושבתו!" msgstr "פריטים נבחרים הושבתו!"
#: core/admin.py:137 core/graphene/object_types.py:609 #: core/admin.py:144 core/graphene/object_types.py:609
#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 #: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717
msgid "attribute value" msgid "attribute value"
msgstr "ערך התכונה" msgstr "ערך התכונה"
#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:718 #: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718
msgid "attribute values" msgid "attribute values"
msgstr "ערכי תכונות" msgstr "ערכי תכונות"
#: core/admin.py:146 #: core/admin.py:153
msgid "image" msgid "image"
msgstr "תמונה" msgstr "תמונה"
#: core/admin.py:147 core/graphene/object_types.py:501 #: core/admin.py:154 core/graphene/object_types.py:501
msgid "images" msgid "images"
msgstr "תמונות" msgstr "תמונות"
#: core/admin.py:155 core/models.py:467 #: core/admin.py:162 core/models.py:467
msgid "stock" msgid "stock"
msgstr "מלאי" msgstr "מלאי"
#: core/admin.py:156 core/graphene/object_types.py:663 #: core/admin.py:163 core/graphene/object_types.py:663
msgid "stocks" msgid "stocks"
msgstr "מניות" msgstr "מניות"
#: core/admin.py:166 core/models.py:1675 #: core/admin.py:173 core/models.py:1675
msgid "order product" msgid "order product"
msgstr "הזמן מוצר" msgstr "הזמן מוצר"
#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1676 #: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676
msgid "order products" msgid "order products"
msgstr "הזמנת מוצרים" msgstr "הזמנת מוצרים"
#: core/admin.py:180 core/admin.py:181 #: core/admin.py:187 core/admin.py:188
msgid "children" msgid "children"
msgstr "ילדים" msgstr "ילדים"
#: core/admin.py:566 #: core/admin.py:940
msgid "Config" msgid "Config"
msgstr "תצורה" msgstr "תצורה"
@ -693,7 +697,7 @@ msgstr "מחיקת קשר בין הזמנה למוצר"
msgid "add or remove feedback on an orderproduct relation" msgid "add or remove feedback on an orderproduct relation"
msgstr "הוספה או הסרה של משוב על קשר בין הזמנה למוצר" msgstr "הוספה או הסרה של משוב על קשר בין הזמנה למוצר"
#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 #: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499
msgid "no search term provided." msgid "no search term provided."
msgstr "לא צויין מונח חיפוש." msgstr "לא צויין מונח חיפוש."
@ -866,7 +870,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive"
msgstr "אנא ספק את order_uuid או order_hr_id - אחד מהם בלבד!" msgstr "אנא ספק את order_uuid או order_hr_id - אחד מהם בלבד!"
#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 #: core/graphene/mutations.py:229 core/graphene/mutations.py:486
#: core/graphene/mutations.py:527 core/viewsets.py:679 #: core/graphene/mutations.py:527 core/viewsets.py:680
msgid "wrong type came from order.buy() method: {type(instance)!s}" msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr "סוג שגוי הגיע משיטת order.buy(): {type(instance)!s}" msgstr "סוג שגוי הגיע משיטת order.buy(): {type(instance)!s}"
@ -942,7 +946,7 @@ msgstr "מחרוזת הכתובת המקורית שסופקה על ידי המש
#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 #: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870
#: core/models.py:1289 core/models.py:1318 core/models.py:1343 #: core/models.py:1289 core/models.py:1318 core/models.py:1343
#: core/viewsets.py:682 #: core/viewsets.py:683
#, python-brace-format #, python-brace-format
msgid "{name} does not exist: {uuid}" msgid "{name} does not exist: {uuid}"
msgstr "{name} אינו קיים: {uuid}!" msgstr "{name} אינו קיים: {uuid}!"
@ -2572,22 +2576,22 @@ msgstr "נדרשים הן הנתונים והן זמן ההמתנה"
msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgid "invalid timeout value, it must be between 0 and 216000 seconds"
msgstr "ערך זמן המתנה לא חוקי, הוא חייב להיות בין 0 ל-216000 שניות" msgstr "ערך זמן המתנה לא חוקי, הוא חייב להיות בין 0 ל-216000 שניות"
#: core/utils/emailing.py:25 #: core/utils/emailing.py:27
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | contact us initiated" msgid "{config.PROJECT_NAME} | contact us initiated"
msgstr "{config.PROJECT_NAME} | צור קשר יוזם" msgstr "{config.PROJECT_NAME} | צור קשר יוזם"
#: core/utils/emailing.py:74 #: core/utils/emailing.py:73
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order confirmation" msgid "{config.PROJECT_NAME} | order confirmation"
msgstr "{config.PROJECT_NAME} | אישור הזמנה" msgstr "{config.PROJECT_NAME} | אישור הזמנה"
#: core/utils/emailing.py:109 #: core/utils/emailing.py:105
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order delivered" msgid "{config.PROJECT_NAME} | order delivered"
msgstr "{config.PROJECT_NAME} | הזמנה נמסרה" msgstr "{config.PROJECT_NAME} | הזמנה נמסרה"
#: core/utils/emailing.py:197 #: core/utils/emailing.py:188
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | promocode granted" msgid "{config.PROJECT_NAME} | promocode granted"
msgstr "{config.PROJECT_NAME} | קוד קידום מכירות מוענק" msgstr "{config.PROJECT_NAME} | קוד קידום מכירות מוענק"
@ -2817,7 +2821,7 @@ msgstr ""
" היא מרחיבה את `EvibesViewSet` הבסיסי ומשתמשת במערכת הסינון של Django " " היא מרחיבה את `EvibesViewSet` הבסיסי ומשתמשת במערכת הסינון של Django "
"לשאילתת נתונים." "לשאילתת נתונים."
#: core/viewsets.py:593 #: core/viewsets.py:594
msgid "" msgid ""
"ViewSet for managing orders and related operations. This class provides " "ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes " "functionality to retrieve, modify, and manage order objects. It includes "
@ -2834,7 +2838,7 @@ msgstr ""
"בהתאם לפעולה הספציפית המתבצעת ומאכוף הרשאות בהתאם בעת אינטראקציה עם נתוני " "בהתאם לפעולה הספציפית המתבצעת ומאכוף הרשאות בהתאם בעת אינטראקציה עם נתוני "
"הזמנה." "הזמנה."
#: core/viewsets.py:782 #: core/viewsets.py:784
msgid "" msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables " "Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It " "CRUD operations and custom actions specific to the OrderProduct model. It "
@ -2847,25 +2851,25 @@ msgstr ""
"הרשאות והחלפת סריאלייזר בהתאם לפעולה המבוקשת. בנוסף, הוא מספק פעולה מפורטת " "הרשאות והחלפת סריאלייזר בהתאם לפעולה המבוקשת. בנוסף, הוא מספק פעולה מפורטת "
"לטיפול במשוב על מופעים של OrderProduct." "לטיפול במשוב על מופעים של OrderProduct."
#: core/viewsets.py:833 #: core/viewsets.py:835
msgid "Manages operations related to Product images in the application. " msgid "Manages operations related to Product images in the application. "
msgstr "מנהל פעולות הקשורות לתמונות מוצרים ביישום." msgstr "מנהל פעולות הקשורות לתמונות מוצרים ביישום."
#: core/viewsets.py:845 #: core/viewsets.py:847
msgid "" msgid ""
"Manages the retrieval and handling of PromoCode instances through various " "Manages the retrieval and handling of PromoCode instances through various "
"API actions." "API actions."
msgstr "מנהל את אחזור וטיפול במקרי PromoCode באמצעות פעולות API שונות." msgstr "מנהל את אחזור וטיפול במקרי PromoCode באמצעות פעולות API שונות."
#: core/viewsets.py:866 #: core/viewsets.py:868
msgid "Represents a view set for managing promotions. " msgid "Represents a view set for managing promotions. "
msgstr "מייצג קבוצת תצוגות לניהול מבצעים." msgstr "מייצג קבוצת תצוגות לניהול מבצעים."
#: core/viewsets.py:878 #: core/viewsets.py:880
msgid "Handles operations related to Stock data in the system." msgid "Handles operations related to Stock data in the system."
msgstr "מטפל בפעולות הקשורות לנתוני המלאי במערכת." msgstr "מטפל בפעולות הקשורות לנתוני המלאי במערכת."
#: core/viewsets.py:892 #: core/viewsets.py:894
msgid "" msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides " "ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the " "endpoints for interacting with a user's wish list, allowing for the "
@ -2882,7 +2886,7 @@ msgstr ""
"שמשתמשים יוכלו לנהל רק את רשימות המשאלות שלהם, אלא אם כן ניתנו הרשאות " "שמשתמשים יוכלו לנהל רק את רשימות המשאלות שלהם, אלא אם כן ניתנו הרשאות "
"מפורשות." "מפורשות."
#: core/viewsets.py:1007 #: core/viewsets.py:1009
msgid "" msgid ""
"This class provides viewset functionality for managing `Address` objects. " "This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom " "The AddressViewSet class enables CRUD operations, filtering, and custom "
@ -2895,12 +2899,12 @@ msgstr ""
"לישויות כתובת. היא כוללת התנהגויות מיוחדות עבור שיטות HTTP שונות, עקיפת " "לישויות כתובת. היא כוללת התנהגויות מיוחדות עבור שיטות HTTP שונות, עקיפת "
"סריאלייזר וטיפול בהרשאות בהתבסס על הקשר הבקשה." "סריאלייזר וטיפול בהרשאות בהתבסס על הקשר הבקשה."
#: core/viewsets.py:1074 #: core/viewsets.py:1076
#, python-brace-format #, python-brace-format
msgid "Geocoding error: {e}" msgid "Geocoding error: {e}"
msgstr "שגיאת קידוד גיאוגרפי: {e}" msgstr "שגיאת קידוד גיאוגרפי: {e}"
#: core/viewsets.py:1081 #: core/viewsets.py:1083
msgid "" msgid ""
"Handles operations related to Product Tags within the application. This " "Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing " "class provides functionality for retrieving, filtering, and serializing "

View file

@ -2,12 +2,12 @@
# Copyright (C) 2025 EGOR <FUREUNOIR> GORBUNOV # Copyright (C) 2025 EGOR <FUREUNOIR> GORBUNOV
# This file is distributed under the same license as the EVIBES package. # This file is distributed under the same license as the EVIBES package.
# EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>, 2025. # EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>, 2025.
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: EVIBES 3.0.0\n" "Project-Id-Version: EVIBES 3.0.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-10-13 13:56+0300\n" "POT-Creation-Date: 2025-10-13 18:49+0300\n"
"PO-Revision-Date: 2025-06-16 08:59+0100\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n"
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n" "Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n" "Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
@ -49,82 +49,86 @@ msgstr ""
msgid "when the object was last modified" msgid "when the object was last modified"
msgstr "" msgstr ""
#: core/admin.py:63 #: core/admin.py:68
msgid "translations" msgid "translations"
msgstr "" msgstr ""
#: core/admin.py:67 #: core/admin.py:72
msgid "general" msgid "general"
msgstr "" msgstr ""
#: core/admin.py:69 #: core/admin.py:74
msgid "relations" msgid "relations"
msgstr "" msgstr ""
#: core/admin.py:87 #: core/admin.py:76
msgid "metadata" msgid "additional info"
msgstr "" msgstr ""
#: core/admin.py:94 #: core/admin.py:94
msgid "metadata"
msgstr ""
#: core/admin.py:101
msgid "timestamps" msgid "timestamps"
msgstr "" msgstr ""
#: core/admin.py:109 #: core/admin.py:116
#, python-format #, python-format
msgid "activate selected %(verbose_name_plural)s" msgid "activate selected %(verbose_name_plural)s"
msgstr "" msgstr ""
#: core/admin.py:114 #: core/admin.py:121
msgid "selected items have been activated." msgid "selected items have been activated."
msgstr "" msgstr ""
#: core/admin.py:120 #: core/admin.py:127
#, python-format #, python-format
msgid "deactivate selected %(verbose_name_plural)s" msgid "deactivate selected %(verbose_name_plural)s"
msgstr "" msgstr ""
#: core/admin.py:125 #: core/admin.py:132
msgid "selected items have been deactivated." msgid "selected items have been deactivated."
msgstr "" msgstr ""
#: core/admin.py:137 core/graphene/object_types.py:609 #: core/admin.py:144 core/graphene/object_types.py:609
#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 #: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717
msgid "attribute value" msgid "attribute value"
msgstr "" msgstr ""
#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:718 #: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718
msgid "attribute values" msgid "attribute values"
msgstr "" msgstr ""
#: core/admin.py:146 #: core/admin.py:153
msgid "image" msgid "image"
msgstr "" msgstr ""
#: core/admin.py:147 core/graphene/object_types.py:501 #: core/admin.py:154 core/graphene/object_types.py:501
msgid "images" msgid "images"
msgstr "" msgstr ""
#: core/admin.py:155 core/models.py:467 #: core/admin.py:162 core/models.py:467
msgid "stock" msgid "stock"
msgstr "" msgstr ""
#: core/admin.py:156 core/graphene/object_types.py:663 #: core/admin.py:163 core/graphene/object_types.py:663
msgid "stocks" msgid "stocks"
msgstr "" msgstr ""
#: core/admin.py:166 core/models.py:1675 #: core/admin.py:173 core/models.py:1675
msgid "order product" msgid "order product"
msgstr "" msgstr ""
#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1676 #: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676
msgid "order products" msgid "order products"
msgstr "" msgstr ""
#: core/admin.py:180 core/admin.py:181 #: core/admin.py:187 core/admin.py:188
msgid "children" msgid "children"
msgstr "" msgstr ""
#: core/admin.py:566 #: core/admin.py:940
msgid "Config" msgid "Config"
msgstr "" msgstr ""
@ -678,7 +682,7 @@ msgstr ""
msgid "add or remove feedback on an orderproduct relation" msgid "add or remove feedback on an orderproduct relation"
msgstr "" msgstr ""
#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 #: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499
msgid "no search term provided." msgid "no search term provided."
msgstr "" msgstr ""
@ -851,7 +855,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive"
msgstr "" msgstr ""
#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 #: core/graphene/mutations.py:229 core/graphene/mutations.py:486
#: core/graphene/mutations.py:527 core/viewsets.py:679 #: core/graphene/mutations.py:527 core/viewsets.py:680
msgid "wrong type came from order.buy() method: {type(instance)!s}" msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr "" msgstr ""
@ -927,7 +931,7 @@ msgstr ""
#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 #: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870
#: core/models.py:1289 core/models.py:1318 core/models.py:1343 #: core/models.py:1289 core/models.py:1318 core/models.py:1343
#: core/viewsets.py:682 #: core/viewsets.py:683
#, python-brace-format #, python-brace-format
msgid "{name} does not exist: {uuid}" msgid "{name} does not exist: {uuid}"
msgstr "" msgstr ""
@ -2459,22 +2463,22 @@ msgstr ""
msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgid "invalid timeout value, it must be between 0 and 216000 seconds"
msgstr "" msgstr ""
#: core/utils/emailing.py:25 #: core/utils/emailing.py:27
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | contact us initiated" msgid "{config.PROJECT_NAME} | contact us initiated"
msgstr "" msgstr ""
#: core/utils/emailing.py:74 #: core/utils/emailing.py:73
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order confirmation" msgid "{config.PROJECT_NAME} | order confirmation"
msgstr "" msgstr ""
#: core/utils/emailing.py:109 #: core/utils/emailing.py:105
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order delivered" msgid "{config.PROJECT_NAME} | order delivered"
msgstr "" msgstr ""
#: core/utils/emailing.py:197 #: core/utils/emailing.py:188
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | promocode granted" msgid "{config.PROJECT_NAME} | promocode granted"
msgstr "" msgstr ""
@ -2656,7 +2660,7 @@ msgid ""
"use of Django's filtering system for querying data." "use of Django's filtering system for querying data."
msgstr "" msgstr ""
#: core/viewsets.py:593 #: core/viewsets.py:594
msgid "" msgid ""
"ViewSet for managing orders and related operations. This class provides " "ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes " "functionality to retrieve, modify, and manage order objects. It includes "
@ -2667,7 +2671,7 @@ msgid ""
"enforces permissions accordingly while interacting with order data." "enforces permissions accordingly while interacting with order data."
msgstr "" msgstr ""
#: core/viewsets.py:782 #: core/viewsets.py:784
msgid "" msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables " "Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It " "CRUD operations and custom actions specific to the OrderProduct model. It "
@ -2676,25 +2680,25 @@ msgid ""
"feedback on OrderProduct instances" "feedback on OrderProduct instances"
msgstr "" msgstr ""
#: core/viewsets.py:833 #: core/viewsets.py:835
msgid "Manages operations related to Product images in the application. " msgid "Manages operations related to Product images in the application. "
msgstr "" msgstr ""
#: core/viewsets.py:845 #: core/viewsets.py:847
msgid "" msgid ""
"Manages the retrieval and handling of PromoCode instances through various " "Manages the retrieval and handling of PromoCode instances through various "
"API actions." "API actions."
msgstr "" msgstr ""
#: core/viewsets.py:866 #: core/viewsets.py:868
msgid "Represents a view set for managing promotions. " msgid "Represents a view set for managing promotions. "
msgstr "" msgstr ""
#: core/viewsets.py:878 #: core/viewsets.py:880
msgid "Handles operations related to Stock data in the system." msgid "Handles operations related to Stock data in the system."
msgstr "" msgstr ""
#: core/viewsets.py:892 #: core/viewsets.py:894
msgid "" msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides " "ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the " "endpoints for interacting with a user's wish list, allowing for the "
@ -2705,7 +2709,7 @@ msgid ""
"are granted." "are granted."
msgstr "" msgstr ""
#: core/viewsets.py:1007 #: core/viewsets.py:1009
msgid "" msgid ""
"This class provides viewset functionality for managing `Address` objects. " "This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom " "The AddressViewSet class enables CRUD operations, filtering, and custom "
@ -2714,12 +2718,12 @@ msgid ""
"on the request context." "on the request context."
msgstr "" msgstr ""
#: core/viewsets.py:1074 #: core/viewsets.py:1076
#, python-brace-format #, python-brace-format
msgid "Geocoding error: {e}" msgid "Geocoding error: {e}"
msgstr "" msgstr ""
#: core/viewsets.py:1081 #: core/viewsets.py:1083
msgid "" msgid ""
"Handles operations related to Product Tags within the application. This " "Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing " "class provides functionality for retrieving, filtering, and serializing "

View file

@ -2,12 +2,12 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package. # This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-10-13 13:56+0300\n" "POT-Creation-Date: 2025-10-13 18:49+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -49,82 +49,86 @@ msgstr ""
msgid "when the object was last modified" msgid "when the object was last modified"
msgstr "" msgstr ""
#: core/admin.py:63 #: core/admin.py:68
msgid "translations" msgid "translations"
msgstr "" msgstr ""
#: core/admin.py:67 #: core/admin.py:72
msgid "general" msgid "general"
msgstr "" msgstr ""
#: core/admin.py:69 #: core/admin.py:74
msgid "relations" msgid "relations"
msgstr "" msgstr ""
#: core/admin.py:87 #: core/admin.py:76
msgid "metadata" msgid "additional info"
msgstr "" msgstr ""
#: core/admin.py:94 #: core/admin.py:94
msgid "metadata"
msgstr ""
#: core/admin.py:101
msgid "timestamps" msgid "timestamps"
msgstr "" msgstr ""
#: core/admin.py:109 #: core/admin.py:116
#, python-format #, python-format
msgid "activate selected %(verbose_name_plural)s" msgid "activate selected %(verbose_name_plural)s"
msgstr "" msgstr ""
#: core/admin.py:114 #: core/admin.py:121
msgid "selected items have been activated." msgid "selected items have been activated."
msgstr "" msgstr ""
#: core/admin.py:120 #: core/admin.py:127
#, python-format #, python-format
msgid "deactivate selected %(verbose_name_plural)s" msgid "deactivate selected %(verbose_name_plural)s"
msgstr "" msgstr ""
#: core/admin.py:125 #: core/admin.py:132
msgid "selected items have been deactivated." msgid "selected items have been deactivated."
msgstr "" msgstr ""
#: core/admin.py:137 core/graphene/object_types.py:609 #: core/admin.py:144 core/graphene/object_types.py:609
#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 #: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717
msgid "attribute value" msgid "attribute value"
msgstr "" msgstr ""
#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:718 #: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718
msgid "attribute values" msgid "attribute values"
msgstr "" msgstr ""
#: core/admin.py:146 #: core/admin.py:153
msgid "image" msgid "image"
msgstr "" msgstr ""
#: core/admin.py:147 core/graphene/object_types.py:501 #: core/admin.py:154 core/graphene/object_types.py:501
msgid "images" msgid "images"
msgstr "" msgstr ""
#: core/admin.py:155 core/models.py:467 #: core/admin.py:162 core/models.py:467
msgid "stock" msgid "stock"
msgstr "" msgstr ""
#: core/admin.py:156 core/graphene/object_types.py:663 #: core/admin.py:163 core/graphene/object_types.py:663
msgid "stocks" msgid "stocks"
msgstr "" msgstr ""
#: core/admin.py:166 core/models.py:1675 #: core/admin.py:173 core/models.py:1675
msgid "order product" msgid "order product"
msgstr "" msgstr ""
#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1676 #: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676
msgid "order products" msgid "order products"
msgstr "" msgstr ""
#: core/admin.py:180 core/admin.py:181 #: core/admin.py:187 core/admin.py:188
msgid "children" msgid "children"
msgstr "" msgstr ""
#: core/admin.py:566 #: core/admin.py:940
msgid "Config" msgid "Config"
msgstr "" msgstr ""
@ -678,7 +682,7 @@ msgstr ""
msgid "add or remove feedback on an orderproduct relation" msgid "add or remove feedback on an orderproduct relation"
msgstr "" msgstr ""
#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 #: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499
msgid "no search term provided." msgid "no search term provided."
msgstr "" msgstr ""
@ -851,7 +855,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive"
msgstr "" msgstr ""
#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 #: core/graphene/mutations.py:229 core/graphene/mutations.py:486
#: core/graphene/mutations.py:527 core/viewsets.py:679 #: core/graphene/mutations.py:527 core/viewsets.py:680
msgid "wrong type came from order.buy() method: {type(instance)!s}" msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr "" msgstr ""
@ -927,7 +931,7 @@ msgstr ""
#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 #: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870
#: core/models.py:1289 core/models.py:1318 core/models.py:1343 #: core/models.py:1289 core/models.py:1318 core/models.py:1343
#: core/viewsets.py:682 #: core/viewsets.py:683
#, python-brace-format #, python-brace-format
msgid "{name} does not exist: {uuid}" msgid "{name} does not exist: {uuid}"
msgstr "" msgstr ""
@ -2459,22 +2463,22 @@ msgstr ""
msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgid "invalid timeout value, it must be between 0 and 216000 seconds"
msgstr "" msgstr ""
#: core/utils/emailing.py:25 #: core/utils/emailing.py:27
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | contact us initiated" msgid "{config.PROJECT_NAME} | contact us initiated"
msgstr "" msgstr ""
#: core/utils/emailing.py:74 #: core/utils/emailing.py:73
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order confirmation" msgid "{config.PROJECT_NAME} | order confirmation"
msgstr "" msgstr ""
#: core/utils/emailing.py:109 #: core/utils/emailing.py:105
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order delivered" msgid "{config.PROJECT_NAME} | order delivered"
msgstr "" msgstr ""
#: core/utils/emailing.py:197 #: core/utils/emailing.py:188
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | promocode granted" msgid "{config.PROJECT_NAME} | promocode granted"
msgstr "" msgstr ""
@ -2656,7 +2660,7 @@ msgid ""
"use of Django's filtering system for querying data." "use of Django's filtering system for querying data."
msgstr "" msgstr ""
#: core/viewsets.py:593 #: core/viewsets.py:594
msgid "" msgid ""
"ViewSet for managing orders and related operations. This class provides " "ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes " "functionality to retrieve, modify, and manage order objects. It includes "
@ -2667,7 +2671,7 @@ msgid ""
"enforces permissions accordingly while interacting with order data." "enforces permissions accordingly while interacting with order data."
msgstr "" msgstr ""
#: core/viewsets.py:782 #: core/viewsets.py:784
msgid "" msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables " "Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It " "CRUD operations and custom actions specific to the OrderProduct model. It "
@ -2676,25 +2680,25 @@ msgid ""
"feedback on OrderProduct instances" "feedback on OrderProduct instances"
msgstr "" msgstr ""
#: core/viewsets.py:833 #: core/viewsets.py:835
msgid "Manages operations related to Product images in the application. " msgid "Manages operations related to Product images in the application. "
msgstr "" msgstr ""
#: core/viewsets.py:845 #: core/viewsets.py:847
msgid "" msgid ""
"Manages the retrieval and handling of PromoCode instances through various " "Manages the retrieval and handling of PromoCode instances through various "
"API actions." "API actions."
msgstr "" msgstr ""
#: core/viewsets.py:866 #: core/viewsets.py:868
msgid "Represents a view set for managing promotions. " msgid "Represents a view set for managing promotions. "
msgstr "" msgstr ""
#: core/viewsets.py:878 #: core/viewsets.py:880
msgid "Handles operations related to Stock data in the system." msgid "Handles operations related to Stock data in the system."
msgstr "" msgstr ""
#: core/viewsets.py:892 #: core/viewsets.py:894
msgid "" msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides " "ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the " "endpoints for interacting with a user's wish list, allowing for the "
@ -2705,7 +2709,7 @@ msgid ""
"are granted." "are granted."
msgstr "" msgstr ""
#: core/viewsets.py:1007 #: core/viewsets.py:1009
msgid "" msgid ""
"This class provides viewset functionality for managing `Address` objects. " "This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom " "The AddressViewSet class enables CRUD operations, filtering, and custom "
@ -2714,12 +2718,12 @@ msgid ""
"on the request context." "on the request context."
msgstr "" msgstr ""
#: core/viewsets.py:1074 #: core/viewsets.py:1076
#, python-brace-format #, python-brace-format
msgid "Geocoding error: {e}" msgid "Geocoding error: {e}"
msgstr "" msgstr ""
#: core/viewsets.py:1081 #: core/viewsets.py:1083
msgid "" msgid ""
"Handles operations related to Product Tags within the application. This " "Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing " "class provides functionality for retrieving, filtering, and serializing "

View file

@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: EVIBES 3.0.0\n" "Project-Id-Version: EVIBES 3.0.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-10-13 13:56+0300\n" "POT-Creation-Date: 2025-10-13 18:49+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n" "Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
"Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n" "Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n"
@ -50,82 +50,86 @@ msgstr "Dimodifikasi"
msgid "when the object was last modified" msgid "when the object was last modified"
msgstr "Kapan objek terakhir kali diedit" msgstr "Kapan objek terakhir kali diedit"
#: core/admin.py:63 #: core/admin.py:68
msgid "translations" msgid "translations"
msgstr "Terjemahan" msgstr "Terjemahan"
#: core/admin.py:67 #: core/admin.py:72
msgid "general" msgid "general"
msgstr "Umum" msgstr "Umum"
#: core/admin.py:69 #: core/admin.py:74
msgid "relations" msgid "relations"
msgstr "Hubungan" msgstr "Hubungan"
#: core/admin.py:87 #: core/admin.py:76
msgid "additional info"
msgstr "info tambahan"
#: core/admin.py:94
msgid "metadata" msgid "metadata"
msgstr "Metadata" msgstr "Metadata"
#: core/admin.py:94 #: core/admin.py:101
msgid "timestamps" msgid "timestamps"
msgstr "Stempel waktu" msgstr "Stempel waktu"
#: core/admin.py:109 #: core/admin.py:116
#, python-format #, python-format
msgid "activate selected %(verbose_name_plural)s" msgid "activate selected %(verbose_name_plural)s"
msgstr "Aktifkan %(verbose_name_plural)s yang dipilih" msgstr "Aktifkan %(verbose_name_plural)s yang dipilih"
#: core/admin.py:114 #: core/admin.py:121
msgid "selected items have been activated." msgid "selected items have been activated."
msgstr "Item yang dipilih telah diaktifkan!" msgstr "Item yang dipilih telah diaktifkan!"
#: core/admin.py:120 #: core/admin.py:127
#, python-format #, python-format
msgid "deactivate selected %(verbose_name_plural)s" msgid "deactivate selected %(verbose_name_plural)s"
msgstr "Menonaktifkan %(verbose_name_plural)s yang dipilih" msgstr "Menonaktifkan %(verbose_name_plural)s yang dipilih"
#: core/admin.py:125 #: core/admin.py:132
msgid "selected items have been deactivated." msgid "selected items have been deactivated."
msgstr "Item yang dipilih telah dinonaktifkan!" msgstr "Item yang dipilih telah dinonaktifkan!"
#: core/admin.py:137 core/graphene/object_types.py:609 #: core/admin.py:144 core/graphene/object_types.py:609
#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 #: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717
msgid "attribute value" msgid "attribute value"
msgstr "Nilai Atribut" msgstr "Nilai Atribut"
#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:718 #: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718
msgid "attribute values" msgid "attribute values"
msgstr "Nilai Atribut" msgstr "Nilai Atribut"
#: core/admin.py:146 #: core/admin.py:153
msgid "image" msgid "image"
msgstr "Gambar" msgstr "Gambar"
#: core/admin.py:147 core/graphene/object_types.py:501 #: core/admin.py:154 core/graphene/object_types.py:501
msgid "images" msgid "images"
msgstr "Gambar" msgstr "Gambar"
#: core/admin.py:155 core/models.py:467 #: core/admin.py:162 core/models.py:467
msgid "stock" msgid "stock"
msgstr "Stok" msgstr "Stok"
#: core/admin.py:156 core/graphene/object_types.py:663 #: core/admin.py:163 core/graphene/object_types.py:663
msgid "stocks" msgid "stocks"
msgstr "Saham" msgstr "Saham"
#: core/admin.py:166 core/models.py:1675 #: core/admin.py:173 core/models.py:1675
msgid "order product" msgid "order product"
msgstr "Pesan Produk" msgstr "Pesan Produk"
#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1676 #: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676
msgid "order products" msgid "order products"
msgstr "Pesan Produk" msgstr "Pesan Produk"
#: core/admin.py:180 core/admin.py:181 #: core/admin.py:187 core/admin.py:188
msgid "children" msgid "children"
msgstr "Anak-anak" msgstr "Anak-anak"
#: core/admin.py:566 #: core/admin.py:940
msgid "Config" msgid "Config"
msgstr "Konfigurasi" msgstr "Konfigurasi"
@ -753,7 +757,7 @@ msgstr "menghapus relasi pesanan-produk"
msgid "add or remove feedback on an orderproduct relation" msgid "add or remove feedback on an orderproduct relation"
msgstr "menambah atau menghapus umpan balik pada relasi pesanan-produk" msgstr "menambah atau menghapus umpan balik pada relasi pesanan-produk"
#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 #: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499
msgid "no search term provided." msgid "no search term provided."
msgstr "Tidak ada istilah pencarian yang disediakan." msgstr "Tidak ada istilah pencarian yang disediakan."
@ -927,7 +931,7 @@ msgstr ""
"Harap berikan order_uuid atau order_hr_id - tidak boleh lebih dari satu!" "Harap berikan order_uuid atau order_hr_id - tidak boleh lebih dari satu!"
#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 #: core/graphene/mutations.py:229 core/graphene/mutations.py:486
#: core/graphene/mutations.py:527 core/viewsets.py:679 #: core/graphene/mutations.py:527 core/viewsets.py:680
msgid "wrong type came from order.buy() method: {type(instance)!s}" msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr "Tipe yang salah berasal dari metode order.buy(): {type(instance)!s}" msgstr "Tipe yang salah berasal dari metode order.buy(): {type(instance)!s}"
@ -1004,7 +1008,7 @@ msgstr "String alamat asli yang diberikan oleh pengguna"
#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 #: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870
#: core/models.py:1289 core/models.py:1318 core/models.py:1343 #: core/models.py:1289 core/models.py:1318 core/models.py:1343
#: core/viewsets.py:682 #: core/viewsets.py:683
#, python-brace-format #, python-brace-format
msgid "{name} does not exist: {uuid}" msgid "{name} does not exist: {uuid}"
msgstr "{name} tidak ada: {uuid}!" msgstr "{name} tidak ada: {uuid}!"
@ -2715,22 +2719,22 @@ msgstr "Data dan batas waktu diperlukan"
msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgid "invalid timeout value, it must be between 0 and 216000 seconds"
msgstr "Nilai batas waktu tidak valid, harus antara 0 dan 216000 detik" msgstr "Nilai batas waktu tidak valid, harus antara 0 dan 216000 detik"
#: core/utils/emailing.py:25 #: core/utils/emailing.py:27
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | contact us initiated" msgid "{config.PROJECT_NAME} | contact us initiated"
msgstr "{config.PROJECT_NAME} | hubungi kami dimulai" msgstr "{config.PROJECT_NAME} | hubungi kami dimulai"
#: core/utils/emailing.py:74 #: core/utils/emailing.py:73
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order confirmation" msgid "{config.PROJECT_NAME} | order confirmation"
msgstr "{config.PROJECT_NAME} | Konfirmasi Pesanan" msgstr "{config.PROJECT_NAME} | Konfirmasi Pesanan"
#: core/utils/emailing.py:109 #: core/utils/emailing.py:105
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order delivered" msgid "{config.PROJECT_NAME} | order delivered"
msgstr "{config.PROJECT_NAME} | Pesanan Dikirim" msgstr "{config.PROJECT_NAME} | Pesanan Dikirim"
#: core/utils/emailing.py:197 #: core/utils/emailing.py:188
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | promocode granted" msgid "{config.PROJECT_NAME} | promocode granted"
msgstr "{config.PROJECT_NAME} | kode promo diberikan" msgstr "{config.PROJECT_NAME} | kode promo diberikan"
@ -2977,7 +2981,7 @@ msgstr ""
"yang dapat diakses. Kelas ini memperluas `EvibesViewSet` dasar dan " "yang dapat diakses. Kelas ini memperluas `EvibesViewSet` dasar dan "
"menggunakan sistem penyaringan Django untuk meminta data." "menggunakan sistem penyaringan Django untuk meminta data."
#: core/viewsets.py:593 #: core/viewsets.py:594
msgid "" msgid ""
"ViewSet for managing orders and related operations. This class provides " "ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes " "functionality to retrieve, modify, and manage order objects. It includes "
@ -2996,7 +3000,7 @@ msgstr ""
"beberapa serializer berdasarkan tindakan spesifik yang dilakukan dan " "beberapa serializer berdasarkan tindakan spesifik yang dilakukan dan "
"memberlakukan izin yang sesuai saat berinteraksi dengan data pesanan." "memberlakukan izin yang sesuai saat berinteraksi dengan data pesanan."
#: core/viewsets.py:782 #: core/viewsets.py:784
msgid "" msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables " "Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It " "CRUD operations and custom actions specific to the OrderProduct model. It "
@ -3010,11 +3014,11 @@ msgstr ""
"serializer berdasarkan tindakan yang diminta. Selain itu, ini menyediakan " "serializer berdasarkan tindakan yang diminta. Selain itu, ini menyediakan "
"tindakan terperinci untuk menangani umpan balik pada instance OrderProduct" "tindakan terperinci untuk menangani umpan balik pada instance OrderProduct"
#: core/viewsets.py:833 #: core/viewsets.py:835
msgid "Manages operations related to Product images in the application. " msgid "Manages operations related to Product images in the application. "
msgstr "Mengelola operasi yang terkait dengan gambar Produk dalam aplikasi." msgstr "Mengelola operasi yang terkait dengan gambar Produk dalam aplikasi."
#: core/viewsets.py:845 #: core/viewsets.py:847
msgid "" msgid ""
"Manages the retrieval and handling of PromoCode instances through various " "Manages the retrieval and handling of PromoCode instances through various "
"API actions." "API actions."
@ -3022,15 +3026,15 @@ msgstr ""
"Mengelola pengambilan dan penanganan contoh PromoCode melalui berbagai " "Mengelola pengambilan dan penanganan contoh PromoCode melalui berbagai "
"tindakan API." "tindakan API."
#: core/viewsets.py:866 #: core/viewsets.py:868
msgid "Represents a view set for managing promotions. " msgid "Represents a view set for managing promotions. "
msgstr "Merupakan set tampilan untuk mengelola promosi." msgstr "Merupakan set tampilan untuk mengelola promosi."
#: core/viewsets.py:878 #: core/viewsets.py:880
msgid "Handles operations related to Stock data in the system." msgid "Handles operations related to Stock data in the system."
msgstr "Menangani operasi yang terkait dengan data Stok di dalam sistem." msgstr "Menangani operasi yang terkait dengan data Stok di dalam sistem."
#: core/viewsets.py:892 #: core/viewsets.py:894
msgid "" msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides " "ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the " "endpoints for interacting with a user's wish list, allowing for the "
@ -3048,7 +3052,7 @@ msgstr ""
"diintegrasikan untuk memastikan bahwa pengguna hanya dapat mengelola daftar " "diintegrasikan untuk memastikan bahwa pengguna hanya dapat mengelola daftar "
"keinginan mereka sendiri kecuali jika izin eksplisit diberikan." "keinginan mereka sendiri kecuali jika izin eksplisit diberikan."
#: core/viewsets.py:1007 #: core/viewsets.py:1009
msgid "" msgid ""
"This class provides viewset functionality for managing `Address` objects. " "This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom " "The AddressViewSet class enables CRUD operations, filtering, and custom "
@ -3062,12 +3066,12 @@ msgstr ""
"khusus untuk metode HTTP yang berbeda, penggantian serializer, dan " "khusus untuk metode HTTP yang berbeda, penggantian serializer, dan "
"penanganan izin berdasarkan konteks permintaan." "penanganan izin berdasarkan konteks permintaan."
#: core/viewsets.py:1074 #: core/viewsets.py:1076
#, python-brace-format #, python-brace-format
msgid "Geocoding error: {e}" msgid "Geocoding error: {e}"
msgstr "Kesalahan pengodean geografis: {e}" msgstr "Kesalahan pengodean geografis: {e}"
#: core/viewsets.py:1081 #: core/viewsets.py:1083
msgid "" msgid ""
"Handles operations related to Product Tags within the application. This " "Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing " "class provides functionality for retrieving, filtering, and serializing "

View file

@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: EVIBES 3.0.0\n" "Project-Id-Version: EVIBES 3.0.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-10-13 13:56+0300\n" "POT-Creation-Date: 2025-10-13 18:49+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n" "Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
"Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n" "Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n"
@ -51,82 +51,86 @@ msgstr "Modificato"
msgid "when the object was last modified" msgid "when the object was last modified"
msgstr "Quando l'oggetto è stato modificato per l'ultima volta" msgstr "Quando l'oggetto è stato modificato per l'ultima volta"
#: core/admin.py:63 #: core/admin.py:68
msgid "translations" msgid "translations"
msgstr "Traduzioni" msgstr "Traduzioni"
#: core/admin.py:67 #: core/admin.py:72
msgid "general" msgid "general"
msgstr "Generale" msgstr "Generale"
#: core/admin.py:69 #: core/admin.py:74
msgid "relations" msgid "relations"
msgstr "Relazioni" msgstr "Relazioni"
#: core/admin.py:87 #: core/admin.py:76
msgid "additional info"
msgstr "informazioni aggiuntive"
#: core/admin.py:94
msgid "metadata" msgid "metadata"
msgstr "Metadati" msgstr "Metadati"
#: core/admin.py:94 #: core/admin.py:101
msgid "timestamps" msgid "timestamps"
msgstr "Timestamp" msgstr "Timestamp"
#: core/admin.py:109 #: core/admin.py:116
#, python-format #, python-format
msgid "activate selected %(verbose_name_plural)s" msgid "activate selected %(verbose_name_plural)s"
msgstr "Attivare il %(verbose_name_plural)s selezionato" msgstr "Attivare il %(verbose_name_plural)s selezionato"
#: core/admin.py:114 #: core/admin.py:121
msgid "selected items have been activated." msgid "selected items have been activated."
msgstr "Gli articoli selezionati sono stati attivati!" msgstr "Gli articoli selezionati sono stati attivati!"
#: core/admin.py:120 #: core/admin.py:127
#, python-format #, python-format
msgid "deactivate selected %(verbose_name_plural)s" msgid "deactivate selected %(verbose_name_plural)s"
msgstr "Disattivare il %(verbose_name_plural)s selezionato" msgstr "Disattivare il %(verbose_name_plural)s selezionato"
#: core/admin.py:125 #: core/admin.py:132
msgid "selected items have been deactivated." msgid "selected items have been deactivated."
msgstr "Gli articoli selezionati sono stati disattivati!" msgstr "Gli articoli selezionati sono stati disattivati!"
#: core/admin.py:137 core/graphene/object_types.py:609 #: core/admin.py:144 core/graphene/object_types.py:609
#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 #: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717
msgid "attribute value" msgid "attribute value"
msgstr "Valore dell'attributo" msgstr "Valore dell'attributo"
#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:718 #: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718
msgid "attribute values" msgid "attribute values"
msgstr "Valori degli attributi" msgstr "Valori degli attributi"
#: core/admin.py:146 #: core/admin.py:153
msgid "image" msgid "image"
msgstr "Immagine" msgstr "Immagine"
#: core/admin.py:147 core/graphene/object_types.py:501 #: core/admin.py:154 core/graphene/object_types.py:501
msgid "images" msgid "images"
msgstr "Immagini" msgstr "Immagini"
#: core/admin.py:155 core/models.py:467 #: core/admin.py:162 core/models.py:467
msgid "stock" msgid "stock"
msgstr "Stock" msgstr "Stock"
#: core/admin.py:156 core/graphene/object_types.py:663 #: core/admin.py:163 core/graphene/object_types.py:663
msgid "stocks" msgid "stocks"
msgstr "Le scorte" msgstr "Le scorte"
#: core/admin.py:166 core/models.py:1675 #: core/admin.py:173 core/models.py:1675
msgid "order product" msgid "order product"
msgstr "Ordina il prodotto" msgstr "Ordina il prodotto"
#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1676 #: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676
msgid "order products" msgid "order products"
msgstr "Ordinare i prodotti" msgstr "Ordinare i prodotti"
#: core/admin.py:180 core/admin.py:181 #: core/admin.py:187 core/admin.py:188
msgid "children" msgid "children"
msgstr "I bambini" msgstr "I bambini"
#: core/admin.py:566 #: core/admin.py:940
msgid "Config" msgid "Config"
msgstr "Configurazione" msgstr "Configurazione"
@ -752,7 +756,7 @@ msgstr "eliminare una relazione ordine-prodotto"
msgid "add or remove feedback on an orderproduct relation" msgid "add or remove feedback on an orderproduct relation"
msgstr "aggiungere o rimuovere un feedback su una relazione ordine-prodotto" msgstr "aggiungere o rimuovere un feedback su una relazione ordine-prodotto"
#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 #: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499
msgid "no search term provided." msgid "no search term provided."
msgstr "Non è stato fornito alcun termine di ricerca." msgstr "Non è stato fornito alcun termine di ricerca."
@ -927,7 +931,7 @@ msgstr ""
"Si prega di fornire order_uuid o order_hr_id, che si escludono a vicenda!" "Si prega di fornire order_uuid o order_hr_id, che si escludono a vicenda!"
#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 #: core/graphene/mutations.py:229 core/graphene/mutations.py:486
#: core/graphene/mutations.py:527 core/viewsets.py:679 #: core/graphene/mutations.py:527 core/viewsets.py:680
msgid "wrong type came from order.buy() method: {type(instance)!s}" msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr "" msgstr ""
"Il metodo order.buy() ha fornito un tipo sbagliato: {type(instance)!s}" "Il metodo order.buy() ha fornito un tipo sbagliato: {type(instance)!s}"
@ -1006,7 +1010,7 @@ msgstr "Stringa di indirizzo originale fornita dall'utente"
#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 #: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870
#: core/models.py:1289 core/models.py:1318 core/models.py:1343 #: core/models.py:1289 core/models.py:1318 core/models.py:1343
#: core/viewsets.py:682 #: core/viewsets.py:683
#, python-brace-format #, python-brace-format
msgid "{name} does not exist: {uuid}" msgid "{name} does not exist: {uuid}"
msgstr "{name} non esiste: {uuid}!" msgstr "{name} non esiste: {uuid}!"
@ -2725,22 +2729,22 @@ msgid "invalid timeout value, it must be between 0 and 216000 seconds"
msgstr "" msgstr ""
"Valore di timeout non valido, deve essere compreso tra 0 e 216000 secondi." "Valore di timeout non valido, deve essere compreso tra 0 e 216000 secondi."
#: core/utils/emailing.py:25 #: core/utils/emailing.py:27
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | contact us initiated" msgid "{config.PROJECT_NAME} | contact us initiated"
msgstr "{config.PROJECT_NAME} | contattaci iniziato" msgstr "{config.PROJECT_NAME} | contattaci iniziato"
#: core/utils/emailing.py:74 #: core/utils/emailing.py:73
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order confirmation" msgid "{config.PROJECT_NAME} | order confirmation"
msgstr "{config.PROJECT_NAME} | Conferma d'ordine" msgstr "{config.PROJECT_NAME} | Conferma d'ordine"
#: core/utils/emailing.py:109 #: core/utils/emailing.py:105
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order delivered" msgid "{config.PROJECT_NAME} | order delivered"
msgstr "{config.PROJECT_NAME} | Ordine consegnato" msgstr "{config.PROJECT_NAME} | Ordine consegnato"
#: core/utils/emailing.py:197 #: core/utils/emailing.py:188
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | promocode granted" msgid "{config.PROJECT_NAME} | promocode granted"
msgstr "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | promocode granted"
@ -2992,7 +2996,7 @@ msgstr ""
"accessibili. Estende l'insieme di base `EvibesViewSet` e fa uso del sistema " "accessibili. Estende l'insieme di base `EvibesViewSet` e fa uso del sistema "
"di filtraggio di Django per interrogare i dati." "di filtraggio di Django per interrogare i dati."
#: core/viewsets.py:593 #: core/viewsets.py:594
msgid "" msgid ""
"ViewSet for managing orders and related operations. This class provides " "ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes " "functionality to retrieve, modify, and manage order objects. It includes "
@ -3011,7 +3015,7 @@ msgstr ""
"serializzatori in base all'azione specifica da eseguire e applica le " "serializzatori in base all'azione specifica da eseguire e applica le "
"autorizzazioni di conseguenza durante l'interazione con i dati degli ordini." "autorizzazioni di conseguenza durante l'interazione con i dati degli ordini."
#: core/viewsets.py:782 #: core/viewsets.py:784
msgid "" msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables " "Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It " "CRUD operations and custom actions specific to the OrderProduct model. It "
@ -3026,13 +3030,13 @@ msgstr ""
"richiesta. Inoltre, fornisce un'azione dettagliata per gestire il feedback " "richiesta. Inoltre, fornisce un'azione dettagliata per gestire il feedback "
"sulle istanze di OrderProduct." "sulle istanze di OrderProduct."
#: core/viewsets.py:833 #: core/viewsets.py:835
msgid "Manages operations related to Product images in the application. " msgid "Manages operations related to Product images in the application. "
msgstr "" msgstr ""
"Gestisce le operazioni relative alle immagini dei prodotti " "Gestisce le operazioni relative alle immagini dei prodotti "
"nell'applicazione." "nell'applicazione."
#: core/viewsets.py:845 #: core/viewsets.py:847
msgid "" msgid ""
"Manages the retrieval and handling of PromoCode instances through various " "Manages the retrieval and handling of PromoCode instances through various "
"API actions." "API actions."
@ -3040,15 +3044,15 @@ msgstr ""
"Gestisce il recupero e la gestione delle istanze di PromoCode attraverso " "Gestisce il recupero e la gestione delle istanze di PromoCode attraverso "
"varie azioni API." "varie azioni API."
#: core/viewsets.py:866 #: core/viewsets.py:868
msgid "Represents a view set for managing promotions. " msgid "Represents a view set for managing promotions. "
msgstr "Rappresenta un insieme di viste per la gestione delle promozioni." msgstr "Rappresenta un insieme di viste per la gestione delle promozioni."
#: core/viewsets.py:878 #: core/viewsets.py:880
msgid "Handles operations related to Stock data in the system." msgid "Handles operations related to Stock data in the system."
msgstr "Gestisce le operazioni relative ai dati delle scorte nel sistema." msgstr "Gestisce le operazioni relative ai dati delle scorte nel sistema."
#: core/viewsets.py:892 #: core/viewsets.py:894
msgid "" msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides " "ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the " "endpoints for interacting with a user's wish list, allowing for the "
@ -3068,7 +3072,7 @@ msgstr ""
"solo la propria lista dei desideri, a meno che non vengano concessi permessi" "solo la propria lista dei desideri, a meno che non vengano concessi permessi"
" espliciti." " espliciti."
#: core/viewsets.py:1007 #: core/viewsets.py:1009
msgid "" msgid ""
"This class provides viewset functionality for managing `Address` objects. " "This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom " "The AddressViewSet class enables CRUD operations, filtering, and custom "
@ -3082,12 +3086,12 @@ msgstr ""
"specializzati per diversi metodi HTTP, override del serializzatore e " "specializzati per diversi metodi HTTP, override del serializzatore e "
"gestione dei permessi in base al contesto della richiesta." "gestione dei permessi in base al contesto della richiesta."
#: core/viewsets.py:1074 #: core/viewsets.py:1076
#, python-brace-format #, python-brace-format
msgid "Geocoding error: {e}" msgid "Geocoding error: {e}"
msgstr "Errore di geocodifica: {e}" msgstr "Errore di geocodifica: {e}"
#: core/viewsets.py:1081 #: core/viewsets.py:1083
msgid "" msgid ""
"Handles operations related to Product Tags within the application. This " "Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing " "class provides functionality for retrieving, filtering, and serializing "

View file

@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: EVIBES 3.0.0\n" "Project-Id-Version: EVIBES 3.0.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-10-13 13:56+0300\n" "POT-Creation-Date: 2025-10-13 18:49+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n" "Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
"Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n" "Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n"
@ -47,82 +47,86 @@ msgstr "変形"
msgid "when the object was last modified" msgid "when the object was last modified"
msgstr "オブジェクトの最終編集日時" msgstr "オブジェクトの最終編集日時"
#: core/admin.py:63 #: core/admin.py:68
msgid "translations" msgid "translations"
msgstr "翻訳" msgstr "翻訳"
#: core/admin.py:67 #: core/admin.py:72
msgid "general" msgid "general"
msgstr "一般" msgstr "一般"
#: core/admin.py:69 #: core/admin.py:74
msgid "relations" msgid "relations"
msgstr "関係" msgstr "関係"
#: core/admin.py:87 #: core/admin.py:76
msgid "additional info"
msgstr "追加情報"
#: core/admin.py:94
msgid "metadata" msgid "metadata"
msgstr "メタデータ" msgstr "メタデータ"
#: core/admin.py:94 #: core/admin.py:101
msgid "timestamps" msgid "timestamps"
msgstr "タイムスタンプ" msgstr "タイムスタンプ"
#: core/admin.py:109 #: core/admin.py:116
#, python-format #, python-format
msgid "activate selected %(verbose_name_plural)s" msgid "activate selected %(verbose_name_plural)s"
msgstr "選択した%(verbose_name_plural)sをアクティブにする" msgstr "選択した%(verbose_name_plural)sをアクティブにする"
#: core/admin.py:114 #: core/admin.py:121
msgid "selected items have been activated." msgid "selected items have been activated."
msgstr "選択した項目がアクティブになりました!" msgstr "選択した項目がアクティブになりました!"
#: core/admin.py:120 #: core/admin.py:127
#, python-format #, python-format
msgid "deactivate selected %(verbose_name_plural)s" msgid "deactivate selected %(verbose_name_plural)s"
msgstr "選択された%(verbose_name_plural)sを非アクティブにする" msgstr "選択された%(verbose_name_plural)sを非アクティブにする"
#: core/admin.py:125 #: core/admin.py:132
msgid "selected items have been deactivated." msgid "selected items have been deactivated."
msgstr "選択されたアイテムは無効化されました!" msgstr "選択されたアイテムは無効化されました!"
#: core/admin.py:137 core/graphene/object_types.py:609 #: core/admin.py:144 core/graphene/object_types.py:609
#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 #: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717
msgid "attribute value" msgid "attribute value"
msgstr "属性値" msgstr "属性値"
#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:718 #: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718
msgid "attribute values" msgid "attribute values"
msgstr "属性値" msgstr "属性値"
#: core/admin.py:146 #: core/admin.py:153
msgid "image" msgid "image"
msgstr "画像" msgstr "画像"
#: core/admin.py:147 core/graphene/object_types.py:501 #: core/admin.py:154 core/graphene/object_types.py:501
msgid "images" msgid "images"
msgstr "画像" msgstr "画像"
#: core/admin.py:155 core/models.py:467 #: core/admin.py:162 core/models.py:467
msgid "stock" msgid "stock"
msgstr "在庫" msgstr "在庫"
#: core/admin.py:156 core/graphene/object_types.py:663 #: core/admin.py:163 core/graphene/object_types.py:663
msgid "stocks" msgid "stocks"
msgstr "株式" msgstr "株式"
#: core/admin.py:166 core/models.py:1675 #: core/admin.py:173 core/models.py:1675
msgid "order product" msgid "order product"
msgstr "商品のご注文" msgstr "商品のご注文"
#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1676 #: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676
msgid "order products" msgid "order products"
msgstr "商品のご注文" msgstr "商品のご注文"
#: core/admin.py:180 core/admin.py:181 #: core/admin.py:187 core/admin.py:188
msgid "children" msgid "children"
msgstr "子供たち" msgstr "子供たち"
#: core/admin.py:566 #: core/admin.py:940
msgid "Config" msgid "Config"
msgstr "コンフィグ" msgstr "コンフィグ"
@ -692,7 +696,7 @@ msgstr "注文と商品の関係を削除する"
msgid "add or remove feedback on an orderproduct relation" msgid "add or remove feedback on an orderproduct relation"
msgstr "注文と商品の関係に関するフィードバックを追加または削除する。" msgstr "注文と商品の関係に関するフィードバックを追加または削除する。"
#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 #: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499
msgid "no search term provided." msgid "no search term provided."
msgstr "検索語はありません。" msgstr "検索語はありません。"
@ -865,7 +869,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive"
msgstr "order_uuidまたはorder_hr_idを入力してください" msgstr "order_uuidまたはorder_hr_idを入力してください"
#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 #: core/graphene/mutations.py:229 core/graphene/mutations.py:486
#: core/graphene/mutations.py:527 core/viewsets.py:679 #: core/graphene/mutations.py:527 core/viewsets.py:680
msgid "wrong type came from order.buy() method: {type(instance)!s}" msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr "order.buy()メソッドから間違った型が来た:{type(instance)!s}。" msgstr "order.buy()メソッドから間違った型が来た:{type(instance)!s}。"
@ -941,7 +945,7 @@ msgstr "ユーザーが提供したオリジナルのアドレス文字列"
#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 #: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870
#: core/models.py:1289 core/models.py:1318 core/models.py:1343 #: core/models.py:1289 core/models.py:1318 core/models.py:1343
#: core/viewsets.py:682 #: core/viewsets.py:683
#, python-brace-format #, python-brace-format
msgid "{name} does not exist: {uuid}" msgid "{name} does not exist: {uuid}"
msgstr "{name}は存在しません:{uuid}が存在しません!" msgstr "{name}は存在しません:{uuid}が存在しません!"
@ -2513,22 +2517,22 @@ msgstr "データとタイムアウトの両方が必要"
msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgid "invalid timeout value, it must be between 0 and 216000 seconds"
msgstr "無効なタイムアウト値です。" msgstr "無効なタイムアウト値です。"
#: core/utils/emailing.py:25 #: core/utils/emailing.py:27
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | contact us initiated" msgid "{config.PROJECT_NAME} | contact us initiated"
msgstr "{config.PROJECT_NAME}|コンタクト開始| お問い合わせはこちらから" msgstr "{config.PROJECT_NAME}|コンタクト開始| お問い合わせはこちらから"
#: core/utils/emailing.py:74 #: core/utils/emailing.py:73
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order confirmation" msgid "{config.PROJECT_NAME} | order confirmation"
msgstr "{config.PROJECT_NAME}|注文確認| ご注文の確認" msgstr "{config.PROJECT_NAME}|注文確認| ご注文の確認"
#: core/utils/emailing.py:109 #: core/utils/emailing.py:105
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order delivered" msgid "{config.PROJECT_NAME} | order delivered"
msgstr "{config.PROJECT_NAME}|ご注文は配送されますか?" msgstr "{config.PROJECT_NAME}|ご注文は配送されますか?"
#: core/utils/emailing.py:197 #: core/utils/emailing.py:188
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | promocode granted" msgid "{config.PROJECT_NAME} | promocode granted"
msgstr "{config.PROJECT_NAME}|プロモコード付与" msgstr "{config.PROJECT_NAME}|プロモコード付与"
@ -2745,7 +2749,7 @@ msgstr ""
"オブジェクトのパーミッションベースの処理を実装することです。ベースとなる `EvibesViewSet` を拡張し、Django " "オブジェクトのパーミッションベースの処理を実装することです。ベースとなる `EvibesViewSet` を拡張し、Django "
"のフィルタリングシステムを利用してデータを取得します。" "のフィルタリングシステムを利用してデータを取得します。"
#: core/viewsets.py:593 #: core/viewsets.py:594
msgid "" msgid ""
"ViewSet for managing orders and related operations. This class provides " "ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes " "functionality to retrieve, modify, and manage order objects. It includes "
@ -2758,7 +2762,7 @@ msgstr ""
"注文と関連する操作を管理するための " "注文と関連する操作を管理するための "
"ViewSet。このクラスは、注文オブジェクトを取得、変更、管理する機能を提供します。商品の追加や削除、登録ユーザや未登録ユーザの購入の実行、現在の認証ユーザの保留中の注文の取得など、注文操作を処理するためのさまざまなエンドポイントを含みます。ViewSetは、実行される特定のアクションに基づいて複数のシリアライザを使用し、注文データを操作している間、それに応じてパーミッションを強制します。" "ViewSet。このクラスは、注文オブジェクトを取得、変更、管理する機能を提供します。商品の追加や削除、登録ユーザや未登録ユーザの購入の実行、現在の認証ユーザの保留中の注文の取得など、注文操作を処理するためのさまざまなエンドポイントを含みます。ViewSetは、実行される特定のアクションに基づいて複数のシリアライザを使用し、注文データを操作している間、それに応じてパーミッションを強制します。"
#: core/viewsets.py:782 #: core/viewsets.py:784
msgid "" msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables " "Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It " "CRUD operations and custom actions specific to the OrderProduct model. It "
@ -2770,25 +2774,25 @@ msgstr ""
"操作とカスタムアクションを可能にします。これは、要求されたアクションに基づくフィルタリング、パーミッションチェック、シリアライザーの切り替えを含みます。さらに、OrderProduct" "操作とカスタムアクションを可能にします。これは、要求されたアクションに基づくフィルタリング、パーミッションチェック、シリアライザーの切り替えを含みます。さらに、OrderProduct"
" インスタンスに関するフィードバックを処理するための詳細なアクションを提供します。" " インスタンスに関するフィードバックを処理するための詳細なアクションを提供します。"
#: core/viewsets.py:833 #: core/viewsets.py:835
msgid "Manages operations related to Product images in the application. " msgid "Manages operations related to Product images in the application. "
msgstr "アプリケーション内の商品画像に関する操作を管理します。" msgstr "アプリケーション内の商品画像に関する操作を管理します。"
#: core/viewsets.py:845 #: core/viewsets.py:847
msgid "" msgid ""
"Manages the retrieval and handling of PromoCode instances through various " "Manages the retrieval and handling of PromoCode instances through various "
"API actions." "API actions."
msgstr "様々なAPIアクションによるプロモコードインスタンスの取得と処理を管理します。" msgstr "様々なAPIアクションによるプロモコードインスタンスの取得と処理を管理します。"
#: core/viewsets.py:866 #: core/viewsets.py:868
msgid "Represents a view set for managing promotions. " msgid "Represents a view set for managing promotions. "
msgstr "プロモーションを管理するためのビューセットを表します。" msgstr "プロモーションを管理するためのビューセットを表します。"
#: core/viewsets.py:878 #: core/viewsets.py:880
msgid "Handles operations related to Stock data in the system." msgid "Handles operations related to Stock data in the system."
msgstr "システム内のストックデータに関する操作を行う。" msgstr "システム内のストックデータに関する操作を行う。"
#: core/viewsets.py:892 #: core/viewsets.py:894
msgid "" msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides " "ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the " "endpoints for interacting with a user's wish list, allowing for the "
@ -2800,7 +2804,7 @@ msgid ""
msgstr "" msgstr ""
"ウィッシュリスト操作を管理するためのViewSet。WishlistViewSetは、ユーザーのウィッシュリストと対話するためのエンドポイントを提供し、ウィッシュリスト内の商品の検索、変更、カスタマイズを可能にします。このViewSetは、ウィッシュリスト商品の追加、削除、一括アクションなどの機能を容易にします。明示的なパーミッションが付与されていない限り、ユーザーが自分のウィッシュリストのみを管理できるよう、パーミッションチェックが統合されています。" "ウィッシュリスト操作を管理するためのViewSet。WishlistViewSetは、ユーザーのウィッシュリストと対話するためのエンドポイントを提供し、ウィッシュリスト内の商品の検索、変更、カスタマイズを可能にします。このViewSetは、ウィッシュリスト商品の追加、削除、一括アクションなどの機能を容易にします。明示的なパーミッションが付与されていない限り、ユーザーが自分のウィッシュリストのみを管理できるよう、パーミッションチェックが統合されています。"
#: core/viewsets.py:1007 #: core/viewsets.py:1009
msgid "" msgid ""
"This class provides viewset functionality for managing `Address` objects. " "This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom " "The AddressViewSet class enables CRUD operations, filtering, and custom "
@ -2812,12 +2816,12 @@ msgstr ""
"クラスは、住所エンティティに関連する CRUD 操作、フィルタリング、カスタムアクションを可能にします。異なる HTTP " "クラスは、住所エンティティに関連する CRUD 操作、フィルタリング、カスタムアクションを可能にします。異なる HTTP "
"メソッドに特化した振る舞いや、シリアライザのオーバーライド、 リクエストコンテキストに基づいたパーミッション処理などを含みます。" "メソッドに特化した振る舞いや、シリアライザのオーバーライド、 リクエストコンテキストに基づいたパーミッション処理などを含みます。"
#: core/viewsets.py:1074 #: core/viewsets.py:1076
#, python-brace-format #, python-brace-format
msgid "Geocoding error: {e}" msgid "Geocoding error: {e}"
msgstr "ジオコーディングエラー:{e}" msgstr "ジオコーディングエラー:{e}"
#: core/viewsets.py:1081 #: core/viewsets.py:1083
msgid "" msgid ""
"Handles operations related to Product Tags within the application. This " "Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing " "class provides functionality for retrieving, filtering, and serializing "

View file

@ -2,12 +2,12 @@
# Copyright (C) 2025 EGOR <FUREUNOIR> GORBUNOV # Copyright (C) 2025 EGOR <FUREUNOIR> GORBUNOV
# This file is distributed under the same license as the EVIBES package. # This file is distributed under the same license as the EVIBES package.
# EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>, 2025. # EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>, 2025.
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: EVIBES 3.0.0\n" "Project-Id-Version: EVIBES 3.0.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-10-13 13:56+0300\n" "POT-Creation-Date: 2025-10-13 18:49+0300\n"
"PO-Revision-Date: 2025-06-16 08:59+0100\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n"
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n" "Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n" "Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
@ -49,82 +49,86 @@ msgstr ""
msgid "when the object was last modified" msgid "when the object was last modified"
msgstr "" msgstr ""
#: core/admin.py:63 #: core/admin.py:68
msgid "translations" msgid "translations"
msgstr "" msgstr ""
#: core/admin.py:67 #: core/admin.py:72
msgid "general" msgid "general"
msgstr "" msgstr ""
#: core/admin.py:69 #: core/admin.py:74
msgid "relations" msgid "relations"
msgstr "" msgstr ""
#: core/admin.py:87 #: core/admin.py:76
msgid "metadata" msgid "additional info"
msgstr "" msgstr ""
#: core/admin.py:94 #: core/admin.py:94
msgid "metadata"
msgstr ""
#: core/admin.py:101
msgid "timestamps" msgid "timestamps"
msgstr "" msgstr ""
#: core/admin.py:109 #: core/admin.py:116
#, python-format #, python-format
msgid "activate selected %(verbose_name_plural)s" msgid "activate selected %(verbose_name_plural)s"
msgstr "" msgstr ""
#: core/admin.py:114 #: core/admin.py:121
msgid "selected items have been activated." msgid "selected items have been activated."
msgstr "" msgstr ""
#: core/admin.py:120 #: core/admin.py:127
#, python-format #, python-format
msgid "deactivate selected %(verbose_name_plural)s" msgid "deactivate selected %(verbose_name_plural)s"
msgstr "" msgstr ""
#: core/admin.py:125 #: core/admin.py:132
msgid "selected items have been deactivated." msgid "selected items have been deactivated."
msgstr "" msgstr ""
#: core/admin.py:137 core/graphene/object_types.py:609 #: core/admin.py:144 core/graphene/object_types.py:609
#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 #: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717
msgid "attribute value" msgid "attribute value"
msgstr "" msgstr ""
#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:718 #: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718
msgid "attribute values" msgid "attribute values"
msgstr "" msgstr ""
#: core/admin.py:146 #: core/admin.py:153
msgid "image" msgid "image"
msgstr "" msgstr ""
#: core/admin.py:147 core/graphene/object_types.py:501 #: core/admin.py:154 core/graphene/object_types.py:501
msgid "images" msgid "images"
msgstr "" msgstr ""
#: core/admin.py:155 core/models.py:467 #: core/admin.py:162 core/models.py:467
msgid "stock" msgid "stock"
msgstr "" msgstr ""
#: core/admin.py:156 core/graphene/object_types.py:663 #: core/admin.py:163 core/graphene/object_types.py:663
msgid "stocks" msgid "stocks"
msgstr "" msgstr ""
#: core/admin.py:166 core/models.py:1675 #: core/admin.py:173 core/models.py:1675
msgid "order product" msgid "order product"
msgstr "" msgstr ""
#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1676 #: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676
msgid "order products" msgid "order products"
msgstr "" msgstr ""
#: core/admin.py:180 core/admin.py:181 #: core/admin.py:187 core/admin.py:188
msgid "children" msgid "children"
msgstr "" msgstr ""
#: core/admin.py:566 #: core/admin.py:940
msgid "Config" msgid "Config"
msgstr "" msgstr ""
@ -678,7 +682,7 @@ msgstr ""
msgid "add or remove feedback on an orderproduct relation" msgid "add or remove feedback on an orderproduct relation"
msgstr "" msgstr ""
#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 #: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499
msgid "no search term provided." msgid "no search term provided."
msgstr "" msgstr ""
@ -851,7 +855,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive"
msgstr "" msgstr ""
#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 #: core/graphene/mutations.py:229 core/graphene/mutations.py:486
#: core/graphene/mutations.py:527 core/viewsets.py:679 #: core/graphene/mutations.py:527 core/viewsets.py:680
msgid "wrong type came from order.buy() method: {type(instance)!s}" msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr "" msgstr ""
@ -927,7 +931,7 @@ msgstr ""
#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 #: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870
#: core/models.py:1289 core/models.py:1318 core/models.py:1343 #: core/models.py:1289 core/models.py:1318 core/models.py:1343
#: core/viewsets.py:682 #: core/viewsets.py:683
#, python-brace-format #, python-brace-format
msgid "{name} does not exist: {uuid}" msgid "{name} does not exist: {uuid}"
msgstr "" msgstr ""
@ -2459,22 +2463,22 @@ msgstr ""
msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgid "invalid timeout value, it must be between 0 and 216000 seconds"
msgstr "" msgstr ""
#: core/utils/emailing.py:25 #: core/utils/emailing.py:27
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | contact us initiated" msgid "{config.PROJECT_NAME} | contact us initiated"
msgstr "" msgstr ""
#: core/utils/emailing.py:74 #: core/utils/emailing.py:73
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order confirmation" msgid "{config.PROJECT_NAME} | order confirmation"
msgstr "" msgstr ""
#: core/utils/emailing.py:109 #: core/utils/emailing.py:105
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order delivered" msgid "{config.PROJECT_NAME} | order delivered"
msgstr "" msgstr ""
#: core/utils/emailing.py:197 #: core/utils/emailing.py:188
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | promocode granted" msgid "{config.PROJECT_NAME} | promocode granted"
msgstr "" msgstr ""
@ -2656,7 +2660,7 @@ msgid ""
"use of Django's filtering system for querying data." "use of Django's filtering system for querying data."
msgstr "" msgstr ""
#: core/viewsets.py:593 #: core/viewsets.py:594
msgid "" msgid ""
"ViewSet for managing orders and related operations. This class provides " "ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes " "functionality to retrieve, modify, and manage order objects. It includes "
@ -2667,7 +2671,7 @@ msgid ""
"enforces permissions accordingly while interacting with order data." "enforces permissions accordingly while interacting with order data."
msgstr "" msgstr ""
#: core/viewsets.py:782 #: core/viewsets.py:784
msgid "" msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables " "Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It " "CRUD operations and custom actions specific to the OrderProduct model. It "
@ -2676,25 +2680,25 @@ msgid ""
"feedback on OrderProduct instances" "feedback on OrderProduct instances"
msgstr "" msgstr ""
#: core/viewsets.py:833 #: core/viewsets.py:835
msgid "Manages operations related to Product images in the application. " msgid "Manages operations related to Product images in the application. "
msgstr "" msgstr ""
#: core/viewsets.py:845 #: core/viewsets.py:847
msgid "" msgid ""
"Manages the retrieval and handling of PromoCode instances through various " "Manages the retrieval and handling of PromoCode instances through various "
"API actions." "API actions."
msgstr "" msgstr ""
#: core/viewsets.py:866 #: core/viewsets.py:868
msgid "Represents a view set for managing promotions. " msgid "Represents a view set for managing promotions. "
msgstr "" msgstr ""
#: core/viewsets.py:878 #: core/viewsets.py:880
msgid "Handles operations related to Stock data in the system." msgid "Handles operations related to Stock data in the system."
msgstr "" msgstr ""
#: core/viewsets.py:892 #: core/viewsets.py:894
msgid "" msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides " "ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the " "endpoints for interacting with a user's wish list, allowing for the "
@ -2705,7 +2709,7 @@ msgid ""
"are granted." "are granted."
msgstr "" msgstr ""
#: core/viewsets.py:1007 #: core/viewsets.py:1009
msgid "" msgid ""
"This class provides viewset functionality for managing `Address` objects. " "This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom " "The AddressViewSet class enables CRUD operations, filtering, and custom "
@ -2714,12 +2718,12 @@ msgid ""
"on the request context." "on the request context."
msgstr "" msgstr ""
#: core/viewsets.py:1074 #: core/viewsets.py:1076
#, python-brace-format #, python-brace-format
msgid "Geocoding error: {e}" msgid "Geocoding error: {e}"
msgstr "" msgstr ""
#: core/viewsets.py:1081 #: core/viewsets.py:1083
msgid "" msgid ""
"Handles operations related to Product Tags within the application. This " "Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing " "class provides functionality for retrieving, filtering, and serializing "

View file

@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: EVIBES 3.0.0\n" "Project-Id-Version: EVIBES 3.0.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-10-13 13:56+0300\n" "POT-Creation-Date: 2025-10-13 18:49+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n" "Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
"Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n" "Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n"
@ -47,82 +47,86 @@ msgstr "수정됨"
msgid "when the object was last modified" msgid "when the object was last modified"
msgstr "개체가 마지막으로 편집된 시기" msgstr "개체가 마지막으로 편집된 시기"
#: core/admin.py:63 #: core/admin.py:68
msgid "translations" msgid "translations"
msgstr "번역" msgstr "번역"
#: core/admin.py:67 #: core/admin.py:72
msgid "general" msgid "general"
msgstr "일반" msgstr "일반"
#: core/admin.py:69 #: core/admin.py:74
msgid "relations" msgid "relations"
msgstr "관계" msgstr "관계"
#: core/admin.py:87 #: core/admin.py:76
msgid "additional info"
msgstr "추가 정보"
#: core/admin.py:94
msgid "metadata" msgid "metadata"
msgstr "메타데이터" msgstr "메타데이터"
#: core/admin.py:94 #: core/admin.py:101
msgid "timestamps" msgid "timestamps"
msgstr "타임스탬프" msgstr "타임스탬프"
#: core/admin.py:109 #: core/admin.py:116
#, python-format #, python-format
msgid "activate selected %(verbose_name_plural)s" msgid "activate selected %(verbose_name_plural)s"
msgstr "선택한 %(verbose_name_plural)s 활성화" msgstr "선택한 %(verbose_name_plural)s 활성화"
#: core/admin.py:114 #: core/admin.py:121
msgid "selected items have been activated." msgid "selected items have been activated."
msgstr "선택한 아이템이 활성화되었습니다!" msgstr "선택한 아이템이 활성화되었습니다!"
#: core/admin.py:120 #: core/admin.py:127
#, python-format #, python-format
msgid "deactivate selected %(verbose_name_plural)s" msgid "deactivate selected %(verbose_name_plural)s"
msgstr "선택한 %(verbose_name_plural)s 비활성화하기" msgstr "선택한 %(verbose_name_plural)s 비활성화하기"
#: core/admin.py:125 #: core/admin.py:132
msgid "selected items have been deactivated." msgid "selected items have been deactivated."
msgstr "선택한 아이템이 비활성화되었습니다!" msgstr "선택한 아이템이 비활성화되었습니다!"
#: core/admin.py:137 core/graphene/object_types.py:609 #: core/admin.py:144 core/graphene/object_types.py:609
#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 #: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717
msgid "attribute value" msgid "attribute value"
msgstr "속성 값" msgstr "속성 값"
#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:718 #: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718
msgid "attribute values" msgid "attribute values"
msgstr "속성 값" msgstr "속성 값"
#: core/admin.py:146 #: core/admin.py:153
msgid "image" msgid "image"
msgstr "이미지" msgstr "이미지"
#: core/admin.py:147 core/graphene/object_types.py:501 #: core/admin.py:154 core/graphene/object_types.py:501
msgid "images" msgid "images"
msgstr "이미지" msgstr "이미지"
#: core/admin.py:155 core/models.py:467 #: core/admin.py:162 core/models.py:467
msgid "stock" msgid "stock"
msgstr "재고" msgstr "재고"
#: core/admin.py:156 core/graphene/object_types.py:663 #: core/admin.py:163 core/graphene/object_types.py:663
msgid "stocks" msgid "stocks"
msgstr "주식" msgstr "주식"
#: core/admin.py:166 core/models.py:1675 #: core/admin.py:173 core/models.py:1675
msgid "order product" msgid "order product"
msgstr "제품 주문" msgstr "제품 주문"
#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1676 #: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676
msgid "order products" msgid "order products"
msgstr "제품 주문" msgstr "제품 주문"
#: core/admin.py:180 core/admin.py:181 #: core/admin.py:187 core/admin.py:188
msgid "children" msgid "children"
msgstr "어린이" msgstr "어린이"
#: core/admin.py:566 #: core/admin.py:940
msgid "Config" msgid "Config"
msgstr "구성" msgstr "구성"
@ -689,7 +693,7 @@ msgstr "주문-제품 관계 삭제"
msgid "add or remove feedback on an orderproduct relation" msgid "add or remove feedback on an orderproduct relation"
msgstr "주문-제품 관계에 대한 피드백 추가 또는 제거" msgstr "주문-제품 관계에 대한 피드백 추가 또는 제거"
#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 #: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499
msgid "no search term provided." msgid "no search term provided."
msgstr "검색어가 입력되지 않았습니다." msgstr "검색어가 입력되지 않았습니다."
@ -862,7 +866,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive"
msgstr "주문_uuid 또는 주문_hr_id 중 하나를 입력하세요 - 상호 배타적입니다!" msgstr "주문_uuid 또는 주문_hr_id 중 하나를 입력하세요 - 상호 배타적입니다!"
#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 #: core/graphene/mutations.py:229 core/graphene/mutations.py:486
#: core/graphene/mutations.py:527 core/viewsets.py:679 #: core/graphene/mutations.py:527 core/viewsets.py:680
msgid "wrong type came from order.buy() method: {type(instance)!s}" msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr "order.buy() 메서드에서 잘못된 유형이 발생했습니다: {type(instance)!s}" msgstr "order.buy() 메서드에서 잘못된 유형이 발생했습니다: {type(instance)!s}"
@ -938,7 +942,7 @@ msgstr "사용자가 제공한 원본 주소 문자열"
#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 #: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870
#: core/models.py:1289 core/models.py:1318 core/models.py:1343 #: core/models.py:1289 core/models.py:1318 core/models.py:1343
#: core/viewsets.py:682 #: core/viewsets.py:683
#, python-brace-format #, python-brace-format
msgid "{name} does not exist: {uuid}" msgid "{name} does not exist: {uuid}"
msgstr "{name}가 존재하지 않습니다: {uuid}!" msgstr "{name}가 존재하지 않습니다: {uuid}!"
@ -2538,22 +2542,22 @@ msgstr "데이터와 시간 초과가 모두 필요합니다."
msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgid "invalid timeout value, it must be between 0 and 216000 seconds"
msgstr "잘못된 시간 초과 값, 0~216000초 사이여야 합니다." msgstr "잘못된 시간 초과 값, 0~216000초 사이여야 합니다."
#: core/utils/emailing.py:25 #: core/utils/emailing.py:27
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | contact us initiated" msgid "{config.PROJECT_NAME} | contact us initiated"
msgstr "{config.PROJECT_NAME} | 문의 시작됨" msgstr "{config.PROJECT_NAME} | 문의 시작됨"
#: core/utils/emailing.py:74 #: core/utils/emailing.py:73
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order confirmation" msgid "{config.PROJECT_NAME} | order confirmation"
msgstr "{config.PROJECT_NAME} | 주문 확인" msgstr "{config.PROJECT_NAME} | 주문 확인"
#: core/utils/emailing.py:109 #: core/utils/emailing.py:105
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order delivered" msgid "{config.PROJECT_NAME} | order delivered"
msgstr "{config.PROJECT_NAME} | 주문 배송됨" msgstr "{config.PROJECT_NAME} | 주문 배송됨"
#: core/utils/emailing.py:197 #: core/utils/emailing.py:188
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | promocode granted" msgid "{config.PROJECT_NAME} | promocode granted"
msgstr "{config.PROJECT_NAME} | 프로모코드 부여됨" msgstr "{config.PROJECT_NAME} | 프로모코드 부여됨"
@ -2769,7 +2773,7 @@ msgstr ""
"구현하는 것입니다. 이 클래스는 기본 `EvibesViewSet`을 확장하고 데이터 쿼리를 위해 Django의 필터링 시스템을 " "구현하는 것입니다. 이 클래스는 기본 `EvibesViewSet`을 확장하고 데이터 쿼리를 위해 Django의 필터링 시스템을 "
"사용합니다." "사용합니다."
#: core/viewsets.py:593 #: core/viewsets.py:594
msgid "" msgid ""
"ViewSet for managing orders and related operations. This class provides " "ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes " "functionality to retrieve, modify, and manage order objects. It includes "
@ -2784,7 +2788,7 @@ msgstr ""
"엔드포인트가 포함되어 있습니다. 뷰셋은 수행되는 특정 작업에 따라 여러 직렬화기를 사용하며 주문 데이터와 상호 작용하는 동안 그에 따라 " "엔드포인트가 포함되어 있습니다. 뷰셋은 수행되는 특정 작업에 따라 여러 직렬화기를 사용하며 주문 데이터와 상호 작용하는 동안 그에 따라 "
"권한을 적용합니다." "권한을 적용합니다."
#: core/viewsets.py:782 #: core/viewsets.py:784
msgid "" msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables " "Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It " "CRUD operations and custom actions specific to the OrderProduct model. It "
@ -2796,25 +2800,25 @@ msgstr ""
"수행할 수 있습니다. 여기에는 요청된 작업을 기반으로 필터링, 권한 확인 및 직렬화기 전환이 포함됩니다. 또한 주문 제품 인스턴스에 대한" "수행할 수 있습니다. 여기에는 요청된 작업을 기반으로 필터링, 권한 확인 및 직렬화기 전환이 포함됩니다. 또한 주문 제품 인스턴스에 대한"
" 피드백 처리를 위한 세부 작업도 제공합니다." " 피드백 처리를 위한 세부 작업도 제공합니다."
#: core/viewsets.py:833 #: core/viewsets.py:835
msgid "Manages operations related to Product images in the application. " msgid "Manages operations related to Product images in the application. "
msgstr "애플리케이션에서 제품 이미지와 관련된 작업을 관리합니다." msgstr "애플리케이션에서 제품 이미지와 관련된 작업을 관리합니다."
#: core/viewsets.py:845 #: core/viewsets.py:847
msgid "" msgid ""
"Manages the retrieval and handling of PromoCode instances through various " "Manages the retrieval and handling of PromoCode instances through various "
"API actions." "API actions."
msgstr "다양한 API 작업을 통해 프로모션 코드 인스턴스의 검색 및 처리를 관리합니다." msgstr "다양한 API 작업을 통해 프로모션 코드 인스턴스의 검색 및 처리를 관리합니다."
#: core/viewsets.py:866 #: core/viewsets.py:868
msgid "Represents a view set for managing promotions. " msgid "Represents a view set for managing promotions. "
msgstr "프로모션을 관리하기 위한 보기 세트를 나타냅니다." msgstr "프로모션을 관리하기 위한 보기 세트를 나타냅니다."
#: core/viewsets.py:878 #: core/viewsets.py:880
msgid "Handles operations related to Stock data in the system." msgid "Handles operations related to Stock data in the system."
msgstr "시스템에서 주식 데이터와 관련된 작업을 처리합니다." msgstr "시스템에서 주식 데이터와 관련된 작업을 처리합니다."
#: core/viewsets.py:892 #: core/viewsets.py:894
msgid "" msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides " "ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the " "endpoints for interacting with a user's wish list, allowing for the "
@ -2828,7 +2832,7 @@ msgstr ""
"내의 제품을 검색, 수정 및 사용자 지정할 수 있도록 합니다. 이 뷰셋은 위시리스트 제품에 대한 추가, 제거 및 대량 작업과 같은 기능을" "내의 제품을 검색, 수정 및 사용자 지정할 수 있도록 합니다. 이 뷰셋은 위시리스트 제품에 대한 추가, 제거 및 대량 작업과 같은 기능을"
" 용이하게 합니다. 명시적인 권한이 부여되지 않는 한 사용자가 자신의 위시리스트만 관리할 수 있도록 권한 검사가 통합되어 있습니다." " 용이하게 합니다. 명시적인 권한이 부여되지 않는 한 사용자가 자신의 위시리스트만 관리할 수 있도록 권한 검사가 통합되어 있습니다."
#: core/viewsets.py:1007 #: core/viewsets.py:1009
msgid "" msgid ""
"This class provides viewset functionality for managing `Address` objects. " "This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom " "The AddressViewSet class enables CRUD operations, filtering, and custom "
@ -2840,12 +2844,12 @@ msgstr ""
"사용자 정의 작업을 가능하게 합니다. 여기에는 다양한 HTTP 메서드, 직렬화기 재정의, 요청 컨텍스트에 따른 권한 처리를 위한 특수 " "사용자 정의 작업을 가능하게 합니다. 여기에는 다양한 HTTP 메서드, 직렬화기 재정의, 요청 컨텍스트에 따른 권한 처리를 위한 특수 "
"동작이 포함되어 있습니다." "동작이 포함되어 있습니다."
#: core/viewsets.py:1074 #: core/viewsets.py:1076
#, python-brace-format #, python-brace-format
msgid "Geocoding error: {e}" msgid "Geocoding error: {e}"
msgstr "지오코딩 오류입니다: {e}" msgstr "지오코딩 오류입니다: {e}"
#: core/viewsets.py:1081 #: core/viewsets.py:1083
msgid "" msgid ""
"Handles operations related to Product Tags within the application. This " "Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing " "class provides functionality for retrieving, filtering, and serializing "

View file

@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: EVIBES 3.0.0\n" "Project-Id-Version: EVIBES 3.0.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-10-13 13:56+0300\n" "POT-Creation-Date: 2025-10-13 18:49+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n" "Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
"Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n" "Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n"
@ -49,82 +49,86 @@ msgstr "Gewijzigd"
msgid "when the object was last modified" msgid "when the object was last modified"
msgstr "Wanneer het object voor het laatst bewerkt is" msgstr "Wanneer het object voor het laatst bewerkt is"
#: core/admin.py:63 #: core/admin.py:68
msgid "translations" msgid "translations"
msgstr "Vertalingen" msgstr "Vertalingen"
#: core/admin.py:67 #: core/admin.py:72
msgid "general" msgid "general"
msgstr "Algemeen" msgstr "Algemeen"
#: core/admin.py:69 #: core/admin.py:74
msgid "relations" msgid "relations"
msgstr "Relaties" msgstr "Relaties"
#: core/admin.py:87 #: core/admin.py:76
msgid "additional info"
msgstr "extra informatie"
#: core/admin.py:94
msgid "metadata" msgid "metadata"
msgstr "Metagegevens" msgstr "Metagegevens"
#: core/admin.py:94 #: core/admin.py:101
msgid "timestamps" msgid "timestamps"
msgstr "Tijdstempels" msgstr "Tijdstempels"
#: core/admin.py:109 #: core/admin.py:116
#, python-format #, python-format
msgid "activate selected %(verbose_name_plural)s" msgid "activate selected %(verbose_name_plural)s"
msgstr "Activeer geselecteerde %(verbose_name_plural)s" msgstr "Activeer geselecteerde %(verbose_name_plural)s"
#: core/admin.py:114 #: core/admin.py:121
msgid "selected items have been activated." msgid "selected items have been activated."
msgstr "Geselecteerde items zijn geactiveerd!" msgstr "Geselecteerde items zijn geactiveerd!"
#: core/admin.py:120 #: core/admin.py:127
#, python-format #, python-format
msgid "deactivate selected %(verbose_name_plural)s" msgid "deactivate selected %(verbose_name_plural)s"
msgstr "Deactiveer geselecteerd %(verbose_name_plural)s" msgstr "Deactiveer geselecteerd %(verbose_name_plural)s"
#: core/admin.py:125 #: core/admin.py:132
msgid "selected items have been deactivated." msgid "selected items have been deactivated."
msgstr "Geselecteerde items zijn gedeactiveerd!" msgstr "Geselecteerde items zijn gedeactiveerd!"
#: core/admin.py:137 core/graphene/object_types.py:609 #: core/admin.py:144 core/graphene/object_types.py:609
#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 #: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717
msgid "attribute value" msgid "attribute value"
msgstr "Attribuut Waarde" msgstr "Attribuut Waarde"
#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:718 #: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718
msgid "attribute values" msgid "attribute values"
msgstr "Attribuutwaarden" msgstr "Attribuutwaarden"
#: core/admin.py:146 #: core/admin.py:153
msgid "image" msgid "image"
msgstr "Afbeelding" msgstr "Afbeelding"
#: core/admin.py:147 core/graphene/object_types.py:501 #: core/admin.py:154 core/graphene/object_types.py:501
msgid "images" msgid "images"
msgstr "Afbeeldingen" msgstr "Afbeeldingen"
#: core/admin.py:155 core/models.py:467 #: core/admin.py:162 core/models.py:467
msgid "stock" msgid "stock"
msgstr "Voorraad" msgstr "Voorraad"
#: core/admin.py:156 core/graphene/object_types.py:663 #: core/admin.py:163 core/graphene/object_types.py:663
msgid "stocks" msgid "stocks"
msgstr "Aandelen" msgstr "Aandelen"
#: core/admin.py:166 core/models.py:1675 #: core/admin.py:173 core/models.py:1675
msgid "order product" msgid "order product"
msgstr "Product bestellen" msgstr "Product bestellen"
#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1676 #: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676
msgid "order products" msgid "order products"
msgstr "Producten bestellen" msgstr "Producten bestellen"
#: core/admin.py:180 core/admin.py:181 #: core/admin.py:187 core/admin.py:188
msgid "children" msgid "children"
msgstr "Kinderen" msgstr "Kinderen"
#: core/admin.py:566 #: core/admin.py:940
msgid "Config" msgid "Config"
msgstr "Config" msgstr "Config"
@ -753,7 +757,7 @@ msgstr "een order-productrelatie verwijderen"
msgid "add or remove feedback on an orderproduct relation" msgid "add or remove feedback on an orderproduct relation"
msgstr "feedback toevoegen of verwijderen op een order-productrelatie" msgstr "feedback toevoegen of verwijderen op een order-productrelatie"
#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 #: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499
msgid "no search term provided." msgid "no search term provided."
msgstr "Geen zoekterm opgegeven." msgstr "Geen zoekterm opgegeven."
@ -927,7 +931,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive"
msgstr "Geef order_uuid of order_hr_id - wederzijds exclusief!" msgstr "Geef order_uuid of order_hr_id - wederzijds exclusief!"
#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 #: core/graphene/mutations.py:229 core/graphene/mutations.py:486
#: core/graphene/mutations.py:527 core/viewsets.py:679 #: core/graphene/mutations.py:527 core/viewsets.py:680
msgid "wrong type came from order.buy() method: {type(instance)!s}" msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr "Verkeerd type kwam uit order.buy() methode: {type(instance)!s}" msgstr "Verkeerd type kwam uit order.buy() methode: {type(instance)!s}"
@ -1004,7 +1008,7 @@ msgstr "Originele adresstring geleverd door de gebruiker"
#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 #: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870
#: core/models.py:1289 core/models.py:1318 core/models.py:1343 #: core/models.py:1289 core/models.py:1318 core/models.py:1343
#: core/viewsets.py:682 #: core/viewsets.py:683
#, python-brace-format #, python-brace-format
msgid "{name} does not exist: {uuid}" msgid "{name} does not exist: {uuid}"
msgstr "{name} bestaat niet: {uuid}!" msgstr "{name} bestaat niet: {uuid}!"
@ -2734,22 +2738,22 @@ msgid "invalid timeout value, it must be between 0 and 216000 seconds"
msgstr "" msgstr ""
"Ongeldige time-outwaarde, deze moet tussen 0 en 216000 seconden liggen" "Ongeldige time-outwaarde, deze moet tussen 0 en 216000 seconden liggen"
#: core/utils/emailing.py:25 #: core/utils/emailing.py:27
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | contact us initiated" msgid "{config.PROJECT_NAME} | contact us initiated"
msgstr "{config.PROJECT_NAME} | neem contact met ons op" msgstr "{config.PROJECT_NAME} | neem contact met ons op"
#: core/utils/emailing.py:74 #: core/utils/emailing.py:73
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order confirmation" msgid "{config.PROJECT_NAME} | order confirmation"
msgstr "{config.PROJECT_NAME} | Orderbevestiging" msgstr "{config.PROJECT_NAME} | Orderbevestiging"
#: core/utils/emailing.py:109 #: core/utils/emailing.py:105
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order delivered" msgid "{config.PROJECT_NAME} | order delivered"
msgstr "{config.PROJECT_NAME} | Bestelling afgeleverd" msgstr "{config.PROJECT_NAME} | Bestelling afgeleverd"
#: core/utils/emailing.py:197 #: core/utils/emailing.py:188
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | promocode granted" msgid "{config.PROJECT_NAME} | promocode granted"
msgstr "{config.PROJECT_NAME} | promocode toegekend" msgstr "{config.PROJECT_NAME} | promocode toegekend"
@ -3003,7 +3007,7 @@ msgstr ""
"implementeren. Het breidt de basis `EvibesViewSet` uit en maakt gebruik van " "implementeren. Het breidt de basis `EvibesViewSet` uit en maakt gebruik van "
"Django's filtersysteem voor het opvragen van gegevens." "Django's filtersysteem voor het opvragen van gegevens."
#: core/viewsets.py:593 #: core/viewsets.py:594
msgid "" msgid ""
"ViewSet for managing orders and related operations. This class provides " "ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes " "functionality to retrieve, modify, and manage order objects. It includes "
@ -3023,7 +3027,7 @@ msgstr ""
"gebaseerd op de specifieke actie die wordt uitgevoerd en dwingt " "gebaseerd op de specifieke actie die wordt uitgevoerd en dwingt "
"dienovereenkomstig permissies af tijdens de interactie met ordergegevens." "dienovereenkomstig permissies af tijdens de interactie met ordergegevens."
#: core/viewsets.py:782 #: core/viewsets.py:784
msgid "" msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables " "Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It " "CRUD operations and custom actions specific to the OrderProduct model. It "
@ -3038,12 +3042,12 @@ msgstr ""
" een gedetailleerde actie voor het afhandelen van feedback op OrderProduct " " een gedetailleerde actie voor het afhandelen van feedback op OrderProduct "
"instanties" "instanties"
#: core/viewsets.py:833 #: core/viewsets.py:835
msgid "Manages operations related to Product images in the application. " msgid "Manages operations related to Product images in the application. "
msgstr "" msgstr ""
"Beheert bewerkingen met betrekking tot productafbeeldingen in de applicatie." "Beheert bewerkingen met betrekking tot productafbeeldingen in de applicatie."
#: core/viewsets.py:845 #: core/viewsets.py:847
msgid "" msgid ""
"Manages the retrieval and handling of PromoCode instances through various " "Manages the retrieval and handling of PromoCode instances through various "
"API actions." "API actions."
@ -3051,16 +3055,16 @@ msgstr ""
"Beheert het ophalen en afhandelen van PromoCode-instanties via verschillende" "Beheert het ophalen en afhandelen van PromoCode-instanties via verschillende"
" API-acties." " API-acties."
#: core/viewsets.py:866 #: core/viewsets.py:868
msgid "Represents a view set for managing promotions. " msgid "Represents a view set for managing promotions. "
msgstr "Vertegenwoordigt een view set voor het beheren van promoties." msgstr "Vertegenwoordigt een view set voor het beheren van promoties."
#: core/viewsets.py:878 #: core/viewsets.py:880
msgid "Handles operations related to Stock data in the system." msgid "Handles operations related to Stock data in the system."
msgstr "" msgstr ""
"Verwerkt bewerkingen met betrekking tot voorraadgegevens in het systeem." "Verwerkt bewerkingen met betrekking tot voorraadgegevens in het systeem."
#: core/viewsets.py:892 #: core/viewsets.py:894
msgid "" msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides " "ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the " "endpoints for interacting with a user's wish list, allowing for the "
@ -3079,7 +3083,7 @@ msgstr ""
"verlanglijstjes kunnen beheren, tenzij er expliciete toestemmingen zijn " "verlanglijstjes kunnen beheren, tenzij er expliciete toestemmingen zijn "
"verleend." "verleend."
#: core/viewsets.py:1007 #: core/viewsets.py:1009
msgid "" msgid ""
"This class provides viewset functionality for managing `Address` objects. " "This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom " "The AddressViewSet class enables CRUD operations, filtering, and custom "
@ -3093,12 +3097,12 @@ msgstr ""
"gespecialiseerde gedragingen voor verschillende HTTP methoden, serializer " "gespecialiseerde gedragingen voor verschillende HTTP methoden, serializer "
"omzeilingen en toestemmingsafhandeling gebaseerd op de verzoekcontext." "omzeilingen en toestemmingsafhandeling gebaseerd op de verzoekcontext."
#: core/viewsets.py:1074 #: core/viewsets.py:1076
#, python-brace-format #, python-brace-format
msgid "Geocoding error: {e}" msgid "Geocoding error: {e}"
msgstr "Fout bij geocodering: {e}" msgstr "Fout bij geocodering: {e}"
#: core/viewsets.py:1081 #: core/viewsets.py:1083
msgid "" msgid ""
"Handles operations related to Product Tags within the application. This " "Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing " "class provides functionality for retrieving, filtering, and serializing "

View file

@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: EVIBES 3.0.0\n" "Project-Id-Version: EVIBES 3.0.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-10-13 13:56+0300\n" "POT-Creation-Date: 2025-10-13 18:49+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n" "Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
"Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n" "Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n"
@ -50,82 +50,86 @@ msgstr "Modifisert"
msgid "when the object was last modified" msgid "when the object was last modified"
msgstr "Når objektet sist ble redigert" msgstr "Når objektet sist ble redigert"
#: core/admin.py:63 #: core/admin.py:68
msgid "translations" msgid "translations"
msgstr "Oversettelser" msgstr "Oversettelser"
#: core/admin.py:67 #: core/admin.py:72
msgid "general" msgid "general"
msgstr "Generelt" msgstr "Generelt"
#: core/admin.py:69 #: core/admin.py:74
msgid "relations" msgid "relations"
msgstr "Relasjoner" msgstr "Relasjoner"
#: core/admin.py:87 #: core/admin.py:76
msgid "additional info"
msgstr "ytterligere informasjon"
#: core/admin.py:94
msgid "metadata" msgid "metadata"
msgstr "Metadata" msgstr "Metadata"
#: core/admin.py:94 #: core/admin.py:101
msgid "timestamps" msgid "timestamps"
msgstr "Tidsstempler" msgstr "Tidsstempler"
#: core/admin.py:109 #: core/admin.py:116
#, python-format #, python-format
msgid "activate selected %(verbose_name_plural)s" msgid "activate selected %(verbose_name_plural)s"
msgstr "Aktiver valgt %(verbose_name_plural)s" msgstr "Aktiver valgt %(verbose_name_plural)s"
#: core/admin.py:114 #: core/admin.py:121
msgid "selected items have been activated." msgid "selected items have been activated."
msgstr "Utvalgte elementer har blitt aktivert!" msgstr "Utvalgte elementer har blitt aktivert!"
#: core/admin.py:120 #: core/admin.py:127
#, python-format #, python-format
msgid "deactivate selected %(verbose_name_plural)s" msgid "deactivate selected %(verbose_name_plural)s"
msgstr "Deaktiver valgt %(verbose_name_plural)s" msgstr "Deaktiver valgt %(verbose_name_plural)s"
#: core/admin.py:125 #: core/admin.py:132
msgid "selected items have been deactivated." msgid "selected items have been deactivated."
msgstr "Utvalgte elementer har blitt deaktivert!" msgstr "Utvalgte elementer har blitt deaktivert!"
#: core/admin.py:137 core/graphene/object_types.py:609 #: core/admin.py:144 core/graphene/object_types.py:609
#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 #: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717
msgid "attribute value" msgid "attribute value"
msgstr "Attributtverdi" msgstr "Attributtverdi"
#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:718 #: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718
msgid "attribute values" msgid "attribute values"
msgstr "Attributtverdier" msgstr "Attributtverdier"
#: core/admin.py:146 #: core/admin.py:153
msgid "image" msgid "image"
msgstr "Bilde" msgstr "Bilde"
#: core/admin.py:147 core/graphene/object_types.py:501 #: core/admin.py:154 core/graphene/object_types.py:501
msgid "images" msgid "images"
msgstr "Bilder" msgstr "Bilder"
#: core/admin.py:155 core/models.py:467 #: core/admin.py:162 core/models.py:467
msgid "stock" msgid "stock"
msgstr "Lager" msgstr "Lager"
#: core/admin.py:156 core/graphene/object_types.py:663 #: core/admin.py:163 core/graphene/object_types.py:663
msgid "stocks" msgid "stocks"
msgstr "Aksjer" msgstr "Aksjer"
#: core/admin.py:166 core/models.py:1675 #: core/admin.py:173 core/models.py:1675
msgid "order product" msgid "order product"
msgstr "Bestill produkt" msgstr "Bestill produkt"
#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1676 #: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676
msgid "order products" msgid "order products"
msgstr "Bestill produkter" msgstr "Bestill produkter"
#: core/admin.py:180 core/admin.py:181 #: core/admin.py:187 core/admin.py:188
msgid "children" msgid "children"
msgstr "Barn" msgstr "Barn"
#: core/admin.py:566 #: core/admin.py:940
msgid "Config" msgid "Config"
msgstr "Konfigurer" msgstr "Konfigurer"
@ -739,7 +743,7 @@ msgstr "slette en ordre-produkt-relasjon"
msgid "add or remove feedback on an orderproduct relation" msgid "add or remove feedback on an orderproduct relation"
msgstr "legge til eller fjerne tilbakemeldinger på en ordre-produkt-relasjon" msgstr "legge til eller fjerne tilbakemeldinger på en ordre-produkt-relasjon"
#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 #: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499
msgid "no search term provided." msgid "no search term provided."
msgstr "Ingen søkeord oppgitt." msgstr "Ingen søkeord oppgitt."
@ -914,7 +918,7 @@ msgstr ""
"Vennligst oppgi enten order_uuid eller order_hr_id - gjensidig utelukkende!" "Vennligst oppgi enten order_uuid eller order_hr_id - gjensidig utelukkende!"
#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 #: core/graphene/mutations.py:229 core/graphene/mutations.py:486
#: core/graphene/mutations.py:527 core/viewsets.py:679 #: core/graphene/mutations.py:527 core/viewsets.py:680
msgid "wrong type came from order.buy() method: {type(instance)!s}" msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr "Feil type kom fra order.buy()-metoden: {type(instance)!s}" msgstr "Feil type kom fra order.buy()-metoden: {type(instance)!s}"
@ -991,7 +995,7 @@ msgstr "Opprinnelig adressestreng oppgitt av brukeren"
#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 #: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870
#: core/models.py:1289 core/models.py:1318 core/models.py:1343 #: core/models.py:1289 core/models.py:1318 core/models.py:1343
#: core/viewsets.py:682 #: core/viewsets.py:683
#, python-brace-format #, python-brace-format
msgid "{name} does not exist: {uuid}" msgid "{name} does not exist: {uuid}"
msgstr "{name} eksisterer ikke: {uuid}!" msgstr "{name} eksisterer ikke: {uuid}!"
@ -2700,22 +2704,22 @@ msgstr "Både data og tidsavbrudd er påkrevd"
msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgid "invalid timeout value, it must be between 0 and 216000 seconds"
msgstr "Ugyldig tidsavbruddsverdi, den må være mellom 0 og 216000 sekunder" msgstr "Ugyldig tidsavbruddsverdi, den må være mellom 0 og 216000 sekunder"
#: core/utils/emailing.py:25 #: core/utils/emailing.py:27
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | contact us initiated" msgid "{config.PROJECT_NAME} | contact us initiated"
msgstr "{config.PROJECT_NAME} | kontakt oss initiert" msgstr "{config.PROJECT_NAME} | kontakt oss initiert"
#: core/utils/emailing.py:74 #: core/utils/emailing.py:73
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order confirmation" msgid "{config.PROJECT_NAME} | order confirmation"
msgstr "{config.PROJECT_NAME} | Ordrebekreftelse" msgstr "{config.PROJECT_NAME} | Ordrebekreftelse"
#: core/utils/emailing.py:109 #: core/utils/emailing.py:105
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order delivered" msgid "{config.PROJECT_NAME} | order delivered"
msgstr "{config.PROJECT_NAME} | Bestilling levert" msgstr "{config.PROJECT_NAME} | Bestilling levert"
#: core/utils/emailing.py:197 #: core/utils/emailing.py:188
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | promocode granted" msgid "{config.PROJECT_NAME} | promocode granted"
msgstr "{config.PROJECT_NAME} | promokode gitt" msgstr "{config.PROJECT_NAME} | promokode gitt"
@ -2963,7 +2967,7 @@ msgstr ""
"tilbakemeldingsobjekter. Den utvider basisklassen `EvibesViewSet` og bruker " "tilbakemeldingsobjekter. Den utvider basisklassen `EvibesViewSet` og bruker "
"Djangos filtreringssystem for å spørre etter data." "Djangos filtreringssystem for å spørre etter data."
#: core/viewsets.py:593 #: core/viewsets.py:594
msgid "" msgid ""
"ViewSet for managing orders and related operations. This class provides " "ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes " "functionality to retrieve, modify, and manage order objects. It includes "
@ -2982,7 +2986,7 @@ msgstr ""
"serialisatorer basert på den spesifikke handlingen som utføres, og håndhever" "serialisatorer basert på den spesifikke handlingen som utføres, og håndhever"
" tillatelser i samsvar med dette under samhandling med ordredata." " tillatelser i samsvar med dette under samhandling med ordredata."
#: core/viewsets.py:782 #: core/viewsets.py:784
msgid "" msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables " "Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It " "CRUD operations and custom actions specific to the OrderProduct model. It "
@ -2997,11 +3001,11 @@ msgstr ""
" tillegg inneholder det en detaljert handling for håndtering av " " tillegg inneholder det en detaljert handling for håndtering av "
"tilbakemeldinger på OrderProduct-instanser" "tilbakemeldinger på OrderProduct-instanser"
#: core/viewsets.py:833 #: core/viewsets.py:835
msgid "Manages operations related to Product images in the application. " msgid "Manages operations related to Product images in the application. "
msgstr "Administrerer operasjoner knyttet til produktbilder i applikasjonen." msgstr "Administrerer operasjoner knyttet til produktbilder i applikasjonen."
#: core/viewsets.py:845 #: core/viewsets.py:847
msgid "" msgid ""
"Manages the retrieval and handling of PromoCode instances through various " "Manages the retrieval and handling of PromoCode instances through various "
"API actions." "API actions."
@ -3009,15 +3013,15 @@ msgstr ""
"Administrerer henting og håndtering av PromoCode-instanser gjennom ulike " "Administrerer henting og håndtering av PromoCode-instanser gjennom ulike "
"API-handlinger." "API-handlinger."
#: core/viewsets.py:866 #: core/viewsets.py:868
msgid "Represents a view set for managing promotions. " msgid "Represents a view set for managing promotions. "
msgstr "Representerer et visningssett for håndtering av kampanjer." msgstr "Representerer et visningssett for håndtering av kampanjer."
#: core/viewsets.py:878 #: core/viewsets.py:880
msgid "Handles operations related to Stock data in the system." msgid "Handles operations related to Stock data in the system."
msgstr "Håndterer operasjoner knyttet til lagerdata i systemet." msgstr "Håndterer operasjoner knyttet til lagerdata i systemet."
#: core/viewsets.py:892 #: core/viewsets.py:894
msgid "" msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides " "ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the " "endpoints for interacting with a user's wish list, allowing for the "
@ -3035,7 +3039,7 @@ msgstr ""
"integrert for å sikre at brukere bare kan administrere sine egne ønskelister" "integrert for å sikre at brukere bare kan administrere sine egne ønskelister"
" med mindre eksplisitte tillatelser er gitt." " med mindre eksplisitte tillatelser er gitt."
#: core/viewsets.py:1007 #: core/viewsets.py:1009
msgid "" msgid ""
"This class provides viewset functionality for managing `Address` objects. " "This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom " "The AddressViewSet class enables CRUD operations, filtering, and custom "
@ -3049,12 +3053,12 @@ msgstr ""
"inkluderer spesialisert atferd for ulike HTTP-metoder, overstyring av " "inkluderer spesialisert atferd for ulike HTTP-metoder, overstyring av "
"serializer og håndtering av tillatelser basert på forespørselskonteksten." "serializer og håndtering av tillatelser basert på forespørselskonteksten."
#: core/viewsets.py:1074 #: core/viewsets.py:1076
#, python-brace-format #, python-brace-format
msgid "Geocoding error: {e}" msgid "Geocoding error: {e}"
msgstr "Feil i geokoding: {e}" msgstr "Feil i geokoding: {e}"
#: core/viewsets.py:1081 #: core/viewsets.py:1083
msgid "" msgid ""
"Handles operations related to Product Tags within the application. This " "Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing " "class provides functionality for retrieving, filtering, and serializing "

View file

@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: EVIBES 3.0.0\n" "Project-Id-Version: EVIBES 3.0.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-10-13 13:56+0300\n" "POT-Creation-Date: 2025-10-13 18:49+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n" "Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
"Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n" "Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n"
@ -51,82 +51,86 @@ msgstr "Zmodyfikowany"
msgid "when the object was last modified" msgid "when the object was last modified"
msgstr "Kiedy obiekt był ostatnio edytowany" msgstr "Kiedy obiekt był ostatnio edytowany"
#: core/admin.py:63 #: core/admin.py:68
msgid "translations" msgid "translations"
msgstr "Tłumaczenia" msgstr "Tłumaczenia"
#: core/admin.py:67 #: core/admin.py:72
msgid "general" msgid "general"
msgstr "Ogólne" msgstr "Ogólne"
#: core/admin.py:69 #: core/admin.py:74
msgid "relations" msgid "relations"
msgstr "Relacje" msgstr "Relacje"
#: core/admin.py:87 #: core/admin.py:76
msgid "additional info"
msgstr "dodatkowe informacje"
#: core/admin.py:94
msgid "metadata" msgid "metadata"
msgstr "Metadane" msgstr "Metadane"
#: core/admin.py:94 #: core/admin.py:101
msgid "timestamps" msgid "timestamps"
msgstr "Znaczniki czasu" msgstr "Znaczniki czasu"
#: core/admin.py:109 #: core/admin.py:116
#, python-format #, python-format
msgid "activate selected %(verbose_name_plural)s" msgid "activate selected %(verbose_name_plural)s"
msgstr "Aktywuj wybrane %(verbose_name_plural)s" msgstr "Aktywuj wybrane %(verbose_name_plural)s"
#: core/admin.py:114 #: core/admin.py:121
msgid "selected items have been activated." msgid "selected items have been activated."
msgstr "Wybrane elementy zostały aktywowane!" msgstr "Wybrane elementy zostały aktywowane!"
#: core/admin.py:120 #: core/admin.py:127
#, python-format #, python-format
msgid "deactivate selected %(verbose_name_plural)s" msgid "deactivate selected %(verbose_name_plural)s"
msgstr "Dezaktywacja wybranego %(verbose_name_plural)s" msgstr "Dezaktywacja wybranego %(verbose_name_plural)s"
#: core/admin.py:125 #: core/admin.py:132
msgid "selected items have been deactivated." msgid "selected items have been deactivated."
msgstr "Wybrane elementy zostały dezaktywowane!" msgstr "Wybrane elementy zostały dezaktywowane!"
#: core/admin.py:137 core/graphene/object_types.py:609 #: core/admin.py:144 core/graphene/object_types.py:609
#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 #: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717
msgid "attribute value" msgid "attribute value"
msgstr "Wartość atrybutu" msgstr "Wartość atrybutu"
#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:718 #: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718
msgid "attribute values" msgid "attribute values"
msgstr "Wartości atrybutów" msgstr "Wartości atrybutów"
#: core/admin.py:146 #: core/admin.py:153
msgid "image" msgid "image"
msgstr "Obraz" msgstr "Obraz"
#: core/admin.py:147 core/graphene/object_types.py:501 #: core/admin.py:154 core/graphene/object_types.py:501
msgid "images" msgid "images"
msgstr "Obrazy" msgstr "Obrazy"
#: core/admin.py:155 core/models.py:467 #: core/admin.py:162 core/models.py:467
msgid "stock" msgid "stock"
msgstr "Stan magazynowy" msgstr "Stan magazynowy"
#: core/admin.py:156 core/graphene/object_types.py:663 #: core/admin.py:163 core/graphene/object_types.py:663
msgid "stocks" msgid "stocks"
msgstr "Akcje" msgstr "Akcje"
#: core/admin.py:166 core/models.py:1675 #: core/admin.py:173 core/models.py:1675
msgid "order product" msgid "order product"
msgstr "Zamów produkt" msgstr "Zamów produkt"
#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1676 #: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676
msgid "order products" msgid "order products"
msgstr "Zamawianie produktów" msgstr "Zamawianie produktów"
#: core/admin.py:180 core/admin.py:181 #: core/admin.py:187 core/admin.py:188
msgid "children" msgid "children"
msgstr "Dzieci" msgstr "Dzieci"
#: core/admin.py:566 #: core/admin.py:940
msgid "Config" msgid "Config"
msgstr "Konfiguracja" msgstr "Konfiguracja"
@ -746,7 +750,7 @@ msgstr "usunąć relację zamówienie-produkt"
msgid "add or remove feedback on an orderproduct relation" msgid "add or remove feedback on an orderproduct relation"
msgstr "dodawanie lub usuwanie opinii na temat relacji zamówienie-produkt" msgstr "dodawanie lub usuwanie opinii na temat relacji zamówienie-produkt"
#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 #: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499
msgid "no search term provided." msgid "no search term provided."
msgstr "Nie podano wyszukiwanego hasła." msgstr "Nie podano wyszukiwanego hasła."
@ -919,7 +923,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive"
msgstr "Podaj albo order_uuid albo order_hr_id - wzajemnie się wykluczają!" msgstr "Podaj albo order_uuid albo order_hr_id - wzajemnie się wykluczają!"
#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 #: core/graphene/mutations.py:229 core/graphene/mutations.py:486
#: core/graphene/mutations.py:527 core/viewsets.py:679 #: core/graphene/mutations.py:527 core/viewsets.py:680
msgid "wrong type came from order.buy() method: {type(instance)!s}" msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr "Nieprawidłowy typ pochodzi z metody order.buy(): {type(instance)!s}" msgstr "Nieprawidłowy typ pochodzi z metody order.buy(): {type(instance)!s}"
@ -997,7 +1001,7 @@ msgstr "Oryginalny ciąg adresu podany przez użytkownika"
#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 #: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870
#: core/models.py:1289 core/models.py:1318 core/models.py:1343 #: core/models.py:1289 core/models.py:1318 core/models.py:1343
#: core/viewsets.py:682 #: core/viewsets.py:683
#, python-brace-format #, python-brace-format
msgid "{name} does not exist: {uuid}" msgid "{name} does not exist: {uuid}"
msgstr "{name} nie istnieje: {uuid}!" msgstr "{name} nie istnieje: {uuid}!"
@ -2713,22 +2717,22 @@ msgstr ""
"Nieprawidłowa wartość limitu czasu, musi zawierać się w przedziale od 0 do " "Nieprawidłowa wartość limitu czasu, musi zawierać się w przedziale od 0 do "
"216000 sekund." "216000 sekund."
#: core/utils/emailing.py:25 #: core/utils/emailing.py:27
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | contact us initiated" msgid "{config.PROJECT_NAME} | contact us initiated"
msgstr "{config.PROJECT_NAME} | zainicjowany kontakt" msgstr "{config.PROJECT_NAME} | zainicjowany kontakt"
#: core/utils/emailing.py:74 #: core/utils/emailing.py:73
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order confirmation" msgid "{config.PROJECT_NAME} | order confirmation"
msgstr "{config.PROJECT_NAME} | Potwierdzenie zamówienia" msgstr "{config.PROJECT_NAME} | Potwierdzenie zamówienia"
#: core/utils/emailing.py:109 #: core/utils/emailing.py:105
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order delivered" msgid "{config.PROJECT_NAME} | order delivered"
msgstr "{config.PROJECT_NAME} | Zamówienie dostarczone" msgstr "{config.PROJECT_NAME} | Zamówienie dostarczone"
#: core/utils/emailing.py:197 #: core/utils/emailing.py:188
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | promocode granted" msgid "{config.PROJECT_NAME} | promocode granted"
msgstr "{config.PROJECT_NAME} | przyznany kod promocyjny" msgstr "{config.PROJECT_NAME} | przyznany kod promocyjny"
@ -2974,7 +2978,7 @@ msgstr ""
"bazowy `EvibesViewSet` i wykorzystuje system filtrowania Django do " "bazowy `EvibesViewSet` i wykorzystuje system filtrowania Django do "
"odpytywania danych." "odpytywania danych."
#: core/viewsets.py:593 #: core/viewsets.py:594
msgid "" msgid ""
"ViewSet for managing orders and related operations. This class provides " "ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes " "functionality to retrieve, modify, and manage order objects. It includes "
@ -2993,7 +2997,7 @@ msgstr ""
"wykorzystuje wiele serializatorów w oparciu o konkretną wykonywaną akcję i " "wykorzystuje wiele serializatorów w oparciu o konkretną wykonywaną akcję i "
"odpowiednio egzekwuje uprawnienia podczas interakcji z danymi zamówienia." "odpowiednio egzekwuje uprawnienia podczas interakcji z danymi zamówienia."
#: core/viewsets.py:782 #: core/viewsets.py:784
msgid "" msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables " "Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It " "CRUD operations and custom actions specific to the OrderProduct model. It "
@ -3008,26 +3012,26 @@ msgstr ""
"szczegółową akcję do obsługi informacji zwrotnych na temat instancji " "szczegółową akcję do obsługi informacji zwrotnych na temat instancji "
"OrderProduct" "OrderProduct"
#: core/viewsets.py:833 #: core/viewsets.py:835
msgid "Manages operations related to Product images in the application. " msgid "Manages operations related to Product images in the application. "
msgstr "Zarządza operacjami związanymi z obrazami produktów w aplikacji." msgstr "Zarządza operacjami związanymi z obrazami produktów w aplikacji."
#: core/viewsets.py:845 #: core/viewsets.py:847
msgid "" msgid ""
"Manages the retrieval and handling of PromoCode instances through various " "Manages the retrieval and handling of PromoCode instances through various "
"API actions." "API actions."
msgstr "" msgstr ""
"Zarządza pobieraniem i obsługą instancji PromoCode poprzez różne akcje API." "Zarządza pobieraniem i obsługą instancji PromoCode poprzez różne akcje API."
#: core/viewsets.py:866 #: core/viewsets.py:868
msgid "Represents a view set for managing promotions. " msgid "Represents a view set for managing promotions. "
msgstr "Reprezentuje zestaw widoków do zarządzania promocjami." msgstr "Reprezentuje zestaw widoków do zarządzania promocjami."
#: core/viewsets.py:878 #: core/viewsets.py:880
msgid "Handles operations related to Stock data in the system." msgid "Handles operations related to Stock data in the system."
msgstr "Obsługuje operacje związane z danymi Stock w systemie." msgstr "Obsługuje operacje związane z danymi Stock w systemie."
#: core/viewsets.py:892 #: core/viewsets.py:894
msgid "" msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides " "ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the " "endpoints for interacting with a user's wish list, allowing for the "
@ -3045,7 +3049,7 @@ msgstr ""
"że użytkownicy mogą zarządzać tylko własnymi listami życzeń, chyba że " "że użytkownicy mogą zarządzać tylko własnymi listami życzeń, chyba że "
"zostaną przyznane wyraźne uprawnienia." "zostaną przyznane wyraźne uprawnienia."
#: core/viewsets.py:1007 #: core/viewsets.py:1009
msgid "" msgid ""
"This class provides viewset functionality for managing `Address` objects. " "This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom " "The AddressViewSet class enables CRUD operations, filtering, and custom "
@ -3059,12 +3063,12 @@ msgstr ""
"wyspecjalizowane zachowania dla różnych metod HTTP, zastępowanie serializera" "wyspecjalizowane zachowania dla różnych metod HTTP, zastępowanie serializera"
" i obsługę uprawnień w oparciu o kontekst żądania." " i obsługę uprawnień w oparciu o kontekst żądania."
#: core/viewsets.py:1074 #: core/viewsets.py:1076
#, python-brace-format #, python-brace-format
msgid "Geocoding error: {e}" msgid "Geocoding error: {e}"
msgstr "Błąd geokodowania: {e}" msgstr "Błąd geokodowania: {e}"
#: core/viewsets.py:1081 #: core/viewsets.py:1083
msgid "" msgid ""
"Handles operations related to Product Tags within the application. This " "Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing " "class provides functionality for retrieving, filtering, and serializing "

View file

@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: EVIBES 3.0.0\n" "Project-Id-Version: EVIBES 3.0.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-10-13 13:56+0300\n" "POT-Creation-Date: 2025-10-13 18:49+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n" "Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
"Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n" "Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n"
@ -51,82 +51,86 @@ msgstr "Modificado"
msgid "when the object was last modified" msgid "when the object was last modified"
msgstr "Quando o objeto foi editado pela última vez" msgstr "Quando o objeto foi editado pela última vez"
#: core/admin.py:63 #: core/admin.py:68
msgid "translations" msgid "translations"
msgstr "Traduções" msgstr "Traduções"
#: core/admin.py:67 #: core/admin.py:72
msgid "general" msgid "general"
msgstr "Geral" msgstr "Geral"
#: core/admin.py:69 #: core/admin.py:74
msgid "relations" msgid "relations"
msgstr "Relações" msgstr "Relações"
#: core/admin.py:87 #: core/admin.py:76
msgid "additional info"
msgstr "informações adicionais"
#: core/admin.py:94
msgid "metadata" msgid "metadata"
msgstr "Metadados" msgstr "Metadados"
#: core/admin.py:94 #: core/admin.py:101
msgid "timestamps" msgid "timestamps"
msgstr "Carimbos de data/hora" msgstr "Carimbos de data/hora"
#: core/admin.py:109 #: core/admin.py:116
#, python-format #, python-format
msgid "activate selected %(verbose_name_plural)s" msgid "activate selected %(verbose_name_plural)s"
msgstr "Ativar o %(verbose_name_plural)s selecionado" msgstr "Ativar o %(verbose_name_plural)s selecionado"
#: core/admin.py:114 #: core/admin.py:121
msgid "selected items have been activated." msgid "selected items have been activated."
msgstr "Os itens selecionados foram ativados!" msgstr "Os itens selecionados foram ativados!"
#: core/admin.py:120 #: core/admin.py:127
#, python-format #, python-format
msgid "deactivate selected %(verbose_name_plural)s" msgid "deactivate selected %(verbose_name_plural)s"
msgstr "Desativar o %(verbose_name_plural)s selecionado" msgstr "Desativar o %(verbose_name_plural)s selecionado"
#: core/admin.py:125 #: core/admin.py:132
msgid "selected items have been deactivated." msgid "selected items have been deactivated."
msgstr "Os itens selecionados foram desativados!" msgstr "Os itens selecionados foram desativados!"
#: core/admin.py:137 core/graphene/object_types.py:609 #: core/admin.py:144 core/graphene/object_types.py:609
#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 #: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717
msgid "attribute value" msgid "attribute value"
msgstr "Valor do atributo" msgstr "Valor do atributo"
#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:718 #: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718
msgid "attribute values" msgid "attribute values"
msgstr "Valores de atributos" msgstr "Valores de atributos"
#: core/admin.py:146 #: core/admin.py:153
msgid "image" msgid "image"
msgstr "Imagem" msgstr "Imagem"
#: core/admin.py:147 core/graphene/object_types.py:501 #: core/admin.py:154 core/graphene/object_types.py:501
msgid "images" msgid "images"
msgstr "Imagens" msgstr "Imagens"
#: core/admin.py:155 core/models.py:467 #: core/admin.py:162 core/models.py:467
msgid "stock" msgid "stock"
msgstr "Estoque" msgstr "Estoque"
#: core/admin.py:156 core/graphene/object_types.py:663 #: core/admin.py:163 core/graphene/object_types.py:663
msgid "stocks" msgid "stocks"
msgstr "Ações" msgstr "Ações"
#: core/admin.py:166 core/models.py:1675 #: core/admin.py:173 core/models.py:1675
msgid "order product" msgid "order product"
msgstr "Pedido de produto" msgstr "Pedido de produto"
#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1676 #: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676
msgid "order products" msgid "order products"
msgstr "Solicitar produtos" msgstr "Solicitar produtos"
#: core/admin.py:180 core/admin.py:181 #: core/admin.py:187 core/admin.py:188
msgid "children" msgid "children"
msgstr "Crianças" msgstr "Crianças"
#: core/admin.py:566 #: core/admin.py:940
msgid "Config" msgid "Config"
msgstr "Configuração" msgstr "Configuração"
@ -736,7 +740,7 @@ msgstr "excluir uma relação pedido-produto"
msgid "add or remove feedback on an orderproduct relation" msgid "add or remove feedback on an orderproduct relation"
msgstr "adicionar ou remover feedback em uma relação pedido-produto" msgstr "adicionar ou remover feedback em uma relação pedido-produto"
#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 #: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499
msgid "no search term provided." msgid "no search term provided."
msgstr "Nenhum termo de pesquisa foi fornecido." msgstr "Nenhum termo de pesquisa foi fornecido."
@ -910,7 +914,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive"
msgstr "Forneça order_uuid ou order_hr_id - mutuamente exclusivos!" msgstr "Forneça order_uuid ou order_hr_id - mutuamente exclusivos!"
#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 #: core/graphene/mutations.py:229 core/graphene/mutations.py:486
#: core/graphene/mutations.py:527 core/viewsets.py:679 #: core/graphene/mutations.py:527 core/viewsets.py:680
msgid "wrong type came from order.buy() method: {type(instance)!s}" msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr "O tipo errado veio do método order.buy(): {type(instance)!s}" msgstr "O tipo errado veio do método order.buy(): {type(instance)!s}"
@ -987,7 +991,7 @@ msgstr "Cadeia de endereços original fornecida pelo usuário"
#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 #: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870
#: core/models.py:1289 core/models.py:1318 core/models.py:1343 #: core/models.py:1289 core/models.py:1318 core/models.py:1343
#: core/viewsets.py:682 #: core/viewsets.py:683
#, python-brace-format #, python-brace-format
msgid "{name} does not exist: {uuid}" msgid "{name} does not exist: {uuid}"
msgstr "{name} não existe: {uuid}!" msgstr "{name} não existe: {uuid}!"
@ -2696,22 +2700,22 @@ msgstr "São necessários dados e tempo limite"
msgid "invalid timeout value, it must be between 0 and 216000 seconds" 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" msgstr "Valor de tempo limite inválido, deve estar entre 0 e 216000 segundos"
#: core/utils/emailing.py:25 #: core/utils/emailing.py:27
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | contact us initiated" msgid "{config.PROJECT_NAME} | contact us initiated"
msgstr "{config.PROJECT_NAME} | entre em contato conosco iniciado" msgstr "{config.PROJECT_NAME} | entre em contato conosco iniciado"
#: core/utils/emailing.py:74 #: core/utils/emailing.py:73
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order confirmation" msgid "{config.PROJECT_NAME} | order confirmation"
msgstr "{config.PROJECT_NAME} | Confirmação do pedido" msgstr "{config.PROJECT_NAME} | Confirmação do pedido"
#: core/utils/emailing.py:109 #: core/utils/emailing.py:105
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order delivered" msgid "{config.PROJECT_NAME} | order delivered"
msgstr "{config.PROJECT_NAME} | Pedido entregue" msgstr "{config.PROJECT_NAME} | Pedido entregue"
#: core/utils/emailing.py:197 #: core/utils/emailing.py:188
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | promocode granted" msgid "{config.PROJECT_NAME} | promocode granted"
msgstr "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | promocode granted"
@ -2962,7 +2966,7 @@ msgstr ""
"feedback acessíveis. Ela estende a base `EvibesViewSet` e faz uso do sistema" "feedback acessíveis. Ela estende a base `EvibesViewSet` e faz uso do sistema"
" de filtragem do Django para consultar dados." " de filtragem do Django para consultar dados."
#: core/viewsets.py:593 #: core/viewsets.py:594
msgid "" msgid ""
"ViewSet for managing orders and related operations. This class provides " "ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes " "functionality to retrieve, modify, and manage order objects. It includes "
@ -2981,7 +2985,7 @@ msgstr ""
"específica que está sendo executada e impõe as permissões de acordo com a " "específica que está sendo executada e impõe as permissões de acordo com a "
"interação com os dados do pedido." "interação com os dados do pedido."
#: core/viewsets.py:782 #: core/viewsets.py:784
msgid "" msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables " "Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It " "CRUD operations and custom actions specific to the OrderProduct model. It "
@ -2996,11 +3000,11 @@ msgstr ""
"fornece uma ação detalhada para lidar com feedback sobre instâncias de " "fornece uma ação detalhada para lidar com feedback sobre instâncias de "
"OrderProduct" "OrderProduct"
#: core/viewsets.py:833 #: core/viewsets.py:835
msgid "Manages operations related to Product images in the application. " msgid "Manages operations related to Product images in the application. "
msgstr "Gerencia operações relacionadas a imagens de produtos no aplicativo." msgstr "Gerencia operações relacionadas a imagens de produtos no aplicativo."
#: core/viewsets.py:845 #: core/viewsets.py:847
msgid "" msgid ""
"Manages the retrieval and handling of PromoCode instances through various " "Manages the retrieval and handling of PromoCode instances through various "
"API actions." "API actions."
@ -3008,15 +3012,15 @@ msgstr ""
"Gerencia a recuperação e o manuseio de instâncias de PromoCode por meio de " "Gerencia a recuperação e o manuseio de instâncias de PromoCode por meio de "
"várias ações de API." "várias ações de API."
#: core/viewsets.py:866 #: core/viewsets.py:868
msgid "Represents a view set for managing promotions. " msgid "Represents a view set for managing promotions. "
msgstr "Representa um conjunto de visualizações para gerenciar promoções." msgstr "Representa um conjunto de visualizações para gerenciar promoções."
#: core/viewsets.py:878 #: core/viewsets.py:880
msgid "Handles operations related to Stock data in the system." msgid "Handles operations related to Stock data in the system."
msgstr "Trata de operações relacionadas a dados de estoque no sistema." msgstr "Trata de operações relacionadas a dados de estoque no sistema."
#: core/viewsets.py:892 #: core/viewsets.py:894
msgid "" msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides " "ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the " "endpoints for interacting with a user's wish list, allowing for the "
@ -3035,7 +3039,7 @@ msgstr ""
"possam gerenciar suas próprias listas de desejos, a menos que sejam " "possam gerenciar suas próprias listas de desejos, a menos que sejam "
"concedidas permissões explícitas." "concedidas permissões explícitas."
#: core/viewsets.py:1007 #: core/viewsets.py:1009
msgid "" msgid ""
"This class provides viewset functionality for managing `Address` objects. " "This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom " "The AddressViewSet class enables CRUD operations, filtering, and custom "
@ -3050,12 +3054,12 @@ msgstr ""
"substituições de serializadores e tratamento de permissões com base no " "substituições de serializadores e tratamento de permissões com base no "
"contexto da solicitação." "contexto da solicitação."
#: core/viewsets.py:1074 #: core/viewsets.py:1076
#, python-brace-format #, python-brace-format
msgid "Geocoding error: {e}" msgid "Geocoding error: {e}"
msgstr "Erro de geocodificação: {e}" msgstr "Erro de geocodificação: {e}"
#: core/viewsets.py:1081 #: core/viewsets.py:1083
msgid "" msgid ""
"Handles operations related to Product Tags within the application. This " "Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing " "class provides functionality for retrieving, filtering, and serializing "

View file

@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: EVIBES 3.0.0\n" "Project-Id-Version: EVIBES 3.0.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-10-13 13:56+0300\n" "POT-Creation-Date: 2025-10-13 18:49+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n" "Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
"Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n" "Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n"
@ -51,82 +51,86 @@ msgstr "Modificat"
msgid "when the object was last modified" msgid "when the object was last modified"
msgstr "Când a fost editat obiectul ultima dată" msgstr "Când a fost editat obiectul ultima dată"
#: core/admin.py:63 #: core/admin.py:68
msgid "translations" msgid "translations"
msgstr "Traduceri" msgstr "Traduceri"
#: core/admin.py:67 #: core/admin.py:72
msgid "general" msgid "general"
msgstr "Generalități" msgstr "Generalități"
#: core/admin.py:69 #: core/admin.py:74
msgid "relations" msgid "relations"
msgstr "Relații" msgstr "Relații"
#: core/admin.py:87 #: core/admin.py:76
msgid "additional info"
msgstr "informații suplimentare"
#: core/admin.py:94
msgid "metadata" msgid "metadata"
msgstr "Metadate" msgstr "Metadate"
#: core/admin.py:94 #: core/admin.py:101
msgid "timestamps" msgid "timestamps"
msgstr "Timestamps" msgstr "Timestamps"
#: core/admin.py:109 #: core/admin.py:116
#, python-format #, python-format
msgid "activate selected %(verbose_name_plural)s" msgid "activate selected %(verbose_name_plural)s"
msgstr "Activați %(verbose_name_plural)s selectat" msgstr "Activați %(verbose_name_plural)s selectat"
#: core/admin.py:114 #: core/admin.py:121
msgid "selected items have been activated." msgid "selected items have been activated."
msgstr "Articolele selectate au fost activate!" msgstr "Articolele selectate au fost activate!"
#: core/admin.py:120 #: core/admin.py:127
#, python-format #, python-format
msgid "deactivate selected %(verbose_name_plural)s" msgid "deactivate selected %(verbose_name_plural)s"
msgstr "Dezactivați %(verbose_name_plural)s selectat" msgstr "Dezactivați %(verbose_name_plural)s selectat"
#: core/admin.py:125 #: core/admin.py:132
msgid "selected items have been deactivated." msgid "selected items have been deactivated."
msgstr "Articolele selectate au fost dezactivate!" msgstr "Articolele selectate au fost dezactivate!"
#: core/admin.py:137 core/graphene/object_types.py:609 #: core/admin.py:144 core/graphene/object_types.py:609
#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 #: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717
msgid "attribute value" msgid "attribute value"
msgstr "Atribut Valoare" msgstr "Atribut Valoare"
#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:718 #: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718
msgid "attribute values" msgid "attribute values"
msgstr "Valori ale atributului" msgstr "Valori ale atributului"
#: core/admin.py:146 #: core/admin.py:153
msgid "image" msgid "image"
msgstr "Imagine" msgstr "Imagine"
#: core/admin.py:147 core/graphene/object_types.py:501 #: core/admin.py:154 core/graphene/object_types.py:501
msgid "images" msgid "images"
msgstr "Imagini" msgstr "Imagini"
#: core/admin.py:155 core/models.py:467 #: core/admin.py:162 core/models.py:467
msgid "stock" msgid "stock"
msgstr "Stoc" msgstr "Stoc"
#: core/admin.py:156 core/graphene/object_types.py:663 #: core/admin.py:163 core/graphene/object_types.py:663
msgid "stocks" msgid "stocks"
msgstr "Stocuri" msgstr "Stocuri"
#: core/admin.py:166 core/models.py:1675 #: core/admin.py:173 core/models.py:1675
msgid "order product" msgid "order product"
msgstr "Comanda Produs" msgstr "Comanda Produs"
#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1676 #: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676
msgid "order products" msgid "order products"
msgstr "Comandați produse" msgstr "Comandați produse"
#: core/admin.py:180 core/admin.py:181 #: core/admin.py:187 core/admin.py:188
msgid "children" msgid "children"
msgstr "Copii" msgstr "Copii"
#: core/admin.py:566 #: core/admin.py:940
msgid "Config" msgid "Config"
msgstr "Configurare" msgstr "Configurare"
@ -747,7 +751,7 @@ msgstr "ștergeți o relație comandă-produs"
msgid "add or remove feedback on an orderproduct relation" msgid "add or remove feedback on an orderproduct relation"
msgstr "adăugarea sau eliminarea feedback-ului într-o relație comandă-produs" msgstr "adăugarea sau eliminarea feedback-ului într-o relație comandă-produs"
#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 #: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499
msgid "no search term provided." msgid "no search term provided."
msgstr "Nu a fost furnizat niciun termen de căutare." msgstr "Nu a fost furnizat niciun termen de căutare."
@ -923,7 +927,7 @@ msgstr ""
"Vă rugăm să furnizați fie order_uuid sau order_hr_id - se exclud reciproc!" "Vă rugăm să furnizați fie order_uuid sau order_hr_id - se exclud reciproc!"
#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 #: core/graphene/mutations.py:229 core/graphene/mutations.py:486
#: core/graphene/mutations.py:527 core/viewsets.py:679 #: core/graphene/mutations.py:527 core/viewsets.py:680
msgid "wrong type came from order.buy() method: {type(instance)!s}" msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr "Metoda order.buy() a generat un tip greșit: {type(instance)!s}" msgstr "Metoda order.buy() a generat un tip greșit: {type(instance)!s}"
@ -1001,7 +1005,7 @@ msgstr "Șirul de adrese original furnizat de utilizator"
#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 #: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870
#: core/models.py:1289 core/models.py:1318 core/models.py:1343 #: core/models.py:1289 core/models.py:1318 core/models.py:1343
#: core/viewsets.py:682 #: core/viewsets.py:683
#, python-brace-format #, python-brace-format
msgid "{name} does not exist: {uuid}" msgid "{name} does not exist: {uuid}"
msgstr "{name} nu există: {uuid}!" msgstr "{name} nu există: {uuid}!"
@ -2722,22 +2726,22 @@ msgstr "Sunt necesare atât datele, cât și timpul de așteptare"
msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgid "invalid timeout value, it must be between 0 and 216000 seconds"
msgstr "Valoare timeout invalidă, trebuie să fie între 0 și 216000 secunde" msgstr "Valoare timeout invalidă, trebuie să fie între 0 și 216000 secunde"
#: core/utils/emailing.py:25 #: core/utils/emailing.py:27
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | contact us initiated" msgid "{config.PROJECT_NAME} | contact us initiated"
msgstr "{config.PROJECT_NAME} | contactați-ne inițiat" msgstr "{config.PROJECT_NAME} | contactați-ne inițiat"
#: core/utils/emailing.py:74 #: core/utils/emailing.py:73
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order confirmation" msgid "{config.PROJECT_NAME} | order confirmation"
msgstr "{config.PROJECT_NAME} | Confirmarea comenzii" msgstr "{config.PROJECT_NAME} | Confirmarea comenzii"
#: core/utils/emailing.py:109 #: core/utils/emailing.py:105
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order delivered" msgid "{config.PROJECT_NAME} | order delivered"
msgstr "{config.PROJECT_NAME} | Livrarea comenzii" msgstr "{config.PROJECT_NAME} | Livrarea comenzii"
#: core/utils/emailing.py:197 #: core/utils/emailing.py:188
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | promocode granted" msgid "{config.PROJECT_NAME} | promocode granted"
msgstr "{config.PROJECT_NAME} | promocode acordat" msgstr "{config.PROJECT_NAME} | promocode acordat"
@ -2989,7 +2993,7 @@ msgstr ""
"Feedback accesibile. Aceasta extinde clasa de bază `EvibesViewSet` și " "Feedback accesibile. Aceasta extinde clasa de bază `EvibesViewSet` și "
"utilizează sistemul de filtrare Django pentru interogarea datelor." "utilizează sistemul de filtrare Django pentru interogarea datelor."
#: core/viewsets.py:593 #: core/viewsets.py:594
msgid "" msgid ""
"ViewSet for managing orders and related operations. This class provides " "ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes " "functionality to retrieve, modify, and manage order objects. It includes "
@ -3009,7 +3013,7 @@ msgstr ""
"de acțiunea specifică efectuată și aplică permisiunile corespunzătoare în " "de acțiunea specifică efectuată și aplică permisiunile corespunzătoare în "
"timpul interacțiunii cu datele comenzii." "timpul interacțiunii cu datele comenzii."
#: core/viewsets.py:782 #: core/viewsets.py:784
msgid "" msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables " "Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It " "CRUD operations and custom actions specific to the OrderProduct model. It "
@ -3024,12 +3028,12 @@ msgstr ""
"solicitată. În plus, oferă o acțiune detaliată pentru gestionarea feedback-" "solicitată. În plus, oferă o acțiune detaliată pentru gestionarea feedback-"
"ului privind instanțele OrderProduct" "ului privind instanțele OrderProduct"
#: core/viewsets.py:833 #: core/viewsets.py:835
msgid "Manages operations related to Product images in the application. " msgid "Manages operations related to Product images in the application. "
msgstr "" msgstr ""
"Gestionează operațiunile legate de imaginile produselor din aplicație." "Gestionează operațiunile legate de imaginile produselor din aplicație."
#: core/viewsets.py:845 #: core/viewsets.py:847
msgid "" msgid ""
"Manages the retrieval and handling of PromoCode instances through various " "Manages the retrieval and handling of PromoCode instances through various "
"API actions." "API actions."
@ -3037,16 +3041,16 @@ msgstr ""
"Gestionează recuperarea și gestionarea instanțelor PromoCode prin diverse " "Gestionează recuperarea și gestionarea instanțelor PromoCode prin diverse "
"acțiuni API." "acțiuni API."
#: core/viewsets.py:866 #: core/viewsets.py:868
msgid "Represents a view set for managing promotions. " msgid "Represents a view set for managing promotions. "
msgstr "Reprezintă un set de vizualizări pentru gestionarea promoțiilor." msgstr "Reprezintă un set de vizualizări pentru gestionarea promoțiilor."
#: core/viewsets.py:878 #: core/viewsets.py:880
msgid "Handles operations related to Stock data in the system." msgid "Handles operations related to Stock data in the system."
msgstr "" msgstr ""
"Gestionează operațiunile legate de datele privind stocurile din sistem." "Gestionează operațiunile legate de datele privind stocurile din sistem."
#: core/viewsets.py:892 #: core/viewsets.py:894
msgid "" msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides " "ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the " "endpoints for interacting with a user's wish list, allowing for the "
@ -3065,7 +3069,7 @@ msgstr ""
"utilizatorii își pot gestiona doar propriile liste de dorințe, cu excepția " "utilizatorii își pot gestiona doar propriile liste de dorințe, cu excepția "
"cazului în care sunt acordate permisiuni explicite." "cazului în care sunt acordate permisiuni explicite."
#: core/viewsets.py:1007 #: core/viewsets.py:1009
msgid "" msgid ""
"This class provides viewset functionality for managing `Address` objects. " "This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom " "The AddressViewSet class enables CRUD operations, filtering, and custom "
@ -3080,12 +3084,12 @@ msgstr ""
"serializatorului și gestionarea permisiunilor în funcție de contextul " "serializatorului și gestionarea permisiunilor în funcție de contextul "
"cererii." "cererii."
#: core/viewsets.py:1074 #: core/viewsets.py:1076
#, python-brace-format #, python-brace-format
msgid "Geocoding error: {e}" msgid "Geocoding error: {e}"
msgstr "Eroare de geocodare: {e}" msgstr "Eroare de geocodare: {e}"
#: core/viewsets.py:1081 #: core/viewsets.py:1083
msgid "" msgid ""
"Handles operations related to Product Tags within the application. This " "Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing " "class provides functionality for retrieving, filtering, and serializing "

View file

@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: EVIBES 3.0.0\n" "Project-Id-Version: EVIBES 3.0.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-10-13 13:56+0300\n" "POT-Creation-Date: 2025-10-13 18:49+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n" "Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
"Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n" "Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n"
@ -51,82 +51,86 @@ msgstr "Модифицированный"
msgid "when the object was last modified" msgid "when the object was last modified"
msgstr "Когда объект был отредактирован в последний раз" msgstr "Когда объект был отредактирован в последний раз"
#: core/admin.py:63 #: core/admin.py:68
msgid "translations" msgid "translations"
msgstr "Переводы" msgstr "Переводы"
#: core/admin.py:67 #: core/admin.py:72
msgid "general" msgid "general"
msgstr "Общие сведения" msgstr "Общие сведения"
#: core/admin.py:69 #: core/admin.py:74
msgid "relations" msgid "relations"
msgstr "Отношения" msgstr "Отношения"
#: core/admin.py:87 #: core/admin.py:76
msgid "additional info"
msgstr "дополнительная информация"
#: core/admin.py:94
msgid "metadata" msgid "metadata"
msgstr "Метаданные" msgstr "Метаданные"
#: core/admin.py:94 #: core/admin.py:101
msgid "timestamps" msgid "timestamps"
msgstr "Временные метки" msgstr "Временные метки"
#: core/admin.py:109 #: core/admin.py:116
#, python-format #, python-format
msgid "activate selected %(verbose_name_plural)s" msgid "activate selected %(verbose_name_plural)s"
msgstr "Активировать выбранный %(verbose_name_plural)s" msgstr "Активировать выбранный %(verbose_name_plural)s"
#: core/admin.py:114 #: core/admin.py:121
msgid "selected items have been activated." msgid "selected items have been activated."
msgstr "Выбранные сущности активированы!" msgstr "Выбранные сущности активированы!"
#: core/admin.py:120 #: core/admin.py:127
#, python-format #, python-format
msgid "deactivate selected %(verbose_name_plural)s" msgid "deactivate selected %(verbose_name_plural)s"
msgstr "Деактивировать выбранный %(verbose_name_plural)s" msgstr "Деактивировать выбранный %(verbose_name_plural)s"
#: core/admin.py:125 #: core/admin.py:132
msgid "selected items have been deactivated." msgid "selected items have been deactivated."
msgstr "Выбранные сущности были деактивированы!" msgstr "Выбранные сущности были деактивированы!"
#: core/admin.py:137 core/graphene/object_types.py:609 #: core/admin.py:144 core/graphene/object_types.py:609
#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 #: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717
msgid "attribute value" msgid "attribute value"
msgstr "Значение атрибута" msgstr "Значение атрибута"
#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:718 #: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718
msgid "attribute values" msgid "attribute values"
msgstr "Значения атрибутов" msgstr "Значения атрибутов"
#: core/admin.py:146 #: core/admin.py:153
msgid "image" msgid "image"
msgstr "Изображение" msgstr "Изображение"
#: core/admin.py:147 core/graphene/object_types.py:501 #: core/admin.py:154 core/graphene/object_types.py:501
msgid "images" msgid "images"
msgstr "Изображения" msgstr "Изображения"
#: core/admin.py:155 core/models.py:467 #: core/admin.py:162 core/models.py:467
msgid "stock" msgid "stock"
msgstr "Наличие" msgstr "Наличие"
#: core/admin.py:156 core/graphene/object_types.py:663 #: core/admin.py:163 core/graphene/object_types.py:663
msgid "stocks" msgid "stocks"
msgstr "Наличия" msgstr "Наличия"
#: core/admin.py:166 core/models.py:1675 #: core/admin.py:173 core/models.py:1675
msgid "order product" msgid "order product"
msgstr "Заказанный товар" msgstr "Заказанный товар"
#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1676 #: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676
msgid "order products" msgid "order products"
msgstr "Заказанные товары" msgstr "Заказанные товары"
#: core/admin.py:180 core/admin.py:181 #: core/admin.py:187 core/admin.py:188
msgid "children" msgid "children"
msgstr "Дети" msgstr "Дети"
#: core/admin.py:566 #: core/admin.py:940
msgid "Config" msgid "Config"
msgstr "Конфигурация" msgstr "Конфигурация"
@ -746,7 +750,7 @@ msgstr "удалить отношение \"заказ-продукт"
msgid "add or remove feedback on an orderproduct relation" msgid "add or remove feedback on an orderproduct relation"
msgstr "добавлять или удалять отзывы о связи заказ-продукт" msgstr "добавлять или удалять отзывы о связи заказ-продукт"
#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 #: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499
msgid "no search term provided." msgid "no search term provided."
msgstr "Поисковый запрос не предоставлен." msgstr "Поисковый запрос не предоставлен."
@ -923,7 +927,7 @@ msgstr ""
"варианты!" "варианты!"
#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 #: core/graphene/mutations.py:229 core/graphene/mutations.py:486
#: core/graphene/mutations.py:527 core/viewsets.py:679 #: core/graphene/mutations.py:527 core/viewsets.py:680
msgid "wrong type came from order.buy() method: {type(instance)!s}" msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr "Неправильный тип получен из метода order.buy(): {type(instance)!s}" msgstr "Неправильный тип получен из метода order.buy(): {type(instance)!s}"
@ -1001,7 +1005,7 @@ msgstr "Оригинальная строка адреса, предоставл
#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 #: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870
#: core/models.py:1289 core/models.py:1318 core/models.py:1343 #: core/models.py:1289 core/models.py:1318 core/models.py:1343
#: core/viewsets.py:682 #: core/viewsets.py:683
#, python-brace-format #, python-brace-format
msgid "{name} does not exist: {uuid}" msgid "{name} does not exist: {uuid}"
msgstr "{name} не существует: {uuid}!" msgstr "{name} не существует: {uuid}!"
@ -2711,22 +2715,22 @@ msgstr ""
"Неверное значение тайм-аута, оно должно находиться в диапазоне от 0 до " "Неверное значение тайм-аута, оно должно находиться в диапазоне от 0 до "
"216000 секунд" "216000 секунд"
#: core/utils/emailing.py:25 #: core/utils/emailing.py:27
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | contact us initiated" msgid "{config.PROJECT_NAME} | contact us initiated"
msgstr "{config.PROJECT_NAME} | свяжитесь с нами по инициативе" msgstr "{config.PROJECT_NAME} | свяжитесь с нами по инициативе"
#: core/utils/emailing.py:74 #: core/utils/emailing.py:73
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order confirmation" msgid "{config.PROJECT_NAME} | order confirmation"
msgstr "{config.PROJECT_NAME} | Подтверждение заказа" msgstr "{config.PROJECT_NAME} | Подтверждение заказа"
#: core/utils/emailing.py:109 #: core/utils/emailing.py:105
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order delivered" msgid "{config.PROJECT_NAME} | order delivered"
msgstr "{config.PROJECT_NAME} | Заказ доставлен" msgstr "{config.PROJECT_NAME} | Заказ доставлен"
#: core/utils/emailing.py:197 #: core/utils/emailing.py:188
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | promocode granted" msgid "{config.PROJECT_NAME} | promocode granted"
msgstr "{config.PROJECT_NAME} | Промокод предоставлен" msgstr "{config.PROJECT_NAME} | Промокод предоставлен"
@ -2977,7 +2981,7 @@ msgstr ""
"доступа. Он расширяет базовый `EvibesViewSet` и использует систему " "доступа. Он расширяет базовый `EvibesViewSet` и использует систему "
"фильтрации Django для запроса данных." "фильтрации Django для запроса данных."
#: core/viewsets.py:593 #: core/viewsets.py:594
msgid "" msgid ""
"ViewSet for managing orders and related operations. This class provides " "ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes " "functionality to retrieve, modify, and manage order objects. It includes "
@ -2998,7 +3002,7 @@ msgstr ""
"соответствующим образом устанавливает разрешения при взаимодействии с " "соответствующим образом устанавливает разрешения при взаимодействии с "
"данными заказа." "данными заказа."
#: core/viewsets.py:782 #: core/viewsets.py:784
msgid "" msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables " "Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It " "CRUD operations and custom actions specific to the OrderProduct model. It "
@ -3013,12 +3017,12 @@ msgstr ""
" от запрашиваемого действия. Кроме того, он предоставляет подробное действие" " от запрашиваемого действия. Кроме того, он предоставляет подробное действие"
" для обработки отзывов об экземплярах OrderProduct" " для обработки отзывов об экземплярах OrderProduct"
#: core/viewsets.py:833 #: core/viewsets.py:835
msgid "Manages operations related to Product images in the application. " msgid "Manages operations related to Product images in the application. "
msgstr "" msgstr ""
"Управляет операциями, связанными с изображениями продуктов в приложении." "Управляет операциями, связанными с изображениями продуктов в приложении."
#: core/viewsets.py:845 #: core/viewsets.py:847
msgid "" msgid ""
"Manages the retrieval and handling of PromoCode instances through various " "Manages the retrieval and handling of PromoCode instances through various "
"API actions." "API actions."
@ -3026,16 +3030,16 @@ msgstr ""
"Управляет получением и обработкой экземпляров PromoCode с помощью различных " "Управляет получением и обработкой экземпляров PromoCode с помощью различных "
"действий API." "действий API."
#: core/viewsets.py:866 #: core/viewsets.py:868
msgid "Represents a view set for managing promotions. " msgid "Represents a view set for managing promotions. "
msgstr "" msgstr ""
"Представляет собой набор представлений для управления рекламными акциями." "Представляет собой набор представлений для управления рекламными акциями."
#: core/viewsets.py:878 #: core/viewsets.py:880
msgid "Handles operations related to Stock data in the system." msgid "Handles operations related to Stock data in the system."
msgstr "Выполняет операции, связанные с данными о запасах в системе." msgstr "Выполняет операции, связанные с данными о запасах в системе."
#: core/viewsets.py:892 #: core/viewsets.py:894
msgid "" msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides " "ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the " "endpoints for interacting with a user's wish list, allowing for the "
@ -3053,7 +3057,7 @@ msgstr ""
"проверка прав доступа гарантирует, что пользователи смогут управлять только " "проверка прав доступа гарантирует, что пользователи смогут управлять только "
"своими списками желаний, если не предоставлены явные права." "своими списками желаний, если не предоставлены явные права."
#: core/viewsets.py:1007 #: core/viewsets.py:1009
msgid "" msgid ""
"This class provides viewset functionality for managing `Address` objects. " "This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom " "The AddressViewSet class enables CRUD operations, filtering, and custom "
@ -3068,12 +3072,12 @@ msgstr ""
"методов HTTP, переопределение сериализатора и обработку разрешений в " "методов HTTP, переопределение сериализатора и обработку разрешений в "
"зависимости от контекста запроса." "зависимости от контекста запроса."
#: core/viewsets.py:1074 #: core/viewsets.py:1076
#, python-brace-format #, python-brace-format
msgid "Geocoding error: {e}" msgid "Geocoding error: {e}"
msgstr "Ошибка геокодирования: {e}" msgstr "Ошибка геокодирования: {e}"
#: core/viewsets.py:1081 #: core/viewsets.py:1083
msgid "" msgid ""
"Handles operations related to Product Tags within the application. This " "Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing " "class provides functionality for retrieving, filtering, and serializing "

View file

@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: EVIBES 3.0.0\n" "Project-Id-Version: EVIBES 3.0.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-10-13 13:56+0300\n" "POT-Creation-Date: 2025-10-13 18:49+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n" "Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
"Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n" "Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n"
@ -49,82 +49,86 @@ msgstr "Modifierad"
msgid "when the object was last modified" msgid "when the object was last modified"
msgstr "När objektet senast redigerades" msgstr "När objektet senast redigerades"
#: core/admin.py:63 #: core/admin.py:68
msgid "translations" msgid "translations"
msgstr "Översättningar" msgstr "Översättningar"
#: core/admin.py:67 #: core/admin.py:72
msgid "general" msgid "general"
msgstr "Allmänt" msgstr "Allmänt"
#: core/admin.py:69 #: core/admin.py:74
msgid "relations" msgid "relations"
msgstr "Relationer" msgstr "Relationer"
#: core/admin.py:87 #: core/admin.py:76
msgid "additional info"
msgstr "Ytterligare information"
#: core/admin.py:94
msgid "metadata" msgid "metadata"
msgstr "Metadata" msgstr "Metadata"
#: core/admin.py:94 #: core/admin.py:101
msgid "timestamps" msgid "timestamps"
msgstr "Tidsstämplar" msgstr "Tidsstämplar"
#: core/admin.py:109 #: core/admin.py:116
#, python-format #, python-format
msgid "activate selected %(verbose_name_plural)s" msgid "activate selected %(verbose_name_plural)s"
msgstr "Aktivera vald %(verbose_name_plural)s." msgstr "Aktivera vald %(verbose_name_plural)s."
#: core/admin.py:114 #: core/admin.py:121
msgid "selected items have been activated." msgid "selected items have been activated."
msgstr "Valda artiklar har aktiverats!" msgstr "Valda artiklar har aktiverats!"
#: core/admin.py:120 #: core/admin.py:127
#, python-format #, python-format
msgid "deactivate selected %(verbose_name_plural)s" msgid "deactivate selected %(verbose_name_plural)s"
msgstr "Avaktivera vald %(verbose_name_plural)s." msgstr "Avaktivera vald %(verbose_name_plural)s."
#: core/admin.py:125 #: core/admin.py:132
msgid "selected items have been deactivated." msgid "selected items have been deactivated."
msgstr "Valda objekt har avaktiverats!" msgstr "Valda objekt har avaktiverats!"
#: core/admin.py:137 core/graphene/object_types.py:609 #: core/admin.py:144 core/graphene/object_types.py:609
#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 #: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717
msgid "attribute value" msgid "attribute value"
msgstr "Attributvärde" msgstr "Attributvärde"
#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:718 #: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718
msgid "attribute values" msgid "attribute values"
msgstr "Attributets värden" msgstr "Attributets värden"
#: core/admin.py:146 #: core/admin.py:153
msgid "image" msgid "image"
msgstr "Bild" msgstr "Bild"
#: core/admin.py:147 core/graphene/object_types.py:501 #: core/admin.py:154 core/graphene/object_types.py:501
msgid "images" msgid "images"
msgstr "Bilder" msgstr "Bilder"
#: core/admin.py:155 core/models.py:467 #: core/admin.py:162 core/models.py:467
msgid "stock" msgid "stock"
msgstr "Stock" msgstr "Stock"
#: core/admin.py:156 core/graphene/object_types.py:663 #: core/admin.py:163 core/graphene/object_types.py:663
msgid "stocks" msgid "stocks"
msgstr "Stocks" msgstr "Stocks"
#: core/admin.py:166 core/models.py:1675 #: core/admin.py:173 core/models.py:1675
msgid "order product" msgid "order product"
msgstr "Beställ produkt" msgstr "Beställ produkt"
#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1676 #: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676
msgid "order products" msgid "order products"
msgstr "Beställ produkter" msgstr "Beställ produkter"
#: core/admin.py:180 core/admin.py:181 #: core/admin.py:187 core/admin.py:188
msgid "children" msgid "children"
msgstr "Barn och ungdomar" msgstr "Barn och ungdomar"
#: core/admin.py:566 #: core/admin.py:940
msgid "Config" msgid "Config"
msgstr "Konfig" msgstr "Konfig"
@ -728,7 +732,7 @@ msgstr "ta bort en order-produktrelation"
msgid "add or remove feedback on an orderproduct relation" msgid "add or remove feedback on an orderproduct relation"
msgstr "lägga till eller ta bort feedback om en order-produktrelation" msgstr "lägga till eller ta bort feedback om en order-produktrelation"
#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 #: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499
msgid "no search term provided." msgid "no search term provided."
msgstr "Ingen sökterm angavs." msgstr "Ingen sökterm angavs."
@ -905,7 +909,7 @@ msgstr ""
"uteslutande!" "uteslutande!"
#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 #: core/graphene/mutations.py:229 core/graphene/mutations.py:486
#: core/graphene/mutations.py:527 core/viewsets.py:679 #: core/graphene/mutations.py:527 core/viewsets.py:680
msgid "wrong type came from order.buy() method: {type(instance)!s}" msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr "Fel typ kom från order.buy()-metoden: {type(instance)!s}" msgstr "Fel typ kom från order.buy()-metoden: {type(instance)!s}"
@ -982,7 +986,7 @@ msgstr "Originaladresssträng som tillhandahålls av användaren"
#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 #: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870
#: core/models.py:1289 core/models.py:1318 core/models.py:1343 #: core/models.py:1289 core/models.py:1318 core/models.py:1343
#: core/viewsets.py:682 #: core/viewsets.py:683
#, python-brace-format #, python-brace-format
msgid "{name} does not exist: {uuid}" msgid "{name} does not exist: {uuid}"
msgstr "{name} existerar inte: {uuid}!" msgstr "{name} existerar inte: {uuid}!"
@ -2684,22 +2688,22 @@ msgstr "Både data och timeout krävs"
msgid "invalid timeout value, it must be between 0 and 216000 seconds" 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" msgstr "Ogiltigt timeout-värde, det måste vara mellan 0 och 216000 sekunder"
#: core/utils/emailing.py:25 #: core/utils/emailing.py:27
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | contact us initiated" msgid "{config.PROJECT_NAME} | contact us initiated"
msgstr "{config.PROJECT_NAME} | kontakta oss initierad" msgstr "{config.PROJECT_NAME} | kontakta oss initierad"
#: core/utils/emailing.py:74 #: core/utils/emailing.py:73
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order confirmation" msgid "{config.PROJECT_NAME} | order confirmation"
msgstr "{config.PROJECT_NAME} | Orderbekräftelse" msgstr "{config.PROJECT_NAME} | Orderbekräftelse"
#: core/utils/emailing.py:109 #: core/utils/emailing.py:105
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order delivered" msgid "{config.PROJECT_NAME} | order delivered"
msgstr "{config.PROJECT_NAME} | Beställning levererad" msgstr "{config.PROJECT_NAME} | Beställning levererad"
#: core/utils/emailing.py:197 #: core/utils/emailing.py:188
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | promocode granted" msgid "{config.PROJECT_NAME} | promocode granted"
msgstr "{config.PROJECT_NAME} | promocode beviljad" msgstr "{config.PROJECT_NAME} | promocode beviljad"
@ -2944,7 +2948,7 @@ msgstr ""
"basen `EvibesViewSet` och använder Djangos filtreringssystem för att fråga " "basen `EvibesViewSet` och använder Djangos filtreringssystem för att fråga "
"data." "data."
#: core/viewsets.py:593 #: core/viewsets.py:594
msgid "" msgid ""
"ViewSet for managing orders and related operations. This class provides " "ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes " "functionality to retrieve, modify, and manage order objects. It includes "
@ -2963,7 +2967,7 @@ msgstr ""
"åtgärd som utförs och verkställer behörigheter i enlighet med detta vid " "åtgärd som utförs och verkställer behörigheter i enlighet med detta vid "
"interaktion med orderdata." "interaktion med orderdata."
#: core/viewsets.py:782 #: core/viewsets.py:784
msgid "" msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables " "Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It " "CRUD operations and custom actions specific to the OrderProduct model. It "
@ -2978,11 +2982,11 @@ msgstr ""
"åtgärden. Dessutom innehåller den en detaljerad åtgärd för att hantera " "åtgärden. Dessutom innehåller den en detaljerad åtgärd för att hantera "
"feedback på OrderProduct-instanser" "feedback på OrderProduct-instanser"
#: core/viewsets.py:833 #: core/viewsets.py:835
msgid "Manages operations related to Product images in the application. " msgid "Manages operations related to Product images in the application. "
msgstr "Hanterar åtgärder relaterade till produktbilder i applikationen." msgstr "Hanterar åtgärder relaterade till produktbilder i applikationen."
#: core/viewsets.py:845 #: core/viewsets.py:847
msgid "" msgid ""
"Manages the retrieval and handling of PromoCode instances through various " "Manages the retrieval and handling of PromoCode instances through various "
"API actions." "API actions."
@ -2990,15 +2994,15 @@ msgstr ""
"Hanterar hämtning och hantering av PromoCode-instanser genom olika API-" "Hanterar hämtning och hantering av PromoCode-instanser genom olika API-"
"åtgärder." "åtgärder."
#: core/viewsets.py:866 #: core/viewsets.py:868
msgid "Represents a view set for managing promotions. " msgid "Represents a view set for managing promotions. "
msgstr "Representerar en vyuppsättning för hantering av kampanjer." msgstr "Representerar en vyuppsättning för hantering av kampanjer."
#: core/viewsets.py:878 #: core/viewsets.py:880
msgid "Handles operations related to Stock data in the system." msgid "Handles operations related to Stock data in the system."
msgstr "Hanterar åtgärder relaterade till lagerdata i systemet." msgstr "Hanterar åtgärder relaterade till lagerdata i systemet."
#: core/viewsets.py:892 #: core/viewsets.py:894
msgid "" msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides " "ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the " "endpoints for interacting with a user's wish list, allowing for the "
@ -3016,7 +3020,7 @@ msgstr ""
"integrerade för att säkerställa att användare endast kan hantera sina egna " "integrerade för att säkerställa att användare endast kan hantera sina egna "
"önskelistor om inte uttryckliga behörigheter beviljas." "önskelistor om inte uttryckliga behörigheter beviljas."
#: core/viewsets.py:1007 #: core/viewsets.py:1009
msgid "" msgid ""
"This class provides viewset functionality for managing `Address` objects. " "This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom " "The AddressViewSet class enables CRUD operations, filtering, and custom "
@ -3030,12 +3034,12 @@ msgstr ""
"innehåller specialiserade beteenden för olika HTTP-metoder, serializer-" "innehåller specialiserade beteenden för olika HTTP-metoder, serializer-"
"överskrivningar och behörighetshantering baserat på förfrågningskontexten." "överskrivningar och behörighetshantering baserat på förfrågningskontexten."
#: core/viewsets.py:1074 #: core/viewsets.py:1076
#, python-brace-format #, python-brace-format
msgid "Geocoding error: {e}" msgid "Geocoding error: {e}"
msgstr "Fel i geokodningen: {e}" msgstr "Fel i geokodningen: {e}"
#: core/viewsets.py:1081 #: core/viewsets.py:1083
msgid "" msgid ""
"Handles operations related to Product Tags within the application. This " "Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing " "class provides functionality for retrieving, filtering, and serializing "

View file

@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: EVIBES 3.0.0\n" "Project-Id-Version: EVIBES 3.0.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-10-13 13:56+0300\n" "POT-Creation-Date: 2025-10-13 18:49+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n" "Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
"Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n" "Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n"
@ -49,82 +49,86 @@ msgstr "แก้ไขแล้ว"
msgid "when the object was last modified" msgid "when the object was last modified"
msgstr "เมื่อครั้งล่าสุดที่มีการแก้ไขวัตถุ" msgstr "เมื่อครั้งล่าสุดที่มีการแก้ไขวัตถุ"
#: core/admin.py:63 #: core/admin.py:68
msgid "translations" msgid "translations"
msgstr "การแปล" msgstr "การแปล"
#: core/admin.py:67 #: core/admin.py:72
msgid "general" msgid "general"
msgstr "ทั่วไป" msgstr "ทั่วไป"
#: core/admin.py:69 #: core/admin.py:74
msgid "relations" msgid "relations"
msgstr "ความสัมพันธ์" msgstr "ความสัมพันธ์"
#: core/admin.py:87 #: core/admin.py:76
msgid "additional info"
msgstr "ข้อมูลเพิ่มเติม"
#: core/admin.py:94
msgid "metadata" msgid "metadata"
msgstr "เมตาดาตา" msgstr "เมตาดาตา"
#: core/admin.py:94 #: core/admin.py:101
msgid "timestamps" msgid "timestamps"
msgstr "เวลาที่บันทึก" msgstr "เวลาที่บันทึก"
#: core/admin.py:109 #: core/admin.py:116
#, python-format #, python-format
msgid "activate selected %(verbose_name_plural)s" msgid "activate selected %(verbose_name_plural)s"
msgstr "เปิดใช้งานที่เลือกไว้ %(verbose_name_plural)s" msgstr "เปิดใช้งานที่เลือกไว้ %(verbose_name_plural)s"
#: core/admin.py:114 #: core/admin.py:121
msgid "selected items have been activated." msgid "selected items have been activated."
msgstr "รายการที่เลือกไว้ได้รับการเปิดใช้งานแล้ว!" msgstr "รายการที่เลือกไว้ได้รับการเปิดใช้งานแล้ว!"
#: core/admin.py:120 #: core/admin.py:127
#, python-format #, python-format
msgid "deactivate selected %(verbose_name_plural)s" msgid "deactivate selected %(verbose_name_plural)s"
msgstr "ยกเลิกการใช้งานที่เลือกไว้ %(verbose_name_plural)s" msgstr "ยกเลิกการใช้งานที่เลือกไว้ %(verbose_name_plural)s"
#: core/admin.py:125 #: core/admin.py:132
msgid "selected items have been deactivated." msgid "selected items have been deactivated."
msgstr "รายการที่เลือกถูกยกเลิกการใช้งานแล้ว!" msgstr "รายการที่เลือกถูกยกเลิกการใช้งานแล้ว!"
#: core/admin.py:137 core/graphene/object_types.py:609 #: core/admin.py:144 core/graphene/object_types.py:609
#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 #: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717
msgid "attribute value" msgid "attribute value"
msgstr "ค่าคุณสมบัติ" msgstr "ค่าคุณสมบัติ"
#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:718 #: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718
msgid "attribute values" msgid "attribute values"
msgstr "ค่าของแอตทริบิวต์" msgstr "ค่าของแอตทริบิวต์"
#: core/admin.py:146 #: core/admin.py:153
msgid "image" msgid "image"
msgstr "ภาพ" msgstr "ภาพ"
#: core/admin.py:147 core/graphene/object_types.py:501 #: core/admin.py:154 core/graphene/object_types.py:501
msgid "images" msgid "images"
msgstr "รูปภาพ" msgstr "รูปภาพ"
#: core/admin.py:155 core/models.py:467 #: core/admin.py:162 core/models.py:467
msgid "stock" msgid "stock"
msgstr "สต็อก" msgstr "สต็อก"
#: core/admin.py:156 core/graphene/object_types.py:663 #: core/admin.py:163 core/graphene/object_types.py:663
msgid "stocks" msgid "stocks"
msgstr "หุ้น" msgstr "หุ้น"
#: core/admin.py:166 core/models.py:1675 #: core/admin.py:173 core/models.py:1675
msgid "order product" msgid "order product"
msgstr "สั่งซื้อสินค้า" msgstr "สั่งซื้อสินค้า"
#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1676 #: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676
msgid "order products" msgid "order products"
msgstr "สั่งซื้อสินค้า" msgstr "สั่งซื้อสินค้า"
#: core/admin.py:180 core/admin.py:181 #: core/admin.py:187 core/admin.py:188
msgid "children" msgid "children"
msgstr "เด็ก" msgstr "เด็ก"
#: core/admin.py:566 #: core/admin.py:940
msgid "Config" msgid "Config"
msgstr "การกำหนดค่า" msgstr "การกำหนดค่า"
@ -723,7 +727,7 @@ msgid "add or remove feedback on an orderproduct relation"
msgstr "" msgstr ""
"เพิ่มหรือลบความคิดเห็นเกี่ยวกับความสัมพันธ์ระหว่างคำสั่งซื้อและผลิตภัณฑ์" "เพิ่มหรือลบความคิดเห็นเกี่ยวกับความสัมพันธ์ระหว่างคำสั่งซื้อและผลิตภัณฑ์"
#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 #: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499
msgid "no search term provided." msgid "no search term provided."
msgstr "ไม่พบคำค้นหา" msgstr "ไม่พบคำค้นหา"
@ -897,7 +901,7 @@ msgstr ""
"กรุณาให้ order_uuid หรือ order_hr_id - ต้องเลือกอย่างใดอย่างหนึ่งเท่านั้น!" "กรุณาให้ order_uuid หรือ order_hr_id - ต้องเลือกอย่างใดอย่างหนึ่งเท่านั้น!"
#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 #: core/graphene/mutations.py:229 core/graphene/mutations.py:486
#: core/graphene/mutations.py:527 core/viewsets.py:679 #: core/graphene/mutations.py:527 core/viewsets.py:680
msgid "wrong type came from order.buy() method: {type(instance)!s}" msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr "ประเภทไม่ถูกต้องมาจากเมธอด order.buy(): {type(instance)!s}" msgstr "ประเภทไม่ถูกต้องมาจากเมธอด order.buy(): {type(instance)!s}"
@ -974,7 +978,7 @@ msgstr "สตริงที่อยู่ต้นฉบับที่ผู
#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 #: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870
#: core/models.py:1289 core/models.py:1318 core/models.py:1343 #: core/models.py:1289 core/models.py:1318 core/models.py:1343
#: core/viewsets.py:682 #: core/viewsets.py:683
#, python-brace-format #, python-brace-format
msgid "{name} does not exist: {uuid}" msgid "{name} does not exist: {uuid}"
msgstr "{name} ไม่พบ: {uuid}!" msgstr "{name} ไม่พบ: {uuid}!"
@ -2647,22 +2651,22 @@ msgstr "จำเป็นต้องมีทั้งข้อมูลแล
msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgid "invalid timeout value, it must be between 0 and 216000 seconds"
msgstr "ค่าหมดเวลาไม่ถูกต้อง ต้องอยู่ระหว่าง 0 ถึง 216000 วินาที" msgstr "ค่าหมดเวลาไม่ถูกต้อง ต้องอยู่ระหว่าง 0 ถึง 216000 วินาที"
#: core/utils/emailing.py:25 #: core/utils/emailing.py:27
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | contact us initiated" msgid "{config.PROJECT_NAME} | contact us initiated"
msgstr "{config.PROJECT_NAME} | ติดต่อเรา เริ่มต้น" msgstr "{config.PROJECT_NAME} | ติดต่อเรา เริ่มต้น"
#: core/utils/emailing.py:74 #: core/utils/emailing.py:73
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order confirmation" msgid "{config.PROJECT_NAME} | order confirmation"
msgstr "{config.PROJECT_NAME} | ยืนยันการสั่งซื้อ" msgstr "{config.PROJECT_NAME} | ยืนยันการสั่งซื้อ"
#: core/utils/emailing.py:109 #: core/utils/emailing.py:105
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order delivered" msgid "{config.PROJECT_NAME} | order delivered"
msgstr "{config.PROJECT_NAME} | จัดส่งเรียบร้อย" msgstr "{config.PROJECT_NAME} | จัดส่งเรียบร้อย"
#: core/utils/emailing.py:197 #: core/utils/emailing.py:188
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | promocode granted" msgid "{config.PROJECT_NAME} | promocode granted"
msgstr "{config.PROJECT_NAME} | รหัสโปรโมชั่นได้รับแล้ว" msgstr "{config.PROJECT_NAME} | รหัสโปรโมชั่นได้รับแล้ว"
@ -2907,7 +2911,7 @@ msgstr ""
" และจัดการวัตถุข้อเสนอแนะที่เข้าถึงได้บนพื้นฐานของสิทธิ์ มันขยายคลาสพื้นฐาน " " และจัดการวัตถุข้อเสนอแนะที่เข้าถึงได้บนพื้นฐานของสิทธิ์ มันขยายคลาสพื้นฐาน "
"`EvibesViewSet` และใช้ระบบกรองของ Django สำหรับการสืบค้นข้อมูล" "`EvibesViewSet` และใช้ระบบกรองของ Django สำหรับการสืบค้นข้อมูล"
#: core/viewsets.py:593 #: core/viewsets.py:594
msgid "" msgid ""
"ViewSet for managing orders and related operations. This class provides " "ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes " "functionality to retrieve, modify, and manage order objects. It includes "
@ -2925,7 +2929,7 @@ msgstr ""
"และการดึงคำสั่งซื้อที่รอดำเนินการของผู้ใช้ที่เข้าสู่ระบบปัจจุบัน ViewSet " "และการดึงคำสั่งซื้อที่รอดำเนินการของผู้ใช้ที่เข้าสู่ระบบปัจจุบัน ViewSet "
"ใช้ตัวแปลงข้อมูลหลายแบบตามการกระทำที่เฉพาะเจาะจงและบังคับใช้สิทธิ์การเข้าถึงอย่างเหมาะสมขณะโต้ตอบกับข้อมูลคำสั่งซื้อ" "ใช้ตัวแปลงข้อมูลหลายแบบตามการกระทำที่เฉพาะเจาะจงและบังคับใช้สิทธิ์การเข้าถึงอย่างเหมาะสมขณะโต้ตอบกับข้อมูลคำสั่งซื้อ"
#: core/viewsets.py:782 #: core/viewsets.py:784
msgid "" msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables " "Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It " "CRUD operations and custom actions specific to the OrderProduct model. It "
@ -2940,26 +2944,26 @@ msgstr ""
"นอกจากนี้ยังมีรายละเอียดการดำเนินการสำหรับการจัดการข้อเสนอแนะเกี่ยวกับอินสแตนซ์ของ" "นอกจากนี้ยังมีรายละเอียดการดำเนินการสำหรับการจัดการข้อเสนอแนะเกี่ยวกับอินสแตนซ์ของ"
" OrderProduct" " OrderProduct"
#: core/viewsets.py:833 #: core/viewsets.py:835
msgid "Manages operations related to Product images in the application. " msgid "Manages operations related to Product images in the application. "
msgstr "จัดการการดำเนินงานที่เกี่ยวข้องกับภาพผลิตภัณฑ์ในแอปพลิเคชัน" msgstr "จัดการการดำเนินงานที่เกี่ยวข้องกับภาพผลิตภัณฑ์ในแอปพลิเคชัน"
#: core/viewsets.py:845 #: core/viewsets.py:847
msgid "" msgid ""
"Manages the retrieval and handling of PromoCode instances through various " "Manages the retrieval and handling of PromoCode instances through various "
"API actions." "API actions."
msgstr "" msgstr ""
"จัดการการดึงและการจัดการของตัวอย่าง PromoCode ผ่านการกระทำของ API ต่าง ๆ" "จัดการการดึงและการจัดการของตัวอย่าง PromoCode ผ่านการกระทำของ API ต่าง ๆ"
#: core/viewsets.py:866 #: core/viewsets.py:868
msgid "Represents a view set for managing promotions. " msgid "Represents a view set for managing promotions. "
msgstr "แสดงมุมมองที่ตั้งค่าไว้สำหรับการจัดการโปรโมชั่น" msgstr "แสดงมุมมองที่ตั้งค่าไว้สำหรับการจัดการโปรโมชั่น"
#: core/viewsets.py:878 #: core/viewsets.py:880
msgid "Handles operations related to Stock data in the system." msgid "Handles operations related to Stock data in the system."
msgstr "จัดการการดำเนินงานที่เกี่ยวข้องกับข้อมูลสต็อกในระบบ" msgstr "จัดการการดำเนินงานที่เกี่ยวข้องกับข้อมูลสต็อกในระบบ"
#: core/viewsets.py:892 #: core/viewsets.py:894
msgid "" msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides " "ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the " "endpoints for interacting with a user's wish list, allowing for the "
@ -2977,7 +2981,7 @@ msgstr ""
"มีการตรวจสอบสิทธิ์เพื่อรับรองว่าผู้ใช้สามารถจัดการรายการที่ต้องการของตนเองเท่านั้น" "มีการตรวจสอบสิทธิ์เพื่อรับรองว่าผู้ใช้สามารถจัดการรายการที่ต้องการของตนเองเท่านั้น"
" เว้นแต่จะได้รับสิทธิ์อนุญาตอย่างชัดเจน" " เว้นแต่จะได้รับสิทธิ์อนุญาตอย่างชัดเจน"
#: core/viewsets.py:1007 #: core/viewsets.py:1009
msgid "" msgid ""
"This class provides viewset functionality for managing `Address` objects. " "This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom " "The AddressViewSet class enables CRUD operations, filtering, and custom "
@ -2991,12 +2995,12 @@ msgstr ""
"รวมถึงพฤติกรรมเฉพาะสำหรับวิธีการ HTTP ที่แตกต่างกัน การแทนที่ตัวแปลงข้อมูล " "รวมถึงพฤติกรรมเฉพาะสำหรับวิธีการ HTTP ที่แตกต่างกัน การแทนที่ตัวแปลงข้อมูล "
"และการจัดการสิทธิ์ตามบริบทของคำขอ" "และการจัดการสิทธิ์ตามบริบทของคำขอ"
#: core/viewsets.py:1074 #: core/viewsets.py:1076
#, python-brace-format #, python-brace-format
msgid "Geocoding error: {e}" msgid "Geocoding error: {e}"
msgstr "ข้อผิดพลาดในการแปลงพิกัดภูมิศาสตร์: {e}" msgstr "ข้อผิดพลาดในการแปลงพิกัดภูมิศาสตร์: {e}"
#: core/viewsets.py:1081 #: core/viewsets.py:1083
msgid "" msgid ""
"Handles operations related to Product Tags within the application. This " "Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing " "class provides functionality for retrieving, filtering, and serializing "

View file

@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: EVIBES 3.0.0\n" "Project-Id-Version: EVIBES 3.0.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-10-13 13:56+0300\n" "POT-Creation-Date: 2025-10-13 18:49+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n" "Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
"Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n" "Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n"
@ -51,82 +51,86 @@ msgstr "Değiştirilmiş"
msgid "when the object was last modified" msgid "when the object was last modified"
msgstr "Nesne en son ne zaman düzenlendi" msgstr "Nesne en son ne zaman düzenlendi"
#: core/admin.py:63 #: core/admin.py:68
msgid "translations" msgid "translations"
msgstr "Çeviriler" msgstr "Çeviriler"
#: core/admin.py:67 #: core/admin.py:72
msgid "general" msgid "general"
msgstr "Genel" msgstr "Genel"
#: core/admin.py:69 #: core/admin.py:74
msgid "relations" msgid "relations"
msgstr "İlişkiler" msgstr "İlişkiler"
#: core/admin.py:87 #: core/admin.py:76
msgid "additional info"
msgstr "EK BİLGİ"
#: core/admin.py:94
msgid "metadata" msgid "metadata"
msgstr "Metadata" msgstr "Metadata"
#: core/admin.py:94 #: core/admin.py:101
msgid "timestamps" msgid "timestamps"
msgstr "Zaman Damgaları" msgstr "Zaman Damgaları"
#: core/admin.py:109 #: core/admin.py:116
#, python-format #, python-format
msgid "activate selected %(verbose_name_plural)s" msgid "activate selected %(verbose_name_plural)s"
msgstr "Seçili %(verbose_name_plural)s'ı etkinleştirin" msgstr "Seçili %(verbose_name_plural)s'ı etkinleştirin"
#: core/admin.py:114 #: core/admin.py:121
msgid "selected items have been activated." msgid "selected items have been activated."
msgstr "Seçilen öğeler etkinleştirildi!" msgstr "Seçilen öğeler etkinleştirildi!"
#: core/admin.py:120 #: core/admin.py:127
#, python-format #, python-format
msgid "deactivate selected %(verbose_name_plural)s" msgid "deactivate selected %(verbose_name_plural)s"
msgstr "Seçili %(verbose_name_plural)s'ı devre dışı bırak" msgstr "Seçili %(verbose_name_plural)s'ı devre dışı bırak"
#: core/admin.py:125 #: core/admin.py:132
msgid "selected items have been deactivated." msgid "selected items have been deactivated."
msgstr "Seçilen öğeler devre dışı bırakıldı!" msgstr "Seçilen öğeler devre dışı bırakıldı!"
#: core/admin.py:137 core/graphene/object_types.py:609 #: core/admin.py:144 core/graphene/object_types.py:609
#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 #: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717
msgid "attribute value" msgid "attribute value"
msgstr "Öznitelik Değeri" msgstr "Öznitelik Değeri"
#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:718 #: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718
msgid "attribute values" msgid "attribute values"
msgstr "Öznitelik Değerleri" msgstr "Öznitelik Değerleri"
#: core/admin.py:146 #: core/admin.py:153
msgid "image" msgid "image"
msgstr "Resim" msgstr "Resim"
#: core/admin.py:147 core/graphene/object_types.py:501 #: core/admin.py:154 core/graphene/object_types.py:501
msgid "images" msgid "images"
msgstr "Görüntüler" msgstr "Görüntüler"
#: core/admin.py:155 core/models.py:467 #: core/admin.py:162 core/models.py:467
msgid "stock" msgid "stock"
msgstr "Stok" msgstr "Stok"
#: core/admin.py:156 core/graphene/object_types.py:663 #: core/admin.py:163 core/graphene/object_types.py:663
msgid "stocks" msgid "stocks"
msgstr "Stoklar" msgstr "Stoklar"
#: core/admin.py:166 core/models.py:1675 #: core/admin.py:173 core/models.py:1675
msgid "order product" msgid "order product"
msgstr "Ürün Siparişi" msgstr "Ürün Siparişi"
#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1676 #: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676
msgid "order products" msgid "order products"
msgstr "Sipariş Ürünleri" msgstr "Sipariş Ürünleri"
#: core/admin.py:180 core/admin.py:181 #: core/admin.py:187 core/admin.py:188
msgid "children" msgid "children"
msgstr "Çocuklar" msgstr "Çocuklar"
#: core/admin.py:566 #: core/admin.py:940
msgid "Config" msgid "Config"
msgstr "Konfigürasyon" msgstr "Konfigürasyon"
@ -743,7 +747,7 @@ msgstr "sipariş-ürün ilişkisini silme"
msgid "add or remove feedback on an orderproduct relation" msgid "add or remove feedback on an orderproduct relation"
msgstr "sipariş-ürün ilişkisine geri bildirim ekleme veya kaldırma" msgstr "sipariş-ürün ilişkisine geri bildirim ekleme veya kaldırma"
#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 #: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499
msgid "no search term provided." msgid "no search term provided."
msgstr "Arama terimi belirtilmemiştir." msgstr "Arama terimi belirtilmemiştir."
@ -919,7 +923,7 @@ msgstr ""
" dışlayan bilgiler!" " dışlayan bilgiler!"
#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 #: core/graphene/mutations.py:229 core/graphene/mutations.py:486
#: core/graphene/mutations.py:527 core/viewsets.py:679 #: core/graphene/mutations.py:527 core/viewsets.py:680
msgid "wrong type came from order.buy() method: {type(instance)!s}" msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr "order.buy() metodundan yanlış tip geldi: {type(instance)!s}" msgstr "order.buy() metodundan yanlış tip geldi: {type(instance)!s}"
@ -997,7 +1001,7 @@ msgstr "Kullanıcı tarafından sağlanan orijinal adres dizesi"
#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 #: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870
#: core/models.py:1289 core/models.py:1318 core/models.py:1343 #: core/models.py:1289 core/models.py:1318 core/models.py:1343
#: core/viewsets.py:682 #: core/viewsets.py:683
#, python-brace-format #, python-brace-format
msgid "{name} does not exist: {uuid}" msgid "{name} does not exist: {uuid}"
msgstr "{name} mevcut değil: {uuid}!" msgstr "{name} mevcut değil: {uuid}!"
@ -2695,22 +2699,22 @@ msgstr "Hem veri hem de zaman aşımı gereklidir"
msgid "invalid timeout value, it must be between 0 and 216000 seconds" 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" msgstr "Geçersiz zaman aşımı değeri, 0 ile 216000 saniye arasında olmalıdır"
#: core/utils/emailing.py:25 #: core/utils/emailing.py:27
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | contact us initiated" msgid "{config.PROJECT_NAME} | contact us initiated"
msgstr "{config.PROJECT_NAME} | bi̇zi̇mle i̇leti̇şi̇me geçi̇n" msgstr "{config.PROJECT_NAME} | bi̇zi̇mle i̇leti̇şi̇me geçi̇n"
#: core/utils/emailing.py:74 #: core/utils/emailing.py:73
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order confirmation" msgid "{config.PROJECT_NAME} | order confirmation"
msgstr "{config.PROJECT_NAME} | Sipariş Onayı" msgstr "{config.PROJECT_NAME} | Sipariş Onayı"
#: core/utils/emailing.py:109 #: core/utils/emailing.py:105
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order delivered" msgid "{config.PROJECT_NAME} | order delivered"
msgstr "{config.PROJECT_NAME} | Sipariş Teslim Edildi" msgstr "{config.PROJECT_NAME} | Sipariş Teslim Edildi"
#: core/utils/emailing.py:197 #: core/utils/emailing.py:188
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | promocode granted" msgid "{config.PROJECT_NAME} | promocode granted"
msgstr "{config.PROJECT_NAME} | verilen promosyon kodu" msgstr "{config.PROJECT_NAME} | verilen promosyon kodu"
@ -2960,7 +2964,7 @@ msgstr ""
"genişletir ve verileri sorgulamak için Django'nun filtreleme sistemini " "genişletir ve verileri sorgulamak için Django'nun filtreleme sistemini "
"kullanır." "kullanır."
#: core/viewsets.py:593 #: core/viewsets.py:594
msgid "" msgid ""
"ViewSet for managing orders and related operations. This class provides " "ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes " "functionality to retrieve, modify, and manage order objects. It includes "
@ -2979,7 +2983,7 @@ msgstr ""
"birden fazla serileştirici kullanır ve sipariş verileriyle etkileşime " "birden fazla serileştirici kullanır ve sipariş verileriyle etkileşime "
"girerken izinleri buna göre zorlar." "girerken izinleri buna göre zorlar."
#: core/viewsets.py:782 #: core/viewsets.py:784
msgid "" msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables " "Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It " "CRUD operations and custom actions specific to the OrderProduct model. It "
@ -2993,11 +2997,11 @@ msgstr ""
" serileştirici değiştirme içerir. Ayrıca, OrderProduct örnekleriyle ilgili " " 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" "geri bildirimleri işlemek için ayrıntılı bir eylem sağlar"
#: core/viewsets.py:833 #: core/viewsets.py:835
msgid "Manages operations related to Product images in the application. " msgid "Manages operations related to Product images in the application. "
msgstr "Uygulamadaki Ürün görselleri ile ilgili işlemleri yönetir." msgstr "Uygulamadaki Ürün görselleri ile ilgili işlemleri yönetir."
#: core/viewsets.py:845 #: core/viewsets.py:847
msgid "" msgid ""
"Manages the retrieval and handling of PromoCode instances through various " "Manages the retrieval and handling of PromoCode instances through various "
"API actions." "API actions."
@ -3005,15 +3009,15 @@ msgstr ""
"Çeşitli API eylemleri aracılığıyla PromoCode örneklerinin alınmasını ve " "Çeşitli API eylemleri aracılığıyla PromoCode örneklerinin alınmasını ve "
"işlenmesini yönetir." "işlenmesini yönetir."
#: core/viewsets.py:866 #: core/viewsets.py:868
msgid "Represents a view set for managing promotions. " msgid "Represents a view set for managing promotions. "
msgstr "Promosyonları yönetmek için bir görünüm kümesini temsil eder." msgstr "Promosyonları yönetmek için bir görünüm kümesini temsil eder."
#: core/viewsets.py:878 #: core/viewsets.py:880
msgid "Handles operations related to Stock data in the system." msgid "Handles operations related to Stock data in the system."
msgstr "Sistemdeki Stok verileri ile ilgili işlemleri yürütür." msgstr "Sistemdeki Stok verileri ile ilgili işlemleri yürütür."
#: core/viewsets.py:892 #: core/viewsets.py:894
msgid "" msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides " "ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the " "endpoints for interacting with a user's wish list, allowing for the "
@ -3031,7 +3035,7 @@ msgstr ""
"verilmediği sürece kullanıcıların yalnızca kendi istek listelerini " "verilmediği sürece kullanıcıların yalnızca kendi istek listelerini "
"yönetebilmelerini sağlamak için entegre edilmiştir." "yönetebilmelerini sağlamak için entegre edilmiştir."
#: core/viewsets.py:1007 #: core/viewsets.py:1009
msgid "" msgid ""
"This class provides viewset functionality for managing `Address` objects. " "This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom " "The AddressViewSet class enables CRUD operations, filtering, and custom "
@ -3045,12 +3049,12 @@ msgstr ""
"serileştirici geçersiz kılmaları ve istek bağlamına dayalı izin işleme için " "serileştirici geçersiz kılmaları ve istek bağlamına dayalı izin işleme için "
"özel davranışlar içerir." "özel davranışlar içerir."
#: core/viewsets.py:1074 #: core/viewsets.py:1076
#, python-brace-format #, python-brace-format
msgid "Geocoding error: {e}" msgid "Geocoding error: {e}"
msgstr "Coğrafi kodlama hatası: {e}" msgstr "Coğrafi kodlama hatası: {e}"
#: core/viewsets.py:1081 #: core/viewsets.py:1083
msgid "" msgid ""
"Handles operations related to Product Tags within the application. This " "Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing " "class provides functionality for retrieving, filtering, and serializing "

View file

@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: EVIBES 3.0.0\n" "Project-Id-Version: EVIBES 3.0.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-10-13 13:56+0300\n" "POT-Creation-Date: 2025-10-13 18:49+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n" "Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
"Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n" "Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n"
@ -51,82 +51,86 @@ msgstr "Đã sửa đổi"
msgid "when the object was last modified" msgid "when the object was last modified"
msgstr "Khi đối tượng được chỉnh sửa lần cuối" msgstr "Khi đối tượng được chỉnh sửa lần cuối"
#: core/admin.py:63 #: core/admin.py:68
msgid "translations" msgid "translations"
msgstr "Dịch thuật" msgstr "Dịch thuật"
#: core/admin.py:67 #: core/admin.py:72
msgid "general" msgid "general"
msgstr "Tổng quát" msgstr "Tổng quát"
#: core/admin.py:69 #: core/admin.py:74
msgid "relations" msgid "relations"
msgstr "Quan hệ" msgstr "Quan hệ"
#: core/admin.py:87 #: core/admin.py:76
msgid "additional info"
msgstr "Thông tin bổ sung"
#: core/admin.py:94
msgid "metadata" msgid "metadata"
msgstr "Siêu dữ liệu" msgstr "Siêu dữ liệu"
#: core/admin.py:94 #: core/admin.py:101
msgid "timestamps" msgid "timestamps"
msgstr "Dấu thời gian" msgstr "Dấu thời gian"
#: core/admin.py:109 #: core/admin.py:116
#, python-format #, python-format
msgid "activate selected %(verbose_name_plural)s" msgid "activate selected %(verbose_name_plural)s"
msgstr "Kích hoạt %(verbose_name_plural)s đã chọn" msgstr "Kích hoạt %(verbose_name_plural)s đã chọn"
#: core/admin.py:114 #: core/admin.py:121
msgid "selected items have been activated." msgid "selected items have been activated."
msgstr "Các mục đã được chọn đã được kích hoạt!" msgstr "Các mục đã được chọn đã được kích hoạt!"
#: core/admin.py:120 #: core/admin.py:127
#, python-format #, python-format
msgid "deactivate selected %(verbose_name_plural)s" msgid "deactivate selected %(verbose_name_plural)s"
msgstr "Vô hiệu hóa các mục đã chọn %(verbose_name_plural)s" msgstr "Vô hiệu hóa các mục đã chọn %(verbose_name_plural)s"
#: core/admin.py:125 #: core/admin.py:132
msgid "selected items have been deactivated." msgid "selected items have been deactivated."
msgstr "Các mục đã chọn đã bị vô hiệu hóa!" msgstr "Các mục đã chọn đã bị vô hiệu hóa!"
#: core/admin.py:137 core/graphene/object_types.py:609 #: core/admin.py:144 core/graphene/object_types.py:609
#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 #: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717
msgid "attribute value" msgid "attribute value"
msgstr "Giá trị thuộc tính" msgstr "Giá trị thuộc tính"
#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:718 #: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718
msgid "attribute values" msgid "attribute values"
msgstr "Giá trị thuộc tính" msgstr "Giá trị thuộc tính"
#: core/admin.py:146 #: core/admin.py:153
msgid "image" msgid "image"
msgstr "Hình ảnh" msgstr "Hình ảnh"
#: core/admin.py:147 core/graphene/object_types.py:501 #: core/admin.py:154 core/graphene/object_types.py:501
msgid "images" msgid "images"
msgstr "Hình ảnh" msgstr "Hình ảnh"
#: core/admin.py:155 core/models.py:467 #: core/admin.py:162 core/models.py:467
msgid "stock" msgid "stock"
msgstr "Cổ phiếu" msgstr "Cổ phiếu"
#: core/admin.py:156 core/graphene/object_types.py:663 #: core/admin.py:163 core/graphene/object_types.py:663
msgid "stocks" msgid "stocks"
msgstr "Cổ phiếu" msgstr "Cổ phiếu"
#: core/admin.py:166 core/models.py:1675 #: core/admin.py:173 core/models.py:1675
msgid "order product" msgid "order product"
msgstr "Đặt hàng sản phẩm" msgstr "Đặt hàng sản phẩm"
#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1676 #: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676
msgid "order products" msgid "order products"
msgstr "Đặt hàng sản phẩm" msgstr "Đặt hàng sản phẩm"
#: core/admin.py:180 core/admin.py:181 #: core/admin.py:187 core/admin.py:188
msgid "children" msgid "children"
msgstr "Trẻ em" msgstr "Trẻ em"
#: core/admin.py:566 #: core/admin.py:940
msgid "Config" msgid "Config"
msgstr "Cấu hình" msgstr "Cấu hình"
@ -749,7 +753,7 @@ msgstr "Xóa mối quan hệ giữa đơn hàng và sản phẩm"
msgid "add or remove feedback on an orderproduct relation" msgid "add or remove feedback on an orderproduct 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" 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"
#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 #: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499
msgid "no search term provided." msgid "no search term provided."
msgstr "Không có từ khóa tìm kiếm được cung cấp." msgstr "Không có từ khóa tìm kiếm được cung cấp."
@ -925,7 +929,7 @@ msgstr ""
"trường này là tương hỗ!" "trường này là tương hỗ!"
#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 #: core/graphene/mutations.py:229 core/graphene/mutations.py:486
#: core/graphene/mutations.py:527 core/viewsets.py:679 #: core/graphene/mutations.py:527 core/viewsets.py:680
msgid "wrong type came from order.buy() method: {type(instance)!s}" msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr "" msgstr ""
"Loại sai đã được trả về từ phương thức order.buy(): {type(instance)!s}" "Loại sai đã được trả về từ phương thức order.buy(): {type(instance)!s}"
@ -1005,7 +1009,7 @@ msgstr "Dòng địa chỉ gốc do người dùng cung cấp"
#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 #: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870
#: core/models.py:1289 core/models.py:1318 core/models.py:1343 #: core/models.py:1289 core/models.py:1318 core/models.py:1343
#: core/viewsets.py:682 #: core/viewsets.py:683
#, python-brace-format #, python-brace-format
msgid "{name} does not exist: {uuid}" msgid "{name} does not exist: {uuid}"
msgstr "{name} không tồn tại: {uuid}!" msgstr "{name} không tồn tại: {uuid}!"
@ -2708,22 +2712,22 @@ msgstr ""
"Giá trị thời gian chờ không hợp lệ, nó phải nằm trong khoảng từ 0 đến " "Giá trị thời gian chờ không hợp lệ, nó phải nằm trong khoảng từ 0 đến "
"216.000 giây." "216.000 giây."
#: core/utils/emailing.py:25 #: core/utils/emailing.py:27
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | contact us initiated" msgid "{config.PROJECT_NAME} | contact us initiated"
msgstr "{config.PROJECT_NAME} | Liên hệ với chúng tôi đã được khởi tạo" msgstr "{config.PROJECT_NAME} | Liên hệ với chúng tôi đã được khởi tạo"
#: core/utils/emailing.py:74 #: core/utils/emailing.py:73
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order confirmation" msgid "{config.PROJECT_NAME} | order confirmation"
msgstr "{config.PROJECT_NAME} | Xác nhận đơn hàng" msgstr "{config.PROJECT_NAME} | Xác nhận đơn hàng"
#: core/utils/emailing.py:109 #: core/utils/emailing.py:105
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order delivered" msgid "{config.PROJECT_NAME} | order delivered"
msgstr "{config.PROJECT_NAME} | Đơn hàng đã được giao" msgstr "{config.PROJECT_NAME} | Đơn hàng đã được giao"
#: core/utils/emailing.py:197 #: core/utils/emailing.py:188
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | promocode granted" msgid "{config.PROJECT_NAME} | promocode granted"
msgstr "{config.PROJECT_NAME} | mã khuyến mãi được cấp" msgstr "{config.PROJECT_NAME} | mã khuyến mãi được cấp"
@ -2975,7 +2979,7 @@ msgstr ""
"với các đối tượng Feedback có thể truy cập. Nó kế thừa từ lớp cơ sở " "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." "`EvibesViewSet` và sử dụng hệ thống lọc của Django để truy vấn dữ liệu."
#: core/viewsets.py:593 #: core/viewsets.py:594
msgid "" msgid ""
"ViewSet for managing orders and related operations. This class provides " "ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes " "functionality to retrieve, modify, and manage order objects. It includes "
@ -2994,7 +2998,7 @@ msgstr ""
"serializer khác nhau tùy thuộc vào hành động cụ thể đang được thực hiện và " "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." "áp dụng quyền truy cập tương ứng khi tương tác với dữ liệu đơn hàng."
#: core/viewsets.py:782 #: core/viewsets.py:784
msgid "" msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables " "Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It " "CRUD operations and custom actions specific to the OrderProduct model. It "
@ -3009,11 +3013,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ử " "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." "lý phản hồi cho các thực thể OrderProduct."
#: core/viewsets.py:833 #: core/viewsets.py:835
msgid "Manages operations related to Product images in the application. " 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." msgstr "Quản lý các hoạt động liên quan đến hình ảnh sản phẩm trong ứng dụng."
#: core/viewsets.py:845 #: core/viewsets.py:847
msgid "" msgid ""
"Manages the retrieval and handling of PromoCode instances through various " "Manages the retrieval and handling of PromoCode instances through various "
"API actions." "API actions."
@ -3021,15 +3025,15 @@ 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 " "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." "động API khác nhau."
#: core/viewsets.py:866 #: core/viewsets.py:868
msgid "Represents a view set for managing promotions. " 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." msgstr "Đại diện cho một bộ xem để quản lý các chương trình khuyến mãi."
#: core/viewsets.py:878 #: core/viewsets.py:880
msgid "Handles operations related to Stock data in the system." 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." msgstr "Quản lý các hoạt động liên quan đến dữ liệu kho trong hệ thống."
#: core/viewsets.py:892 #: core/viewsets.py:894
msgid "" msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides " "ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the " "endpoints for interacting with a user's wish list, allowing for the "
@ -3048,7 +3052,7 @@ msgstr ""
" 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 " " 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." "trừ khi được cấp quyền rõ ràng."
#: core/viewsets.py:1007 #: core/viewsets.py:1009
msgid "" msgid ""
"This class provides viewset functionality for managing `Address` objects. " "This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom " "The AddressViewSet class enables CRUD operations, filtering, and custom "
@ -3062,12 +3066,12 @@ msgstr ""
"chuyên biệt cho các phương thức HTTP khác nhau, các tùy chỉnh serializer và " "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." "xử lý quyền truy cập dựa trên bối cảnh yêu cầu."
#: core/viewsets.py:1074 #: core/viewsets.py:1076
#, python-brace-format #, python-brace-format
msgid "Geocoding error: {e}" msgid "Geocoding error: {e}"
msgstr "Lỗi địa chỉ địa lý: {e}" msgstr "Lỗi địa chỉ địa lý: {e}"
#: core/viewsets.py:1081 #: core/viewsets.py:1083
msgid "" msgid ""
"Handles operations related to Product Tags within the application. This " "Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing " "class provides functionality for retrieving, filtering, and serializing "

View file

@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: EVIBES 3.0.0\n" "Project-Id-Version: EVIBES 3.0.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-10-13 13:56+0300\n" "POT-Creation-Date: 2025-10-13 18:49+0300\n"
"PO-Revision-Date: 2025-01-30 03:27+0000\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n"
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n" "Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
"Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n" "Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n"
@ -47,82 +47,86 @@ msgstr "改装"
msgid "when the object was last modified" msgid "when the object was last modified"
msgstr "对象最后一次编辑的时间" msgstr "对象最后一次编辑的时间"
#: core/admin.py:63 #: core/admin.py:68
msgid "translations" msgid "translations"
msgstr "翻译" msgstr "翻译"
#: core/admin.py:67 #: core/admin.py:72
msgid "general" msgid "general"
msgstr "一般情况" msgstr "一般情况"
#: core/admin.py:69 #: core/admin.py:74
msgid "relations" msgid "relations"
msgstr "关系" msgstr "关系"
#: core/admin.py:87 #: core/admin.py:76
msgid "additional info"
msgstr "其他信息"
#: core/admin.py:94
msgid "metadata" msgid "metadata"
msgstr "元数据" msgstr "元数据"
#: core/admin.py:94 #: core/admin.py:101
msgid "timestamps" msgid "timestamps"
msgstr "时间戳" msgstr "时间戳"
#: core/admin.py:109 #: core/admin.py:116
#, python-format #, python-format
msgid "activate selected %(verbose_name_plural)s" msgid "activate selected %(verbose_name_plural)s"
msgstr "激活选定的 %(verbose_name_plural)s" msgstr "激活选定的 %(verbose_name_plural)s"
#: core/admin.py:114 #: core/admin.py:121
msgid "selected items have been activated." msgid "selected items have been activated."
msgstr "所选项目已激活!" msgstr "所选项目已激活!"
#: core/admin.py:120 #: core/admin.py:127
#, python-format #, python-format
msgid "deactivate selected %(verbose_name_plural)s" msgid "deactivate selected %(verbose_name_plural)s"
msgstr "停用选定的 %(verbose_name_plural)s" msgstr "停用选定的 %(verbose_name_plural)s"
#: core/admin.py:125 #: core/admin.py:132
msgid "selected items have been deactivated." msgid "selected items have been deactivated."
msgstr "选定项目已停用!" msgstr "选定项目已停用!"
#: core/admin.py:137 core/graphene/object_types.py:609 #: core/admin.py:144 core/graphene/object_types.py:609
#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 #: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717
msgid "attribute value" msgid "attribute value"
msgstr "属性值" msgstr "属性值"
#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:718 #: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718
msgid "attribute values" msgid "attribute values"
msgstr "属性值" msgstr "属性值"
#: core/admin.py:146 #: core/admin.py:153
msgid "image" msgid "image"
msgstr "图片" msgstr "图片"
#: core/admin.py:147 core/graphene/object_types.py:501 #: core/admin.py:154 core/graphene/object_types.py:501
msgid "images" msgid "images"
msgstr "图片" msgstr "图片"
#: core/admin.py:155 core/models.py:467 #: core/admin.py:162 core/models.py:467
msgid "stock" msgid "stock"
msgstr "库存" msgstr "库存"
#: core/admin.py:156 core/graphene/object_types.py:663 #: core/admin.py:163 core/graphene/object_types.py:663
msgid "stocks" msgid "stocks"
msgstr "股票" msgstr "股票"
#: core/admin.py:166 core/models.py:1675 #: core/admin.py:173 core/models.py:1675
msgid "order product" msgid "order product"
msgstr "订购产品" msgstr "订购产品"
#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1676 #: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676
msgid "order products" msgid "order products"
msgstr "订购产品" msgstr "订购产品"
#: core/admin.py:180 core/admin.py:181 #: core/admin.py:187 core/admin.py:188
msgid "children" msgid "children"
msgstr "儿童" msgstr "儿童"
#: core/admin.py:566 #: core/admin.py:940
msgid "Config" msgid "Config"
msgstr "配置" msgstr "配置"
@ -687,7 +691,7 @@ msgstr "删除订单-产品关系"
msgid "add or remove feedback on an orderproduct relation" msgid "add or remove feedback on an orderproduct relation"
msgstr "添加或删除订单与产品关系中的反馈信息" msgstr "添加或删除订单与产品关系中的反馈信息"
#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 #: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499
msgid "no search term provided." msgid "no search term provided."
msgstr "未提供搜索条件。" msgstr "未提供搜索条件。"
@ -860,7 +864,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive"
msgstr "请提供 order_uuid 或 order_hr_id互斥" msgstr "请提供 order_uuid 或 order_hr_id互斥"
#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 #: core/graphene/mutations.py:229 core/graphene/mutations.py:486
#: core/graphene/mutations.py:527 core/viewsets.py:679 #: core/graphene/mutations.py:527 core/viewsets.py:680
msgid "wrong type came from order.buy() method: {type(instance)!s}" msgid "wrong type came from order.buy() method: {type(instance)!s}"
msgstr "order.buy() 方法中的类型有误:{type(instance)!s}" msgstr "order.buy() 方法中的类型有误:{type(instance)!s}"
@ -936,7 +940,7 @@ msgstr "用户提供的原始地址字符串"
#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 #: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870
#: core/models.py:1289 core/models.py:1318 core/models.py:1343 #: core/models.py:1289 core/models.py:1318 core/models.py:1343
#: core/viewsets.py:682 #: core/viewsets.py:683
#, python-brace-format #, python-brace-format
msgid "{name} does not exist: {uuid}" msgid "{name} does not exist: {uuid}"
msgstr "{name} 不存在:{uuid}" msgstr "{name} 不存在:{uuid}"
@ -2502,22 +2506,22 @@ msgstr "需要数据和超时"
msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgid "invalid timeout value, it must be between 0 and 216000 seconds"
msgstr "超时值无效,必须介于 0 和 216000 秒之间" msgstr "超时值无效,必须介于 0 和 216000 秒之间"
#: core/utils/emailing.py:25 #: core/utils/emailing.py:27
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | contact us initiated" msgid "{config.PROJECT_NAME} | contact us initiated"
msgstr "{config.PROJECT_NAME}| 联系我们" msgstr "{config.PROJECT_NAME}| 联系我们"
#: core/utils/emailing.py:74 #: core/utils/emailing.py:73
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order confirmation" msgid "{config.PROJECT_NAME} | order confirmation"
msgstr "{config.PROJECT_NAME}| 订单确认" msgstr "{config.PROJECT_NAME}| 订单确认"
#: core/utils/emailing.py:109 #: core/utils/emailing.py:105
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | order delivered" msgid "{config.PROJECT_NAME} | order delivered"
msgstr "{config.PROJECT_NAME} | 订单已送达" msgstr "{config.PROJECT_NAME} | 订单已送达"
#: core/utils/emailing.py:197 #: core/utils/emailing.py:188
#, python-brace-format #, python-brace-format
msgid "{config.PROJECT_NAME} | promocode granted" msgid "{config.PROJECT_NAME} | promocode granted"
msgstr "{config.PROJECT_NAME} | 授予的促销代码" msgstr "{config.PROJECT_NAME} | 授予的促销代码"
@ -2721,7 +2725,7 @@ msgstr ""
"处理反馈对象的视图集的表示。该类管理与反馈对象相关的操作,包括列出、筛选和检索详细信息。该视图集的目的是为不同的操作提供不同的序列化器,并对可访问的反馈对象实施基于权限的处理。它扩展了基本的" "处理反馈对象的视图集的表示。该类管理与反馈对象相关的操作,包括列出、筛选和检索详细信息。该视图集的目的是为不同的操作提供不同的序列化器,并对可访问的反馈对象实施基于权限的处理。它扩展了基本的"
" `EvibesViewSet` 并使用 Django 的过滤系统来查询数据。" " `EvibesViewSet` 并使用 Django 的过滤系统来查询数据。"
#: core/viewsets.py:593 #: core/viewsets.py:594
msgid "" msgid ""
"ViewSet for managing orders and related operations. This class provides " "ViewSet for managing orders and related operations. This class provides "
"functionality to retrieve, modify, and manage order objects. It includes " "functionality to retrieve, modify, and manage order objects. It includes "
@ -2735,7 +2739,7 @@ msgstr ""
"ViewSet。该类提供了检索、修改和管理订单对象的功能。它包括用于处理订单操作的各种端点如添加或删除产品、为注册用户和未注册用户执行购买操作以及检索当前已验证用户的待处理订单。ViewSet" "ViewSet。该类提供了检索、修改和管理订单对象的功能。它包括用于处理订单操作的各种端点如添加或删除产品、为注册用户和未注册用户执行购买操作以及检索当前已验证用户的待处理订单。ViewSet"
" 根据正在执行的特定操作使用多个序列化器,并在与订单数据交互时执行相应的权限。" " 根据正在执行的特定操作使用多个序列化器,并在与订单数据交互时执行相应的权限。"
#: core/viewsets.py:782 #: core/viewsets.py:784
msgid "" msgid ""
"Provides a viewset for managing OrderProduct entities. This viewset enables " "Provides a viewset for managing OrderProduct entities. This viewset enables "
"CRUD operations and custom actions specific to the OrderProduct model. It " "CRUD operations and custom actions specific to the OrderProduct model. It "
@ -2747,25 +2751,25 @@ msgstr ""
"模型的自定义操作。它包括过滤、权限检查和根据请求的操作切换序列化器。此外,它还提供了一个详细的操作,用于处理有关 OrderProduct " "模型的自定义操作。它包括过滤、权限检查和根据请求的操作切换序列化器。此外,它还提供了一个详细的操作,用于处理有关 OrderProduct "
"实例的反馈信息" "实例的反馈信息"
#: core/viewsets.py:833 #: core/viewsets.py:835
msgid "Manages operations related to Product images in the application. " msgid "Manages operations related to Product images in the application. "
msgstr "管理应用程序中与产品图像相关的操作。" msgstr "管理应用程序中与产品图像相关的操作。"
#: core/viewsets.py:845 #: core/viewsets.py:847
msgid "" msgid ""
"Manages the retrieval and handling of PromoCode instances through various " "Manages the retrieval and handling of PromoCode instances through various "
"API actions." "API actions."
msgstr "通过各种 API 操作管理 PromoCode 实例的检索和处理。" msgstr "通过各种 API 操作管理 PromoCode 实例的检索和处理。"
#: core/viewsets.py:866 #: core/viewsets.py:868
msgid "Represents a view set for managing promotions. " msgid "Represents a view set for managing promotions. "
msgstr "代表用于管理促销活动的视图集。" msgstr "代表用于管理促销活动的视图集。"
#: core/viewsets.py:878 #: core/viewsets.py:880
msgid "Handles operations related to Stock data in the system." msgid "Handles operations related to Stock data in the system."
msgstr "处理系统中与库存数据有关的操作。" msgstr "处理系统中与库存数据有关的操作。"
#: core/viewsets.py:892 #: core/viewsets.py:894
msgid "" msgid ""
"ViewSet for managing Wishlist operations. The WishlistViewSet provides " "ViewSet for managing Wishlist operations. The WishlistViewSet provides "
"endpoints for interacting with a user's wish list, allowing for the " "endpoints for interacting with a user's wish list, allowing for the "
@ -2778,7 +2782,7 @@ msgstr ""
"用于管理愿望清单操作的 ViewSet。WishlistViewSet 提供了与用户愿望清单交互的端点,允许检索、修改和定制愿望清单中的产品。该 " "用于管理愿望清单操作的 ViewSet。WishlistViewSet 提供了与用户愿望清单交互的端点,允许检索、修改和定制愿望清单中的产品。该 "
"ViewSet 支持添加、删除和批量操作愿望清单产品等功能。此外,还集成了权限检查功能,以确保用户只能管理自己的愿望清单,除非获得明确的权限。" "ViewSet 支持添加、删除和批量操作愿望清单产品等功能。此外,还集成了权限检查功能,以确保用户只能管理自己的愿望清单,除非获得明确的权限。"
#: core/viewsets.py:1007 #: core/viewsets.py:1009
msgid "" msgid ""
"This class provides viewset functionality for managing `Address` objects. " "This class provides viewset functionality for managing `Address` objects. "
"The AddressViewSet class enables CRUD operations, filtering, and custom " "The AddressViewSet class enables CRUD operations, filtering, and custom "
@ -2789,12 +2793,12 @@ msgstr ""
"该类为管理 \"地址 \"对象提供了视图集功能。AddressViewSet 类支持与地址实体相关的 CRUD 操作、过滤和自定义操作。它包括针对不同 " "该类为管理 \"地址 \"对象提供了视图集功能。AddressViewSet 类支持与地址实体相关的 CRUD 操作、过滤和自定义操作。它包括针对不同 "
"HTTP 方法的专门行为、序列化器重载以及基于请求上下文的权限处理。" "HTTP 方法的专门行为、序列化器重载以及基于请求上下文的权限处理。"
#: core/viewsets.py:1074 #: core/viewsets.py:1076
#, python-brace-format #, python-brace-format
msgid "Geocoding error: {e}" msgid "Geocoding error: {e}"
msgstr "地理编码错误:{e}" msgstr "地理编码错误:{e}"
#: core/viewsets.py:1081 #: core/viewsets.py:1083
msgid "" msgid ""
"Handles operations related to Product Tags within the application. This " "Handles operations related to Product Tags within the application. This "
"class provides functionality for retrieving, filtering, and serializing " "class provides functionality for retrieving, filtering, and serializing "

View file

@ -1,6 +1,7 @@
import os import os
import threading import threading
import time import time
from typing import Any
import redis import redis
from django.core.management.base import BaseCommand from django.core.management.base import BaseCommand
@ -11,10 +12,10 @@ from redis.exceptions import ConnectionError # noqa: A004
class Command(BaseCommand): class Command(BaseCommand):
def handle(self, *args, **options): def handle(self, *args: list[Any], **options: dict[Any, Any]) -> None:
self.stdout.write("Waiting for services...") self.stdout.write("Waiting for services...")
def wait_for_db(): def wait_for_db() -> None:
db_up = False db_up = False
while not db_up: while not db_up:
try: try:
@ -31,7 +32,7 @@ class Command(BaseCommand):
time.sleep(1) time.sleep(1)
self.stdout.write(self.style.SUCCESS("Database available!")) self.stdout.write(self.style.SUCCESS("Database available!"))
def wait_for_redis(): def wait_for_redis() -> None:
redis_up = False redis_up = False
while not redis_up: while not redis_up:
try: try:

View file

@ -1,7 +1,9 @@
import contextlib import contextlib
import os import os
import re import re
from argparse import ArgumentParser
from tempfile import NamedTemporaryFile from tempfile import NamedTemporaryFile
from typing import Any
import polib import polib
from django.apps import apps from django.apps import apps
@ -64,7 +66,7 @@ def load_po_sanitized(path: str) -> polib.POFile:
class Command(BaseCommand): class Command(BaseCommand):
help = "Scan target-language .po files and report any placeholder mismatches, grouped by app." help = "Scan target-language .po files and report any placeholder mismatches, grouped by app."
def add_arguments(self, parser): def add_arguments(self, parser: ArgumentParser) -> None:
parser.add_argument( parser.add_argument(
"-l", "-l",
"--language", "--language",
@ -92,14 +94,14 @@ class Command(BaseCommand):
help="Root path prefix to adjust file links", help="Root path prefix to adjust file links",
) )
def handle(self, *args, **options) -> None: def handle(self, *args: list[Any], **options: dict[str, str | list[str]]) -> None:
langs: list[str] = options["target_languages"] langs: list[str] = options.get("target_languages", []) # type: ignore [assignment]
if "ALL" in langs: if "ALL" in langs:
langs = list(dict(settings.LANGUAGES).keys()) langs = list(dict(settings.LANGUAGES).keys())
apps_to_scan: set[str] = set(options["target_apps"]) apps_to_scan: set[str] = set(options["target_apps"])
if "ALL" in apps_to_scan: if "ALL" in apps_to_scan:
apps_to_scan = set(TRANSLATABLE_APPS) apps_to_scan = set(TRANSLATABLE_APPS)
root_path: str = options.get("root_path") or "/app/" root_path: str = options.get("root_path") or "/app/" # type: ignore [assignment]
configs = list(apps.get_app_configs()) configs = list(apps.get_app_configs())
# noinspection PyTypeChecker # noinspection PyTypeChecker

View file

@ -1,4 +1,5 @@
from collections import defaultdict from collections import defaultdict
from typing import Any
from django.core.management.base import BaseCommand from django.core.management.base import BaseCommand
@ -6,17 +7,16 @@ from core.models import Category, Product, Stock
class Command(BaseCommand): class Command(BaseCommand):
def handle(self, *args, **options): def handle(self, *args: list[Any], **options: dict[Any, Any]) -> None:
self.stdout.write(self.style.SUCCESS("Starting clearing unwanted data...")) self.stdout.write(self.style.SUCCESS("Starting clearing unwanted data..."))
# 1. Clean up duplicate Stock entries per product and vendor: # 1. Clean up duplicate Stock entries per product and vendor:
# Group stocks by (product, vendor) # Group stocks by (product, vendor)
stocks_by_group = defaultdict(list) stocks_by_group = defaultdict(list)
for stock in Stock.objects.all().order_by("modified"): for stock in Stock.objects.all().order_by("modified"):
key = (stock.product_id, stock.vendor) stocks_by_group[stock.product_pk].append(stock)
stocks_by_group[key].append(stock)
stock_deletions = [] stock_deletions: list[str] = []
for group in stocks_by_group.values(): for group in stocks_by_group.values():
if len(group) <= 1: if len(group) <= 1:
continue continue
@ -32,20 +32,20 @@ class Command(BaseCommand):
# Mark all stocks (except the designated one) for deletion. # Mark all stocks (except the designated one) for deletion.
for s in group: for s in group:
if s.id != record_to_keep.id: if s.uuid != record_to_keep.uuid:
stock_deletions.append(s.id) stock_deletions.append(str(s.uuid))
if stock_deletions: if stock_deletions:
Stock.objects.filter(id__in=stock_deletions).delete() Stock.objects.filter(uuid__in=stock_deletions).delete()
self.stdout.write(self.style.SUCCESS(f"Deleted {len(stock_deletions)} duplicate stock entries.")) self.stdout.write(self.style.SUCCESS(f"Deleted {len(stock_deletions)} duplicate stock entries."))
# 2. Clean up duplicate Category entries based on name (case-insensitive) # 2. Clean up duplicate Category entries based on name (case-insensitive)
category_groups = defaultdict(list) category_groups = defaultdict(list)
for cat in Category.objects.all().order_by("modified"): for cat in Category.objects.all().order_by("modified"):
key = cat.name.lower() key: str = cat.name.lower()
category_groups[key].append(cat) category_groups[key].append(cat)
categories_to_delete = [] categories_to_delete: list[str] = []
total_product_updates = 0 total_product_updates = 0
for cat_list in category_groups.values(): for cat_list in category_groups.values():
if len(cat_list) <= 1: if len(cat_list) <= 1:
@ -59,13 +59,13 @@ class Command(BaseCommand):
keep_category = max(cat_list, key=lambda c: c.modified) keep_category = max(cat_list, key=lambda c: c.modified)
for duplicate in cat_list: for duplicate in cat_list:
if duplicate.id == keep_category.id: if duplicate.uuid == keep_category.uuid:
continue continue
total_product_updates += Product.objects.filter(category=duplicate).update(category=keep_category) total_product_updates += Product.objects.filter(category=duplicate).update(category=keep_category)
categories_to_delete.append(duplicate.id) categories_to_delete.append(str(duplicate.uuid))
if categories_to_delete: if categories_to_delete:
Category.objects.filter(id__in=categories_to_delete).delete() Category.objects.filter(uuid__in=categories_to_delete).delete()
self.stdout.write( self.stdout.write(
self.style.SUCCESS( self.style.SUCCESS(
f"Replaced category for {total_product_updates} product(s) " f"Replaced category for {total_product_updates} product(s) "
@ -74,7 +74,7 @@ class Command(BaseCommand):
) )
# 3. For Products without stocks: set is_active = False. # 3. For Products without stocks: set is_active = False.
inactive_products = Product.objects.filter(stock__isnull=True) inactive_products = Product.objects.filter(stocks__isnull=True)
count_inactive = inactive_products.count() count_inactive = inactive_products.count()
if count_inactive: if count_inactive:
inactive_products.update(is_active=False) inactive_products.update(is_active=False)

View file

@ -1,13 +1,15 @@
import os import os
import re import re
from argparse import ArgumentParser
from tempfile import NamedTemporaryFile from tempfile import NamedTemporaryFile
from typing import Any
import polib import polib
import requests import requests
from django.apps import apps from django.apps import apps
from django.core.management.base import BaseCommand, CommandError from django.core.management.base import BaseCommand, CommandError
from core.management.commands import RootDirectory, DEEPL_TARGET_LANGUAGES_MAPPING, TRANSLATABLE_APPS from core.management.commands import DEEPL_TARGET_LANGUAGES_MAPPING, TRANSLATABLE_APPS, RootDirectory
# Patterns to identify placeholders # Patterns to identify placeholders
PLACEHOLDER_REGEXES = [ PLACEHOLDER_REGEXES = [
@ -23,7 +25,7 @@ def placeholderize(text: str) -> tuple[str, list[str]]:
""" """
placeholders: list[str] = [] placeholders: list[str] = []
def _repl(match: re.Match) -> str: def _repl(match: re.Match) -> str: # type: ignore [type-arg]
idx = len(placeholders) idx = len(placeholders)
placeholders.append(match.group(0)) placeholders.append(match.group(0))
return f"__PH_{idx}__" return f"__PH_{idx}__"
@ -77,7 +79,7 @@ def load_po_sanitized(path: str) -> polib.POFile | None:
class Command(BaseCommand): class Command(BaseCommand):
help = "Merge msgid/msgstr from en_GB PO into target-language POs via DeepL, preserving placeholders." help = "Merge msgid/msgstr from en_GB PO into target-language POs via DeepL, preserving placeholders."
def add_arguments(self, parser): def add_arguments(self, parser: ArgumentParser) -> None:
parser.add_argument( parser.add_argument(
"-l", "-l",
"--language", "--language",
@ -97,10 +99,10 @@ class Command(BaseCommand):
help="App label for translation, e.g. core, payments. Use ALL to translate all apps.", help="App label for translation, e.g. core, payments. Use ALL to translate all apps.",
) )
def handle(self, *args, **options) -> None: def handle(self, *args: list[Any], **options: dict[Any, Any]) -> None:
target_langs = options["target_languages"] target_langs: list[str] = options["target_languages"] # type: ignore [assignment]
if "ALL" in target_langs: if "ALL" in target_langs:
target_langs = DEEPL_TARGET_LANGUAGES_MAPPING.keys() target_langs = DEEPL_TARGET_LANGUAGES_MAPPING.keys() # type: ignore [assignment]
target_apps = set(options["target_apps"]) target_apps = set(options["target_apps"])
if "ALL" in target_apps: if "ALL" in target_apps:
target_apps = { target_apps = {
@ -152,9 +154,9 @@ class Command(BaseCommand):
default = e.msgid default = e.msgid
if readline: if readline:
def hook(): def hook() -> None:
readline.insert_text(default) # noqa: B023 readline.insert_text(default) # type: ignore [attr-defined] # noqa: B023
readline.redisplay() readline.redisplay() # type: ignore [attr-defined]
readline.set_pre_input_hook(hook) # type: ignore [attr-defined] readline.set_pre_input_hook(hook) # type: ignore [attr-defined]

View file

@ -1,3 +1,6 @@
from argparse import ArgumentParser
from typing import Any
from django.core.management.base import BaseCommand from django.core.management.base import BaseCommand
from core.models import AttributeValue, Product, ProductImage from core.models import AttributeValue, Product, ProductImage
@ -6,7 +9,7 @@ from core.models import AttributeValue, Product, ProductImage
class Command(BaseCommand): class Command(BaseCommand):
help = "Delete Product rows with no OrderProduct, in batches" help = "Delete Product rows with no OrderProduct, in batches"
def add_arguments(self, parser): def add_arguments(self, parser: ArgumentParser):
parser.add_argument( parser.add_argument(
"-s", "-s",
"--size", "--size",
@ -15,8 +18,8 @@ class Command(BaseCommand):
help="Chunk size to delete", help="Chunk size to delete",
) )
def handle(self, *args, **options): def handle(self, *args: list[Any], **options: dict[Any, Any]) -> None:
size = options["size"] size: int = options["size"] # type: ignore [assignment]
while True: while True:
batch_ids = list(Product.objects.filter(orderproduct__isnull=True).values_list("pk", flat=True)[:size]) batch_ids = list(Product.objects.filter(orderproduct__isnull=True).values_list("pk", flat=True)[:size])
if not batch_ids: if not batch_ids:

View file

@ -1,3 +1,6 @@
from argparse import ArgumentParser
from typing import Any
from django.core.management.base import BaseCommand from django.core.management.base import BaseCommand
from core.models import AttributeValue, Product, ProductImage from core.models import AttributeValue, Product, ProductImage
@ -6,7 +9,7 @@ from core.models import AttributeValue, Product, ProductImage
class Command(BaseCommand): class Command(BaseCommand):
help = "Delete Product rows with special description, in batches" help = "Delete Product rows with special description, in batches"
def add_arguments(self, parser): def add_arguments(self, parser: ArgumentParser) -> None:
parser.add_argument( parser.add_argument(
"-s", "-s",
"--size", "--size",
@ -15,8 +18,8 @@ class Command(BaseCommand):
help="Chunk size to delete", help="Chunk size to delete",
) )
def handle(self, *args, **options): def handle(self, *args: list[Any], **options: dict[Any, Any]) -> None:
size = options["size"] size: int = options["size"] # type: ignore [assignment]
while True: while True:
batch_ids = list( batch_ids = list(
Product.objects.filter(description__iexact="EVIBES_DELETED_PRODUCT").values_list("pk", flat=True)[:size] Product.objects.filter(description__iexact="EVIBES_DELETED_PRODUCT").values_list("pk", flat=True)[:size]

View file

@ -1,12 +1,14 @@
from typing import Any
from django.core.management.base import BaseCommand from django.core.management.base import BaseCommand
from core.tasks import update_products_task from core.tasks import update_products_task
class Command(BaseCommand): class Command(BaseCommand):
def handle(self, *args, **options): def handle(self, *args: list[Any], **options: dict[Any, Any]) -> None:
self.stdout.write(self.style.SUCCESS("Starting fetching products task in worker container...")) self.stdout.write(self.style.SUCCESS("Starting fetching products task in worker container..."))
update_products_task.delay() update_products_task.delay() # type: ignore [attr-defined]
self.stdout.write(self.style.SUCCESS("Started fetching products task in worker container without errors!")) self.stdout.write(self.style.SUCCESS("Started fetching products task in worker container without errors!"))

View file

@ -1,4 +1,5 @@
import logging import logging
from typing import Any
from django.core.management.base import BaseCommand from django.core.management.base import BaseCommand
@ -9,7 +10,7 @@ logger = logging.getLogger("django")
class Command(BaseCommand): class Command(BaseCommand):
def handle(self, *args, **options): def handle(self, *args: list[Any], **options: dict[Any, Any]) -> None:
self.stdout.write(self.style.SUCCESS("Starting fixing stocks' prices...")) self.stdout.write(self.style.SUCCESS("Starting fixing stocks' prices..."))
for product in Product.objects.filter(stocks__isnull=False): for product in Product.objects.filter(stocks__isnull=False):

View file

@ -1,5 +1,8 @@
from typing import Any
from django.core.management.base import BaseCommand from django.core.management.base import BaseCommand
from django.db import transaction from django.db import transaction
from django.db.models import QuerySet
from django.utils.crypto import get_random_string from django.utils.crypto import get_random_string
from core.models import Brand, Category, Product from core.models import Brand, Category, Product
@ -9,7 +12,7 @@ from core.models import Brand, Category, Product
class Command(BaseCommand): class Command(BaseCommand):
help = "Rebuild slug field for all slugified instances" help = "Rebuild slug field for all slugified instances"
def reset_em(self, queryset): def reset_em(self, queryset: QuerySet[Any]) -> None:
total = queryset.count() total = queryset.count()
self.stdout.write(f"Starting slug rebuilding for {total} {queryset.model._meta.verbose_name_plural}") self.stdout.write(f"Starting slug rebuilding for {total} {queryset.model._meta.verbose_name_plural}")
for idx, instance in enumerate(queryset.iterator(), start=1): for idx, instance in enumerate(queryset.iterator(), start=1):
@ -35,7 +38,7 @@ class Command(BaseCommand):
) )
) )
def handle(self, *args, **options): def handle(self, *args: list[Any], **options: dict[Any, Any]) -> None:
for queryset in [ for queryset in [
Brand.objects.all(), Brand.objects.all(),
Category.objects.all(), Category.objects.all(),

View file

@ -1,10 +1,12 @@
from typing import Any
from django.core.management.base import BaseCommand from django.core.management.base import BaseCommand
from core.utils.caching import set_default_cache from core.utils.caching import set_default_cache
class Command(BaseCommand): class Command(BaseCommand):
def handle(self, *args, **options): def handle(self, *args: list[Any], **options: dict[Any, Any]) -> None:
self.stdout.write(self.style.SUCCESS("Started setting default cache values...")) self.stdout.write(self.style.SUCCESS("Started setting default cache values..."))
set_default_cache() set_default_cache()

View file

@ -66,7 +66,7 @@ from payments.models import Transaction
logger = logging.getLogger("django") logger = logging.getLogger("django")
class AttributeGroup(ExportModelOperationsMixin("attribute_group"), NiceModel): # type: ignore [misc, django-manager-missing] class AttributeGroup(ExportModelOperationsMixin("attribute_group"), NiceModel): # type: ignore [misc]
__doc__ = _( # type: ignore __doc__ = _( # type: ignore
"Represents a group of attributes, which can be hierarchical." "Represents a group of attributes, which can be hierarchical."
" This class is used to manage and organize attribute groups." " This class is used to manage and organize attribute groups."
@ -94,7 +94,7 @@ class AttributeGroup(ExportModelOperationsMixin("attribute_group"), NiceModel):
unique=True, unique=True,
) )
def __str__(self): def __str__(self) -> str:
return self.name return self.name
class Meta: class Meta:
@ -102,7 +102,7 @@ class AttributeGroup(ExportModelOperationsMixin("attribute_group"), NiceModel):
verbose_name_plural = _("attribute groups") verbose_name_plural = _("attribute groups")
class Vendor(ExportModelOperationsMixin("vendor"), NiceModel): # type: ignore [misc, django-manager-missing] class Vendor(ExportModelOperationsMixin("vendor"), NiceModel): # type: ignore [misc]
__doc__ = _( # type: ignore __doc__ = _( # type: ignore
"Represents a vendor entity capable of storing information about external vendors and their interaction requirements." "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." " The Vendor class is used to define and manage information related to an external vendor."
@ -147,13 +147,13 @@ class Vendor(ExportModelOperationsMixin("vendor"), NiceModel): # type: ignore [
def __str__(self) -> str: def __str__(self) -> str:
return self.name return self.name
def save( def save( # type: ignore [override]
self, self,
*, *,
force_insert=False, force_insert: bool = False,
force_update=False, force_update: bool = False,
using=None, using: str | None = None,
update_fields=None, update_fields: list[str] | tuple[str, ...] | None = None,
update_modified: bool = True, update_modified: bool = True,
) -> None: ) -> None:
users = self.users.filter(is_active=True) users = self.users.filter(is_active=True)
@ -180,7 +180,7 @@ class Vendor(ExportModelOperationsMixin("vendor"), NiceModel): # type: ignore [
] ]
class ProductTag(ExportModelOperationsMixin("product_tag"), NiceModel): # type: ignore [misc, django-manager-missing] class ProductTag(ExportModelOperationsMixin("product_tag"), NiceModel): # type: ignore [misc]
__doc__ = _( # type: ignore __doc__ = _( # type: ignore
"Represents a product tag used for classifying or identifying products." "Represents a product tag used for classifying or identifying products."
" The ProductTag class is designed to uniquely identify and classify products through a combination" " The ProductTag class is designed to uniquely identify and classify products through a combination"
@ -212,7 +212,7 @@ class ProductTag(ExportModelOperationsMixin("product_tag"), NiceModel): # type:
verbose_name_plural = _("product tags") verbose_name_plural = _("product tags")
class CategoryTag(ExportModelOperationsMixin("category_tag"), NiceModel): # type: ignore [misc, django-manager-missing] class CategoryTag(ExportModelOperationsMixin("category_tag"), NiceModel): # type: ignore [misc]
__doc__ = _( # type: ignore __doc__ = _( # type: ignore
"Represents a category tag used for products." "Represents a category tag used for products."
" This class models a category tag that can be used to associate and classify products." " This class models a category tag that can be used to associate and classify products."
@ -335,7 +335,7 @@ class Category(ExportModelOperationsMixin("category"), NiceModel, MPTTModel): #
ordering = ["tree_id", "lft"] ordering = ["tree_id", "lft"]
class Brand(ExportModelOperationsMixin("brand"), NiceModel): # type: ignore [misc, django-manager-missing] class Brand(ExportModelOperationsMixin("brand"), NiceModel): # type: ignore [misc]
__doc__ = _( # type: ignore __doc__ = _( # type: ignore
"Represents a Brand object in the system. " "Represents a Brand object in the system. "
"This class handles information and attributes related to a brand, including its name, logos, " "This class handles information and attributes related to a brand, including its name, logos, "
@ -405,7 +405,7 @@ class Brand(ExportModelOperationsMixin("brand"), NiceModel): # type: ignore [mi
verbose_name_plural = _("brands") verbose_name_plural = _("brands")
class Stock(ExportModelOperationsMixin("stock"), NiceModel): # type: ignore [misc, django-manager-missing] class Stock(ExportModelOperationsMixin("stock"), NiceModel): # type: ignore [misc]
__doc__ = _( # type: ignore __doc__ = _( # type: ignore
"Represents the stock of a product managed in the system." "Represents the stock of a product managed in the system."
" This class provides details about the relationship between vendors, products, and their stock information, " " This class provides details about the relationship between vendors, products, and their stock information, "
@ -468,7 +468,7 @@ class Stock(ExportModelOperationsMixin("stock"), NiceModel): # type: ignore [mi
verbose_name_plural = _("stock entries") verbose_name_plural = _("stock entries")
class Product(ExportModelOperationsMixin("product"), NiceModel): # type: ignore [misc, django-manager-missing] class Product(ExportModelOperationsMixin("product"), NiceModel): # type: ignore [misc]
__doc__ = _( # type: ignore __doc__ = _( # type: ignore
"Represents a product with attributes such as category, brand, tags, digital status, name, description, part number, and slug." "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." " Provides related utility properties to retrieve ratings, feedback counts, price, quantity, and total orders."
@ -561,21 +561,21 @@ class Product(ExportModelOperationsMixin("product"), NiceModel): # type: ignore
return self.name return self.name
@property @property
def rating(self): def rating(self) -> float:
cache_key = f"product_rating_{self.pk}" cache_key = f"product_rating_{self.pk}"
rating = cache.get(cache_key) rating = cache.get(cache_key)
if rating is None: if rating is None:
feedbacks = Feedback.objects.filter(order_product__product_id=self.pk) feedbacks = Feedback.objects.filter(order_product__product_id=self.pk)
rating = feedbacks.aggregate(Avg("rating"))["rating__avg"] or 0 rating = feedbacks.aggregate(Avg("rating"))["rating__avg"] or 0
cache.set(cache_key, rating, 86400) cache.set(cache_key, rating, 86400)
return round(rating, 2) return float(round(rating, 2))
@rating.setter @rating.setter
def rating(self, value): def rating(self, value: float):
self.__dict__["rating"] = value self.__dict__["rating"] = value
@property @property
def feedbacks_count(self): def feedbacks_count(self) -> int:
cache_key = f"product_feedbacks_count_{self.pk}" cache_key = f"product_feedbacks_count_{self.pk}"
feedbacks_count = cache.get(cache_key) feedbacks_count = cache.get(cache_key)
if feedbacks_count is None: if feedbacks_count is None:
@ -616,7 +616,7 @@ class Product(ExportModelOperationsMixin("product"), NiceModel): # type: ignore
self.__dict__["personal_orders_only"] = value self.__dict__["personal_orders_only"] = value
class Attribute(ExportModelOperationsMixin("attribute"), NiceModel): # type: ignore [misc, django-manager-missing] class Attribute(ExportModelOperationsMixin("attribute"), NiceModel): # type: ignore [misc]
__doc__ = _( # type: ignore __doc__ = _( # type: ignore
"Represents an attribute in the system." "Represents an attribute in the system."
" This class is used to define and manage attributes," " This class is used to define and manage attributes,"
@ -680,7 +680,7 @@ class Attribute(ExportModelOperationsMixin("attribute"), NiceModel): # type: ig
verbose_name_plural = _("attributes") verbose_name_plural = _("attributes")
class AttributeValue(ExportModelOperationsMixin("attribute_value"), NiceModel): # type: ignore [misc, django-manager-missing] class AttributeValue(ExportModelOperationsMixin("attribute_value"), NiceModel): # type: ignore [misc]
__doc__ = _( # type: ignore __doc__ = _( # type: ignore
"Represents a specific value for an attribute that is linked to a product. " "Represents a specific value for an attribute that is linked to a product. "
"It links the 'attribute' to a unique 'value', allowing " "It links the 'attribute' to a unique 'value', allowing "
@ -718,7 +718,7 @@ class AttributeValue(ExportModelOperationsMixin("attribute_value"), NiceModel):
verbose_name_plural = _("attribute values") verbose_name_plural = _("attribute values")
class ProductImage(ExportModelOperationsMixin("product_image"), NiceModel): # type: ignore [misc, django-manager-missing] class ProductImage(ExportModelOperationsMixin("product_image"), NiceModel): # type: ignore [misc]
__doc__ = _( # type: ignore __doc__ = _( # type: ignore
"Represents a product image associated with a product in the system. " "Represents a product image associated with a product in the system. "
"This class is designed to manage images for products, including functionality " "This class is designed to manage images for products, including functionality "
@ -765,7 +765,7 @@ class ProductImage(ExportModelOperationsMixin("product_image"), NiceModel): # t
verbose_name_plural = _("product images") verbose_name_plural = _("product images")
class Promotion(ExportModelOperationsMixin("promotion"), NiceModel): # type: ignore [misc, django-manager-missing] class Promotion(ExportModelOperationsMixin("promotion"), NiceModel): # type: ignore [misc]
__doc__ = _( # type: ignore __doc__ = _( # type: ignore
"Represents a promotional campaign for products with a discount. " "Represents a promotional campaign for products with a discount. "
"This class is used to define and manage promotional campaigns that offer a " "This class is used to define and manage promotional campaigns that offer a "
@ -811,7 +811,7 @@ class Promotion(ExportModelOperationsMixin("promotion"), NiceModel): # type: ig
return str(self.id) return str(self.id)
class Wishlist(ExportModelOperationsMixin("wishlist"), NiceModel): # type: ignore [misc, django-manager-missing] class Wishlist(ExportModelOperationsMixin("wishlist"), NiceModel): # type: ignore [misc]
__doc__ = _( # type: ignore __doc__ = _( # type: ignore
"Represents a user's wishlist for storing and managing desired products. " "Represents a user's wishlist for storing and managing desired products. "
"The class provides functionality to manage a collection of products, " "The class provides functionality to manage a collection of products, "
@ -882,7 +882,7 @@ class Wishlist(ExportModelOperationsMixin("wishlist"), NiceModel): # type: igno
return self return self
class Documentary(ExportModelOperationsMixin("attribute_group"), NiceModel): # type: ignore [misc, django-manager-missing] class Documentary(ExportModelOperationsMixin("attribute_group"), NiceModel): # type: ignore [misc]
__doc__ = _( # type: ignore __doc__ = _( # type: ignore
"Represents a documentary record tied to a product. " "Represents a documentary record tied to a product. "
"This class is used to store information about documentaries related to specific " "This class is used to store information about documentaries related to specific "
@ -911,7 +911,7 @@ class Documentary(ExportModelOperationsMixin("attribute_group"), NiceModel): #
return self.document.name.split(".")[-1] or _("unresolved") return self.document.name.split(".")[-1] or _("unresolved")
class Address(ExportModelOperationsMixin("address"), NiceModel): # type: ignore [misc, django-manager-missing] class Address(ExportModelOperationsMixin("address"), NiceModel): # type: ignore [misc]
__doc__ = _( # type: ignore __doc__ = _( # type: ignore
"Represents an address entity that includes location details and associations with a user. " "Represents an address entity that includes location details and associations with a user. "
"Provides functionality for geographic and address data storage, as well " "Provides functionality for geographic and address data storage, as well "
@ -970,7 +970,7 @@ class Address(ExportModelOperationsMixin("address"), NiceModel): # type: ignore
return f"{base} for {self.user.email}" if self.user else base return f"{base} for {self.user.email}" if self.user else base
class PromoCode(ExportModelOperationsMixin("promocode"), NiceModel): # type: ignore [misc, django-manager-missing] class PromoCode(ExportModelOperationsMixin("promocode"), NiceModel): # type: ignore [misc]
__doc__ = _( # type: ignore __doc__ = _( # type: ignore
"Represents a promotional code that can be used for discounts, managing its validity, " "Represents a promotional code that can be used for discounts, managing its validity, "
"type of discount, and application. " "type of discount, and application. "
@ -1093,7 +1093,7 @@ class PromoCode(ExportModelOperationsMixin("promocode"), NiceModel): # type: ig
return promo_amount return promo_amount
class Order(ExportModelOperationsMixin("order"), NiceModel): # type: ignore [misc, django-manager-missing] class Order(ExportModelOperationsMixin("order"), NiceModel): # type: ignore [misc]
__doc__ = _( # type: ignore __doc__ = _( # type: ignore
"Represents an order placed by a user." "Represents an order placed by a user."
" This class models an order within the application," " This class models an order within the application,"
@ -1594,7 +1594,7 @@ class Order(ExportModelOperationsMixin("order"), NiceModel): # type: ignore [mi
return None return None
class OrderProduct(ExportModelOperationsMixin("order_product"), NiceModel): # type: ignore [misc, django-manager-missing] class OrderProduct(ExportModelOperationsMixin("order_product"), NiceModel): # type: ignore [misc]
__doc__ = _( # type: ignore __doc__ = _( # type: ignore
"Represents products associated with orders and their attributes. " "Represents products associated with orders and their attributes. "
"The OrderProduct model maintains information about a product that is part of an order, " "The OrderProduct model maintains information about a product that is part of an order, "
@ -1745,7 +1745,7 @@ class OrderProduct(ExportModelOperationsMixin("order_product"), NiceModel): # t
return None return None
class CustomerRelationshipManagementProvider(ExportModelOperationsMixin("crm_provider"), NiceModel): # type: ignore [misc, django-manager-missing] class CustomerRelationshipManagementProvider(ExportModelOperationsMixin("crm_provider"), NiceModel): # type: ignore [misc]
name = CharField(max_length=128, unique=True, verbose_name=_("name")) name = CharField(max_length=128, unique=True, verbose_name=_("name"))
integration_url = URLField(blank=True, null=True, help_text=_("URL of the integration")) integration_url = URLField(blank=True, null=True, help_text=_("URL of the integration"))
authentication = JSONField(blank=True, null=True, help_text=_("authentication credentials")) authentication = JSONField(blank=True, null=True, help_text=_("authentication credentials"))
@ -1797,7 +1797,7 @@ class OrderCrmLink(ExportModelOperationsMixin("order_crm_link"), NiceModel): #
verbose_name_plural = _("orders CRM links") verbose_name_plural = _("orders CRM links")
class DigitalAssetDownload(ExportModelOperationsMixin("attribute_group"), NiceModel): # type: ignore [misc, django-manager-missing] class DigitalAssetDownload(ExportModelOperationsMixin("attribute_group"), NiceModel): # type: ignore [misc]
__doc__ = _( # type: ignore __doc__ = _( # type: ignore
"Represents the downloading functionality for digital assets associated with orders. " "Represents the downloading functionality for digital assets associated with orders. "
"The DigitalAssetDownload class provides the ability to manage and access " "The DigitalAssetDownload class provides the ability to manage and access "
@ -1826,7 +1826,7 @@ class DigitalAssetDownload(ExportModelOperationsMixin("attribute_group"), NiceMo
) )
class Feedback(ExportModelOperationsMixin("feedback"), NiceModel): # type: ignore [misc, django-manager-missing] class Feedback(ExportModelOperationsMixin("feedback"), NiceModel): # type: ignore [misc]
__doc__ = _( # type: ignore __doc__ = _( # type: ignore
"Manages user feedback for products. " "Manages user feedback for products. "
"This class is designed to capture and store user feedback for specific products " "This class is designed to capture and store user feedback for specific products "

View file

@ -26,7 +26,7 @@ from core.models import (
from core.serializers.utility import AddressSerializer from core.serializers.utility import AddressSerializer
class AttributeGroupSimpleSerializer(ModelSerializer): class AttributeGroupSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
parent = PrimaryKeyRelatedField(read_only=True) # type: ignore [assignment, var-annotated] parent = PrimaryKeyRelatedField(read_only=True) # type: ignore [assignment, var-annotated]
children = PrimaryKeyRelatedField(many=True, read_only=True) # type: ignore [assignment, var-annotated] children = PrimaryKeyRelatedField(many=True, read_only=True) # type: ignore [assignment, var-annotated]
@ -40,7 +40,7 @@ class AttributeGroupSimpleSerializer(ModelSerializer):
] ]
class CategorySimpleSerializer(ModelSerializer): class CategorySimpleSerializer(ModelSerializer): # type: ignore [type-arg]
children = SerializerMethodField() children = SerializerMethodField()
image = SerializerMethodField() image = SerializerMethodField()
@ -56,10 +56,10 @@ class CategorySimpleSerializer(ModelSerializer):
def get_image(self, obj: Category) -> str | None: def get_image(self, obj: Category) -> str | None:
with suppress(ValueError): with suppress(ValueError):
return obj.image.url return str(obj.image.url)
return None return None
def get_children(self, obj) -> Collection[Any]: def get_children(self, obj: Category) -> Collection[Any]:
request = self.context.get("request") request = self.context.get("request")
if request is not None and request.user.has_perm("view_category"): if request is not None and request.user.has_perm("view_category"):
children = obj.children.all() children = obj.children.all()
@ -69,7 +69,7 @@ class CategorySimpleSerializer(ModelSerializer):
return CategorySimpleSerializer(children, many=True, context=self.context).data if obj.children.exists() else [] return CategorySimpleSerializer(children, many=True, context=self.context).data if obj.children.exists() else []
class BrandSimpleSerializer(ModelSerializer): class BrandSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
small_logo = SerializerMethodField() small_logo = SerializerMethodField()
big_logo = SerializerMethodField() big_logo = SerializerMethodField()
@ -84,16 +84,16 @@ class BrandSimpleSerializer(ModelSerializer):
def get_small_logo(self, obj: Brand) -> str | None: def get_small_logo(self, obj: Brand) -> str | None:
with suppress(ValueError): with suppress(ValueError):
return obj.small_logo.url return str(obj.small_logo.url)
return None return None
def get_big_logo(self, obj: Brand) -> str | None: def get_big_logo(self, obj: Brand) -> str | None:
with suppress(ValueError): with suppress(ValueError):
return obj.big_logo.url return str(obj.big_logo.url)
return None return None
class ProductTagSimpleSerializer(ModelSerializer): class ProductTagSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
class Meta: class Meta:
model = ProductTag model = ProductTag
fields = [ fields = [
@ -103,8 +103,8 @@ class ProductTagSimpleSerializer(ModelSerializer):
] ]
class ProductImageSimpleSerializer(ModelSerializer): class ProductImageSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
product: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True) product: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True) # type: ignore [type-arg]
class Meta: class Meta:
model = ProductImage model = ProductImage
@ -117,7 +117,7 @@ class ProductImageSimpleSerializer(ModelSerializer):
] ]
class AttributeSimpleSerializer(ModelSerializer): class AttributeSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
group = AttributeGroupSimpleSerializer(read_only=True) group = AttributeGroupSimpleSerializer(read_only=True)
class Meta: class Meta:
@ -130,9 +130,9 @@ class AttributeSimpleSerializer(ModelSerializer):
] ]
class AttributeValueSimpleSerializer(ModelSerializer): class AttributeValueSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
attribute = AttributeSimpleSerializer(read_only=True) attribute = AttributeSimpleSerializer(read_only=True)
product: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True) product: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True) # type: ignore [type-arg]
class Meta: class Meta:
model = AttributeValue model = AttributeValue
@ -144,7 +144,7 @@ class AttributeValueSimpleSerializer(ModelSerializer):
] ]
class ProductSimpleSerializer(ModelSerializer): class ProductSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
brand = BrandSimpleSerializer(read_only=True) brand = BrandSimpleSerializer(read_only=True)
category = CategorySimpleSerializer(read_only=True) category = CategorySimpleSerializer(read_only=True)
tags = ProductTagSimpleSerializer(many=True, read_only=True) tags = ProductTagSimpleSerializer(many=True, read_only=True)
@ -196,7 +196,7 @@ class ProductSimpleSerializer(ModelSerializer):
return obj.personal_orders_only return obj.personal_orders_only
class VendorSimpleSerializer(ModelSerializer): class VendorSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
class Meta: class Meta:
model = Vendor model = Vendor
fields = [ fields = [
@ -205,7 +205,7 @@ class VendorSimpleSerializer(ModelSerializer):
] ]
class StockSimpleSerializer(ModelSerializer): class StockSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
vendor = VendorSimpleSerializer(read_only=True) vendor = VendorSimpleSerializer(read_only=True)
product = ProductSimpleSerializer(read_only=True) product = ProductSimpleSerializer(read_only=True)
@ -222,7 +222,7 @@ class StockSimpleSerializer(ModelSerializer):
] ]
class PromoCodeSimpleSerializer(ModelSerializer): class PromoCodeSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
class Meta: class Meta:
model = PromoCode model = PromoCode
fields = [ fields = [
@ -231,7 +231,7 @@ class PromoCodeSimpleSerializer(ModelSerializer):
] ]
class PromotionSimpleSerializer(ModelSerializer): class PromotionSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
products = ProductSimpleSerializer(many=True, read_only=True) products = ProductSimpleSerializer(many=True, read_only=True)
class Meta: class Meta:
@ -244,8 +244,8 @@ class PromotionSimpleSerializer(ModelSerializer):
] ]
class WishlistSimpleSerializer(ModelSerializer): class WishlistSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
user: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True) user: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True) # type: ignore [type-arg]
products = ProductSimpleSerializer(many=True, read_only=True) products = ProductSimpleSerializer(many=True, read_only=True)
class Meta: class Meta:
@ -257,8 +257,8 @@ class WishlistSimpleSerializer(ModelSerializer):
] ]
class FeedbackSimpleSerializer(ModelSerializer): class FeedbackSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
order_product: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True) order_product: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True) # type: ignore [type-arg]
class Meta: class Meta:
model = Feedback model = Feedback
@ -269,7 +269,7 @@ class FeedbackSimpleSerializer(ModelSerializer):
] ]
class OrderProductSimpleSerializer(ModelSerializer): class OrderProductSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
product = ProductSimpleSerializer(read_only=True) product = ProductSimpleSerializer(read_only=True)
class Meta: class Meta:
@ -283,8 +283,8 @@ class OrderProductSimpleSerializer(ModelSerializer):
] ]
class OrderSimpleSerializer(ModelSerializer): class OrderSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
user: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True) user: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True) # type: ignore [type-arg]
promo_code = PromoCodeSimpleSerializer(read_only=True) promo_code = PromoCodeSimpleSerializer(read_only=True)
order_products = OrderProductSimpleSerializer(many=True, read_only=True) order_products = OrderProductSimpleSerializer(many=True, read_only=True)
billing_address = AddressSerializer(read_only=True, required=False) billing_address = AddressSerializer(read_only=True, required=False)

View file

@ -1,3 +1,5 @@
from typing import Any
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from rest_framework.exceptions import ValidationError from rest_framework.exceptions import ValidationError
from rest_framework.fields import ( from rest_framework.fields import (
@ -16,19 +18,19 @@ from rest_framework.serializers import ListSerializer, ModelSerializer, Serializ
from core.models import Address from core.models import Address
class AddressAutocompleteInputSerializer(Serializer): class AddressAutocompleteInputSerializer(Serializer): # type: ignore [type-arg]
q = CharField(required=True) q = CharField(required=True)
limit = IntegerField(required=False, min_value=1, max_value=10, default=5) limit = IntegerField(required=False, min_value=1, max_value=10, default=5)
class AddressSuggestionSerializer(Serializer): class AddressSuggestionSerializer(Serializer): # type: ignore [type-arg]
display_name = CharField() display_name = CharField()
lat = FloatField() lat = FloatField()
lon = FloatField() lon = FloatField()
address = DictField(child=CharField()) address = DictField(child=CharField())
class AddressSerializer(ModelSerializer): class AddressSerializer(ModelSerializer): # type: ignore [type-arg]
latitude = FloatField(source="location.y", read_only=True) latitude = FloatField(source="location.y", read_only=True)
longitude = FloatField(source="location.x", read_only=True) longitude = FloatField(source="location.x", read_only=True)
@ -57,7 +59,7 @@ class AddressSerializer(ModelSerializer):
] ]
class AddressCreateSerializer(ModelSerializer): class AddressCreateSerializer(ModelSerializer): # type: ignore [type-arg]
raw_data = CharField( raw_data = CharField(
write_only=True, write_only=True,
max_length=512, max_length=512,
@ -69,31 +71,32 @@ class AddressCreateSerializer(ModelSerializer):
model = Address model = Address
fields = ["raw_data", "address_line_1", "address_line_2"] fields = ["raw_data", "address_line_1", "address_line_2"]
def create(self, validated_data): def create(self, validated_data: dict[str, Any]) -> Address:
raw = validated_data.pop("raw_data") raw = validated_data.pop("raw_data")
user = None user = None
if self.context["request"].user.is_authenticated: if self.context["request"].user.is_authenticated:
user = self.context["request"].user user = self.context["request"].user
return Address.objects.create(raw_data=raw, user=user, **validated_data) return Address.objects.create(raw_data=raw, user=user, **validated_data) # type: ignore [no-untyped-call]
class DoFeedbackSerializer(Serializer): class DoFeedbackSerializer(Serializer): # type: ignore [type-arg]
comment = CharField(required=True) comment = CharField(required=True)
rating = IntegerField(min_value=1, max_value=10, default=10) rating = IntegerField(min_value=1, max_value=10, default=10)
action = CharField(default="add") action = CharField(default="add")
def validate(self, data): def validate(self, data: dict[str, Any]) -> dict[str, Any]:
if data["action"] == "add" and not all([data["comment"], data["rating"]]): if data["action"] == "add" and not all([data["comment"], data["rating"]]):
raise ValidationError(_("you must provide a comment, rating, and order product uuid to add feedback.")) raise ValidationError(_("you must provide a comment, rating, and order product uuid to add feedback."))
return data
class CacheOperatorSerializer(Serializer): class CacheOperatorSerializer(Serializer): # type: ignore [type-arg]
key = CharField(required=True) key = CharField(required=True)
data = JSONField(required=False) # type: ignore [assignment] data = JSONField(required=False) # type: ignore [assignment]
timeout = IntegerField(required=False) timeout = IntegerField(required=False)
class ContactUsSerializer(Serializer): class ContactUsSerializer(Serializer): # type: ignore [type-arg]
email = CharField(required=True) email = CharField(required=True)
name = CharField(required=True) name = CharField(required=True)
subject = CharField(required=True) subject = CharField(required=True)
@ -101,14 +104,14 @@ class ContactUsSerializer(Serializer):
message = CharField(required=True) message = CharField(required=True)
class LanguageSerializer(Serializer): class LanguageSerializer(Serializer): # type: ignore [type-arg]
code = CharField(required=True) code = CharField(required=True)
name = CharField(required=True) name = CharField(required=True)
flag = CharField() flag = CharField()
class RecursiveField(Field): class RecursiveField(Field): # type: ignore [type-arg]
def to_representation(self, value): def to_representation(self, value: Any) -> Any:
parent = self.parent parent = self.parent
if isinstance(parent, ListSerializer): if isinstance(parent, ListSerializer):
parent = parent.parent parent = parent.parent
@ -116,45 +119,45 @@ class RecursiveField(Field):
serializer_class = parent.__class__ serializer_class = parent.__class__
return serializer_class(value, context=self.context).data return serializer_class(value, context=self.context).data
def to_internal_value(self, data): def to_internal_value(self, data: Any) -> Any:
return data return data
class AddOrderProductSerializer(Serializer): class AddOrderProductSerializer(Serializer): # type: ignore [type-arg]
product_uuid = CharField(required=True) product_uuid = CharField(required=True)
attributes = ListField(required=False, child=DictField(), default=list) attributes = ListField(required=False, child=DictField(), default=list)
class BulkAddOrderProductsSerializer(Serializer): class BulkAddOrderProductsSerializer(Serializer): # type: ignore [type-arg]
products = ListField(child=AddOrderProductSerializer(), required=True) products = ListField(child=AddOrderProductSerializer(), required=True)
class RemoveOrderProductSerializer(Serializer): class RemoveOrderProductSerializer(Serializer): # type: ignore [type-arg]
product_uuid = CharField(required=True) product_uuid = CharField(required=True)
attributes = JSONField(required=False, default=dict) attributes = JSONField(required=False, default=dict)
class BulkRemoveOrderProductsSerializer(Serializer): class BulkRemoveOrderProductsSerializer(Serializer): # type: ignore [type-arg]
products = ListField(child=RemoveOrderProductSerializer(), required=True) products = ListField(child=RemoveOrderProductSerializer(), required=True)
class AddWishlistProductSerializer(Serializer): class AddWishlistProductSerializer(Serializer): # type: ignore [type-arg]
product_uuid = CharField(required=True) product_uuid = CharField(required=True)
class RemoveWishlistProductSerializer(Serializer): class RemoveWishlistProductSerializer(Serializer): # type: ignore [type-arg]
product_uuid = CharField(required=True) product_uuid = CharField(required=True)
class BulkAddWishlistProductSerializer(Serializer): class BulkAddWishlistProductSerializer(Serializer): # type: ignore [type-arg]
product_uuids = ListField(child=CharField(required=True), allow_empty=False, max_length=64) product_uuids = ListField(child=CharField(required=True), allow_empty=False, max_length=64)
class BulkRemoveWishlistProductSerializer(Serializer): class BulkRemoveWishlistProductSerializer(Serializer): # type: ignore [type-arg]
product_uuids = ListField(child=CharField(required=True), allow_empty=False, max_length=64) product_uuids = ListField(child=CharField(required=True), allow_empty=False, max_length=64)
class BuyOrderSerializer(Serializer): class BuyOrderSerializer(Serializer): # type: ignore [type-arg]
force_balance = BooleanField(required=False, default=False) force_balance = BooleanField(required=False, default=False)
force_payment = BooleanField(required=False, default=False) force_payment = BooleanField(required=False, default=False)
promocode_uuid = CharField(required=False) promocode_uuid = CharField(required=False)
@ -163,7 +166,7 @@ class BuyOrderSerializer(Serializer):
chosen_products = AddOrderProductSerializer(many=True, required=False) chosen_products = AddOrderProductSerializer(many=True, required=False)
class BuyUnregisteredOrderSerializer(Serializer): class BuyUnregisteredOrderSerializer(Serializer): # type: ignore [type-arg]
products = AddOrderProductSerializer(many=True, required=True) products = AddOrderProductSerializer(many=True, required=True)
promocode_uuid = UUIDField(required=False) promocode_uuid = UUIDField(required=False)
customer_name = CharField(required=True) customer_name = CharField(required=True)
@ -174,7 +177,7 @@ class BuyUnregisteredOrderSerializer(Serializer):
payment_method = CharField(required=True) payment_method = CharField(required=True)
class BuyAsBusinessOrderSerializer(Serializer): class BuyAsBusinessOrderSerializer(Serializer): # type: ignore [type-arg]
products = AddOrderProductSerializer(many=True, required=True) products = AddOrderProductSerializer(many=True, required=True)
business_identificator = CharField(required=True) business_identificator = CharField(required=True)
promocode_uuid = UUIDField(required=False) promocode_uuid = UUIDField(required=False)

View file

@ -1,6 +1,7 @@
import logging import logging
from contextlib import suppress from contextlib import suppress
from datetime import timedelta from datetime import timedelta
from typing import Any
from django.db import IntegrityError from django.db import IntegrityError
from django.db.models.signals import post_save from django.db.models.signals import post_save
@ -13,7 +14,7 @@ from sentry_sdk import capture_exception
from core.crm import any_crm_integrations from core.crm import any_crm_integrations
from core.crm.exceptions import CRMException from core.crm.exceptions import CRMException
from core.models import Category, Order, Product, PromoCode, Wishlist, DigitalAssetDownload from core.models import Category, DigitalAssetDownload, Order, Product, PromoCode, Wishlist
from core.utils import ( from core.utils import (
generate_human_readable_id, generate_human_readable_id,
resolve_translations_for_elasticsearch, resolve_translations_for_elasticsearch,
@ -25,8 +26,9 @@ from vibes_auth.models import User
logger = logging.getLogger("django") logger = logging.getLogger("django")
# noinspection PyUnusedLocal
@receiver(post_save, sender=User) @receiver(post_save, sender=User)
def create_order_on_user_creation_signal(instance, created, **_kwargs): def create_order_on_user_creation_signal(instance: User, created: bool, **kwargs: dict[Any, Any]) -> None:
if created: if created:
try: try:
Order.objects.create(user=instance, status="PENDING") Order.objects.create(user=instance, status="PENDING")
@ -40,17 +42,23 @@ def create_order_on_user_creation_signal(instance, created, **_kwargs):
break break
# noinspection PyUnusedLocal
@receiver(post_save, sender=User) @receiver(post_save, sender=User)
def create_wishlist_on_user_creation_signal(instance, created, **_kwargs): def create_wishlist_on_user_creation_signal(instance: User, created: bool, **kwargs: dict[Any, Any]) -> None:
if created: if created:
Wishlist.objects.create(user=instance) Wishlist.objects.create(user=instance)
# noinspection PyUnusedLocal
@receiver(post_save, sender=User) @receiver(post_save, sender=User)
def create_promocode_on_user_referring(instance, created, **_kwargs): def create_promocode_on_user_referring(instance: User, created: bool, **kwargs: dict[Any, Any]) -> None:
try: try:
if not instance.attributes:
instance.attributes = {}
instance.save()
if created and instance.attributes.get("referrer", ""): if created and instance.attributes.get("referrer", ""):
referrer_uuid = urlsafe_base64_decode(instance.attributes.get("referrer", "")) referrer_uuid = urlsafe_base64_decode(instance.attributes.get("referrer", "")).decode()
referrer = User.objects.get(uuid=referrer_uuid) referrer = User.objects.get(uuid=referrer_uuid)
code = f"WELCOME-{get_random_string(6)}" code = f"WELCOME-{get_random_string(6)}"
PromoCode.objects.create( PromoCode.objects.create(
@ -65,8 +73,9 @@ def create_promocode_on_user_referring(instance, created, **_kwargs):
logger.error(_(f"error during promocode creation: {e!s}")) logger.error(_(f"error during promocode creation: {e!s}"))
# noinspection PyUnusedLocal
@receiver(post_save, sender=Order) @receiver(post_save, sender=Order)
def process_order_changes(instance, created, **_kwargs): def process_order_changes(instance: Order, created: bool, **kwargs: dict[Any, Any]):
if type(instance.attributes) is not dict: if type(instance.attributes) is not dict:
instance.attributes = {} instance.attributes = {}
@ -99,9 +108,12 @@ def process_order_changes(instance, created, **_kwargs):
if instance.status in ["CREATED", "PAYMENT"]: if instance.status in ["CREATED", "PAYMENT"]:
if not instance.is_whole_digital: if not instance.is_whole_digital:
send_order_created_email.delay(instance.uuid) send_order_created_email.delay(instance.uuid) # type: ignore [attr-defined]
for order_product in instance.order_products.filter(status="DELIVERING", product__is_digital=True): for order_product in instance.order_products.filter(status="DELIVERING", product__is_digital=True):
if not order_product.product:
continue
stocks_qs = order_product.product.stocks.filter(digital_asset__isnull=False).exclude(digital_asset="") stocks_qs = order_product.product.stocks.filter(digital_asset__isnull=False).exclude(digital_asset="")
stock = stocks_qs.first() stock = stocks_qs.first()
@ -115,8 +127,8 @@ def process_order_changes(instance, created, **_kwargs):
order_product.status = "FINISHED" order_product.status = "FINISHED"
if not order_product.download: if not order_product.download:
DigitalAssetDownload.objects.create(order_product=order_product) DigitalAssetDownload.objects.create(order_product=order_product)
order_product.order.user.payments_balance.amount -= order_product.buy_price order_product.order.user.payments_balance.amount -= order_product.buy_price # type: ignore [union-attr, operator]
order_product.order.user.payments_balance.save() order_product.order.user.payments_balance.save() # type: ignore [union-attr]
order_product.save() order_product.save()
continue continue
@ -124,12 +136,12 @@ def process_order_changes(instance, created, **_kwargs):
try: try:
vendor_name = ( vendor_name = (
order_product.product.stocks.filter(price=order_product.buy_price).first().vendor.name.lower() order_product.product.stocks.filter(price=order_product.buy_price).first().vendor.name.lower() # type: ignore [union-attr, attr-defined, misc]
) )
vendor = create_object(f"core.vendors.{vendor_name}", f"{vendor_name.title()}Vendor") vendor = create_object(f"core.vendors.{vendor_name}", f"{vendor_name.title()}Vendor")
vendor.buy_order_product(order_product) vendor.buy_order_product(order_product) # type: ignore [attr-defined]
except Exception as e: except Exception as e:
order_product.add_error(f"Failed to buy {order_product.uuid}. Reason: {e}...") order_product.add_error(f"Failed to buy {order_product.uuid}. Reason: {e}...")
@ -144,26 +156,29 @@ def process_order_changes(instance, created, **_kwargs):
if instance.status == "FINISHED" and not instance.attributes.get("system_email_sent", False): if instance.status == "FINISHED" and not instance.attributes.get("system_email_sent", False):
instance.attributes["system_email_sent"] = True instance.attributes["system_email_sent"] = True
instance.save() instance.save()
send_order_finished_email.delay(instance.uuid) send_order_finished_email.delay(instance.uuid) # type: ignore [attr-defined]
# noinspection PyUnusedLocal
@receiver(post_save, sender=Product) @receiver(post_save, sender=Product)
def update_product_name_lang(instance, created, **_kwargs): def update_product_name_lang(instance: Product, created: bool, **kwargs: dict[Any, Any]) -> None:
if created: if created:
pass pass
resolve_translations_for_elasticsearch(instance, "name") resolve_translations_for_elasticsearch(instance, "name")
resolve_translations_for_elasticsearch(instance, "description") resolve_translations_for_elasticsearch(instance, "description")
# noinspection PyUnusedLocal
@receiver(post_save, sender=Category) @receiver(post_save, sender=Category)
def update_category_name_lang(instance, created, **_kwargs): def update_category_name_lang(instance: Category, created: bool, **kwargs: dict[Any, Any]) -> None:
if created: if created:
pass pass
resolve_translations_for_elasticsearch(instance, "name") resolve_translations_for_elasticsearch(instance, "name")
resolve_translations_for_elasticsearch(instance, "description") resolve_translations_for_elasticsearch(instance, "description")
# noinspection PyUnusedLocal
@receiver(post_save, sender=PromoCode) @receiver(post_save, sender=PromoCode)
def send_promocode_creation_email(instance, created, **_kwargs): def send_promocode_creation_email(instance: PromoCode, created: bool, **kwargs: dict[Any, Any]) -> None:
if created: if created:
send_promocode_created_email.delay(instance.uuid) send_promocode_created_email.delay(instance.uuid) # type: ignore [attr-defined]

View file

@ -1,12 +1,13 @@
from django.conf import settings from django.conf import settings
from django.contrib.sitemaps import Sitemap from django.contrib.sitemaps import Sitemap
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from core.models import Brand, Category, Product from core.models import Brand, Category, Product
from core.utils.seo_builders import any_non_digital from core.utils.seo_builders import any_non_digital
from evibes.settings import LANGUAGE_CODE from evibes.settings import LANGUAGE_CODE
class StaticPagesSitemap(Sitemap): class StaticPagesSitemap(Sitemap): # type: ignore [type-arg]
protocol = "https" protocol = "https"
changefreq = "monthly" changefreq = "monthly"
priority = 0.8 priority = 0.8
@ -54,7 +55,7 @@ class StaticPagesSitemap(Sitemap):
return obj.get("lastmod") return obj.get("lastmod")
# class FeaturedProductsSitemap(Sitemap): # class FeaturedProductsSitemap(Sitemap): # type: ignore [type-arg]
# protocol = "https" # protocol = "https"
# changefreq = "daily" # changefreq = "daily"
# priority = 0.9 # priority = 0.9
@ -80,7 +81,7 @@ class StaticPagesSitemap(Sitemap):
# return f"/{LANGUAGE_CODE}/product/{obj.slug}" # return f"/{LANGUAGE_CODE}/product/{obj.slug}"
class ProductSitemap(Sitemap): class ProductSitemap(Sitemap): # type: ignore [type-arg]
protocol = "https" protocol = "https"
changefreq = "daily" changefreq = "daily"
priority = 0.9 priority = 0.9
@ -106,7 +107,7 @@ class ProductSitemap(Sitemap):
return f"/{LANGUAGE_CODE}/product/{obj.slug}" return f"/{LANGUAGE_CODE}/product/{obj.slug}"
class CategorySitemap(Sitemap): class CategorySitemap(Sitemap): # type: ignore [type-arg]
protocol = "https" protocol = "https"
changefreq = "weekly" changefreq = "weekly"
priority = 0.7 priority = 0.7
@ -122,7 +123,7 @@ class CategorySitemap(Sitemap):
return f"/{LANGUAGE_CODE}/catalog/{obj.slug}" return f"/{LANGUAGE_CODE}/catalog/{obj.slug}"
class BrandSitemap(Sitemap): class BrandSitemap(Sitemap): # type: ignore [type-arg]
protocol = "https" protocol = "https"
changefreq = "weekly" changefreq = "weekly"
priority = 0.6 priority = 0.6

View file

@ -4,6 +4,7 @@ import shutil
import uuid import uuid
from datetime import date, timedelta from datetime import date, timedelta
from time import sleep from time import sleep
from typing import Any
import requests import requests
from celery.app import shared_task from celery.app import shared_task
@ -38,7 +39,7 @@ def update_products_task() -> tuple[bool, str]:
if not update_products_task_running: if not update_products_task_running:
cache.set("update_products_task_running", True, 86400) cache.set("update_products_task_running", True, 86400)
vendors_classes: list = [] vendors_classes: list[Any] = []
for vendor_class in vendors_classes: for vendor_class in vendors_classes:
vendor = vendor_class() vendor = vendor_class()
@ -69,7 +70,7 @@ def update_orderproducts_task() -> tuple[bool, str]:
message confirming the successful execution of the task. message confirming the successful execution of the task.
:rtype: Tuple[bool, str] :rtype: Tuple[bool, str]
""" """
vendors_classes: list = [] vendors_classes: list[Any] = []
for vendor_class in vendors_classes: for vendor_class in vendors_classes:
vendor = vendor_class() vendor = vendor_class()
@ -202,7 +203,7 @@ def process_promotions() -> tuple[bool, str]:
if eligible_products.count() < 48: if eligible_products.count() < 48:
return False, "Not enough products to choose from [< 48]." return False, "Not enough products to choose from [< 48]."
selected_products: list = [] selected_products: list[Any] = []
while len(selected_products) < 48: while len(selected_products) < 48:
product = eligible_products.order_by("?").first() product = eligible_products.order_by("?").first()

View file

@ -1,10 +1,12 @@
from typing import Any
from django import template from django import template
register = template.Library() register = template.Library()
@register.filter @register.filter
def attributes_length(value, arg): def attributes_length(value: Any, arg: int) -> bool:
"""Returns True if the value length is more than the argument.""" """Returns True if the value length is more than the argument."""
if isinstance(value, dict): if isinstance(value, dict):
count = 0 count = 0

View file

@ -1,3 +0,0 @@
from django.test import TestCase # noqa: F401
# Create your tests here.

View file

@ -1 +1,3 @@
urlpatterns: list = [] from typing import Any
urlpatterns: list[Any] = []

View file

@ -2,13 +2,18 @@ import logging
import re import re
import secrets import secrets
from contextlib import contextmanager from contextlib import contextmanager
from typing import Any, Generator
from constance import config from constance import config
from django.conf import settings from django.conf import settings
from django.core import mail
from django.core.cache import cache from django.core.cache import cache
from django.core.mail.backends.smtp import EmailBackend
from django.db import transaction from django.db import transaction
from django.utils.crypto import get_random_string from django.utils.crypto import get_random_string
from django.utils.translation import get_language from django.utils.translation import get_language
from graphene import Context
from rest_framework.request import Request
from evibes.settings import DEBUG, EXPOSABLE_KEYS, LANGUAGE_CODE from evibes.settings import DEBUG, EXPOSABLE_KEYS, LANGUAGE_CODE
@ -29,7 +34,7 @@ def graphene_current_lang() -> str:
return (get_language() or settings.LANGUAGE_CODE).lower() return (get_language() or settings.LANGUAGE_CODE).lower()
def graphene_abs(request, path_or_url: str) -> str: def graphene_abs(request: Request | Context, path_or_url: str) -> str:
""" """
Builds and returns an absolute URI for a given path or URL. Builds and returns an absolute URI for a given path or URL.
@ -63,20 +68,20 @@ def get_random_code() -> str:
return get_random_string(20) return get_random_string(20)
def get_product_uuid_as_path(instance, filename: str = "") -> str: def get_product_uuid_as_path(instance, filename: str = "") -> str: # type: ignore [no-untyped-def]
return "products" + "/" + str(instance.product.uuid) + "/" + filename return "products" + "/" + str(instance.product.uuid) + "/" + filename
def get_vendor_name_as_path(instance, filename: str = "") -> str: def get_vendor_name_as_path(instance, filename: str = "") -> str: # type: ignore [no-untyped-def]
return "vendors_responses/" + str(instance.name) + "/" + filename return "vendors_responses/" + str(instance.name) + "/" + filename
def get_brand_name_as_path(instance, filename: str = "") -> str: def get_brand_name_as_path(instance, filename: str = "") -> str: # type: ignore [no-untyped-def]
return "brands/" + str(instance.name) + "/" + filename return "brands/" + str(instance.name) + "/" + filename
@contextmanager @contextmanager
def atomic_if_not_debug(): def atomic_if_not_debug() -> Generator[None, None, None]:
""" """
Context manager to wrap a block of code in an atomic transaction if the DEBUG Context manager to wrap a block of code in an atomic transaction if the DEBUG
setting is not enabled. setting is not enabled.
@ -97,7 +102,7 @@ def is_url_safe(url: str) -> bool:
return bool(re.match(r"^https://", url, re.IGNORECASE)) return bool(re.match(r"^https://", url, re.IGNORECASE))
def format_attributes(attributes: str | None = None) -> dict: def format_attributes(attributes: str | None = None) -> dict[str, Any]:
""" """
Parses a string of attributes into a dictionary. Parses a string of attributes into a dictionary.
@ -125,7 +130,7 @@ def format_attributes(attributes: str | None = None) -> dict:
return result return result
def get_project_parameters() -> dict: def get_project_parameters() -> Any:
""" """
Fetches project parameters from cache or configuration. Fetches project parameters from cache or configuration.
@ -134,7 +139,7 @@ def get_project_parameters() -> dict:
configuration source, formats their keys to lowercase, and then stores configuration source, formats their keys to lowercase, and then stores
them in the cache for a limited period. them in the cache for a limited period.
""" """
parameters = cache.get("parameters", {}) parameters = cache.get("parameters")
if not parameters: if not parameters:
for key in EXPOSABLE_KEYS: for key in EXPOSABLE_KEYS:
@ -145,7 +150,7 @@ def get_project_parameters() -> dict:
return parameters return parameters
def resolve_translations_for_elasticsearch(instance, field_name: str) -> None: def resolve_translations_for_elasticsearch(instance, field_name: str) -> None: # type: ignore [no-untyped-def]
""" """
Resolves translations for a given field in an Elasticsearch-compatible Resolves translations for a given field in an Elasticsearch-compatible
format. It checks if the localized version of the field contains data, format. It checks if the localized version of the field contains data,
@ -199,3 +204,17 @@ def generate_human_readable_token() -> str:
def is_status_code_success(status_code: int) -> bool: def is_status_code_success(status_code: int) -> bool:
return 200 <= status_code < 300 return 200 <= status_code < 300
def get_dynamic_email_connection() -> EmailBackend:
return mail.get_connection( # type: ignore [no-any-return]
host=config.EMAIL_HOST,
port=config.EMAIL_PORT,
username=config.EMAIL_HOST_USER,
password=config.EMAIL_HOST_PASSWORD,
use_tls=config.EMAIL_USE_TLS,
use_ssl=config.EMAIL_USE_SSL,
timeout=30,
fail_silently=False,
backend=config.EMAIL_BACKEND,
)

View file

@ -1,10 +1,8 @@
import json import json
import logging import logging
from pathlib import Path from pathlib import Path
from typing import Any from typing import Any, Type
from django.contrib.auth.base_user import AbstractBaseUser
from django.contrib.auth.models import AnonymousUser
from django.core.cache import cache from django.core.cache import cache
from django.core.exceptions import BadRequest from django.core.exceptions import BadRequest
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
@ -17,11 +15,11 @@ from vibes_auth.models import User
logger = logging.getLogger("django") logger = logging.getLogger("django")
def is_safe_cache_key(key: str): def is_safe_cache_key(key: str) -> bool:
return key not in UNSAFE_CACHE_KEYS return key not in UNSAFE_CACHE_KEYS
def get_cached_value(user: User, key: str, default=None) -> None | object: def get_cached_value(user: Type[User], key: str, default: Any = None) -> Any:
if user.is_staff or user.is_superuser: if user.is_staff or user.is_superuser:
return cache.get(key, default) return cache.get(key, default)
@ -31,9 +29,7 @@ def get_cached_value(user: User, key: str, default=None) -> None | object:
return None return None
def set_cached_value( def set_cached_value(user: Type[User], key: str, value: object, timeout: int = 3600) -> None | object:
user: User | AbstractBaseUser | AnonymousUser, key: str, value: object, timeout: int = 3600
) -> None | object:
if user.is_staff or user.is_superuser: if user.is_staff or user.is_superuser:
cache.set(key, value, timeout) cache.set(key, value, timeout)
return value return value
@ -41,14 +37,14 @@ def set_cached_value(
return None return None
def web_cache(request: Request | Context, key: str, data: dict[str, Any], timeout: int): def web_cache(request: Request | Context, key: str, data: dict[str, Any], timeout: int) -> dict[str, Any]:
if not data and not timeout: if not data and not timeout:
return {"data": get_cached_value(request.user, key)} return {"data": get_cached_value(request.user, key)} # type: ignore [assignment, arg-type]
if (data and not timeout) or (timeout and not data): if (data and not timeout) or (timeout and not data):
raise BadRequest(_("both data and timeout are required")) raise BadRequest(_("both data and timeout are required"))
if not 0 < int(timeout) < 216000: if not 0 < int(timeout) < 216000:
raise BadRequest(_("invalid timeout value, it must be between 0 and 216000 seconds")) raise BadRequest(_("invalid timeout value, it must be between 0 and 216000 seconds"))
return {"data": set_cached_value(request.user, key, data, timeout)} return {"data": set_cached_value(request.user, key, data, timeout)} # type: ignore [assignment, arg-type]
def set_default_cache() -> None: def set_default_cache() -> None:

View file

@ -1,12 +0,0 @@
from constance import config
from evibes import settings
def set_email_settings():
settings.EMAIL_HOST = config.EMAIL_HOST
settings.EMAIL_PORT = config.EMAIL_PORT
settings.EMAIL_HOST_USER = config.EMAIL_HOST_USER
settings.EMAIL_HOST_PASSWORD = config.EMAIL_HOST_PASSWORD
settings.EMAIL_USE_TLS = config.EMAIL_USE_TLS
settings.EMAIL_USE_SSL = config.EMAIL_USE_SSL

View file

@ -1,5 +1,7 @@
import logging import logging
from typing import Any, Callable
from django.db.models import Model
from django.db.models.constants import LOOKUP_SEP from django.db.models.constants import LOOKUP_SEP
from django_extensions.db.fields import AutoSlugField from django_extensions.db.fields import AutoSlugField
from slugify import slugify from slugify import slugify
@ -7,7 +9,7 @@ from slugify import slugify
logger = logging.getLogger("django") logger = logging.getLogger("django")
def unicode_slugify_function(content): def unicode_slugify_function(content: Any) -> str:
return slugify( return slugify(
text=str(content), text=str(content),
allow_unicode=True, allow_unicode=True,
@ -20,7 +22,7 @@ def unicode_slugify_function(content):
class TweakedAutoSlugField(AutoSlugField): class TweakedAutoSlugField(AutoSlugField):
def get_slug_fields(self, model_instance, lookup_value): def get_slug_fields(self, model_instance: Model, lookup_value: str | Callable[[Any], Any]) -> str | Model:
if callable(lookup_value): if callable(lookup_value):
return f"{lookup_value(model_instance)}" return f"{lookup_value(model_instance)}"
@ -29,9 +31,9 @@ class TweakedAutoSlugField(AutoSlugField):
for elem in lookup_value_path: for elem in lookup_value_path:
try: try:
attr = getattr(attr, elem) attr: Any = getattr(attr, elem)
except AttributeError: except AttributeError:
attr = "" attr: Any = ""
if callable(attr): if callable(attr):
# noinspection PyCallingNonCallable # noinspection PyCallingNonCallable
return f"{attr()}" return f"{attr()}"

View file

@ -4,22 +4,24 @@ from celery.app import shared_task
from celery.utils.log import get_task_logger from celery.utils.log import get_task_logger
from constance import config from constance import config
from django.conf import settings from django.conf import settings
from django.core import mail
from django.core.mail import EmailMessage from django.core.mail import EmailMessage
from django.template.loader import render_to_string from django.template.loader import render_to_string
from django.utils.translation import activate from django.utils.translation import activate
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from core.models import Order, OrderProduct, PromoCode from core.models import Order, OrderProduct, PromoCode
from core.utils.constance import set_email_settings from core.utils import get_dynamic_email_connection
logger = get_task_logger(__name__) logger = get_task_logger(__name__)
@shared_task(queue="default") @shared_task(queue="default")
def contact_us_email(contact_info): def contact_us_email(contact_info) -> tuple[bool, str]:
set_email_settings() logger.debug(
connection = mail.get_connection() "Contact us email sent to %s with subject %s",
contact_info.get("email"),
contact_info.get("subject", "Without subject"),
)
email = EmailMessage( email = EmailMessage(
_(f"{config.PROJECT_NAME} | contact us initiated"), _(f"{config.PROJECT_NAME} | contact us initiated"),
@ -36,7 +38,7 @@ def contact_us_email(contact_info):
), ),
to=[config.EMAIL_FROM], to=[config.EMAIL_FROM],
from_email=f"{config.PROJECT_NAME} <{config.EMAIL_FROM}>", from_email=f"{config.PROJECT_NAME} <{config.EMAIL_FROM}>",
connection=connection, connection=get_dynamic_email_connection(),
) )
email.content_subtype = "html" email.content_subtype = "html"
email.send() email.send()
@ -66,9 +68,6 @@ def send_order_created_email(order_pk: str) -> tuple[bool, str]:
activate(language) activate(language)
set_email_settings()
connection = mail.get_connection()
if not order.is_whole_digital: if not order.is_whole_digital:
email = EmailMessage( email = EmailMessage(
_(f"{config.PROJECT_NAME} | order confirmation"), _(f"{config.PROJECT_NAME} | order confirmation"),
@ -83,7 +82,7 @@ def send_order_created_email(order_pk: str) -> tuple[bool, str]:
), ),
to=[recipient], to=[recipient],
from_email=f"{config.PROJECT_NAME} <{config.EMAIL_FROM}>", from_email=f"{config.PROJECT_NAME} <{config.EMAIL_FROM}>",
connection=connection, connection=get_dynamic_email_connection(),
) )
email.content_subtype = "html" email.content_subtype = "html"
email.send() email.send()
@ -93,7 +92,7 @@ def send_order_created_email(order_pk: str) -> tuple[bool, str]:
@shared_task(queue="default") @shared_task(queue="default")
def send_order_finished_email(order_pk: str) -> tuple[bool, str]: def send_order_finished_email(order_pk: str) -> tuple[bool, str]:
def send_digital_assets_email(ops: list[OrderProduct]): def send_digital_assets_email(ops: list[OrderProduct]) -> None:
if len(ops) <= 0: if len(ops) <= 0:
return return
@ -102,9 +101,6 @@ def send_order_finished_email(order_pk: str) -> tuple[bool, str]:
activate(order.user.language) activate(order.user.language)
set_email_settings()
connection = mail.get_connection()
email = EmailMessage( email = EmailMessage(
_(f"{config.PROJECT_NAME} | order delivered"), _(f"{config.PROJECT_NAME} | order delivered"),
render_to_string( render_to_string(
@ -122,21 +118,19 @@ def send_order_finished_email(order_pk: str) -> tuple[bool, str]:
), ),
to=[order.user.email], to=[order.user.email],
from_email=f"{config.PROJECT_NAME} <{config.EMAIL_FROM}>", from_email=f"{config.PROJECT_NAME} <{config.EMAIL_FROM}>",
connection=connection, connection=get_dynamic_email_connection(),
) )
email.content_subtype = "html" email.content_subtype = "html"
result = email.send() result = email.send()
logger.debug("Order %s: Tried to send email to %s, resulted with %s", order.pk, order.user.email, result) logger.debug("Order %s: Tried to send email to %s, resulted with %s", order.pk, order.user.email, result)
def send_thank_you_email(ops: list[OrderProduct]): def send_thank_you_email(ops: list[OrderProduct]) -> None:
if ops: if ops:
pass pass
if not order.user: if not order.user:
return return
activate(order.user.language) activate(order.user.language)
set_email_settings()
pass pass
try: try:
@ -190,9 +184,6 @@ def send_promocode_created_email(promocode_pk: str) -> tuple[bool, str]:
activate(promocode.user.language) activate(promocode.user.language)
set_email_settings()
connection = mail.get_connection()
email = EmailMessage( email = EmailMessage(
_(f"{config.PROJECT_NAME} | promocode granted"), _(f"{config.PROJECT_NAME} | promocode granted"),
render_to_string( render_to_string(
@ -208,7 +199,7 @@ def send_promocode_created_email(promocode_pk: str) -> tuple[bool, str]:
), ),
to=[promocode.user.email], to=[promocode.user.email],
from_email=f"{config.PROJECT_NAME} <{config.EMAIL_FROM}>", from_email=f"{config.PROJECT_NAME} <{config.EMAIL_FROM}>",
connection=connection, connection=get_dynamic_email_connection(),
) )
email.content_subtype = "html" email.content_subtype = "html"
result = email.send() result = email.send()

View file

@ -1,5 +1,5 @@
from constance import config from constance import config
def get_flag_by_language(language): def get_flag_by_language(language: str) -> str:
return f"https://api.{config.BASE_DOMAIN}/static/flags/{language}.png" return f"https://api.{config.BASE_DOMAIN}/static/flags/{language}.png"

View file

@ -3,12 +3,14 @@ from django.core.files.images import ImageFile, get_image_dimensions
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
def validate_category_image_dimensions(image: ImageFile) -> None: def validate_category_image_dimensions(
max_width = 99999 image: ImageFile, max_width: int | None = None, max_height: int | None = None
max_height = 99999 ) -> None:
max_width = max_width or 7680
max_height = max_height or 4320
if image: if image:
width, height = get_image_dimensions(image.file) width, height = get_image_dimensions(image.file) # type: ignore [arg-type]
if width > max_width or height > max_height: if int(width) > max_width or int(height) > max_height: # type: ignore [arg-type]
raise ValidationError(_(f"image dimensions should not exceed w{max_width} x h{max_height} pixels")) raise ValidationError(_(f"image dimensions should not exceed w{max_width} x h{max_height} pixels"))

View file

@ -231,12 +231,12 @@ class AbstractVendor:
def resolve_price_with_currency(self, price: float | int | Decimal, provider: str, currency: str = "") -> float: def resolve_price_with_currency(self, price: float | int | Decimal, provider: str, currency: str = "") -> float:
rates = get_rates(provider) rates = get_rates(provider)
rate = rates.get(currency or self.currency) rate = rates.get(currency or self.currency) if rates else 1
if not rate: if not rate:
raise RatesError(f"No rate found for {currency or self.currency} in {rates} with probider {provider}...") raise RatesError(f"No rate found for {currency or self.currency} in {rates} with probider {provider}...")
return float(round(price / rate, 2)) if rate else float(round(price, 2)) # type: ignore [arg-type] return float(round(price / rate, 2)) if rate else float(round(price, 2)) # type: ignore [arg-type, operator]
@staticmethod @staticmethod
def round_price_marketologically(price: float) -> float: def round_price_marketologically(price: float) -> float:
@ -339,9 +339,9 @@ class AbstractVendor:
Product.objects.filter(pk__in=batch_ids).delete() Product.objects.filter(pk__in=batch_ids).delete()
def delete_belongings(self) -> None: def delete_belongings(self) -> None:
self.get_products_queryset().delete() # type: ignore [union-attr] self.get_products_queryset().delete()
self.get_stocks_queryset().delete() # type: ignore [union-attr] self.get_stocks_queryset().delete()
self.get_attribute_values_queryset().delete() # type: ignore [union-attr] self.get_attribute_values_queryset().delete()
def get_or_create_attribute_safe(self, *, name: str, attr_group: AttributeGroup) -> Attribute: def get_or_create_attribute_safe(self, *, name: str, attr_group: AttributeGroup) -> Attribute:
key = name[:255] key = name[:255]
@ -393,11 +393,11 @@ class AbstractVendor:
attribute = Attribute.objects.filter(name=key, group=attr_group).order_by("uuid").first() # type: ignore [assignment] attribute = Attribute.objects.filter(name=key, group=attr_group).order_by("uuid").first() # type: ignore [assignment]
attribute.is_active = True attribute.is_active = True
attribute.value_type = attr_value_type attribute.value_type = attr_value_type
attribute.save() # type: ignore [no-untyped-call] attribute.save()
except IntegrityError: except IntegrityError:
return return
attribute.save() # type: ignore [no-untyped-call] attribute.save()
if not is_created: if not is_created:
return return

View file

@ -8,7 +8,7 @@ from django.contrib.sitemaps.views import index as _sitemap_index_view
from django.contrib.sitemaps.views import sitemap as _sitemap_detail_view from django.contrib.sitemaps.views import sitemap as _sitemap_detail_view
from django.core.cache import cache from django.core.cache import cache
from django.core.exceptions import BadRequest from django.core.exceptions import BadRequest
from django.http import FileResponse, Http404, JsonResponse, HttpRequest, HttpResponseRedirect from django.http import FileResponse, Http404, HttpRequest, HttpResponse, HttpResponseRedirect, JsonResponse
from django.shortcuts import redirect from django.shortcuts import redirect
from django.utils.decorators import method_decorator from django.utils.decorators import method_decorator
from django.utils.http import urlsafe_base64_decode from django.utils.http import urlsafe_base64_decode
@ -181,9 +181,9 @@ class CacheOperatorView(APIView):
return Response( return Response(
data=web_cache( data=web_cache(
request, request,
request.data.get("key"), request.data.get("key"), # type: ignore [arg-type]
request.data.get("data"), request.data.get("data", {}),
request.data.get("timeout"), request.data.get("timeout"), # type: ignore [arg-type]
), ),
status=status.HTTP_200_OK, status=status.HTTP_200_OK,
) )
@ -205,7 +205,7 @@ class ContactUsView(APIView):
def post(self, request: Request, *args, **kwargs) -> Response: def post(self, request: Request, *args, **kwargs) -> Response:
serializer = self.serializer_class(data=request.data) serializer = self.serializer_class(data=request.data)
serializer.is_valid(raise_exception=True) serializer.is_valid(raise_exception=True)
contact_us_email.delay(serializer.validated_data) contact_us_email.delay(serializer.validated_data) # type: ignore [attr-defined]
return Response(data=serializer.data, status=status.HTTP_200_OK) return Response(data=serializer.data, status=status.HTTP_200_OK)
@ -227,7 +227,7 @@ class RequestCursedURLView(APIView):
@method_decorator(ratelimit(key="ip", rate="10/h")) @method_decorator(ratelimit(key="ip", rate="10/h"))
def post(self, request: Request, *args, **kwargs) -> Response: def post(self, request: Request, *args, **kwargs) -> Response:
url = request.data.get("url") url = request.data.get("url")
if not is_url_safe(url): if not is_url_safe(str(url)):
return Response( return Response(
data={"error": _("only URLs starting with http(s):// are allowed")}, data={"error": _("only URLs starting with http(s):// are allowed")},
status=status.HTTP_400_BAD_REQUEST, status=status.HTTP_400_BAD_REQUEST,
@ -235,7 +235,7 @@ class RequestCursedURLView(APIView):
try: try:
data = cache.get(url, None) data = cache.get(url, None)
if not data: if not data:
response = requests.get(url, headers={"content-type": "application/json"}) response = requests.get(str(url), headers={"content-type": "application/json"})
response.raise_for_status() response.raise_for_status()
data = camelize(response.json()) data = camelize(response.json())
cache.set(url, data, 86400) cache.set(url, data, 86400)
@ -317,7 +317,10 @@ def download_digital_asset_view(request: HttpRequest, *args, **kwargs) -> FileRe
download.num_downloads += 1 download.num_downloads += 1
download.save() download.save()
file_path = download.order_product.product.stocks.first().digital_asset.path if not download.order_product.product:
raise BadRequest(_("the order product does not have a product"))
file_path = download.order_product.product.stocks.first().digital_asset.path # type: ignore [union-attr]
content_type, encoding = mimetypes.guess_type(file_path) content_type, encoding = mimetypes.guess_type(file_path)
if not content_type: if not content_type:
@ -357,7 +360,7 @@ download_digital_asset_view.__doc__ = _( # type: ignore [assignment]
) )
def favicon_view(request: HttpRequest, *args, **kwargs) -> FileResponse | Http404: def favicon_view(request: HttpRequest, *args, **kwargs) -> HttpResponse | FileResponse:
try: try:
favicon_path = os.path.join(settings.BASE_DIR, "static/favicon.png") favicon_path = os.path.join(settings.BASE_DIR, "static/favicon.png")
return FileResponse(open(favicon_path, "rb"), content_type="image/x-icon") return FileResponse(open(favicon_path, "rb"), content_type="image/x-icon")
@ -373,7 +376,7 @@ favicon_view.__doc__ = _( # type: ignore [assignment]
) )
def index(request: HttpRequest, *args, **kwargs) -> HttpResponseRedirect: def index(request: HttpRequest, *args, **kwargs) -> HttpResponse | HttpResponseRedirect:
return redirect("admin:index") return redirect("admin:index")

View file

@ -1,5 +1,6 @@
import logging import logging
import uuid import uuid
from typing import Type
from uuid import UUID from uuid import UUID
from constance import config from constance import config
@ -20,6 +21,7 @@ from rest_framework.permissions import AllowAny
from rest_framework.renderers import MultiPartRenderer from rest_framework.renderers import MultiPartRenderer
from rest_framework.request import Request from rest_framework.request import Request
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework.serializers import Serializer
from rest_framework.viewsets import ModelViewSet from rest_framework.viewsets import ModelViewSet
from rest_framework_xml.renderers import XMLRenderer from rest_framework_xml.renderers import XMLRenderer
from rest_framework_yaml.renderers import YAMLRenderer from rest_framework_yaml.renderers import YAMLRenderer
@ -132,13 +134,14 @@ class EvibesViewSet(ModelViewSet):
"permissions, and rendering formats." "permissions, and rendering formats."
) )
action_serializer_classes: dict = {} action_serializer_classes: dict[str, Type[Serializer]] = {}
additional: dict = {} additional: dict[str, str] = {}
permission_classes = [EvibesPermission] permission_classes = [EvibesPermission]
renderer_classes = [CamelCaseJSONRenderer, MultiPartRenderer, XMLRenderer, YAMLRenderer] renderer_classes = [CamelCaseJSONRenderer, MultiPartRenderer, XMLRenderer, YAMLRenderer]
def get_serializer_class(self): def get_serializer_class(self) -> Type[Serializer]:
return self.action_serializer_classes.get(self.action, super().get_serializer_class()) # noinspection PyTypeChecker
return self.action_serializer_classes.get(self.action, super().get_serializer_class()) # type: ignore [arg-type]
@extend_schema_view(**ATTRIBUTE_GROUP_SCHEMA) @extend_schema_view(**ATTRIBUTE_GROUP_SCHEMA)
@ -587,6 +590,7 @@ class FeedbackViewSet(EvibesViewSet):
return qs.filter(is_active=True) return qs.filter(is_active=True)
# noinspection PyUnusedLocal
@extend_schema_view(**ORDER_SCHEMA) @extend_schema_view(**ORDER_SCHEMA)
class OrderViewSet(EvibesViewSet): class OrderViewSet(EvibesViewSet):
__doc__ = _( __doc__ = _(
@ -659,9 +663,12 @@ class OrderViewSet(EvibesViewSet):
def buy(self, request: Request, *args, **kwargs) -> Response: def buy(self, request: Request, *args, **kwargs) -> Response:
serializer = BuyOrderSerializer(data=request.data) serializer = BuyOrderSerializer(data=request.data)
serializer.is_valid(raise_exception=True) serializer.is_valid(raise_exception=True)
lookup_val = kwargs.get(self.lookup_field) order = self.get_object()
if not request.user or request.user.is_anonymous:
return Response(
status=status.HTTP_401_UNAUTHORIZED,
)
try: try:
order = Order.objects.get(user=request.user, uuid=lookup_val)
instance = order.buy( instance = order.buy(
force_balance=serializer.validated_data.get("force_balance"), force_balance=serializer.validated_data.get("force_balance"),
force_payment=serializer.validated_data.get("force_payment"), force_payment=serializer.validated_data.get("force_payment"),
@ -709,9 +716,8 @@ class OrderViewSet(EvibesViewSet):
def add_order_product(self, request: Request, *args, **kwargs) -> Response: def add_order_product(self, request: Request, *args, **kwargs) -> Response:
serializer = AddOrderProductSerializer(data=request.data) serializer = AddOrderProductSerializer(data=request.data)
serializer.is_valid(raise_exception=True) serializer.is_valid(raise_exception=True)
lookup_val = kwargs.get(self.lookup_field) order = self.get_object()
try: try:
order = Order.objects.get(uuid=lookup_val)
if not (request.user.has_perm("core.add_orderproduct") or request.user == order.user): if not (request.user.has_perm("core.add_orderproduct") or request.user == order.user):
raise PermissionDenied(permission_denied_message) raise PermissionDenied(permission_denied_message)
@ -727,9 +733,8 @@ class OrderViewSet(EvibesViewSet):
def remove_order_product(self, request: Request, *args, **kwargs) -> Response: def remove_order_product(self, request: Request, *args, **kwargs) -> Response:
serializer = RemoveOrderProductSerializer(data=request.data) serializer = RemoveOrderProductSerializer(data=request.data)
serializer.is_valid(raise_exception=True) serializer.is_valid(raise_exception=True)
lookup_val = kwargs.get(self.lookup_field) order = self.get_object()
try: try:
order = Order.objects.get(uuid=lookup_val)
if not (request.user.has_perm("core.delete_orderproduct") or request.user == order.user): if not (request.user.has_perm("core.delete_orderproduct") or request.user == order.user):
raise PermissionDenied(permission_denied_message) raise PermissionDenied(permission_denied_message)
@ -762,9 +767,8 @@ class OrderViewSet(EvibesViewSet):
def bulk_remove_order_products(self, request: Request, *args, **kwargs) -> Response: def bulk_remove_order_products(self, request: Request, *args, **kwargs) -> Response:
serializer = BulkRemoveOrderProductsSerializer(data=request.data) serializer = BulkRemoveOrderProductsSerializer(data=request.data)
serializer.is_valid(raise_exception=True) serializer.is_valid(raise_exception=True)
lookup_val = kwargs.get(self.lookup_field) order = self.get_object()
try: try:
order = Order.objects.get(uuid=lookup_val)
if not (request.user.has_perm("core.delete_orderproduct") or request.user == order.user): if not (request.user.has_perm("core.delete_orderproduct") or request.user == order.user):
raise PermissionDenied(permission_denied_message) raise PermissionDenied(permission_denied_message)
@ -776,6 +780,7 @@ class OrderViewSet(EvibesViewSet):
return Response(status=status.HTTP_404_NOT_FOUND) return Response(status=status.HTTP_404_NOT_FOUND)
# noinspection PyUnusedLocal
@extend_schema_view(**ORDER_PRODUCT_SCHEMA) @extend_schema_view(**ORDER_PRODUCT_SCHEMA)
class OrderProductViewSet(EvibesViewSet): class OrderProductViewSet(EvibesViewSet):
__doc__ = _( __doc__ = _(
@ -810,7 +815,9 @@ class OrderProductViewSet(EvibesViewSet):
serializer = self.get_serializer(request.data) serializer = self.get_serializer(request.data)
serializer.is_valid(raise_exception=True) serializer.is_valid(raise_exception=True)
try: try:
order_product = OrderProduct.objects.get(uuid=kwargs.get("pk")) order_product = OrderProduct.objects.get(uuid=str(kwargs.get("pk")))
if not order_product.order:
return Response(status=status.HTTP_404_NOT_FOUND)
if not (request.user.has_perm("core.change_orderproduct") or request.user == order_product.order.user): if not (request.user.has_perm("core.change_orderproduct") or request.user == order_product.order.user):
raise PermissionDenied(permission_denied_message) raise PermissionDenied(permission_denied_message)
feedback = order_product.do_feedback( feedback = order_product.do_feedback(
@ -934,7 +941,7 @@ class WishlistViewSet(EvibesViewSet):
serializer = AddWishlistProductSerializer(data=request.data) serializer = AddWishlistProductSerializer(data=request.data)
serializer.is_valid(raise_exception=True) serializer.is_valid(raise_exception=True)
try: try:
wishlist = Wishlist.objects.get(uuid=kwargs.get("pk")) wishlist = self.get_object()
if not (request.user.has_perm("core.change_wishlist") or request.user == wishlist.user): if not (request.user.has_perm("core.change_wishlist") or request.user == wishlist.user):
raise PermissionDenied(permission_denied_message) raise PermissionDenied(permission_denied_message)
@ -952,7 +959,7 @@ class WishlistViewSet(EvibesViewSet):
serializer = RemoveWishlistProductSerializer(data=request.data) serializer = RemoveWishlistProductSerializer(data=request.data)
serializer.is_valid(raise_exception=True) serializer.is_valid(raise_exception=True)
try: try:
wishlist = Wishlist.objects.get(uuid=kwargs.get("pk")) wishlist = self.get_object()
if not (request.user.has_perm("core.change_wishlist") or request.user == wishlist.user): if not (request.user.has_perm("core.change_wishlist") or request.user == wishlist.user):
raise PermissionDenied(permission_denied_message) raise PermissionDenied(permission_denied_message)
@ -970,7 +977,7 @@ class WishlistViewSet(EvibesViewSet):
serializer = BulkAddWishlistProductSerializer(data=request.data) serializer = BulkAddWishlistProductSerializer(data=request.data)
serializer.is_valid(raise_exception=True) serializer.is_valid(raise_exception=True)
try: try:
wishlist = Wishlist.objects.get(uuid=kwargs.get("pk")) wishlist = self.get_object()
if not (request.user.has_perm("core.change_wishlist") or request.user == wishlist.user): if not (request.user.has_perm("core.change_wishlist") or request.user == wishlist.user):
raise PermissionDenied(permission_denied_message) raise PermissionDenied(permission_denied_message)
@ -988,7 +995,7 @@ class WishlistViewSet(EvibesViewSet):
serializer = BulkRemoveWishlistProductSerializer(data=request.data) serializer = BulkRemoveWishlistProductSerializer(data=request.data)
serializer.is_valid(raise_exception=True) serializer.is_valid(raise_exception=True)
try: try:
wishlist = Wishlist.objects.get(uuid=kwargs.get("pk")) wishlist = self.get_object()
if not (request.user.has_perm("core.change_wishlist") or request.user == wishlist.user): if not (request.user.has_perm("core.change_wishlist") or request.user == wishlist.user):
raise PermissionDenied(permission_denied_message) raise PermissionDenied(permission_denied_message)
@ -1035,7 +1042,7 @@ class AddressViewSet(EvibesViewSet):
def retrieve(self, request: Request, *args, **kwargs) -> Response: def retrieve(self, request: Request, *args, **kwargs) -> Response:
try: try:
address = Address.objects.get(uuid=kwargs.get("pk")) address = Address.objects.get(uuid=str(kwargs.get("pk")))
return Response(status=status.HTTP_200_OK, data=self.get_serializer(address).data) return Response(status=status.HTTP_200_OK, data=self.get_serializer(address).data)
except Address.DoesNotExist: except Address.DoesNotExist:
return Response(status=status.HTTP_404_NOT_FOUND) return Response(status=status.HTTP_404_NOT_FOUND)
@ -1064,9 +1071,9 @@ class AddressViewSet(EvibesViewSet):
try: try:
suggestions = fetch_address_suggestions(query=q, limit=limit) suggestions = fetch_address_suggestions(query=q, limit=limit)
serializer = AddressSuggestionSerializer(suggestions, many=True) suggestion_serializer = AddressSuggestionSerializer(suggestions, many=True)
return Response( return Response(
serializer.data, suggestion_serializer.data,
status=status.HTTP_200_OK, status=status.HTTP_200_OK,
) )
except Exception as e: except Exception as e:

View file

@ -1,14 +1,17 @@
import json import json
from typing import Any from typing import Any, Mapping
from django import forms from django import forms
from django.forms.renderers import DjangoTemplates from django.core.files.uploadedfile import UploadedFile
from django.forms.renderers import BaseRenderer
from django.utils.datastructures import MultiValueDict
from django.utils.safestring import SafeString
class JSONTableWidget(forms.Widget): class JSONTableWidget(forms.Widget):
template_name = "json_table_widget.html" template_name = "json_table_widget.html"
def format_value(self, value: str | dict[str, Any]): def format_value(self, value: str | dict[str, Any]) -> str | dict[str, Any]: # type: ignore [override]
if isinstance(value, dict): if isinstance(value, dict):
return value return value
try: try:
@ -19,18 +22,23 @@ class JSONTableWidget(forms.Widget):
return value return value
def render( def render(
self, name: str, value: str | dict[str, Any], attrs: dict | None = None, renderer: DjangoTemplates | None = None self,
): name: str,
value: str | dict[str, Any],
attrs: dict[str, Any] | None = None,
renderer: BaseRenderer | None = None,
) -> SafeString:
value = self.format_value(value) value = self.format_value(value)
return super().render(name, value, attrs, renderer) return super().render(name, value, attrs, renderer)
# noinspection PyUnresolvedReferences def value_from_datadict(
def value_from_datadict(self, data: dict[str, Any], files: list, name: str): self, data: Mapping[str, Any], files: MultiValueDict[str, UploadedFile], name: str
) -> str | None:
json_data = {} json_data = {}
try: try:
keys = data.getlist(f"{name}_key") keys = data.getlist(f"{name}_key") # type: ignore [attr-defined]
values = data.getlist(f"{name}_value") values = data.getlist(f"{name}_value") # type: ignore [attr-defined]
for key, value in zip(keys, values, strict=True): for key, value in zip(keys, values, strict=True):
if key.strip(): if key.strip():
try: try:

View file

@ -1,3 +1,4 @@
from typing import Any
from urllib.parse import urlparse from urllib.parse import urlparse
from storages.backends.ftp import FTPStorage from storages.backends.ftp import FTPStorage
@ -7,7 +8,7 @@ class AbsoluteFTPStorage(FTPStorage): # type: ignore
# noinspection PyProtectedMember # noinspection PyProtectedMember
# noinspection PyUnresolvedReferences # noinspection PyUnresolvedReferences
def _get_config(self): def _get_config(self) -> Any:
cfg = super()._get_config() cfg = super()._get_config()
url = urlparse(self.location) url = urlparse(self.location)
cfg["path"] = url.path or cfg["path"] cfg["path"] = url.path or cfg["path"]

View file

@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: EVIBES 3.0.0\n" "Project-Id-Version: EVIBES 3.0.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-10-13 13:56+0300\n" "POT-Creation-Date: 2025-10-13 18:49+0300\n"
"PO-Revision-Date: 2025-06-16 08:59+0100\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n"
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n" "Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n" "Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
@ -38,106 +38,110 @@ msgid "Phone number of the company"
msgstr "رقم هاتف الشركة" msgstr "رقم هاتف الشركة"
#: evibes/settings/constance.py:28 #: evibes/settings/constance.py:28
msgid "!!!DO NOT CHANGE"
msgstr "!!!لا تغير"
#: evibes/settings/constance.py:29
msgid "SMTP host" msgid "SMTP host"
msgstr "مضيف SMTP" msgstr "مضيف SMTP"
#: evibes/settings/constance.py:29 #: evibes/settings/constance.py:30
msgid "SMTP port" msgid "SMTP port"
msgstr "منفذ SMTP" msgstr "منفذ SMTP"
#: evibes/settings/constance.py:30 #: evibes/settings/constance.py:31
msgid "Use TLS (0=No, 1=Yes)" msgid "Use TLS (0=No, 1=Yes)"
msgstr "استخدام TLS" msgstr "استخدام TLS"
#: evibes/settings/constance.py:31 #: evibes/settings/constance.py:32
msgid "Use SSL (0=No, 1=Yes)" msgid "Use SSL (0=No, 1=Yes)"
msgstr "استخدام SSL" msgstr "استخدام SSL"
#: evibes/settings/constance.py:32 #: evibes/settings/constance.py:33
msgid "SMTP username" msgid "SMTP username"
msgstr "اسم مستخدم SMTP" msgstr "اسم مستخدم SMTP"
#: evibes/settings/constance.py:33 #: evibes/settings/constance.py:34
msgid "SMTP password" msgid "SMTP password"
msgstr "كلمة مرور SMTP" msgstr "كلمة مرور SMTP"
#: evibes/settings/constance.py:34 #: evibes/settings/constance.py:35
msgid "Mail from option" msgid "Mail from option"
msgstr "عنوان مرسل البريد الإلكتروني" msgstr "عنوان مرسل البريد الإلكتروني"
#: evibes/settings/constance.py:35 #: evibes/settings/constance.py:36
msgid "Payment gateway URL" msgid "Payment gateway URL"
msgstr "عنوان URL لبوابة الدفع" msgstr "عنوان URL لبوابة الدفع"
#: evibes/settings/constance.py:36 #: evibes/settings/constance.py:37
msgid "Payment gateway token" msgid "Payment gateway token"
msgstr "الرمز المميز لبوابة الدفع" msgstr "الرمز المميز لبوابة الدفع"
#: evibes/settings/constance.py:37 #: evibes/settings/constance.py:38
msgid "Payment gateway minimum amount" msgid "Payment gateway minimum amount"
msgstr "الحد الأدنى لمبلغ بوابة الدفع" msgstr "الحد الأدنى لمبلغ بوابة الدفع"
#: evibes/settings/constance.py:38 #: evibes/settings/constance.py:39
msgid "Payment gateway maximum amount" msgid "Payment gateway maximum amount"
msgstr "الحد الأقصى لمبلغ بوابة الدفع" msgstr "الحد الأقصى لمبلغ بوابة الدفع"
#: evibes/settings/constance.py:39 #: evibes/settings/constance.py:40
msgid "Exchange rate API key" msgid "Exchange rate API key"
msgstr "مفتاح API لسعر الصرف" msgstr "مفتاح API لسعر الصرف"
#: evibes/settings/constance.py:40 #: evibes/settings/constance.py:41
msgid "OpenStreetMap Nominatim API URL" msgid "OpenStreetMap Nominatim API URL"
msgstr "عنوان URL لواجهة برمجة تطبيقات OpenStreetMap Nominatim" msgstr "عنوان URL لواجهة برمجة تطبيقات OpenStreetMap Nominatim"
#: evibes/settings/constance.py:41 #: evibes/settings/constance.py:42
msgid "OpenAI API Key" msgid "OpenAI API Key"
msgstr "مفتاح واجهة برمجة تطبيقات OpenAI" msgstr "مفتاح واجهة برمجة تطبيقات OpenAI"
#: evibes/settings/constance.py:42 #: evibes/settings/constance.py:43
msgid "Abstract API Key" msgid "Abstract API Key"
msgstr "مفتاح واجهة برمجة التطبيقات المجردة" msgstr "مفتاح واجهة برمجة التطبيقات المجردة"
#: evibes/settings/constance.py:43 #: evibes/settings/constance.py:44
msgid "HTTP Proxy" msgid "HTTP Proxy"
msgstr "وكيل HTTP" msgstr "وكيل HTTP"
#: evibes/settings/constance.py:44 #: evibes/settings/constance.py:45
msgid "Disable buy functionality" msgid "Disable buy functionality"
msgstr "تعطيل وظيفة الشراء" msgstr "تعطيل وظيفة الشراء"
#: evibes/settings/constance.py:45 #: evibes/settings/constance.py:46
msgid "An entity for storing advertisiment data" msgid "An entity for storing advertisiment data"
msgstr "كيان لتخزين بيانات الإعلانات" msgstr "كيان لتخزين بيانات الإعلانات"
#: evibes/settings/constance.py:46 #: evibes/settings/constance.py:47
msgid "An entity for storing analytics data" msgid "An entity for storing analytics data"
msgstr "كيان لتخزين بيانات التحليلات" msgstr "كيان لتخزين بيانات التحليلات"
#: evibes/settings/constance.py:47 #: evibes/settings/constance.py:48
msgid "Save responses from vendors' APIs" msgid "Save responses from vendors' APIs"
msgstr "حفظ الاستجابات من واجهات برمجة تطبيقات البائعين" msgstr "حفظ الاستجابات من واجهات برمجة تطبيقات البائعين"
#: evibes/settings/constance.py:53 #: evibes/settings/constance.py:54
msgid "General Options" msgid "General Options"
msgstr "الخيارات العامة" msgstr "الخيارات العامة"
#: evibes/settings/constance.py:61 #: evibes/settings/constance.py:62
msgid "Email Options" msgid "Email Options"
msgstr "خيارات البريد الإلكتروني" msgstr "خيارات البريد الإلكتروني"
#: evibes/settings/constance.py:70 #: evibes/settings/constance.py:72
msgid "Payment Gateway Options" msgid "Payment Gateway Options"
msgstr "خيارات بوابة الدفع" msgstr "خيارات بوابة الدفع"
#: evibes/settings/constance.py:77 #: evibes/settings/constance.py:79
msgid "Features Options" msgid "Features Options"
msgstr "خيارات الميزات" msgstr "خيارات الميزات"
#: evibes/settings/constance.py:84 #: evibes/settings/constance.py:86
msgid "SEO Options" msgid "SEO Options"
msgstr "خيارات تحسين محركات البحث" msgstr "خيارات تحسين محركات البحث"
#: evibes/settings/constance.py:88 #: evibes/settings/constance.py:90
msgid "Debugging Options" msgid "Debugging Options"
msgstr "خيارات التصحيح" msgstr "خيارات التصحيح"

Some files were not shown because too many files have changed in this diff Show more