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

+22 -48
View File
@@ -1,55 +1,29 @@
from django.db import transaction
from apps.shop.models import Product as ProductModel
from decimal import Decimal
from rest_framework import exceptions
from apps.shop.management_serializers import ProductManagementSerializer
from apps.workspace.models import Workspace
def create_product(name: str, price: Decimal, category: int, acc_code: str = None, attr: str = None, workspace=None) -> ProductModel:
try:
product_obj = ProductModel()
product_obj.name = name
product_obj.price = price
product_obj.category_id = category
if acc_code is not None:
product_obj.acc_code = acc_code
if attr is not None:
product_obj.attr = attr
product_obj.sys_ws = workspace
product_obj.full_clean()
product_obj.save()
return product_obj
except Exception as exp:
message = f'Error Create Product: {exp}'
exceptions.ValidationError({'error': message})
from apps.shop.services.catalog_records import validate_catalog_save, update_catalog_record, delete_catalog_record
def update_product(product_id: int, name: str, price: Decimal, category: int, acc_code: str = None, attr: str = None, workspace_uuid: str = None) -> ProductModel:
try:
product_obj = ProductModel.objects.get(id=product_id, sys_ws__uuid=workspace_uuid)
product_obj.name = name
product_obj.price = price
product_obj.category_id = category
if acc_code is not None:
product_obj.acc_code = acc_code
if attr is not None:
product_obj.attr = attr
product_obj.full_clean()
product_obj.save()
return product_obj
except Exception as exp:
message = f'Error Updating Product: {exp}'
raise exceptions.ValidationError({'error': message})
@transaction.atomic
def create_product(name, price, category, acc_code=None, attr=None, workspace=None, **fields):
Workspace.objects.select_for_update().get(pk=workspace.pk)
data = dict(name=name, price=price, category=category, acc_code=acc_code, attr=attr, **fields)
serializer = ProductManagementSerializer(data=data, context={'workspace': workspace})
serializer.is_valid(raise_exception=True)
return validate_catalog_save(ProductModel(sys_ws=workspace, **serializer.validated_data))
def delete_product(product_id: int, workspace_uuid: str) -> ProductModel:
try:
product_obj = ProductModel.objects.get(id=product_id, sys_ws__uuid=workspace_uuid).delete()
return product_obj
except Exception as exp:
message = f'Error Deleting Product: {exp}'
raise exceptions.ValidationError({'error': message})
@transaction.atomic
def update_product(product_id, name=None, price=None, category=None, acc_code=None, attr=None, workspace_uuid=None, **fields):
values = {key: value for key, value in dict(name=name, price=price, category=category, acc_code=acc_code, attr=attr).items() if value is not None}
values.update(fields)
return update_catalog_record(ProductModel, ProductManagementSerializer, workspace_uuid, product_id, values)
@transaction.atomic
def delete_product(product_id, workspace_uuid):
from apps.shop.views.management import ensure_product_deletable
return delete_catalog_record(ProductModel, ensure_product_deletable, workspace_uuid, product_id)