feat: 增加route表字段以支持产出绑定功能
This commit is contained in:
parent
03f80ed99d
commit
6accd25620
|
@ -1,5 +1,5 @@
|
||||||
from django_filters import rest_framework as filters
|
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
|
from django.db.models.expressions import F
|
||||||
|
|
||||||
|
|
||||||
|
@ -16,7 +16,8 @@ class MaterialFilter(filters.FilterSet):
|
||||||
"is_assemb": ["exact"],
|
"is_assemb": ["exact"],
|
||||||
"need_route": ["exact"],
|
"need_route": ["exact"],
|
||||||
"orderitem_material__order": ['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):
|
def filter_tag(self, queryset, name, value):
|
||||||
|
@ -36,3 +37,15 @@ class GoalFilter(filters.FilterSet):
|
||||||
"goal_cate__code": ["exact", "in"],
|
"goal_cate__code": ["exact", "in"],
|
||||||
"year": ["exact"]
|
"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 = models.ForeignKey(
|
||||||
Material, verbose_name='关联产品', on_delete=models.CASCADE)
|
Material, verbose_name='关联产品', on_delete=models.CASCADE, null=True, blank=True)
|
||||||
process = models.ForeignKey(
|
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)
|
sort = models.PositiveSmallIntegerField('顺序', default=1)
|
||||||
is_autotask = models.BooleanField('是否自动排产', default=False)
|
is_autotask = models.BooleanField('是否自动排产', default=False)
|
||||||
material_in = models.ForeignKey(
|
material_in = models.ForeignKey(
|
||||||
|
@ -157,7 +159,7 @@ class Route(CommonADModel):
|
||||||
material_out = models.ForeignKey(
|
material_out = models.ForeignKey(
|
||||||
Material, verbose_name='主要输出物料', on_delete=models.CASCADE, related_name='route_material_out', null=True, blank=True)
|
Material, verbose_name='主要输出物料', on_delete=models.CASCADE, related_name='route_material_out', null=True, blank=True)
|
||||||
is_count_utask = models.BooleanField('是否主任务统计', default=False)
|
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
|
@staticmethod
|
||||||
def get_routes(material: Material, autotask: bool = False):
|
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.response import Response
|
||||||
from rest_framework.exceptions import ParseError
|
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.models import Goal, Material, Mgroup, Shift, Team, Process, Route
|
||||||
from apps.mtm.serializers import (GoalSerializer, MaterialSerializer,
|
from apps.mtm.serializers import (GoalSerializer, MaterialSerializer,
|
||||||
MgroupGoalYearSerializer, MgroupSerializer,
|
MgroupGoalYearSerializer, MgroupSerializer,
|
||||||
|
@ -112,7 +112,7 @@ class ProcessViewSet(CustomModelViewSet):
|
||||||
class RouteViewSet(CustomModelViewSet):
|
class RouteViewSet(CustomModelViewSet):
|
||||||
queryset = Route.objects.all()
|
queryset = Route.objects.all()
|
||||||
serializer_class = RouteSerializer
|
serializer_class = RouteSerializer
|
||||||
filterset_fields = ['material', 'process', 'is_autotask']
|
filterset_class = RouteFilter
|
||||||
ordering = ['sort', 'create_time']
|
ordering = ['sort', 'create_time']
|
||||||
select_related_fields = ['material',
|
select_related_fields = ['material',
|
||||||
'process', 'material_in', 'material_out']
|
'process', 'material_in', 'material_out', 'mgroup']
|
||||||
|
|
Loading…
Reference in New Issue