before change Ticket Desc to TextArea
This commit is contained in:
1 parent
f7dbd02a6c
commit
ef18434b86
55 files changed
+1026
-59
No files matched your search
+1
-1
@@ -22,7 +22,7 @@ class ProductCategoryAdmin(admin.ModelAdmin):
|
||||
|
||||
@admin.register(ProductModel)
|
||||
class ProductAdmin(admin.ModelAdmin):
|
||||
pass
|
||||
search_fields = ("name", "category__name", "acc_code")
|
||||
|
||||
|
||||
@admin.register(OrderModel)
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 4.2.1 on 2024-02-27 09:59
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('shop', '0019_alter_product_price'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='product',
|
||||
name='view_only',
|
||||
field=models.BooleanField(blank=True, default=False, null=True),
|
||||
),
|
||||
]
|
||||
@@ -34,6 +34,7 @@ class Product(BaseModel):
|
||||
acc_code = models.CharField(null=True, blank=True)
|
||||
order_prd = models.PositiveIntegerField(null=True, blank=True, default=None)
|
||||
attr = models.JSONField(null=True, blank=True)
|
||||
view_only = models.BooleanField(null=True, blank=True, default=False)
|
||||
|
||||
sys_ws = models.ForeignKey(WorkspaceModel, on_delete=models.CASCADE, null=False, blank=False)
|
||||
|
||||
|
||||
@@ -55,11 +55,18 @@ def list_order_operators(request) -> OrderModel:
|
||||
try:
|
||||
workspace_uuid = get_user_workspace_uuid(request)
|
||||
cuser_role_uuid = get_cuser_role_uuid(request)
|
||||
cuser_role = get_cuser_role(request)
|
||||
customer_responsibles = CustomerResponsibleModel.objects.filter(cuser_role__uuid=cuser_role_uuid, sys_ws__uuid=workspace_uuid)
|
||||
responsible_group_ids = customer_responsibles.values_list('responsible_group__id', flat=True)
|
||||
|
||||
orders = OrderModel.objects.filter(sys_ws__uuid=workspace_uuid,
|
||||
responsible_group_id__in=responsible_group_ids).order_by('-created_at')[:10]
|
||||
base_filter = {
|
||||
'sys_ws__uuid': workspace_uuid,
|
||||
}
|
||||
|
||||
if not cuser_role.is_admin:
|
||||
base_filter['responsible_group_id__in'] = responsible_group_ids
|
||||
|
||||
orders = OrderModel.objects.filter(**base_filter).order_by('-created_at')[:50]
|
||||
return orders
|
||||
except Exception as exp:
|
||||
message = f'Error Fetching List Order: {exp}'
|
||||
@@ -70,13 +77,23 @@ def retrieve_order_operators(request, order_id) -> OrderModel:
|
||||
try:
|
||||
workspace_uuid = get_user_workspace_uuid(request)
|
||||
cuser_role_uuid = get_cuser_role_uuid(request)
|
||||
cuser_role = get_cuser_role(request)
|
||||
customer_responsibles = CustomerResponsibleModel.objects.filter(cuser_role__uuid=cuser_role_uuid, sys_ws__uuid=workspace_uuid)
|
||||
responsible_group_ids = customer_responsibles.values_list('responsible_group__id', flat=True)
|
||||
|
||||
order = OrderModel.objects.get(id=order_id, sys_ws__uuid=workspace_uuid,
|
||||
responsible_group_id__in=responsible_group_ids)
|
||||
order.view_at = timezone.now()
|
||||
order.save()
|
||||
base_filter = {
|
||||
'sys_ws__uuid': workspace_uuid,
|
||||
'id': order_id,
|
||||
}
|
||||
|
||||
if not cuser_role.is_admin:
|
||||
base_filter['responsible_group_id__in'] = responsible_group_ids
|
||||
|
||||
order = OrderModel.objects.get(**base_filter)
|
||||
|
||||
if not cuser_role.is_admin:
|
||||
order.view_at = timezone.now()
|
||||
order.save()
|
||||
|
||||
return order
|
||||
except Exception as exp:
|
||||
|
||||
@@ -22,13 +22,24 @@ def list_product(workspace_uuid: str) -> ProductModel:
|
||||
|
||||
def list_product_by_category(workspace_uuid: str, category_id: int) -> ProductModel:
|
||||
try:
|
||||
product_category_obj = ProductModel.objects.filter(sys_ws__uuid=workspace_uuid, category_id=category_id)
|
||||
product_category_obj = ProductModel.objects.filter(sys_ws__uuid=workspace_uuid, category_id=category_id,
|
||||
view_only=False)
|
||||
return product_category_obj
|
||||
except Exception as exp:
|
||||
message = f'Error Fetching List Product by category: {exp}'
|
||||
raise exceptions.ValidationError({'error': message})
|
||||
|
||||
|
||||
def list_view_only_product_by_category(workspace_uuid: str, category_id: int) -> ProductModel:
|
||||
try:
|
||||
view_only_product_category_obj = ProductModel.objects.filter(sys_ws__uuid=workspace_uuid, category_id=category_id,
|
||||
view_only=True)
|
||||
return view_only_product_category_obj
|
||||
except Exception as exp:
|
||||
message = f'Error Fetching View Only List Product by category: {exp}'
|
||||
raise exceptions.ValidationError({'error': message})
|
||||
|
||||
|
||||
def count_product_in_category(workspace_uuid: str, category_id: int) -> int:
|
||||
try:
|
||||
count_product = ProductModel.objects.filter(sys_ws__uuid=workspace_uuid, category_id=category_id).count()
|
||||
|
||||
+3
-1
@@ -34,5 +34,7 @@ urlpatterns = [
|
||||
path('cart/add/', CartCreateApi.as_view(), name='add_cart'),
|
||||
path('cart/delete/<int:cart_id>/', CartDeleteApi.as_view(), name='delete_cart'),
|
||||
|
||||
#path('import/', ImportExcelView.as_view(), name='import_excel'),
|
||||
path('import/', ImportExcelView.as_view(), name='import_excel'),
|
||||
path('import/customer/', ImportExcelCustomersView.as_view(), name='import_excel_customer'),
|
||||
#path('import/city/', ImportExcelCitysView.as_view(), name='import_excel_city'),
|
||||
]
|
||||
@@ -16,4 +16,4 @@ from .cart import (CartListApi, CartCreateApi, CartDeleteApi)
|
||||
|
||||
from .order_item import (OrderItemsListApi, )
|
||||
|
||||
from .excel_import import ImportExcelView
|
||||
from .excel_import import ImportExcelView, ImportExcelCitysView, ImportExcelCustomersView
|
||||
@@ -2,7 +2,9 @@ from rest_framework.views import APIView
|
||||
from rest_framework.response import Response
|
||||
import pandas as pd
|
||||
from apps.shop.models import Product as ProductModel, ProductCategory as ProductCategoryModel
|
||||
from apps.workspace.models import Workspace as WorkspaceModel
|
||||
from apps.workspace.models import Workspace as WorkspaceModel, City as CityModel
|
||||
from apps.customer.models import Customer as CustomerModel
|
||||
from apps.customer.models import ResponsibleGroup as ResponsibleGroupModel
|
||||
import os
|
||||
|
||||
|
||||
@@ -13,27 +15,100 @@ class ImportExcelView(APIView):
|
||||
df = pd.read_excel('pe.xlsx')
|
||||
for index, row in df.iterrows():
|
||||
cate_name = row['cate_name']
|
||||
order_cat = row['order_cat']
|
||||
#order_cat = row['order_cat']
|
||||
acc_code = row['acc_code']
|
||||
prd_name = row['prd_name']
|
||||
order_prd = row['order_prd']
|
||||
prd_name = row['name']
|
||||
order_prd = row['size']
|
||||
vahed = row['vahed']
|
||||
|
||||
workspace = WorkspaceModel.objects.get(id=2)
|
||||
try:
|
||||
prd_ct = ProductCategoryModel.objects.get(name=cate_name, sys_ws=workspace, order_cat=order_cat)
|
||||
prd_ct = ProductCategoryModel.objects.get(name=cate_name, sys_ws=workspace)
|
||||
except ProductCategoryModel.DoesNotExist as exp:
|
||||
prd_ct = ProductCategoryModel.objects.create(name=cate_name, sys_ws=workspace, order_cat=order_cat)
|
||||
prd_ct = ProductCategoryModel.objects.create(name=cate_name, sys_ws=workspace)
|
||||
|
||||
new_product = ProductModel()
|
||||
new_product.name = prd_name
|
||||
new_product.price = 0
|
||||
new_product.category = ProductCategoryModel.objects.get(id=prd_ct.id)
|
||||
new_product.acc_code = acc_code
|
||||
new_product.order_prd = order_prd
|
||||
new_product.attr = {"acc_vahed": vahed}
|
||||
new_product.sys_ws = workspace
|
||||
new_product.save()
|
||||
if ProductModel.objects.filter(acc_code=acc_code).exists() == False:
|
||||
new_product = ProductModel()
|
||||
new_product.name = prd_name
|
||||
new_product.price = 0
|
||||
new_product.category = ProductCategoryModel.objects.get(id=prd_ct.id)
|
||||
new_product.acc_code = acc_code
|
||||
new_product.order_prd = order_prd
|
||||
new_product.view_only = True
|
||||
new_product.attr = {"acc_vahed": vahed}
|
||||
new_product.sys_ws = workspace
|
||||
new_product.save()
|
||||
else:
|
||||
up_product = ProductModel.objects.get(acc_code=acc_code)
|
||||
up_product.name = prd_name
|
||||
up_product.save()
|
||||
|
||||
return Response(data={"result": 'ok'})
|
||||
|
||||
|
||||
class ImportExcelCitysView(APIView):
|
||||
|
||||
def get(self, request):
|
||||
|
||||
|
||||
df = pd.read_excel('cities.xlsx')
|
||||
for index, row in df.iterrows():
|
||||
city_name = row['name']
|
||||
pv_id = row['province_id']
|
||||
|
||||
try:
|
||||
ostan = CityModel.objects.get(pv_id=pv_id, is_ostan=True)
|
||||
except Exception as exp:
|
||||
print(city_name)
|
||||
print(pv_id)
|
||||
|
||||
city_obj = CityModel()
|
||||
city_obj.name = city_name
|
||||
city_obj.is_ostan = False
|
||||
city_obj.ostan = ostan
|
||||
city_obj.save()
|
||||
|
||||
|
||||
return Response(data={"result": 'ok'})
|
||||
|
||||
|
||||
class ImportExcelCustomersView(APIView):
|
||||
|
||||
def get(self, request):
|
||||
|
||||
df = pd.read_excel('customersData.xlsx')
|
||||
for index, row in df.iterrows():
|
||||
name = row['name']
|
||||
mobile = row['mobile']
|
||||
|
||||
if name and mobile:
|
||||
|
||||
phone = row['phone']
|
||||
address = row['address']
|
||||
ostan = row['ostan']
|
||||
shahr = row['shar']
|
||||
mantaghe = row['id_mantaghe']
|
||||
|
||||
try:
|
||||
ostan_obj = CityModel.objects.get(name=ostan, is_ostan=True)
|
||||
shahr_obj = CityModel.objects.get(name=shahr, ostan=ostan_obj)
|
||||
except Exception as exp:
|
||||
shahr_obj = CityModel.objects.get(id=1229)
|
||||
|
||||
try:
|
||||
cs = CustomerModel()
|
||||
cs.name_family = name
|
||||
cs.mobile = mobile
|
||||
if phone:
|
||||
cs.phone = phone
|
||||
|
||||
cs.city = shahr_obj
|
||||
if address:
|
||||
cs.address = address
|
||||
cs.responsible_group = ResponsibleGroupModel.objects.get(id=mantaghe)
|
||||
cs.sys_ws = WorkspaceModel.objects.get(id=2)
|
||||
cs.save()
|
||||
except Exception as exp:
|
||||
print(name)
|
||||
|
||||
return Response(data={"result": 'ok'})
|
||||
@@ -124,7 +124,7 @@ class OrderUpdateApi(APIView):
|
||||
|
||||
|
||||
class OrderDeleteApi(APIView):
|
||||
|
||||
permission_classes = (IsAuthenticated,)
|
||||
def delete(self, request, order_id: int):
|
||||
|
||||
user_workspace_uuid = get_user_workspace_uuid(request=request)
|
||||
@@ -139,7 +139,7 @@ class OrderDeleteApi(APIView):
|
||||
|
||||
|
||||
class OrderListApi(generics.ListAPIView):
|
||||
|
||||
permission_classes = (IsAuthenticated,)
|
||||
class OutputSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = OrderModel
|
||||
@@ -155,6 +155,7 @@ class OrderListApi(generics.ListAPIView):
|
||||
|
||||
|
||||
class OrderListOperatorApi(generics.ListAPIView):
|
||||
permission_classes = (IsAuthenticated,)
|
||||
class OutputSerializer(serializers.ModelSerializer):
|
||||
customer = inline_serializer(fields={
|
||||
'id': serializers.IntegerField(),
|
||||
@@ -172,6 +173,7 @@ class OrderListOperatorApi(generics.ListAPIView):
|
||||
|
||||
|
||||
class OrderRetrieveOperatorApi(APIView):
|
||||
permission_classes = (IsAuthenticated,)
|
||||
class OutputSerializer(serializers.ModelSerializer):
|
||||
|
||||
customer = inline_serializer(fields={
|
||||
@@ -210,6 +212,7 @@ class OrderRetrieveOperatorApi(APIView):
|
||||
|
||||
|
||||
class OrderRetrieveOperatorExcelApi(APIView):
|
||||
permission_classes = (IsAuthenticated, )
|
||||
def get(self, request, order_id):
|
||||
|
||||
order_df = retrieve_order_item_excel(request=request, order_id=order_id)
|
||||
|
||||
@@ -134,6 +134,7 @@ class ProductListCategoryApi(generics.ListAPIView):
|
||||
id = serializers.IntegerField()
|
||||
name = serializers.CharField()
|
||||
price = serializers.FloatField()
|
||||
view_only = serializers.BooleanField()
|
||||
|
||||
class Meta:
|
||||
exclude = ('sys_ws', )
|
||||
@@ -144,6 +145,8 @@ class ProductListCategoryApi(generics.ListAPIView):
|
||||
serializer = self.get_serializer(queryset_data, many=True)
|
||||
workspace_uuid = get_user_workspace_uuid(request=request)
|
||||
category = retrieve_product_category(category_id=category_id, workspace_uuid=workspace_uuid)
|
||||
view_only_products = list_view_only_product_by_category(category_id=category_id, workspace_uuid=workspace_uuid)
|
||||
view_only_products_serializer = self.get_serializer(view_only_products, many=True)
|
||||
|
||||
if len(serializer.data) == 0:
|
||||
return Response(
|
||||
@@ -152,9 +155,14 @@ class ProductListCategoryApi(generics.ListAPIView):
|
||||
data = {
|
||||
"category_name": category.name,
|
||||
"category_img": category.image.url,
|
||||
"products": serializer.data
|
||||
"products": serializer.data,
|
||||
}
|
||||
|
||||
if len(view_only_products_serializer.data) >=1:
|
||||
data['view_only_products'] = view_only_products_serializer.data
|
||||
else:
|
||||
data['view_only_products'] = None
|
||||
|
||||
return Response(data)
|
||||
|
||||
def get_queryset(self):
|
||||
|
||||
Reference in new issue
Block a user