feat: 物料清单的导出
This commit is contained in:
parent
3810860f13
commit
5496058226
|
@ -329,4 +329,10 @@ class RouteMatSerializer(CustomModelSerializer):
|
|||
class Meta:
|
||||
model = RouteMat
|
||||
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,
|
||||
ShiftSerializer, TeamSerializer, ProcessSerializer,
|
||||
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.utils.viewsets import CustomGenericViewSet, CustomModelViewSet
|
||||
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 django.utils import timezone
|
||||
from rest_framework.permissions import IsAdminUser
|
||||
from apps.utils.export import export_excel
|
||||
from operator import itemgetter
|
||||
|
||||
# Create your views here.
|
||||
class MaterialViewSet(CustomModelViewSet):
|
||||
|
@ -32,7 +34,7 @@ class MaterialViewSet(CustomModelViewSet):
|
|||
queryset = Material.objects.all()
|
||||
serializer_class = MaterialSerializer
|
||||
filterset_class = MaterialFilter
|
||||
search_fields = ['name', 'code', 'number', 'specification', 'model']
|
||||
search_fields = ['name', 'code', 'number', 'specification', 'model', 'bin_number_main']
|
||||
select_related_fields = ['process']
|
||||
ordering = ['name', 'model', 'specification',
|
||||
'type', 'process', 'process__sort', 'sort', 'id', 'number']
|
||||
|
@ -88,6 +90,23 @@ class MaterialViewSet(CustomModelViewSet):
|
|||
def cates(self, request, *args, **kwargs):
|
||||
res = Material.objects.exclude(cate='').exclude(cate=None).values_list('cate', flat=True).distinct()
|
||||
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):
|
||||
"""
|
||||
|
|
Loading…
Reference in New Issue