feat: 增加外协生产日志功能

This commit is contained in:
caoqianming 2024-07-23 10:11:31 +08:00
parent caf83b7e0f
commit c068c47bc7
4 changed files with 41 additions and 3 deletions

View File

@ -0,0 +1,25 @@
# Generated by Django 3.2.12 on 2024-07-23 02:06
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('pum', '0006_supplier_can_outsource'),
('wpm', '0057_auto_20240719_1002'),
]
operations = [
migrations.AddField(
model_name='mlog',
name='mtype',
field=models.PositiveSmallIntegerField(choices=[(10, '自生产'), (20, '外协生产')], default=10, help_text='10:自生产;20:外协生产', verbose_name='生产类型'),
),
migrations.AddField(
model_name='mlog',
name='supplier',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='pum.supplier', verbose_name='外协供应商'),
),
]

View File

@ -7,6 +7,7 @@ from django.utils.timezone import localtime
from apps.em.models import Equipment from apps.em.models import Equipment
from apps.system.models import Dept from apps.system.models import Dept
from datetime import timedelta from datetime import timedelta
from apps.pum.models import Supplier
# Create your models here. # Create your models here.
@ -105,7 +106,11 @@ class Mlog(CommonADModel):
# 变成父级的字段 # 变成父级的字段
MLOG_ONETIME = 10 MLOG_ONETIME = 10
MLOG_STEP = 20 MLOG_STEP = 20
MTYPE_SELF = 10
MTYPE_OUT = 20
fill_way = models.PositiveSmallIntegerField("填写方式", default=10, help_text='10:一次填写;20:分步填写') fill_way = models.PositiveSmallIntegerField("填写方式", default=10, help_text='10:一次填写;20:分步填写')
mtype = models.PositiveSmallIntegerField('生产类型', default=10, help_text='10:自生产;20:外协生产', choices=((10, '自生产'), (20, '外协生产')))
supplier = models.ForeignKey(Supplier, verbose_name='外协供应商', on_delete=models.SET_NULL, null=True, blank=True)
work_start_time = models.DateTimeField('生产开始时间', null=True, blank=True) work_start_time = models.DateTimeField('生产开始时间', null=True, blank=True)
work_end_time = models.DateTimeField('生产结束时间', null=True, blank=True) work_end_time = models.DateTimeField('生产结束时间', null=True, blank=True)
hour_work = models.FloatField('预计工时', null=True, blank=True) hour_work = models.FloatField('预计工时', null=True, blank=True)

View File

@ -208,6 +208,7 @@ class MlogbDetailSerializer(CustomModelSerializer):
fields = '__all__' fields = '__all__'
class MlogSerializer(CustomModelSerializer): class MlogSerializer(CustomModelSerializer):
supplier_name = serializers.CharField(source='supplier.name', read_only=True)
belong_dept = serializers.CharField( belong_dept = serializers.CharField(
source='mgroup.belong_dept.id', read_only=True) source='mgroup.belong_dept.id', read_only=True)
belong_dept_name = serializers.CharField( belong_dept_name = serializers.CharField(
@ -311,6 +312,7 @@ class MlogSerializer(CustomModelSerializer):
def validate(self, attrs): def validate(self, attrs):
attrs['fill_way'] = Mlog.MLOG_ONETIME attrs['fill_way'] = Mlog.MLOG_ONETIME
attrs['mtype'] = Mlog.MTYPE_SELF # 默认为自生产
mtask = attrs.get('mtask', None) mtask = attrs.get('mtask', None)
count_notok = 0 count_notok = 0
for i in attrs: for i in attrs:
@ -335,14 +337,16 @@ class MlogSerializer(CustomModelSerializer):
class MlogInitSerializer(CustomModelSerializer): class MlogInitSerializer(CustomModelSerializer):
class Meta: class Meta:
model = Mlog model = Mlog
fields = ['id', 'work_start_time', 'mgroup', 'reminder_interval_list', 'route', 'equipment', 'handle_user', 'note'] fields = ['id', 'work_start_time', 'mgroup', 'reminder_interval_list', 'route', 'equipment', 'handle_user', 'note', 'mtype', 'supplier']
extra_kwargs = { extra_kwargs = {
'work_start_time': {'required': True}, 'work_start_time': {'required': True},
'route':{'required': True}, 'route':{'required': True},
'mgroup': {'required': True} 'mgroup': {'required': True},
'mtype': {'required': True}
} }
def validate(self, attrs): def validate(self, attrs):
mtype = attrs['mtype']
route: Route = attrs['route'] route: Route = attrs['route']
mgroup: Mgroup = attrs['mgroup'] mgroup: Mgroup = attrs['mgroup']
if route.process != mgroup.process: if route.process != mgroup.process:
@ -351,6 +355,10 @@ class MlogInitSerializer(CustomModelSerializer):
attrs['material_in'] = route.material_in attrs['material_in'] = route.material_in
attrs['material_out'] = route.material_out attrs['material_out'] = route.material_out
attrs['fill_way'] = Mlog.MLOG_STEP attrs['fill_way'] = Mlog.MLOG_STEP
if mtype == Mlog.MTYPE_OUT:
supplier = attrs.get('supplier', None)
if not supplier:
raise ValidationError('外协必须选择外协单位')
return attrs return attrs
class MlogChangeSerializer(CustomModelSerializer): class MlogChangeSerializer(CustomModelSerializer):

View File

@ -141,7 +141,7 @@ class MlogViewSet(CustomModelViewSet):
queryset = Mlog.objects.all() queryset = Mlog.objects.all()
serializer_class = MlogSerializer serializer_class = MlogSerializer
select_related_fields = ['create_by', 'update_by', 'mtask', select_related_fields = ['create_by', 'update_by', 'mtask',
'handle_user', 'handle_user_2', 'equipment', 'equipment_2', 'material_in', 'material_out'] 'handle_user', 'handle_user_2', 'equipment', 'equipment_2', 'material_in', 'material_out', 'supplier']
prefetch_related_fields = ['handle_users', prefetch_related_fields = ['handle_users',
'material_outs', 'b_mlog', 'equipments'] 'material_outs', 'b_mlog', 'equipments']
filterset_class = MlogFilter filterset_class = MlogFilter