30 lines
1.5 KiB
Python
30 lines
1.5 KiB
Python
from django.db import transaction
|
|
from apps.shop.models import Product as ProductModel
|
|
from apps.shop.management_serializers import ProductManagementSerializer
|
|
from apps.workspace.models import Workspace
|
|
|
|
|
|
from apps.shop.services.catalog_records import validate_catalog_save, update_catalog_record, delete_catalog_record
|
|
|
|
|
|
@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))
|
|
|
|
|
|
@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)
|