半成品表可进行军检,增加仓库字段
This commit is contained in:
parent
ae711f3b3b
commit
ad8420b035
|
@ -30,9 +30,13 @@ def update_inm(instance:FIFO, type:int=1):
|
||||||
ip = {}
|
ip = {}
|
||||||
ip['warehouse'] = warehouse
|
ip['warehouse'] = warehouse
|
||||||
ip['batch'] = i.batch
|
ip['batch'] = i.batch
|
||||||
ip['wproduct'] = m.wproduct
|
wp = m.wproduct
|
||||||
|
ip['wproduct'] = wp
|
||||||
ip['number'] = m.number
|
ip['number'] = m.number
|
||||||
ip['material'] = m.material
|
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))
|
ips2.append(IProduct(**ip))
|
||||||
IProduct.objects.bulk_create(ips2)
|
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)
|
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)
|
warehouse = models.ForeignKey(WareHouse, verbose_name='所在仓库', on_delete=models.SET_NULL, null=True, blank=True)
|
||||||
|
|
||||||
operation = models.ForeignKey('wpm.operation', verbose_name='当前操作',
|
operation = models.ForeignKey('wpm.operation', verbose_name='当前操作',
|
||||||
on_delete=models.SET_NULL, null=True, blank=True, related_name='wp_operation')
|
on_delete=models.SET_NULL, null=True, blank=True, related_name='wp_operation')
|
||||||
coperation = models.ForeignKey('wpm.operation', verbose_name='创建所关联操作',
|
coperation = models.ForeignKey('wpm.operation', verbose_name='创建所关联操作',
|
||||||
|
@ -103,6 +104,10 @@ class WProduct(CommonAModel):
|
||||||
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')
|
||||||
|
|
||||||
|
is_mtested = models.BooleanField('是否军检', default=False)
|
||||||
|
is_mtestok = models.BooleanField('是否军检合格', null=True, blank=True)
|
||||||
|
remark_mtest = models.TextField('军检备注', null=True, blank=True)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def last_process_test(self):
|
def last_process_test(self):
|
||||||
"""
|
"""
|
||||||
|
@ -154,6 +159,10 @@ class WproductFlow(CommonAModel):
|
||||||
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)
|
||||||
|
|
||||||
|
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)
|
is_lastlog = models.BooleanField('是否该子计划下的最后一条日志', default=True)
|
||||||
change_str = models.CharField('变动描述', default='', max_length=1000)
|
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.em.serializers import EquipmentSimpleSerializer
|
||||||
from apps.inm.models import FIFO, FIFOItem, FIFOItemProduct, IProduct, MaterialBatch, WareHouse
|
from apps.inm.models import FIFO, FIFOItem, FIFOItemProduct, IProduct, MaterialBatch, WareHouse
|
||||||
from apps.inm.signals import update_inm
|
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.models import Material, RecordForm, RecordFormField, Step, SubprodctionMaterial
|
||||||
from apps.mtm.serializers import MaterialSimpleSerializer, ProcessSimpleSerializer, RecordFormSimpleSerializer, StepSimpleSerializer
|
from apps.mtm.serializers import MaterialSimpleSerializer, ProcessSimpleSerializer, RecordFormSimpleSerializer, StepSimpleSerializer
|
||||||
|
|
||||||
|
@ -140,6 +141,7 @@ class WProductListSerializer(serializers.ModelSerializer):
|
||||||
material_ = MaterialSimpleSerializer(source='material', read_only=True)
|
material_ = MaterialSimpleSerializer(source='material', read_only=True)
|
||||||
step_ = StepSimpleSerializer(source='step', read_only=True)
|
step_ = StepSimpleSerializer(source='step', read_only=True)
|
||||||
subproduction_plan_ = SubproductionPlanSimpleSerializer(source='subproduction_plan', read_only=True)
|
subproduction_plan_ = SubproductionPlanSimpleSerializer(source='subproduction_plan', read_only=True)
|
||||||
|
warehouse_ = WareHouseSimpleSerializer(source='warehouse', read_only=True)
|
||||||
class Meta:
|
class Meta:
|
||||||
model = WProduct
|
model = WProduct
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
|
@ -452,4 +454,9 @@ class CuttingListSerializer(serializers.ModelSerializer):
|
||||||
create_by_ = UserSimpleSerializer(source='operation.create_by', read_only=True)
|
create_by_ = UserSimpleSerializer(source='operation.create_by', read_only=True)
|
||||||
class Meta:
|
class Meta:
|
||||||
model = OperationMaterial
|
model = OperationMaterial
|
||||||
fields = '__all__'
|
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.filters import CuttingFilterSet, WMaterialFilterSet, WProductFilterSet
|
||||||
from apps.wpm.models import OperationEquip, OperationWproduct, Pick, PickWproduct, WMaterial, WProduct, Operation, OperationMaterial, OperationRecord, OperationRecordItem, WprouctTicket
|
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 rest_framework.response import Response
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
from rest_framework import exceptions, serializers
|
from rest_framework import exceptions, serializers
|
||||||
|
@ -190,7 +190,7 @@ class WProductViewSet(ListModelMixin, GenericViewSet):
|
||||||
半成品
|
半成品
|
||||||
"""
|
"""
|
||||||
perms_map={'*':'*'}
|
perms_map={'*':'*'}
|
||||||
queryset = WProduct.objects.select_related('step', 'material', 'subproduction_plan')
|
queryset = WProduct.objects.select_related('step', 'material', 'subproduction_plan', 'warehouse')
|
||||||
serializer_class = WProductListSerializer
|
serializer_class = WProductListSerializer
|
||||||
filterset_class = WProductFilterSet
|
filterset_class = WProductFilterSet
|
||||||
search_fields = ['number']
|
search_fields = ['number']
|
||||||
|
@ -424,7 +424,25 @@ class WProductViewSet(ListModelMixin, GenericViewSet):
|
||||||
else:
|
else:
|
||||||
raise exceptions.APIException('未找到对应审批流程')
|
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):
|
class WproductTicketViewSet(ListModelMixin, GenericViewSet):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in New Issue