38 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
	
| from apps.sam.models import Order, OrderItem
 | |
| from rest_framework.exceptions import ValidationError
 | |
| from django.db.models import F
 | |
| from apps.inm.models import MIO, MIOItem
 | |
| 
 | |
| 
 | |
| class SamService:
 | |
| 
 | |
|     def mio_saleout(mio: MIO, is_reverse: bool = False):
 | |
|         """
 | |
|         销售出库成功后的操作
 | |
|         """
 | |
|         order = mio.order
 | |
|         if order is None:
 | |
|             return
 | |
|         for i in MIOItem.objects.filter(mio=mio):
 | |
|             orderitem = OrderItem.objects.get(order=order, material=i.material)
 | |
|             if is_reverse:
 | |
|                 delivered_count = orderitem.delivered_count - i.count
 | |
|             else:
 | |
|                 delivered_count = orderitem.delivered_count + i.count
 | |
|             if delivered_count > orderitem.count:
 | |
|                 raise ValidationError((f'{i.material.name}-超出订单所需数量'))
 | |
|             elif delivered_count < 0:
 | |
|                 raise ValidationError((f'{i.material.name}-数量小于0'))
 | |
|             orderitem.delivered_count = delivered_count
 | |
|             orderitem.save()
 | |
|         # 更新order的状态
 | |
|         qs = OrderItem.objects.filter(
 | |
|             order=order, count__lte=F('delivered_count'))
 | |
|         order_state = Order.ORDER_DOING
 | |
|         if qs.exists():
 | |
|             pass
 | |
|         else:
 | |
|             order_state = Order.ORDER_DELIVERED
 | |
|         order.state = order_state
 | |
|         order.save()
 |