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')
|
on_delete=models.SET_NULL, null=True, blank=True, related_name='wp_test')
|
||||||
ticket = models.ForeignKey('wf.ticket', verbose_name='当前工单',
|
ticket = models.ForeignKey('wf.ticket', verbose_name='当前工单',
|
||||||
on_delete=models.SET_NULL, null=True, blank=True, related_name='wp_ticket')
|
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_mtested = models.BooleanField('是否军检', default=False)
|
||||||
is_mtestok = models.BooleanField('是否军检合格', null=True, blank=True)
|
is_mtestok = models.BooleanField('是否军检合格', null=True, blank=True)
|
||||||
remark_mtest = models.TextField('军检备注', 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)
|
on_delete=models.SET_NULL, null=True, blank=True)
|
||||||
ticket = models.ForeignKey('wf.ticket', verbose_name='当前工单',
|
ticket = models.ForeignKey('wf.ticket', verbose_name='当前工单',
|
||||||
on_delete=models.SET_NULL, null=True, blank=True)
|
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_mtested = models.BooleanField('是否军检', default=False)
|
||||||
is_mtestok = models.BooleanField('是否军检合格', null=True, blank=True)
|
is_mtestok = models.BooleanField('是否军检合格', null=True, blank=True)
|
||||||
remark_mtest = models.TextField('军检备注', 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.system.serializers import UserSimpleSerializer
|
||||||
from apps.wpm.models import Operation, OperationEquip, OperationMaterial, OperationWproduct, Pick, WMaterial, WProduct, OperationRecord, OperationRecordItem, WprouctTicket
|
from apps.wpm.models import Operation, OperationEquip, OperationMaterial, OperationWproduct, Pick, WMaterial, WProduct, OperationRecord, OperationRecordItem, WprouctTicket
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
|
from apps.sam.models import Order
|
||||||
|
|
||||||
class PickHalfSerializer(serializers.Serializer):
|
class PickHalfSerializer(serializers.Serializer):
|
||||||
id = serializers.PrimaryKeyRelatedField(queryset=SubProductionProgress.objects.all(), label='子计划进度ID')
|
id = serializers.PrimaryKeyRelatedField(queryset=SubProductionProgress.objects.all(), label='子计划进度ID')
|
||||||
|
@ -560,4 +561,8 @@ class CuttingListSerializer(serializers.ModelSerializer):
|
||||||
class WproductMtestSerializer(serializers.ModelSerializer):
|
class WproductMtestSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = WProduct
|
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, \
|
PickSerializer, OperationInitSerializer, OperationSubmitSerializer, ScrapSerializer, WMaterialListSerializer, \
|
||||||
WProductCardSerializer, WProductDetailSerializer, WProductListSerializer, \
|
WProductCardSerializer, WProductDetailSerializer, WProductListSerializer, \
|
||||||
WpmTestFormInitSerializer, WproductMtestSerializer, WproductPutInSerializer, \
|
WpmTestFormInitSerializer, WproductMtestSerializer, WproductPutInSerializer, \
|
||||||
WproductPutInsSerializer, WproductTicketListSerializer
|
WproductPutInsSerializer, WproductTicketListSerializer, WproductToOrderSerializer
|
||||||
|
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
|
@ -441,7 +441,31 @@ class WProductViewSet(ListModelMixin, RetrieveModelMixin, GenericViewSet):
|
||||||
ret.append([str(index + 1), item['step_name'], item['actions']])
|
ret.append([str(index + 1), item['step_name'], item['actions']])
|
||||||
return Response(ret)
|
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):
|
class WproductTicketViewSet(ListModelMixin, GenericViewSet):
|
||||||
"""
|
"""
|
||||||
玻璃审批工单
|
玻璃审批工单
|
||||||
|
|
|
@ -47,17 +47,20 @@ class FitJSONRenderer(JSONRenderer):
|
||||||
"""
|
"""
|
||||||
response_body = BaseResponse()
|
response_body = BaseResponse()
|
||||||
response = renderer_context.get("response")
|
response = renderer_context.get("response")
|
||||||
response_body.code = response.status_code
|
status_code = response.status_code # Http状态异常码
|
||||||
if response_body.code >= 400: # 响应异常
|
if status_code >= 400: # 如果http响应异常
|
||||||
response_body.data = data # data里是详细异常信息
|
if isinstance(data, dict) and 'code' in data: # 如果自定义了异常码
|
||||||
prefix = ""
|
response_body = data
|
||||||
if isinstance(data, dict):
|
else:
|
||||||
prefix = list(data.keys())[0]
|
response_body.data = data # data里是详细异常信息
|
||||||
data = data[prefix]
|
prefix = ""
|
||||||
if isinstance(data, list):
|
if isinstance(data, dict):
|
||||||
data = data[0]
|
prefix = list(data.keys())[0]
|
||||||
response_body.msg = prefix + ":" + str(data) # 取一部分放入msg,方便前端alert
|
data = data[prefix]
|
||||||
|
elif isinstance(data, list):
|
||||||
|
data = data[0]
|
||||||
|
response_body.msg = prefix + ":" + str(data) # 取一部分放入msg,方便前端alert
|
||||||
else:
|
else:
|
||||||
response_body.data = data
|
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)
|
return super(FitJSONRenderer, self).render(response_body.dict, accepted_media_type, renderer_context)
|
||||||
|
|
Loading…
Reference in New Issue