before change Ticket Desc to TextArea

This commit is contained in:
mohammad javad fesahat committed 2024-07-25 09:06:30 +03:30
1 parent f7dbd02a6c
commit ef18434b86
55 files changed
+1026 -59

No files matched your search

+1 -1
View File
@@ -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),
),
]
+1
View File
@@ -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)
+23 -6
View File
@@ -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:
+12 -1
View File
@@ -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
View File
@@ -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'),
]
+1 -1
View File
@@ -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
+90 -15
View File
@@ -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'})
+5 -2
View File
@@ -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)
+9 -1
View File
@@ -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):