半成品表可进行军检,增加仓库字段

This commit is contained in:
caoqianming 2022-01-07 09:19:47 +08:00
parent ae711f3b3b
commit ad8420b035
5 changed files with 86 additions and 5 deletions

View File

@ -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)

View File

@ -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='军检备注'),
),
]

View File

@ -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)

View File

@ -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']

View File

@ -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):
"""