112 lines
3.8 KiB
Python
112 lines
3.8 KiB
Python
import json
|
|
from apps.shop.models import (
|
|
Order as OrderModel,
|
|
OrderItem as OrderItemModel,
|
|
Product as ProductModel,
|
|
)
|
|
from apps.customer.models import Customer as CustomerModel
|
|
from rest_framework import exceptions
|
|
from decimal import Decimal
|
|
from django.db import transaction
|
|
|
|
|
|
def create_order(responsible_group_id: int, customer_id: int,
|
|
total_amount: Decimal, factor_type: int, factor_status: int, workspace) -> OrderModel:
|
|
try:
|
|
order_obj = OrderModel()
|
|
order_obj.responsible_group_id = responsible_group_id
|
|
order_obj.customer_id = customer_id
|
|
order_obj.total_amount = total_amount
|
|
order_obj.factor_type = factor_type
|
|
order_obj.factor_status = factor_status
|
|
order_obj.sys_ws = workspace
|
|
|
|
order_obj.full_clean()
|
|
order_obj.save()
|
|
|
|
return order_obj
|
|
|
|
except Exception as exp:
|
|
message = f'Error Create Order: {exp}'
|
|
exceptions.ValidationError({'error': message})
|
|
|
|
|
|
def create_order_and_items(items: str, customer: CustomerModel, workspace) -> OrderModel:
|
|
with transaction.atomic():
|
|
try:
|
|
sum_price = 0
|
|
order_obj = OrderModel()
|
|
order_obj.responsible_group = customer.responsible_group
|
|
order_obj.customer = customer
|
|
order_obj.total_price = 0
|
|
order_obj.factor_type = 1
|
|
order_obj.factor_status = 1
|
|
order_obj.sys_ws = workspace
|
|
|
|
order_obj.full_clean()
|
|
order_obj.save()
|
|
|
|
json_items = json.loads(items)
|
|
|
|
for item in json_items:
|
|
product_obj = ProductModel.objects.get(id=int(item['product_id']))
|
|
product_price = product_obj.price
|
|
product_name = product_obj.name
|
|
|
|
order_item_obj = OrderItemModel()
|
|
order_item_obj.order = order_obj
|
|
order_item_obj.product_name = product_name
|
|
order_item_obj.price = product_price
|
|
order_item_obj.amount = int(item['amount'])
|
|
order_item_obj.product_id = int(item['product_id'])
|
|
|
|
order_item_obj.full_clean()
|
|
order_item_obj.save()
|
|
|
|
sum_price += product_price
|
|
|
|
order_obj.total_price = sum_price
|
|
order_obj.full_clean()
|
|
order_obj.save()
|
|
|
|
return order_obj
|
|
|
|
except Exception as exp:
|
|
transaction.set_rollback(True)
|
|
message = f'Error Create Order: {exp}'
|
|
raise exceptions.ValidationError({'error': message})
|
|
|
|
|
|
def update_order(order_id: int, responsible_group_id: int = None, customer_id: int = None,
|
|
total_amount: Decimal = None, factor_type: int = None, factor_status: int = None, workspace_uuid = None) -> OrderModel:
|
|
try:
|
|
order_obj = OrderModel.objects.get(id=order_id, sys_ws__uuid=workspace_uuid)
|
|
|
|
if responsible_group_id is not None:
|
|
order_obj.responsible_group_id = responsible_group_id
|
|
if customer_id is not None:
|
|
order_obj.customer_id = customer_id
|
|
if total_amount is not None:
|
|
order_obj.total_amount = total_amount
|
|
if factor_type is not None:
|
|
order_obj.factor_type = factor_type
|
|
if factor_status is not None:
|
|
order_obj.factor_status = factor_status
|
|
|
|
order_obj.full_clean()
|
|
order_obj.save()
|
|
return order_obj
|
|
|
|
except Exception as exp:
|
|
message = f'Error Updating Order: {exp}'
|
|
raise exceptions.ValidationError({'error': message})
|
|
|
|
|
|
def delete_order(order_id: int, workspace_uuid: str) -> OrderModel:
|
|
try:
|
|
order_obj = OrderModel.objects.get(id=order_id, sys_ws__uuid=workspace_uuid).delete()
|
|
return order_obj
|
|
except Exception as exp:
|
|
message = f'Error Deleting Order: {exp}'
|
|
raise exceptions.ValidationError({'error': message})
|