add product

This commit is contained in:
javad committed 2026-10-08 16:37:45 +03:30
1 parent 423d4cf40e
commit c8d45dd07c
58 files changed
+8309 -674

No files matched your search

+41 -8
View File
@@ -1,4 +1,7 @@
from utils.admin_base import CRMModelAdmin
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from apps.cuser.forms import CUserCreationForm, CUserChangeForm
from apps.cuser.models import (
CUser as CUserModel,
CuserRole as CuserRoleModel,
@@ -8,23 +11,53 @@ from apps.cuser.models import (
# Register your models here.
class CUserAdmin(admin.ModelAdmin):
pass
class CUserAdmin(UserAdmin):
list_per_page = 50
save_on_top = True
date_hierarchy = 'created_at'
form = CUserChangeForm
add_form = CUserCreationForm
list_display = ('username', 'name_family', 'mobile', 'is_active', 'is_staff')
search_fields = ('username', 'name_family', 'mobile')
ordering = ('username',)
readonly_fields = ('last_login', 'created_at', 'updated_at')
fieldsets = (
(None, {'fields': ('username', 'password')}),
('اطلاعات کاربر', {'fields': ('name_family', 'mobile')}),
('دسترسی', {'fields': ('is_active', 'is_staff', 'is_superuser', 'groups', 'user_permissions')}),
('تاریخ‌ها', {'fields': ('last_login', 'created_at', 'updated_at')}),
)
add_fieldsets = (
(None, {'classes': ('wide',), 'fields': ('username', 'name_family', 'mobile', 'password1', 'password2', 'is_active', 'is_staff')}),
)
class CUserRoleAdmin(admin.ModelAdmin):
class CUserRoleAdmin(CRMModelAdmin):
list_display = ('id', 'cuser', 'name_family', 'mobile', 'role_type', 'sys_ws', 'is_active', 'customer_panel', 'is_admin')
search_fields = ('name_family', 'mobile', 'cuser__username')
readonly_fields = ('created_at', 'updated_at')
class RoleTypeAdmin(admin.ModelAdmin):
pass
class RoleTypeAdmin(CRMModelAdmin):
list_display = ('id', 'role_name', 'role_name_en', 'created_at')
class SmsOptAdmin(admin.ModelAdmin):
pass
class SmsOptAdmin(CRMModelAdmin):
list_display = ("id", "mobile", "expire", "created_at")
exclude = ("opt",)
sensitive_fields = ("opt",)
def get_readonly_fields(self, request, obj=None):
return ("mobile", "expire", "created_at", "updated_at")
def has_add_permission(self, request):
return False
def has_change_permission(self, request, obj=None):
return False
admin.site.register(CUserModel, CUserAdmin)
admin.site.register(CuserRoleModel, CUserRoleAdmin)
admin.site.register(RoleTypeModel, RoleTypeAdmin)
admin.site.register(SmsOptModel, SmsOptAdmin)
admin.site.register(SmsOptModel, SmsOptAdmin)
+12 -1
View File
@@ -1,6 +1,8 @@
from django.db import models
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin
from utils.base_model import BaseModel
from django.core.exceptions import ValidationError
from utils.validations.mobile import normalize_mobile
import uuid
@@ -8,9 +10,11 @@ class CUserManager(BaseUserManager):
def create_user(self, username, password, **extra_fields):
if not username:
raise ValueError("Please Enter username")
extra_fields['mobile'] = normalize_mobile(extra_fields.get('mobile'))
user = self.model(username=username, **extra_fields)
user.set_password(password)
user.save()
user.full_clean()
user.save(using=self._db)
return user
def create_superuser(self, username, password, **extra_fields):
@@ -31,6 +35,7 @@ class CUser(BaseModel, AbstractBaseUser, PermissionsMixin):
uuid = models.UUIDField(default=uuid.uuid4, editable=False, unique=True)
USERNAME_FIELD = 'username'
REQUIRED_FIELDS = ['mobile']
objects = CUserManager()
@@ -44,3 +49,9 @@ class CUser(BaseModel, AbstractBaseUser, PermissionsMixin):
def __str__(self):
return f'{self.name_family} - {self.username}'
def clean(self):
super().clean()
self.mobile = normalize_mobile(self.mobile)
if type(self).objects.filter(mobile=self.mobile).exclude(pk=self.pk).exists():
raise ValidationError({"mobile": "کاربری با این شماره موبایل قبلاً ثبت شده است."})
+30
View File
@@ -0,0 +1,30 @@
from django import forms
from django.contrib.auth.forms import UserChangeForm, UserCreationForm
from django.core.exceptions import ValidationError
from apps.cuser.cuser_model import CUser
from utils.validations.mobile import normalize_mobile
class MobileFormMixin:
def clean_mobile(self):
try:
return normalize_mobile(self.cleaned_data['mobile'])
except ValidationError as error:
raise forms.ValidationError(error.messages)
class CUserCreationForm(MobileFormMixin, UserCreationForm):
mobile = forms.CharField(label='شماره موبایل')
class Meta(UserCreationForm.Meta):
model = CUser
fields = ('username', 'name_family', 'mobile', 'is_active', 'is_staff')
class CUserChangeForm(MobileFormMixin, UserChangeForm):
mobile = forms.CharField(label='شماره موبایل')
class Meta(UserChangeForm.Meta):
model = CUser
fields = '__all__'
+8 -2
View File
@@ -3,15 +3,21 @@ from apps.cuser.models import CuserRole as CuserRoleModel
from utils.get_cuser_role import get_cuser_role_uuid
from rest_framework.response import Response
from rest_framework import status
from rest_framework.permissions import IsAuthenticated
# Create your views here.
class CUserGetInfo(views.APIView):
permission_classes = (IsAuthenticated,)
def get(self, request):
cuser_role_uuid = get_cuser_role_uuid(request)
cuser_obj = CuserRoleModel.objects.get(uuid=cuser_role_uuid)
return Response(data={"name_family": cuser_obj.name_family}, status=status.HTTP_200_OK)
return Response(data={"name_family": cuser_obj.name_family,
"role": cuser_obj.role_type.role_name_en,
"workspace": str(cuser_obj.sys_ws.uuid),
"permissions": {"manage_products": cuser_obj.role_type.role_name_en in ('workspace_admin', 'workspace_owner')}},
status=status.HTTP_200_OK)