feat: 增加route表字段以支持产出绑定功能
This commit is contained in:
parent
03f80ed99d
commit
6accd25620
|
@ -1,5 +1,5 @@
|
|||
from django_filters import rest_framework as filters
|
||||
from apps.mtm.models import Goal, Material
|
||||
from apps.mtm.models import Goal, Material, Route
|
||||
from django.db.models.expressions import F
|
||||
|
||||
|
||||
|
@ -16,7 +16,8 @@ class MaterialFilter(filters.FilterSet):
|
|||
"is_assemb": ["exact"],
|
||||
"need_route": ["exact"],
|
||||
"orderitem_material__order": ['exact'],
|
||||
"pu_orderitem_material__pu_order": ["exact"]
|
||||
"pu_orderitem_material__pu_order": ["exact"],
|
||||
"route_material_out__mgroup": ["exact"]
|
||||
}
|
||||
|
||||
def filter_tag(self, queryset, name, value):
|
||||
|
@ -36,3 +37,15 @@ class GoalFilter(filters.FilterSet):
|
|||
"goal_cate__code": ["exact", "in"],
|
||||
"year": ["exact"]
|
||||
}
|
||||
|
||||
|
||||
class RouteFilter(filters.FilterSet):
|
||||
class Meta:
|
||||
model = Route
|
||||
fields = {
|
||||
"material": ["exact", "in", "isnull"],
|
||||
"material_out": ["exact", "in"],
|
||||
"process": ["exact", "in"],
|
||||
"is_autotask": ["exact"],
|
||||
"mgroup": ["exact", "in", "isnull"],
|
||||
}
|
||||
|
|
|
@ -0,0 +1,34 @@
|
|||
# Generated by Django 3.2.12 on 2023-11-02 03:28
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('mtm', '0022_alter_material_cate'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='route',
|
||||
name='mgroup',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='route_mgroup', to='mtm.mgroup', verbose_name='指定工段'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='route',
|
||||
name='material',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='mtm.material', verbose_name='关联产品'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='route',
|
||||
name='out_rate',
|
||||
field=models.FloatField(blank=True, default=100, verbose_name='出材率'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='route',
|
||||
name='process',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='mtm.process', verbose_name='工序'),
|
||||
),
|
||||
]
|
|
@ -147,9 +147,11 @@ class Route(CommonADModel):
|
|||
加工路线
|
||||
"""
|
||||
material = models.ForeignKey(
|
||||
Material, verbose_name='关联产品', on_delete=models.CASCADE)
|
||||
Material, verbose_name='关联产品', on_delete=models.CASCADE, null=True, blank=True)
|
||||
process = models.ForeignKey(
|
||||
Process, verbose_name='工序', on_delete=models.CASCADE)
|
||||
Process, verbose_name='工序', on_delete=models.CASCADE, null=True, blank=True)
|
||||
mgroup = models.ForeignKey(Mgroup, verbose_name='指定工段', on_delete=models.CASCADE,
|
||||
null=True, blank=True, related_name='route_mgroup')
|
||||
sort = models.PositiveSmallIntegerField('顺序', default=1)
|
||||
is_autotask = models.BooleanField('是否自动排产', default=False)
|
||||
material_in = models.ForeignKey(
|
||||
|
@ -157,7 +159,7 @@ class Route(CommonADModel):
|
|||
material_out = models.ForeignKey(
|
||||
Material, verbose_name='主要输出物料', on_delete=models.CASCADE, related_name='route_material_out', null=True, blank=True)
|
||||
is_count_utask = models.BooleanField('是否主任务统计', default=False)
|
||||
out_rate = models.FloatField('出材率', default=100, null=True, blank=True)
|
||||
out_rate = models.FloatField('出材率', default=100, blank=True)
|
||||
|
||||
@staticmethod
|
||||
def get_routes(material: Material, autotask: bool = False):
|
||||
|
|
|
@ -4,7 +4,7 @@ from rest_framework.mixins import ListModelMixin
|
|||
from rest_framework.response import Response
|
||||
from rest_framework.exceptions import ParseError
|
||||
|
||||
from apps.mtm.filters import GoalFilter, MaterialFilter
|
||||
from apps.mtm.filters import GoalFilter, MaterialFilter, RouteFilter
|
||||
from apps.mtm.models import Goal, Material, Mgroup, Shift, Team, Process, Route
|
||||
from apps.mtm.serializers import (GoalSerializer, MaterialSerializer,
|
||||
MgroupGoalYearSerializer, MgroupSerializer,
|
||||
|
@ -112,7 +112,7 @@ class ProcessViewSet(CustomModelViewSet):
|
|||
class RouteViewSet(CustomModelViewSet):
|
||||
queryset = Route.objects.all()
|
||||
serializer_class = RouteSerializer
|
||||
filterset_fields = ['material', 'process', 'is_autotask']
|
||||
filterset_class = RouteFilter
|
||||
ordering = ['sort', 'create_time']
|
||||
select_related_fields = ['material',
|
||||
'process', 'material_in', 'material_out']
|
||||
'process', 'material_in', 'material_out', 'mgroup']
|
||||
|
|
Loading…
Reference in New Issue