feat: 物料清单的导出
This commit is contained in:
parent
3810860f13
commit
5496058226
|
@ -329,4 +329,10 @@ class RouteMatSerializer(CustomModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = RouteMat
|
model = RouteMat
|
||||||
fields = "__all__"
|
fields = "__all__"
|
||||||
read_only_fields = EXCLUDE_FIELDS_BASE
|
read_only_fields = EXCLUDE_FIELDS_BASE
|
||||||
|
|
||||||
|
|
||||||
|
class MaterialExportSerializer(CustomModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = Material
|
||||||
|
fields = ["id", "number", "name", "specfication", "unit", "bin_number_main", "cate", "count_safe", "unit_price"]
|
|
@ -11,7 +11,7 @@ from apps.mtm.serializers import (GoalSerializer, MaterialSerializer,
|
||||||
MgroupGoalYearSerializer, MgroupSerializer, MgroupDaysSerializer,
|
MgroupGoalYearSerializer, MgroupSerializer, MgroupDaysSerializer,
|
||||||
ShiftSerializer, TeamSerializer, ProcessSerializer,
|
ShiftSerializer, TeamSerializer, ProcessSerializer,
|
||||||
RouteSerializer, TeamMemberSerializer, RoutePackSerializer,
|
RouteSerializer, TeamMemberSerializer, RoutePackSerializer,
|
||||||
SruleSerializer, RouteMatSerializer, RoutePackCopySerializer)
|
SruleSerializer, RouteMatSerializer, RoutePackCopySerializer, MaterialExportSerializer)
|
||||||
from apps.mtm.services import get_mgroup_goals, daoru_material, get_mgroup_days
|
from apps.mtm.services import get_mgroup_goals, daoru_material, get_mgroup_days
|
||||||
from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet
|
from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet
|
||||||
from apps.utils.mixins import BulkCreateModelMixin, BulkDestroyModelMixin, CustomListModelMixin
|
from apps.utils.mixins import BulkCreateModelMixin, BulkDestroyModelMixin, CustomListModelMixin
|
||||||
|
@ -21,6 +21,8 @@ from django.db.models import Q
|
||||||
from apps.wf.models import Ticket
|
from apps.wf.models import Ticket
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from rest_framework.permissions import IsAdminUser
|
from rest_framework.permissions import IsAdminUser
|
||||||
|
from apps.utils.export import export_excel
|
||||||
|
from operator import itemgetter
|
||||||
|
|
||||||
# Create your views here.
|
# Create your views here.
|
||||||
class MaterialViewSet(CustomModelViewSet):
|
class MaterialViewSet(CustomModelViewSet):
|
||||||
|
@ -32,7 +34,7 @@ class MaterialViewSet(CustomModelViewSet):
|
||||||
queryset = Material.objects.all()
|
queryset = Material.objects.all()
|
||||||
serializer_class = MaterialSerializer
|
serializer_class = MaterialSerializer
|
||||||
filterset_class = MaterialFilter
|
filterset_class = MaterialFilter
|
||||||
search_fields = ['name', 'code', 'number', 'specification', 'model']
|
search_fields = ['name', 'code', 'number', 'specification', 'model', 'bin_number_main']
|
||||||
select_related_fields = ['process']
|
select_related_fields = ['process']
|
||||||
ordering = ['name', 'model', 'specification',
|
ordering = ['name', 'model', 'specification',
|
||||||
'type', 'process', 'process__sort', 'sort', 'id', 'number']
|
'type', 'process', 'process__sort', 'sort', 'id', 'number']
|
||||||
|
@ -88,6 +90,23 @@ class MaterialViewSet(CustomModelViewSet):
|
||||||
def cates(self, request, *args, **kwargs):
|
def cates(self, request, *args, **kwargs):
|
||||||
res = Material.objects.exclude(cate='').exclude(cate=None).values_list('cate', flat=True).distinct()
|
res = Material.objects.exclude(cate='').exclude(cate=None).values_list('cate', flat=True).distinct()
|
||||||
return Response(set(res))
|
return Response(set(res))
|
||||||
|
|
||||||
|
@action(methods=['get'], detail=False, perms_map={'get': '*'})
|
||||||
|
def export_excel(self, request, pk=None):
|
||||||
|
"""导出excel
|
||||||
|
导出excel
|
||||||
|
"""
|
||||||
|
field_data = ['大类', '物料编号', '名称', '规格', '型号', '计量单位', '仓库位号', "安全库存", "单价"]
|
||||||
|
queryset = self.filter_queryset(self.get_queryset())
|
||||||
|
if queryset.count() > 1000:
|
||||||
|
raise ParseError('数据量超过1000,请筛选后导出')
|
||||||
|
odata = MaterialExportSerializer(queryset, many=True).data
|
||||||
|
# 处理数据
|
||||||
|
field_keys = ['cate', 'number', 'name', 'specification', 'model', 'unit',
|
||||||
|
'bin_number_main', 'count_safe', 'unit_price']
|
||||||
|
getter = itemgetter(*field_keys)
|
||||||
|
data = [list(getter(item)) for item in odata]
|
||||||
|
return Response({'path': export_excel(field_data, data, '物料清单')})
|
||||||
|
|
||||||
class ShiftViewSet(ListModelMixin, CustomGenericViewSet):
|
class ShiftViewSet(ListModelMixin, CustomGenericViewSet):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in New Issue