feat: Enhance admin permissions and improve product currency handling
This commit is contained in:
+42
-14
@@ -11,11 +11,10 @@ from unfold.widgets import UnfoldAdminColorInputWidget
|
||||
from unfold.decorators import action, display
|
||||
from utils.admin import ModelAdmin
|
||||
from django.shortcuts import redirect
|
||||
|
||||
from .permissions import ProductDetailCategoryPermission
|
||||
from .permissions import ProductDetailCategoryPermission, ProductAdminPermission, ProductVariantAdminPermission, ProductVariantInlineAdminPermission, InPackItemsAdminPermission, AttributeTypeAdminPermission, AttributeValueAdminPermission
|
||||
|
||||
@admin.register(ProductDetailCategory)
|
||||
class ProductDetailCategoryAdmin(ModelAdmin, ImportExportModelAdmin):
|
||||
class ProductDetailCategoryAdmin(ProductDetailCategoryPermission, ModelAdmin, ImportExportModelAdmin):
|
||||
import_form_class = ImportForm
|
||||
export_form_class = ExportForm
|
||||
search_fields = ['title']
|
||||
@@ -26,8 +25,7 @@ class ProductDetailCategoryAdmin(ModelAdmin, ImportExportModelAdmin):
|
||||
"widget": ArrayWidget,
|
||||
}
|
||||
}
|
||||
def has_add_permission(self, request):
|
||||
return request.user.is_superuser
|
||||
|
||||
|
||||
|
||||
@admin.register(UnitCategoryModel)
|
||||
@@ -37,7 +35,7 @@ class UnitCategoryAdmin(ModelAdmin):
|
||||
|
||||
|
||||
@admin.register(InPackItems)
|
||||
class InPackItemsAdmin(ModelAdmin, ImportExportModelAdmin):
|
||||
class InPackItemsAdmin(InPackItemsAdminPermission, ModelAdmin, ImportExportModelAdmin):
|
||||
import_form_class = ImportForm
|
||||
export_form_class = ExportForm
|
||||
search_fields = ['item_title']
|
||||
@@ -62,6 +60,27 @@ class ShopModelAdmin(ModelAdmin, ImportExportModelAdmin):
|
||||
}
|
||||
}
|
||||
|
||||
# def get_queryset(self, request):
|
||||
|
||||
# if request.user.is_superuser:
|
||||
# return ShopModel.objects.all()
|
||||
|
||||
# if not hasattr(request.user, 'shop'):
|
||||
# return ShopModel.objects.none()
|
||||
|
||||
# queryset = ShopModel.objects.filter(id=request.user.shop.id)
|
||||
# return queryset
|
||||
|
||||
# def has_view_permission(self, request, obj=None):
|
||||
# if request.user.is_superuser or obj == None:
|
||||
# return True
|
||||
|
||||
# if not hasattr(request.user, 'shop'):
|
||||
# return False
|
||||
|
||||
# return request.user.shop == obj
|
||||
|
||||
|
||||
|
||||
class AttributeValueInLine(StackedInline):
|
||||
model = AttributeValue
|
||||
@@ -70,10 +89,17 @@ class AttributeValueInLine(StackedInline):
|
||||
min_num = 1
|
||||
# autocomplete_fields = ['product_attributes', 'in_pack_items', 'images']
|
||||
# search_fields = ['']
|
||||
|
||||
def has_view_permission(self, request, obj = ...):
|
||||
return True
|
||||
def has_add_permission(self, request):
|
||||
return True
|
||||
def has_change_permission(self, request, obj = ...):
|
||||
return False
|
||||
def has_delete_permission(self, request, obj = ...):
|
||||
return False
|
||||
|
||||
@admin.register(AttributeType)
|
||||
class AttributeTypeAdmin(ModelAdmin, ImportExportModelAdmin):
|
||||
class AttributeTypeAdmin(AttributeTypeAdminPermission, ModelAdmin, ImportExportModelAdmin):
|
||||
import_form_class = ImportForm
|
||||
export_form_class = ExportForm
|
||||
search_fields = ['name']
|
||||
@@ -88,7 +114,7 @@ class AttributeTypeAdmin(ModelAdmin, ImportExportModelAdmin):
|
||||
|
||||
|
||||
@admin.register(AttributeValue)
|
||||
class AttributeValueAdmin(ModelAdmin, ImportExportModelAdmin):
|
||||
class AttributeValueAdmin(AttributeValueAdminPermission, ModelAdmin, ImportExportModelAdmin):
|
||||
import_form_class = ImportForm
|
||||
export_form_class = ExportForm
|
||||
search_fields = ['value', 'attribute_type__name']
|
||||
@@ -182,7 +208,7 @@ class ProductDetailModel1Admin(ModelAdmin, ImportExportModelAdmin):
|
||||
|
||||
|
||||
|
||||
class ProductVariantInLine(StackedInline):
|
||||
class ProductVariantInLine(ProductVariantInlineAdminPermission, StackedInline):
|
||||
model = ProductVariant
|
||||
extra = 0
|
||||
show_change_link = True
|
||||
@@ -194,7 +220,6 @@ class ProductVariantInLine(StackedInline):
|
||||
fields = ['images', 'video','input_price', 'min_price', 'currency', 'price', 'discount','in_stock', 'color', 'product_attributes', 'in_pack_items', 'details', 'sell', 'slider_category', 'profit', 'special_discount_percent']
|
||||
# search_fields = ['']
|
||||
|
||||
|
||||
def formfield_for_dbfield(self, db_field, request, **kwargs):
|
||||
if db_field.name == 'color':
|
||||
kwargs['widget'] = UnfoldAdminColorInputWidget()
|
||||
@@ -202,7 +227,7 @@ class ProductVariantInLine(StackedInline):
|
||||
|
||||
from unfold.contrib.filters.admin import RelatedDropdownFilter
|
||||
@admin.register(ProductVariant)
|
||||
class ProductVariantAdmin(ModelAdmin, ImportExportModelAdmin):
|
||||
class ProductVariantAdmin(ProductVariantAdminPermission, ModelAdmin, ImportExportModelAdmin):
|
||||
import_form_class = ImportForm
|
||||
export_form_class = ExportForm
|
||||
autocomplete_fields = ['product_attributes', 'images', 'in_pack_items', 'details']
|
||||
@@ -212,8 +237,10 @@ class ProductVariantAdmin(ModelAdmin, ImportExportModelAdmin):
|
||||
list_filter_submit = True
|
||||
list_display = ('product', 'created_at')
|
||||
# inlines = [DetailModelInLine]
|
||||
|
||||
|
||||
@admin.register(ProductModel)
|
||||
class ProductModelAdmin(ModelAdmin, ImportExportModelAdmin):
|
||||
class ProductModelAdmin(ProductAdminPermission, ModelAdmin, ImportExportModelAdmin):
|
||||
import_form_class = ImportForm
|
||||
export_form_class = ExportForm
|
||||
inlines = [ProductVariantInLine]
|
||||
@@ -268,7 +295,8 @@ class ProductModelAdmin(ModelAdmin, ImportExportModelAdmin):
|
||||
|
||||
@action(description=f"اپدیت قیمت ها")
|
||||
def update_products_price(self, request):
|
||||
# update_prices()
|
||||
from product.tasks import update_prices
|
||||
update_prices()
|
||||
messages.success(request, f"قیمت {ProductVariant.objects.all().count()} تنوع محصول اپدیت شد")
|
||||
return redirect("admin:product_productmodel_changelist")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user