增加iproduct查询条件/甘特图plan接口
This commit is contained in:
parent
30dbc5a6cd
commit
87eb8f1f1c
|
@ -14,4 +14,4 @@ class IProductFilterSet(filters.FilterSet):
|
||||||
order = filters.NumberFilter(field_name="wproduct__subproduction_plan__production_plan__order")
|
order = filters.NumberFilter(field_name="wproduct__subproduction_plan__production_plan__order")
|
||||||
class Meta:
|
class Meta:
|
||||||
model = IProduct
|
model = IProduct
|
||||||
fields = ['material', 'warehouse', 'batch', 'order', 'is_mtested', 'is_mtestok']
|
fields = ['material', 'warehouse', 'batch', 'order', 'is_mtested', 'is_mtestok', 'material__type']
|
|
@ -14,6 +14,13 @@ class ProductionPlan(CommonAModel):
|
||||||
"""
|
"""
|
||||||
生产计划
|
生产计划
|
||||||
"""
|
"""
|
||||||
|
# PLAN_STATE_WAIT = 6
|
||||||
|
# PLAN_STATE_WORKING = 10
|
||||||
|
# PLAN_STATE_DONE = 20
|
||||||
|
# state_choices = (
|
||||||
|
# (PLAN_STATE_WORKING, '进行中'),
|
||||||
|
# (PLAN_STATE_DONE, '已完成')
|
||||||
|
# )
|
||||||
number = models.CharField('编号', max_length=50, unique=True)
|
number = models.CharField('编号', max_length=50, unique=True)
|
||||||
order = models.ForeignKey(Order, verbose_name='关联订单', null=True, blank=True, on_delete=models.SET_NULL)
|
order = models.ForeignKey(Order, verbose_name='关联订单', null=True, blank=True, on_delete=models.SET_NULL)
|
||||||
product = models.ForeignKey(Material, verbose_name='生产产品', on_delete=models.CASCADE)
|
product = models.ForeignKey(Material, verbose_name='生产产品', on_delete=models.CASCADE)
|
||||||
|
@ -47,7 +54,7 @@ class SubProductionPlan(CommonAModel):
|
||||||
(SUBPLAN_STATE_DONE, '已完成')
|
(SUBPLAN_STATE_DONE, '已完成')
|
||||||
)
|
)
|
||||||
number = models.CharField('子计划编号', max_length=50, unique=True, null=True, blank=True)
|
number = models.CharField('子计划编号', max_length=50, unique=True, null=True, blank=True)
|
||||||
production_plan = models.ForeignKey(ProductionPlan, verbose_name='关联主生产计划', on_delete=models.CASCADE)
|
production_plan = models.ForeignKey(ProductionPlan, verbose_name='关联主生产计划', on_delete=models.CASCADE, related_name='subplan_plan')
|
||||||
subproduction = models.ForeignKey(SubProduction, verbose_name='关联生产分解', on_delete=models.CASCADE, related_name='subplan_subprod')
|
subproduction = models.ForeignKey(SubProduction, verbose_name='关联生产分解', on_delete=models.CASCADE, related_name='subplan_subprod')
|
||||||
start_date = models.DateField('计划开工日期')
|
start_date = models.DateField('计划开工日期')
|
||||||
end_date = models.DateField('计划完工日期')
|
end_date = models.DateField('计划完工日期')
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
from rest_framework import serializers
|
||||||
|
from apps.pm.models import ProductionPlan, SubProductionPlan
|
||||||
|
from apps.mtm.serializers import ProcessSimpleSerializer
|
||||||
|
|
||||||
|
class SubplanGanttSerializer(serializers.ModelSerializer):
|
||||||
|
count = serializers.IntegerField(source='main_count')
|
||||||
|
count_real = serializers.IntegerField(source='main_count_real')
|
||||||
|
count_ok = serializers.IntegerField(source='main_count_ok')
|
||||||
|
process_ = ProcessSimpleSerializer(source='process', read_only=True)
|
||||||
|
class Meta:
|
||||||
|
model = SubProductionPlan
|
||||||
|
fields = ['id', 'number', 'start_date', 'end_date', 'count', 'count_real', 'count_ok', 'start_date_real', 'end_date_real', 'process_']
|
||||||
|
|
||||||
|
class PlanGanttSerializer(serializers.ModelSerializer):
|
||||||
|
children = serializers.SerializerMethodField()
|
||||||
|
class Meta:
|
||||||
|
model = ProductionPlan
|
||||||
|
fields = ['id', 'number', 'start_date', 'end_date', 'children', 'count', 'count_real', 'count_ok']
|
||||||
|
|
||||||
|
def get_children(self, obj):
|
||||||
|
subplans = SubProductionPlan.objects.filter(production_plan=obj).order_by('process__number')
|
||||||
|
return SubplanGanttSerializer(instance=subplans, many=True).data
|
|
@ -0,0 +1,13 @@
|
||||||
|
from django.db.models import base
|
||||||
|
from rest_framework import urlpatterns
|
||||||
|
from django.urls import path, include
|
||||||
|
from rest_framework.routers import DefaultRouter
|
||||||
|
|
||||||
|
from apps.srm.views import GanttPlan
|
||||||
|
|
||||||
|
router = DefaultRouter()
|
||||||
|
urlpatterns = [
|
||||||
|
path('gantt/plan/', GanttPlan.as_view()),
|
||||||
|
path('', include(router.urls)),
|
||||||
|
]
|
||||||
|
|
|
@ -1,8 +1,17 @@
|
||||||
from django.shortcuts import render
|
from django.shortcuts import render
|
||||||
|
from rest_framework import serializers
|
||||||
from rest_framework.generics import ListAPIView
|
from rest_framework.generics import ListAPIView
|
||||||
|
from rest_framework.response import Response
|
||||||
|
from apps.pm.models import ProductionPlan, SubProductionPlan
|
||||||
|
from apps.srm.serializers import PlanGanttSerializer
|
||||||
# Create your views here.
|
# Create your views here.
|
||||||
|
|
||||||
class GanttOrder(ListAPIView):
|
class GanttPlan(ListAPIView):
|
||||||
"""
|
"""
|
||||||
订单-计划-子计划甘特图
|
计划-子计划甘特图
|
||||||
"""
|
"""
|
||||||
|
perms_map = {'get':'*'}
|
||||||
|
serializer_class = PlanGanttSerializer
|
||||||
|
queryset = ProductionPlan.objects.filter(is_deleted=False, is_planed=True).prefetch_related('subplan_plan', 'subplan_plan__process')
|
||||||
|
ordering = ['-id']
|
||||||
|
|
||||||
|
|
|
@ -69,7 +69,7 @@ urlpatterns = [
|
||||||
path('api/qm/', include('apps.qm.urls')),
|
path('api/qm/', include('apps.qm.urls')),
|
||||||
path('api/pm/', include('apps.pm.urls')),
|
path('api/pm/', include('apps.pm.urls')),
|
||||||
path('api/wpm/', include('apps.wpm.urls')),
|
path('api/wpm/', include('apps.wpm.urls')),
|
||||||
|
path('api/srm/', include('apps.srm.urls')),
|
||||||
# 工具
|
# 工具
|
||||||
path('api/utils/signature/', GenSignature.as_view()),
|
path('api/utils/signature/', GenSignature.as_view()),
|
||||||
path('api/utils/develop/', UpdateDevelop.as_view()),
|
path('api/utils/develop/', UpdateDevelop.as_view()),
|
||||||
|
|
Loading…
Reference in New Issue