半成品表可进行军检,增加仓库字段
This commit is contained in:
parent
ae711f3b3b
commit
ad8420b035
|
@ -30,9 +30,13 @@ def update_inm(instance:FIFO, type:int=1):
|
|||
ip = {}
|
||||
ip['warehouse'] = warehouse
|
||||
ip['batch'] = i.batch
|
||||
ip['wproduct'] = m.wproduct
|
||||
wp = m.wproduct
|
||||
ip['wproduct'] = wp
|
||||
ip['number'] = m.number
|
||||
ip['material'] = m.material
|
||||
ip['is_mtested'] = wp.is_mtested
|
||||
ip['is_mtestok'] = wp.is_mtestok
|
||||
ip['remark_mtest'] = wp.remark_mtest
|
||||
ips2.append(IProduct(**ip))
|
||||
IProduct.objects.bulk_create(ips2)
|
||||
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
# Generated by Django 3.2.9 on 2022-01-07 01:17
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('wpm', '0044_auto_20220104_1641'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='wproduct',
|
||||
name='is_mtested',
|
||||
field=models.BooleanField(default=False, verbose_name='是否军检'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='wproduct',
|
||||
name='is_mtestok',
|
||||
field=models.BooleanField(blank=True, null=True, verbose_name='是否军检合格'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='wproduct',
|
||||
name='remark_mtest',
|
||||
field=models.TextField(blank=True, null=True, verbose_name='军检备注'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='wproductflow',
|
||||
name='is_mtested',
|
||||
field=models.BooleanField(default=False, verbose_name='是否军检'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='wproductflow',
|
||||
name='is_mtestok',
|
||||
field=models.BooleanField(blank=True, null=True, verbose_name='是否军检合格'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='wproductflow',
|
||||
name='remark_mtest',
|
||||
field=models.TextField(blank=True, null=True, verbose_name='军检备注'),
|
||||
),
|
||||
]
|
|
@ -94,6 +94,7 @@ class WProduct(CommonAModel):
|
|||
ng_sign = models.PositiveSmallIntegerField('不合格标记', choices=ng_choices, null=True, blank=True)
|
||||
|
||||
warehouse = models.ForeignKey(WareHouse, verbose_name='所在仓库', on_delete=models.SET_NULL, null=True, blank=True)
|
||||
|
||||
operation = models.ForeignKey('wpm.operation', verbose_name='当前操作',
|
||||
on_delete=models.SET_NULL, null=True, blank=True, related_name='wp_operation')
|
||||
coperation = models.ForeignKey('wpm.operation', verbose_name='创建所关联操作',
|
||||
|
@ -103,6 +104,10 @@ class WProduct(CommonAModel):
|
|||
ticket = models.ForeignKey('wf.ticket', verbose_name='当前工单',
|
||||
on_delete=models.SET_NULL, null=True, blank=True, related_name='wp_ticket')
|
||||
|
||||
is_mtested = models.BooleanField('是否军检', default=False)
|
||||
is_mtestok = models.BooleanField('是否军检合格', null=True, blank=True)
|
||||
remark_mtest = models.TextField('军检备注', null=True, blank=True)
|
||||
|
||||
@property
|
||||
def last_process_test(self):
|
||||
"""
|
||||
|
@ -154,6 +159,10 @@ class WproductFlow(CommonAModel):
|
|||
ticket = models.ForeignKey('wf.ticket', verbose_name='当前工单',
|
||||
on_delete=models.SET_NULL, null=True, blank=True)
|
||||
|
||||
is_mtested = models.BooleanField('是否军检', default=False)
|
||||
is_mtestok = models.BooleanField('是否军检合格', null=True, blank=True)
|
||||
remark_mtest = models.TextField('军检备注', null=True, blank=True)
|
||||
|
||||
is_lastlog = models.BooleanField('是否该子计划下的最后一条日志', default=True)
|
||||
change_str = models.CharField('变动描述', default='', max_length=1000)
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ from apps.em.models import Equipment
|
|||
from apps.em.serializers import EquipmentSimpleSerializer
|
||||
from apps.inm.models import FIFO, FIFOItem, FIFOItemProduct, IProduct, MaterialBatch, WareHouse
|
||||
from apps.inm.signals import update_inm
|
||||
from apps.inm.serializers import WareHouseSimpleSerializer
|
||||
from apps.mtm.models import Material, RecordForm, RecordFormField, Step, SubprodctionMaterial
|
||||
from apps.mtm.serializers import MaterialSimpleSerializer, ProcessSimpleSerializer, RecordFormSimpleSerializer, StepSimpleSerializer
|
||||
|
||||
|
@ -140,6 +141,7 @@ class WProductListSerializer(serializers.ModelSerializer):
|
|||
material_ = MaterialSimpleSerializer(source='material', read_only=True)
|
||||
step_ = StepSimpleSerializer(source='step', read_only=True)
|
||||
subproduction_plan_ = SubproductionPlanSimpleSerializer(source='subproduction_plan', read_only=True)
|
||||
warehouse_ = WareHouseSimpleSerializer(source='warehouse', read_only=True)
|
||||
class Meta:
|
||||
model = WProduct
|
||||
fields = '__all__'
|
||||
|
@ -453,3 +455,8 @@ class CuttingListSerializer(serializers.ModelSerializer):
|
|||
class Meta:
|
||||
model = OperationMaterial
|
||||
fields = '__all__'
|
||||
|
||||
class WproductMtestSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = WProduct
|
||||
fields = ['remark_mtest', 'is_mtestok']
|
|
@ -22,7 +22,7 @@ from apps.wf.serializers import WorkflowSimpleSerializer
|
|||
from apps.wpm.filters import CuttingFilterSet, WMaterialFilterSet, WProductFilterSet
|
||||
from apps.wpm.models import OperationEquip, OperationWproduct, Pick, PickWproduct, WMaterial, WProduct, Operation, OperationMaterial, OperationRecord, OperationRecordItem, WprouctTicket
|
||||
|
||||
from apps.wpm.serializers import CuttingListSerializer, OperationEquipListSerializer, OperationEquipUpdateSerializer, OperationMaterialCreate1ListSerailizer, OperationMaterialCreate1Serailizer, OperationMaterialCreate2ListSerailizer, OperationMaterialCreate2Serailizer, OperationMaterialCreate3Serializer, OperationMaterialListSerializer, OperationRecordDetailSerializer, OperationRecordListSerializer, OperationRecordSubmitSerializer, OperationUpdateSerializer, OperationWproductListSerializer, OperationCreateSerializer, OperationDetailSerializer, OperationListSerializer, PickHalfSerializer, PickHalfsSerializer, PickSerializer, OperationInitSerializer, OperationSubmitSerializer, ScrapSerializer, WMaterialListSerializer, WProductListSerializer, WplanPutInSerializer, WpmTestFormInitSerializer, WpmTestRecordCreateSerializer, WproductPutInSerializer, WproductPutInsSerializer, WproductTicketListSerializer
|
||||
from apps.wpm.serializers import CuttingListSerializer, OperationEquipListSerializer, OperationEquipUpdateSerializer, OperationMaterialCreate1ListSerailizer, OperationMaterialCreate1Serailizer, OperationMaterialCreate2ListSerailizer, OperationMaterialCreate2Serailizer, OperationMaterialCreate3Serializer, OperationMaterialListSerializer, OperationRecordDetailSerializer, OperationRecordListSerializer, OperationRecordSubmitSerializer, OperationUpdateSerializer, OperationWproductListSerializer, OperationCreateSerializer, OperationDetailSerializer, OperationListSerializer, PickHalfSerializer, PickHalfsSerializer, PickSerializer, OperationInitSerializer, OperationSubmitSerializer, ScrapSerializer, WMaterialListSerializer, WProductListSerializer, WplanPutInSerializer, WpmTestFormInitSerializer, WpmTestRecordCreateSerializer, WproductMtestSerializer, WproductPutInSerializer, WproductPutInsSerializer, WproductTicketListSerializer
|
||||
from rest_framework.response import Response
|
||||
from django.db import transaction
|
||||
from rest_framework import exceptions, serializers
|
||||
|
@ -190,7 +190,7 @@ class WProductViewSet(ListModelMixin, GenericViewSet):
|
|||
半成品
|
||||
"""
|
||||
perms_map={'*':'*'}
|
||||
queryset = WProduct.objects.select_related('step', 'material', 'subproduction_plan')
|
||||
queryset = WProduct.objects.select_related('step', 'material', 'subproduction_plan', 'warehouse')
|
||||
serializer_class = WProductListSerializer
|
||||
filterset_class = WProductFilterSet
|
||||
search_fields = ['number']
|
||||
|
@ -424,7 +424,25 @@ class WProductViewSet(ListModelMixin, GenericViewSet):
|
|||
else:
|
||||
raise exceptions.APIException('未找到对应审批流程')
|
||||
|
||||
|
||||
@action(methods=['post'], detail=True, perms_map={'post':'*'}, serializer_class=WproductMtestSerializer)
|
||||
@transaction.atomic
|
||||
def mtest(self, request, pk=None):
|
||||
"""
|
||||
军检
|
||||
"""
|
||||
obj = self.get_object()
|
||||
if obj.is_mtested:
|
||||
raise exceptions.APIException('已进行军检')
|
||||
if obj.material.type != Material.MA_TYPE_GOOD:
|
||||
raise exceptions.APIException('军检必须是成品')
|
||||
obj.remark_mtest = request.data.get('remark_mtest', None)
|
||||
obj.is_mtested = True
|
||||
is_mtestok = request.data.get('is_mtestok')
|
||||
obj.is_mtestok = is_mtestok
|
||||
if is_mtestok:
|
||||
WpmServies.update_plan_state_by_mtestok(obj.subproduction_plan.production_plan)
|
||||
obj.save()
|
||||
return Response()
|
||||
|
||||
class WproductTicketViewSet(ListModelMixin, GenericViewSet):
|
||||
"""
|
||||
|
|
Loading…
Reference in New Issue