wproduct 指派订单
This commit is contained in:
parent
7f4da0221c
commit
b8346d90b9
|
@ -0,0 +1,25 @@
|
|||
# Generated by Django 3.2.9 on 2022-01-20 07:41
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('sam', '0010_auto_20211208_1408'),
|
||||
('wpm', '0050_alter_operationequip_state'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='wproduct',
|
||||
name='to_order',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='sam.order', verbose_name='指派的订单'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='wproductflow',
|
||||
name='to_order',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='sam.order', verbose_name='指派的订单'),
|
||||
),
|
||||
]
|
|
@ -118,7 +118,8 @@ class WProduct(CommonAModel):
|
|||
on_delete=models.SET_NULL, null=True, blank=True, related_name='wp_test')
|
||||
ticket = models.ForeignKey('wf.ticket', verbose_name='当前工单',
|
||||
on_delete=models.SET_NULL, null=True, blank=True, related_name='wp_ticket')
|
||||
|
||||
|
||||
to_order = models.ForeignKey('sam.order', verbose_name='指派的订单', null=True, blank=True, on_delete = models.CASCADE)
|
||||
is_mtested = models.BooleanField('是否军检', default=False)
|
||||
is_mtestok = models.BooleanField('是否军检合格', null=True, blank=True)
|
||||
remark_mtest = models.TextField('军检备注', null=True, blank=True)
|
||||
|
@ -192,7 +193,7 @@ class WproductFlow(CommonAModel):
|
|||
on_delete=models.SET_NULL, null=True, blank=True)
|
||||
ticket = models.ForeignKey('wf.ticket', verbose_name='当前工单',
|
||||
on_delete=models.SET_NULL, null=True, blank=True)
|
||||
|
||||
to_order = models.ForeignKey('sam.order', verbose_name='指派的订单', null=True, blank=True, on_delete = models.CASCADE)
|
||||
is_mtested = models.BooleanField('是否军检', default=False)
|
||||
is_mtestok = models.BooleanField('是否军检合格', null=True, blank=True)
|
||||
remark_mtest = models.TextField('军检备注', null=True, blank=True)
|
||||
|
|
|
@ -19,6 +19,7 @@ from apps.system.models import User
|
|||
from apps.system.serializers import UserSimpleSerializer
|
||||
from apps.wpm.models import Operation, OperationEquip, OperationMaterial, OperationWproduct, Pick, WMaterial, WProduct, OperationRecord, OperationRecordItem, WprouctTicket
|
||||
from django.db import transaction
|
||||
from apps.sam.models import Order
|
||||
|
||||
class PickHalfSerializer(serializers.Serializer):
|
||||
id = serializers.PrimaryKeyRelatedField(queryset=SubProductionProgress.objects.all(), label='子计划进度ID')
|
||||
|
@ -560,4 +561,8 @@ class CuttingListSerializer(serializers.ModelSerializer):
|
|||
class WproductMtestSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = WProduct
|
||||
fields = ['remark_mtest', 'is_mtestok']
|
||||
fields = ['remark_mtest', 'is_mtestok']
|
||||
|
||||
class WproductToOrderSerializer(serializers.Serializer):
|
||||
wproducts = serializers.PrimaryKeyRelatedField(queryset=WProduct.objects.all(), many=True)
|
||||
order = serializers.PrimaryKeyRelatedField(queryset=Order.objects.all())
|
|
@ -27,7 +27,7 @@ from apps.wpm.serializers import CuttingListSerializer, OperationEquipListSerial
|
|||
PickSerializer, OperationInitSerializer, OperationSubmitSerializer, ScrapSerializer, WMaterialListSerializer, \
|
||||
WProductCardSerializer, WProductDetailSerializer, WProductListSerializer, \
|
||||
WpmTestFormInitSerializer, WproductMtestSerializer, WproductPutInSerializer, \
|
||||
WproductPutInsSerializer, WproductTicketListSerializer
|
||||
WproductPutInsSerializer, WproductTicketListSerializer, WproductToOrderSerializer
|
||||
|
||||
from rest_framework.response import Response
|
||||
from django.db import transaction
|
||||
|
@ -441,7 +441,31 @@ class WProductViewSet(ListModelMixin, RetrieveModelMixin, GenericViewSet):
|
|||
ret.append([str(index + 1), item['step_name'], item['actions']])
|
||||
return Response(ret)
|
||||
|
||||
|
||||
@action(methods=['post'], detail=False, perms_map={'post': '*'}, serializer_class=WproductToOrderSerializer)
|
||||
@transaction.atomic
|
||||
def to_order(self, request, pk=None):
|
||||
"""
|
||||
指派发货订单
|
||||
"""
|
||||
serializer = WproductToOrderSerializer(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
vdata = serializer.validated_data
|
||||
wps = WProduct.objects.filter(id__in = [i.id for i in vdata.get('wproducts')])
|
||||
wp = wps.first()
|
||||
order = vdata['order']
|
||||
if wp.material != order.product:
|
||||
raise exceptions.ValidationError('所选订单与产品不符')
|
||||
for i in wps:
|
||||
if i.material != wp.material and i.material.type != Material.MA_TYPE_GOOD and i.act_state \
|
||||
not in [WProduct.WPR_ACT_STATE_OK, WProduct.WPR_ACT_STATE_INM]:
|
||||
raise exceptions.ValidationError('所选产品错误')
|
||||
for i in wps:
|
||||
i.to_order = order
|
||||
i.update_by = request.user
|
||||
i.save()
|
||||
WpmServies.add_wproduct_flow_log(i,change_str='to_order')
|
||||
return Response()
|
||||
|
||||
class WproductTicketViewSet(ListModelMixin, GenericViewSet):
|
||||
"""
|
||||
玻璃审批工单
|
||||
|
|
|
@ -47,17 +47,20 @@ class FitJSONRenderer(JSONRenderer):
|
|||
"""
|
||||
response_body = BaseResponse()
|
||||
response = renderer_context.get("response")
|
||||
response_body.code = response.status_code
|
||||
if response_body.code >= 400: # 响应异常
|
||||
response_body.data = data # data里是详细异常信息
|
||||
prefix = ""
|
||||
if isinstance(data, dict):
|
||||
prefix = list(data.keys())[0]
|
||||
data = data[prefix]
|
||||
if isinstance(data, list):
|
||||
data = data[0]
|
||||
response_body.msg = prefix + ":" + str(data) # 取一部分放入msg,方便前端alert
|
||||
status_code = response.status_code # Http状态异常码
|
||||
if status_code >= 400: # 如果http响应异常
|
||||
if isinstance(data, dict) and 'code' in data: # 如果自定义了异常码
|
||||
response_body = data
|
||||
else:
|
||||
response_body.data = data # data里是详细异常信息
|
||||
prefix = ""
|
||||
if isinstance(data, dict):
|
||||
prefix = list(data.keys())[0]
|
||||
data = data[prefix]
|
||||
elif isinstance(data, list):
|
||||
data = data[0]
|
||||
response_body.msg = prefix + ":" + str(data) # 取一部分放入msg,方便前端alert
|
||||
else:
|
||||
response_body.data = data
|
||||
renderer_context.get("response").status_code = 200 # 统一成200响应,用code区分
|
||||
renderer_context.get("response").status_code = 200 # 统一成200响应, 可用body里code区分业务异常
|
||||
return super(FitJSONRenderer, self).render(response_body.dict, accepted_media_type, renderer_context)
|
||||
|
|
Loading…
Reference in New Issue